Started to cleanup the backend code, removing some of the 'any' types.
This commit is contained in:
@@ -9,7 +9,7 @@ const fileService = new FileService()
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
auth?: boolean,
|
||||
busboy: any,
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -5,7 +5,6 @@ import { UserInterface } from "../models/user";
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
}
|
||||
|
||||
class StorageController {
|
||||
|
||||
@@ -7,9 +7,7 @@ const UserProvider = new UserService();
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
busboy: any,
|
||||
encryptedToken?: any
|
||||
encryptedToken?: string
|
||||
}
|
||||
|
||||
class UserController {
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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<FileInterface>("fs.files", fileSchema);
|
||||
|
||||
export default File;
|
||||
+19
-50
@@ -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<UserInterface>("User", userSchema);
|
||||
|
||||
export default User;
|
||||
@@ -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!);
|
||||
|
||||
|
||||
@@ -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, {
|
||||
|
||||
@@ -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!};
|
||||
|
||||
|
||||
@@ -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 !== "") {
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user