diff --git a/backend/controllers/file.ts b/backend/controllers/file.ts index 6e71547..df7a213 100644 --- a/backend/controllers/file.ts +++ b/backend/controllers/file.ts @@ -9,7 +9,7 @@ const fileService = new FileService() interface RequestType extends Request { user?: UserInterface, - auth?: any, + auth?: boolean, busboy: any, } diff --git a/backend/controllers/folder.ts b/backend/controllers/folder.ts index 530f67f..f101981 100644 --- a/backend/controllers/folder.ts +++ b/backend/controllers/folder.ts @@ -1,14 +1,14 @@ import FolderService from "../services/FolderService"; -const folderService = new FolderService(); import { Request, Response } from "express"; import {UserInterface} from "../models/user"; import MongoService from "../services/ChunkService/MongoService"; import FileSystemService from "../services/ChunkService/FileSystemService"; import S3Service from "../services/ChunkService/S3Service"; +const folderService = new FolderService(); + interface RequestType extends Request { user?: UserInterface, - auth?: any, } type ChunkServiceType = MongoService | FileSystemService | S3Service; diff --git a/backend/controllers/storage.ts b/backend/controllers/storage.ts index fc8c5be..db7bb48 100644 --- a/backend/controllers/storage.ts +++ b/backend/controllers/storage.ts @@ -5,7 +5,6 @@ import { UserInterface } from "../models/user"; interface RequestType extends Request { user?: UserInterface, - auth?: any, } class StorageController { diff --git a/backend/controllers/user.ts b/backend/controllers/user.ts index b93125f..9178f42 100644 --- a/backend/controllers/user.ts +++ b/backend/controllers/user.ts @@ -7,9 +7,7 @@ const UserProvider = new UserService(); interface RequestType extends Request { user?: UserInterface, - auth?: any, - busboy: any, - encryptedToken?: any + encryptedToken?: string } class UserController { diff --git a/backend/db/utils/fileUtils/index.ts b/backend/db/utils/fileUtils/index.ts index aa5a0ac..57a6c74 100644 --- a/backend/db/utils/fileUtils/index.ts +++ b/backend/db/utils/fileUtils/index.ts @@ -2,6 +2,7 @@ import mongoose from "../../mongoose"; import {ObjectID} from "mongodb"; import {FileInterface} from "../../../models/file"; import {UserInterface} from "../../../models/user"; +import { QueryInterface } from "../../../utils/createQuery"; const conn = mongoose.connection; class DbUtil { @@ -37,7 +38,7 @@ class DbUtil { return file; } - makePublic = async(fileID: string, userID: string, token: any) => { + makePublic = async(fileID: string, userID: string, token: string) => { const file = await conn.db.collection("fs.files") .findOneAndUpdate({"_id": new ObjectID(fileID), @@ -47,7 +48,7 @@ class DbUtil { return file; } - getPublicInfo = async(fileID: string, tempToken: any) => { + getPublicInfo = async(fileID: string, tempToken: string) => { const file = await conn.db.collection("fs.files") .findOne({"_id": new ObjectID(fileID), "metadata.link": tempToken}) as FileInterface; @@ -55,7 +56,7 @@ class DbUtil { return file; } - makeOneTimePublic = async(fileID: string, userID: string, token: any) => { + makeOneTimePublic = async(fileID: string, userID: string, token: string) => { const file = await conn.db.collection("fs.files") .findOneAndUpdate({"_id": new ObjectID(fileID), @@ -84,7 +85,7 @@ class DbUtil { return fileList; } - getList = async(queryObj: any, sortBy: string, limit: number) => { + getList = async(queryObj: QueryInterface, sortBy: string, limit: number) => { const fileList = await conn.db.collection("fs.files") .find(queryObj) @@ -106,7 +107,7 @@ class DbUtil { return user; } - getFileSearchList = async(userID: string, searchQuery: any) => { + getFileSearchList = async(userID: string, searchQuery: RegExp) => { const fileList = await conn.db.collection("fs.files") .find({"metadata.owner": userID, "filename": searchQuery}) @@ -157,166 +158,4 @@ class DbUtil { } } -// const DbUtil = function() { - -// this.getPublicFile = async(fileID) => { - -// let file = await conn.db.collection("fs.files") -// .findOne({"_id": ObjectID(fileID)}); - -// return file; -// } - -// this.removeOneTimePublicLink = async(fileID) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID)}, { -// "$unset": {"metadata.linkType": "", "metadata.link": ""}}); - -// return file; - -// } - -// this.removeLink = async(fileID, userID) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), -// "metadata.owner": userID}, -// {"$unset": {"metadata.linkType": "", "metadata.link": ""}}) - -// return file; -// } - -// this.makePublic = async(fileID, userID, token) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), -// "metadata.owner": userID}, -// {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - -// return file; -// } - -// this.getPublicInfo = async(fileID, tempToken) => { - -// const file = await conn.db.collection("fs.files") -// .findOne({"_id": ObjectID(fileID), "metadata.link": tempToken}) - -// return file; -// } - -// this.makeOneTimePublic = async(fileID, userID, token) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), -// "metadata.owner": userID}, -// {"$set": {"metadata.linkType": "one", "metadata.link": token}}) - -// return file; -// } - -// this.getFileInfo = async(fileID, userID) => { - -// const file = await conn.db.collection("fs.files") -// .findOne({"metadata.owner": userID, "_id": ObjectID(fileID)}); - -// return file; -// } - -// this.getQuickList = async(userID) => { - -// const fileList = await conn.db.collection("fs.files") -// .find({"metadata.owner": userID}) -// .sort({uploadDate: -1}) -// .limit(10) -// .toArray(); - -// return fileList; -// } - -// this.getList = async(queryObj, sortBy, limit) => { - -// const fileList = await conn.db.collection("fs.files") -// .find(queryObj) -// .sort(sortBy) -// .limit(limit) -// .toArray(); - - -// return fileList; -// } - -// this.removeTempToken = async(user, tempToken) => { - -// user.tempTokens = user.tempTokens.filter((filterToken) => { - -// return filterToken.token !== tempToken; -// }); - -// return user; -// } - -// this.removeTranscodeVideo = async(fileID, userID) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), "metadata.owner": userID}, -// {"$unset": {"metadata.transcoded": "", "metadata.transcodedIV": "", -// "metadata.transcoded_size": "", "metadata.transcodedID": ""}}) - -// return file; -// } - -// this.getFileSearchList = async(userID, searchQuery) => { - -// const fileList = await conn.db.collection("fs.files") -// .find({"metadata.owner": userID, "filename": searchQuery}) -// .limit(10) -// .toArray(); - -// return fileList; -// } - -// this.renameFile = async(fileID, userID, title) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), -// "metadata.owner": userID}, {"$set": {"filename": title}}) - -// return file; -// } - -// this.moveFile = async(fileID, userID, parent, parentList) => { - -// const file = await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), -// "metadata.owner": userID}, {"$set": {"metadata.parent": parent, "metadata.parentList": parentList}}) - -// return file; -// } - -// this.getFileListByParent = async(userID, parentListString) => { - -// const fileList = await conn.db.collection("fs.files") -// .find({"metadata.owner": userID, -// "metadata.parentList": {$regex : `.*${parentListString}.*`}}).toArray(); - -// return fileList; -// } - -// this.getFileListByOwner = async(userID) => { - -// const fileList = await conn.db.collection("fs.files") -// .find({"metadata.owner": userID}).toArray(); - -// return fileList; -// } - -// this.removeChunksByID = async(fileID) => { - -// await conn.db.collection("fs.chunks").deleteMany({files_id: fileID}); -// } - -// } - -//module.exports = DbUtil; export default DbUtil; \ No newline at end of file diff --git a/backend/db/utils/folderUtils/index.ts b/backend/db/utils/folderUtils/index.ts index e48450e..4e2be4f 100644 --- a/backend/db/utils/folderUtils/index.ts +++ b/backend/db/utils/folderUtils/index.ts @@ -1,14 +1,13 @@ import Folder, { FolderInterface } from "../../../models/folder"; import {ObjectID} from "mongodb"; - class DbUtil { constructor() { } - getFolderSearchList = async(userID: string, searchQuery: any) => { + getFolderSearchList = async(userID: string, searchQuery: RegExp) => { const folderList = await Folder.find({"owner": userID, "name": searchQuery}).limit(10) as FolderInterface[]; @@ -62,61 +61,4 @@ class DbUtil { } } -// const DbUtil = function() { - -// this.getFolderSearchList = async(userID, searchQuery) => { - -// const folderList = await Folder.find({"owner": userID, "name": searchQuery}).limit(10); - -// return folderList; -// } - -// this.getFolderInfo = async(folderID, userID) => { - -// const folder = await Folder.findOne({"owner": userID, "_id": ObjectID(folderID)}); - -// return folder; -// } - -// this.getFolderListByParent = async(userID, parent, sortBy) => { - -// const folderList = await Folder.find({"owner": userID, "parent": parent}) -// .sort(sortBy); - -// return folderList; -// } - -// this.getFolderListBySearch = async(userID, searchQuery, sortBy) => { - -// const folderList = await Folder.find({"name": searchQuery,"owner": userID}) -// .sort(sortBy); - -// return folderList; -// } - -// this.moveFolder = async(folderID, userID, parent, parentList) => { - -// const folder = await Folder.findOneAndUpdate({"_id": ObjectID(folderID), -// "owner": userID}, {"$set": {"parent": parent, "parentList": parentList}}); - -// return folder; -// } - -// this.renameFolder = async(folderID, userID, title) => { - -// const folder = await Folder.findOneAndUpdate({"_id": ObjectID(folderID), -// "owner": userID}, {"$set": {"name": title}}); - -// return folder; -// } - -// this.findAllFoldersByParent = async(parentID, userID) => { - -// const folderList = await Folder.find({"parentList": parentID, "owner": userID}); - -// return folderList; - -// } -// } - export default DbUtil; \ No newline at end of file diff --git a/backend/express-routers/file.ts b/backend/express-routers/file.ts index 596912e..a4a3306 100644 --- a/backend/express-routers/file.ts +++ b/backend/express-routers/file.ts @@ -1,11 +1,7 @@ import {Router} from "express"; - -const router = Router(); - import auth from "../middleware/auth"; import tempAuth from "../middleware/tempAuth"; import tempAuthVideo from "../middleware/tempAuthVideo"; - import FileController from "../controllers/file"; import env from "../enviroment/env"; import MongoService from "../services/ChunkService/MongoService"; @@ -30,12 +26,10 @@ if (env.dbType === "mongo") { fileController = new FileController(s3Service); } -//const fileController = new FileController() +const router = Router(); router.post("/file-service/upload", auth, fileController.uploadFile); -//router.post("/file-service/transcode-video", auth, fileController.transcodeVideo); - router.get("/file-service/thumbnail/:id", auth, fileController.getThumbnail); router.get("/file-service/full-thumbnail/:id", auth, fileController.getFullThumbnail); @@ -54,8 +48,6 @@ router.get("/file-service/download/get-token", auth, fileController.getDownloadT router.get("/file-service/download/get-token-video", auth, fileController.getDownloadTokenVideo); -//router.get("/file-service/stream-video-transcoded/:id/:tempToken/:uuid", tempAuthVideo, fileController.streamTranscodedVideo); - router.get("/file-service/stream-video/:id/:tempToken/:uuid", tempAuthVideo, fileController.streamVideo); router.get("/file-service/download/:id/:tempToken", tempAuth, fileController.downloadFile); @@ -74,8 +66,6 @@ router.delete("/file-service/remove-link/:id", auth, fileController.removeLink); router.delete("/file-service/remove/token-video/:tempToken", auth, fileController.removeTempToken); -//router.delete("/file-service/transcode-video/remove", auth, fileController.removeTranscodeVideo); - router.delete("/file-service/remove", auth, fileController.deleteFile); export default router; \ No newline at end of file diff --git a/backend/express-routers/folder.ts b/backend/express-routers/folder.ts index b775c22..5b23795 100644 --- a/backend/express-routers/folder.ts +++ b/backend/express-routers/folder.ts @@ -1,5 +1,4 @@ import {Router} from "express"; -const router = Router(); import auth from "../middleware/auth"; import env from "../enviroment/env"; import MongoService from "../services/ChunkService/MongoService"; @@ -25,8 +24,7 @@ if (env.dbType === "mongo") { folderController = new FolderController(s3Service); } -//import FolderController from "../controllers/folder"; -//const folderController = new FolderController(); +const router = Router(); router.post("/folder-service/upload", auth, folderController.uploadFolder); diff --git a/backend/express-routers/storage.ts b/backend/express-routers/storage.ts index 7bc10ec..abbdc6d 100644 --- a/backend/express-routers/storage.ts +++ b/backend/express-routers/storage.ts @@ -1,9 +1,11 @@ import {Router} from "express"; -const router = Router(); import auth from "../middleware/auth"; import StorageController from "../controllers/storage"; + const storageController = new StorageController(); +const router = Router(); + router.get("/storage-service/info", auth, storageController.getStorageInfo); export default router; \ No newline at end of file diff --git a/backend/express-routers/user.ts b/backend/express-routers/user.ts index cd5c271..fd72c7b 100644 --- a/backend/express-routers/user.ts +++ b/backend/express-routers/user.ts @@ -1,10 +1,11 @@ import { Router } from "express"; -const router = Router(); import auth from "../middleware/auth"; import UserController from "../controllers/user"; const userController = new UserController(); +const router = Router(); + router.get("/user-service/user", auth, userController.getUser); router.post("/user-service/login", userController.login); diff --git a/backend/middleware/auth.ts b/backend/middleware/auth.ts index c0971ae..75ae995 100644 --- a/backend/middleware/auth.ts +++ b/backend/middleware/auth.ts @@ -5,10 +5,8 @@ import {Request, Response, NextFunction} from "express"; interface RequestType extends Request { user?: UserInterface, - auth?: any, - busboy: any, - token?: any, - encryptedToken?: any, + token?: string, + encryptedToken?: string, } type jwtType = { diff --git a/backend/middleware/tempAuth.ts b/backend/middleware/tempAuth.ts index 663aa58..1a03fb5 100644 --- a/backend/middleware/tempAuth.ts +++ b/backend/middleware/tempAuth.ts @@ -6,10 +6,8 @@ import {Request, Response, NextFunction} from "express"; interface RequestType extends Request { user?: UserInterface, - auth?: any, - busboy: any, - token?: any, - encryptedTempToken?: any, + auth?: boolean, + encryptedTempToken?: string, } type jwtType = { diff --git a/backend/middleware/tempAuthVideo.ts b/backend/middleware/tempAuthVideo.ts index 964e47c..5c2cb50 100644 --- a/backend/middleware/tempAuthVideo.ts +++ b/backend/middleware/tempAuthVideo.ts @@ -6,10 +6,8 @@ import {Request, Response, NextFunction} from "express"; interface RequestType extends Request { user?: UserInterface, - auth?: any, - busboy: any, - token?: any, - encryptedTempToken?: any, + auth?: boolean, + encryptedTempToken?: string, } type jwtType = { diff --git a/backend/models/file.ts b/backend/models/file.ts index b209f94..3649c40 100644 --- a/backend/models/file.ts +++ b/backend/models/file.ts @@ -74,7 +74,7 @@ export interface FileInterface extends Document { isVideo: boolean, thumbnailID?: string, size: number, - IV: any, + IV: Buffer, linkType?: 'one' | 'public', link?: string, filePath?: string, @@ -82,7 +82,6 @@ export interface FileInterface extends Document { } } - const File = mongoose.model("fs.files", fileSchema); export default File; \ No newline at end of file diff --git a/backend/models/user.ts b/backend/models/user.ts index a6a3d94..c824fe1 100644 --- a/backend/models/user.ts +++ b/backend/models/user.ts @@ -1,8 +1,8 @@ import mongoose, {Document} from "mongoose"; -const validator = require("validator"); -const crypto = require("crypto"); -const bcrypt = require("bcrypt"); -const jwt = require("jsonwebtoken"); +import validator from "validator"; +import crypto from "crypto"; +import bcrypt from "bcrypt"; +import jwt from "jsonwebtoken"; import env from "../enviroment/env"; const userSchema = new mongoose.Schema({ @@ -66,7 +66,7 @@ export interface UserInterface extends Document { tempTokens: any[], privateKey?: string, publicKey?: string, - token?:string, + token?: string, getEncryptionKey: () => Buffer | undefined; generateTempAuthToken: () => any; @@ -78,12 +78,6 @@ export interface UserInterface extends Document { changeEncryptionKey: (randomKey: Buffer) => void; } -// userSchema.virtual("files", { -// ref: "fs.files", -// localField: "_id" -// }) - - userSchema.pre("save", async function(this: any, next: any) { const user = this; @@ -132,8 +126,7 @@ userSchema.methods.generateAuthToken = async function() { const iv = crypto.randomBytes(16); const user = this; - let token = jwt.sign({_id:user._id.toString(), iv}, env.password); - const publicKey = user.publicKey; + let token = jwt.sign({_id:user._id.toString(), iv}, env.password!); const encryptionKey = user.getEncryptionKey(); @@ -151,10 +144,9 @@ userSchema.methods.encryptToken = function(token: string, key: string, iv: any) const TOKEN_CIPHER_KEY = crypto.createHash('sha256').update(key).digest(); const cipher = crypto.createCipheriv('aes-256-cbc', TOKEN_CIPHER_KEY, iv); - let encryptedText = cipher.update(token); - encryptedText = Buffer.concat([encryptedText, cipher.final()]).toString("hex"); + const encryptedText = cipher.update(token); - return encryptedText; + return Buffer.concat([encryptedText, cipher.final()]).toString("hex");; } userSchema.methods.decryptToken = function(encryptedToken: any, key: string, iv: any) { @@ -165,17 +157,16 @@ userSchema.methods.decryptToken = function(encryptedToken: any, key: string, iv: const TOKEN_CIPHER_KEY = crypto.createHash('sha256').update(key).digest(); const decipher = crypto.createDecipheriv('aes-256-cbc', TOKEN_CIPHER_KEY, iv) - let tokenDecrypted = decipher.update(encryptedToken); - tokenDecrypted = Buffer.concat([tokenDecrypted, decipher.final()]).toString(); + const tokenDecrypted = decipher.update(encryptedToken); - return tokenDecrypted; + return Buffer.concat([tokenDecrypted, decipher.final()]).toString(); } userSchema.methods.generateEncryptionKeys = async function() { const user = this; const userPassword = user.password; - const masterPassword = env.key; + const masterPassword = env.key!; const randomKey = crypto.randomBytes(32); @@ -187,10 +178,9 @@ userSchema.methods.generateEncryptionKeys = async function() { const MASTER_CIPHER_KEY = crypto.createHash('sha256').update(masterPassword).digest(); const masterCipher = crypto.createCipheriv('aes-256-cbc', MASTER_CIPHER_KEY, iv); - let masterEncryptedText = masterCipher.update(encryptedText); - masterEncryptedText = Buffer.concat([masterEncryptedText, masterCipher.final()]).toString("hex"); + const masterEncryptedText = masterCipher.update(encryptedText); - user.privateKey = masterEncryptedText; + user.privateKey = Buffer.concat([masterEncryptedText, masterCipher.final()]).toString("hex"); user.publicKey = iv.toString("hex"); await user.save(); @@ -202,7 +192,7 @@ userSchema.methods.getEncryptionKey = function() { const user = this; const userPassword = user.password; const masterEncryptedText = user.privateKey; - const masterPassword = env.key; + const masterPassword = env.key!; const iv = Buffer.from(user.publicKey, "hex"); const USER_CIPHER_KEY = crypto.createHash('sha256').update(userPassword).digest(); @@ -230,7 +220,7 @@ userSchema.methods.changeEncryptionKey = async function(randomKey: Buffer) { const user = this; const userPassword = user.password; - const masterPassword = env.key; + const masterPassword = env.key!; const iv = crypto.randomBytes(16); const USER_CIPHER_KEY = crypto.createHash('sha256').update(userPassword).digest(); @@ -240,10 +230,9 @@ userSchema.methods.changeEncryptionKey = async function(randomKey: Buffer) { const MASTER_CIPHER_KEY = crypto.createHash('sha256').update(masterPassword).digest(); const masterCipher = crypto.createCipheriv('aes-256-cbc', MASTER_CIPHER_KEY, iv); - let masterEncryptedText = masterCipher.update(encryptedText); - masterEncryptedText = Buffer.concat([masterEncryptedText, masterCipher.final()]).toString("hex"); + const masterEncryptedText = masterCipher.update(encryptedText); - user.privateKey = masterEncryptedText; + user.privateKey = Buffer.concat([masterEncryptedText, masterCipher.final()]).toString("hex"); user.publicKey = iv.toString("hex"); await user.save(); @@ -251,33 +240,16 @@ userSchema.methods.changeEncryptionKey = async function(randomKey: Buffer) { userSchema.methods.generateTempAuthToken = async function() { - - // const user = this; - // let token = jwt.sign({_id:user._id.toString()}, env.password); - // const publicKey = user.publicKey; - - // const encryptionKey = user.getEncryptionKey(); - - // const encryptedToken = user.encryptToken(token, encryptionKey, publicKey); - - // user.tokens = user.tokens.concat({token: encryptedToken}); - - // await user.save(); - // return token; - const iv = crypto.randomBytes(16); const user = this as UserInterface; - const token = jwt.sign({_id:user._id.toString(), iv}, env.password, {expiresIn: "3000ms"}); - const publicKey = user.publicKey; + const token = jwt.sign({_id:user._id.toString(), iv}, env.password!, {expiresIn: "3000ms"}); const encryptionKey = user.getEncryptionKey(); const encryptedToken = user.encryptToken(token, encryptionKey, iv); user.tempTokens = user.tempTokens.concat({token: encryptedToken}); - //console.log("generate temp auth token", user); - await user.save(); return token; } @@ -287,20 +259,17 @@ userSchema.methods.generateTempAuthTokenVideo = async function(cookie: string) { const iv = crypto.randomBytes(16); const user = this; - const token = jwt.sign({_id:user._id.toString(), cookie, iv}, env.password, {expiresIn:"5h"}); - //const publicKey = user.publicKey; + const token = jwt.sign({_id:user._id.toString(), cookie, iv}, env.password!, {expiresIn:"5h"}); const encryptionKey = user.getEncryptionKey(); const encryptedToken = user.encryptToken(token, encryptionKey, iv); - //user.tempTokens = user.tempTokens.concat({token}); user.tempTokens = user.tempTokens.concat({token: encryptedToken}); await user.save(); return token; } - const User = mongoose.model("User", userSchema); export default User; \ No newline at end of file diff --git a/backend/services/ChunkService/FileSystemService.ts b/backend/services/ChunkService/FileSystemService.ts index 6fd8be4..0d3ed65 100644 --- a/backend/services/ChunkService/FileSystemService.ts +++ b/backend/services/ChunkService/FileSystemService.ts @@ -119,7 +119,7 @@ class FileSystemService implements ChunkInterface { const filePath = currentFile.metadata.filePath!; - const IV = currentFile.metadata.IV.buffer + const IV = currentFile.metadata.IV.buffer as Buffer; const readStream = fs.createReadStream(filePath); @@ -174,7 +174,7 @@ class FileSystemService implements ChunkInterface { if (!file) throw new NotFoundError("File Thumbnail Not Found"); const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer + const IV = file.metadata.IV.buffer as Buffer; if (!password) throw new NotAuthorizedError("Invalid Encryption Key") @@ -214,7 +214,7 @@ class FileSystemService implements ChunkInterface { let end = parts[1] ? parseInt(parts[1], 10) : fileSize-1 - const IV = currentFile.metadata.IV.buffer + const IV = currentFile.metadata.IV.buffer as Buffer; const chunksize = (end-start)+1 let head = { @@ -238,7 +238,7 @@ class FileSystemService implements ChunkInterface { if (fixedStart !== 0 && start !== 0) { - currentIV = await getPrevIVFS(fixedStart - 16, currentFile.metadata.filePath!); + currentIV = await getPrevIVFS(fixedStart - 16, currentFile.metadata.filePath!) as Buffer; } const readStream = fs.createReadStream(currentFile.metadata.filePath!, { @@ -275,7 +275,7 @@ class FileSystemService implements ChunkInterface { if (!password) throw new NotAuthorizedError("Invalid Encryption Key"); - const IV = file.metadata.IV.buffer + const IV = file.metadata.IV.buffer as Buffer; const readStream = fs.createReadStream(file.metadata.filePath!); diff --git a/backend/services/ChunkService/MongoService.ts b/backend/services/ChunkService/MongoService.ts index e888e6d..141cb47 100644 --- a/backend/services/ChunkService/MongoService.ts +++ b/backend/services/ChunkService/MongoService.ts @@ -107,7 +107,7 @@ class MongoService implements ChunkInterface { const bucket = new mongoose.mongo.GridFSBucket(conn.db); - const IV = currentFile.metadata.IV.buffer + const IV = currentFile.metadata.IV.buffer as Buffer; const readStream = bucket.openDownloadStream(new ObjectID(fileID)); const CIPHER_KEY = crypto.createHash('sha256').update(password).digest() @@ -159,7 +159,7 @@ class MongoService implements ChunkInterface { const bucket = new mongoose.mongo.GridFSBucket(conn.db); const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer + const IV = file.metadata.IV.buffer as Buffer; if (!password) throw new NotAuthorizedError("Invalid Encryption Key") @@ -197,7 +197,7 @@ class MongoService implements ChunkInterface { const bucket = new mongoose.mongo.GridFSBucket(conn.db); - const IV = file.metadata.IV.buffer + const IV = file.metadata.IV.buffer as Buffer; const readStream = bucket.openDownloadStream(new ObjectID(fileID)) @@ -239,7 +239,7 @@ class MongoService implements ChunkInterface { ? parseInt(parts[1], 10) : fileSize-1 const chunksize = (end-start)+1 - const IV = currentFile.metadata.IV.buffer + const IV = currentFile.metadata.IV.buffer as Buffer; let head = { 'Content-Range': 'bytes ' + start + '-' + end + '/' + fileSize, @@ -262,7 +262,7 @@ class MongoService implements ChunkInterface { if (fixedStart !== 0 && start !== 0) { - currentIV = await getPrevIVMongo(fixedStart - 16, fileID); + currentIV = await getPrevIVMongo(fixedStart - 16, fileID) as Buffer; } const bucket = new mongoose.mongo.GridFSBucket(conn.db, { diff --git a/backend/services/ChunkService/S3Service.ts b/backend/services/ChunkService/S3Service.ts index 928accd..d9b4672 100644 --- a/backend/services/ChunkService/S3Service.ts +++ b/backend/services/ChunkService/S3Service.ts @@ -116,7 +116,7 @@ class S3Service implements ChunkInterface { if (!password) throw new NotAuthorizedError("Invalid Encryption Key") - const IV = currentFile.metadata.IV.buffer + const IV = currentFile.metadata.IV.buffer as Buffer; const CIPHER_KEY = crypto.createHash('sha256').update(password).digest() @@ -156,7 +156,7 @@ class S3Service implements ChunkInterface { ? parseInt(parts[1], 10) : fileSize-1 const chunksize = (end-start)+1 - const IV = currentFile.metadata.IV.buffer + const IV = currentFile.metadata.IV.buffer as Buffer; let head = { 'Content-Range': 'bytes ' + start + '-' + end + '/' + fileSize, @@ -179,7 +179,7 @@ class S3Service implements ChunkInterface { if (fixedStart !== 0 && start !== 0) { - currentIV = await getPrevIVS3(fixedStart - 16, currentFile.metadata.s3ID!); + currentIV = await getPrevIVS3(fixedStart - 16, currentFile.metadata.s3ID!) as Buffer; } const params: any = {Bucket: env.s3Bucket, Key: currentFile.metadata.s3ID!, Range: `bytes=${fixedStart}-${fixedEnd}`}; @@ -238,7 +238,7 @@ class S3Service implements ChunkInterface { if (!file) throw new NotFoundError("File Thumbnail Not Found"); const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer + const IV = file.metadata.IV.buffer as Buffer; if (!password) throw new NotAuthorizedError("Invalid Encryption Key") @@ -275,7 +275,7 @@ class S3Service implements ChunkInterface { if (!password) throw new NotAuthorizedError("Invalid Encryption Key"); - const IV = file.metadata.IV.buffer + const IV = file.metadata.IV.buffer as Buffer; const params: any = {Bucket: env.s3Bucket, Key: file.metadata.s3ID!}; diff --git a/backend/utils/createQuery.ts b/backend/utils/createQuery.ts index 98d0aed..bef3472 100644 --- a/backend/utils/createQuery.ts +++ b/backend/utils/createQuery.ts @@ -1,6 +1,19 @@ +export interface QueryInterface { + "metadata.owner": string, + "metadata.parent"?: string, + filename?: string | RegExp | { + $lt?: string, + $gt?: string, + }, + uploadDate?: { + $lt?: Date, + $gt?: Date, + }, +} + const createQuery = (owner: string, parent: string, sortBy: string, startAt: number, startAtDate: number, searchQuery: string | RegExp, startAtName: string) => { - let query: any = {"metadata.owner": owner} + let query: QueryInterface = {"metadata.owner": owner} if (searchQuery !== "") { diff --git a/package.json b/package.json index 87a9c42..dd434c1 100755 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@babel/preset-env": "^7.8.4", "@babel/preset-react": "^7.8.3", "@babel/types": "^7.9.5", + "@types/bcrypt": "^3.0.0", "@types/compression": "^1.7.0", "@types/connect-busboy": "0.0.2", "@types/express": "^4.17.6", @@ -47,6 +48,7 @@ "@types/mongoose": "^5.7.10", "@types/node": "^13.11.1", "@types/uuid": "^7.0.2", + "@types/validator": "^13.0.0", "aws-sdk": "^2.657.0", "axios": "^0.19.2", "babel-polyfill": "^6.26.0",