Started to cleanup the backend code, removing some of the 'any' types.

This commit is contained in:
subnub
2020-04-30 20:21:37 -04:00
parent ee7f5f42d6
commit 796b9ad2dd
20 changed files with 75 additions and 329 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ const fileService = new FileService()
interface RequestType extends Request {
user?: UserInterface,
auth?: any,
auth?: boolean,
busboy: any,
}
+2 -2
View File
@@ -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;
-1
View File
@@ -5,7 +5,6 @@ import { UserInterface } from "../models/user";
interface RequestType extends Request {
user?: UserInterface,
auth?: any,
}
class StorageController {
+1 -3
View File
@@ -7,9 +7,7 @@ const UserProvider = new UserService();
interface RequestType extends Request {
user?: UserInterface,
auth?: any,
busboy: any,
encryptedToken?: any
encryptedToken?: string
}
class UserController {
+6 -167
View File
@@ -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 -59
View File
@@ -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
View File
@@ -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 -3
View File
@@ -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);
+3 -1
View File
@@ -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;
+2 -1
View File
@@ -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);
+2 -4
View File
@@ -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 = {
+2 -4
View File
@@ -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 = {
+2 -4
View File
@@ -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 = {
+1 -2
View File
@@ -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
View File
@@ -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, {
+5 -5
View File
@@ -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!};
+14 -1
View File
@@ -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 !== "") {
+2
View File
@@ -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",