diff --git a/backend/controllers/FileSystem/fileSystem.ts b/backend/controllers/FileSystem/fileSystem.ts deleted file mode 100644 index e69de29..0000000 diff --git a/backend/controllers/file.ts b/backend/controllers/file.ts index 0458090..cee7a0d 100644 --- a/backend/controllers/file.ts +++ b/backend/controllers/file.ts @@ -9,8 +9,6 @@ const fileService = new FileService() import MongoService from "../services/ChunkService/MongoService"; const mongoService = new MongoService(); -import FileSystemService from "../services/ChunkService/FileSystemService"; -const fileSystemService = new FileSystemService(); import {UserInterface} from "../models/user"; @@ -42,7 +40,7 @@ class FileController { const user = req.user; const id = req.params.id; - const decryptedThumbnail = await fileSystemService.getThumbnail(user, id); + const decryptedThumbnail = await mongoService.getThumbnail(user, id); res.send(decryptedThumbnail); @@ -67,7 +65,7 @@ class FileController { const user = req.user; const fileID = req.params.id; - await fileSystemService.getFullThumbnail(user, fileID, res); + await mongoService.getFullThumbnail(user, fileID, res); } catch (e) { const code = e.code || 500; @@ -90,7 +88,7 @@ class FileController { req.pipe(busboy); - const file = await fileSystemService.uploadFile(user, busboy, req); + const file = await mongoService.uploadFile(user, busboy, req); res.send(file); @@ -110,7 +108,7 @@ class FileController { const ID = req.params.id; const tempToken = req.params.tempToken; - await fileSystemService.getPublicDownload(ID, tempToken, res); + await mongoService.getPublicDownload(ID, tempToken, res); } catch (e) { @@ -449,7 +447,7 @@ class FileController { console.log("stream request", req.params.id) - await fileSystemService.streamVideo(user, fileID, headers, res); + await mongoService.streamVideo(user, fileID, headers, res); } catch (e) { @@ -476,7 +474,7 @@ class FileController { const fileID = req.params.id; //await fileService.downloadFile(user, fileID, res); - await fileSystemService.downloadFile(user, fileID, res); + await mongoService.downloadFile(user, fileID, res); } catch (e) { diff --git a/backend/controllers/fileSystem.ts b/backend/controllers/fileSystem.ts new file mode 100644 index 0000000..7ecb22f --- /dev/null +++ b/backend/controllers/fileSystem.ts @@ -0,0 +1,593 @@ +import { Request, Response } from "express"; + +//const FileService = require("../services/FileService") +import FileService from "../services/FileService/indexnew"; + +const fileService = new FileService() + +import FileSystemService from "../services/ChunkService/FileSystemService"; +const fileSystemService = new FileSystemService(); + +import {UserInterface} from "../models/user"; + +interface RequestType extends Request { + user?: UserInterface, + auth?: any, + busboy?: any, +} + +class FileSystemController { + + // fileService: ; + + constructor() { + + } + + getThumbnail = async(req: RequestType, res: Response) => { + + + if (!req.user) { + + return; + } + + try { + + + const user = req.user; + const id = req.params.id; + + const decryptedThumbnail = await fileSystemService.getThumbnail(user, id); + + res.send(decryptedThumbnail); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send(); + } + + } + + async getFullThumbnail(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const user = req.user; + const fileID = req.params.id; + + await fileSystemService.getFullThumbnail(user, fileID, res); + + } catch (e) { + const code = e.code || 500; + console.log(e.message, e.exception) + return res.status(code).send(); + } + } + + async uploadFile(req: RequestType, res: Response) { + + if (!req.user) { + + return + } + + try { + + const user = req.user; + const busboy = req.busboy; + + req.pipe(busboy); + + const file = await fileSystemService.uploadFile(user, busboy, req); + + res.send(file); + + console.log("file uploaded"); + + } catch (e) { + const code = e.code || 500; + console.log(e.message, e.exception) + return res.status(code).send(); + } + } + + async getPublicDownload(req: RequestType, res: Response) { + + try { + + const ID = req.params.id; + const tempToken = req.params.tempToken; + + await fileSystemService.getPublicDownload(ID, tempToken, res); + + } catch (e) { + + const code = e.code || 500; + const message = e.message || e; + + console.log(message, e); + res.status(code).send(); + } + } + + async removeLink(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const id = req.params.id; + const userID = req.user._id; + + await fileService.removeLink(userID, id) + + res.send(); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send(); + } + + } + + async makePublic(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const fileID = req.params.id; + const user = req.user; + + const token = await fileService.makePublic(user, fileID); + + res.send(token); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send(); + } + } + + async getPublicInfo(req: RequestType, res: Response) { + + try { + + const id = req.params.id; + const tempToken = req.params.tempToken; + + const file = await fileService.getPublicInfo(id, tempToken); + + res.send(file); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async makeOneTimePublic(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const id = req.params.id; + const userID = req.user._id; + + const token = await fileService.makeOneTimePublic(userID, id); + + res.send(token); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + + } + + async getFileInfo(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const fileID = req.params.id; + const userID = req.user._id; + + const file = await fileService.getFileInfo(userID, fileID); + + res.send(file); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async getQuickList(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const userID = req.user._id; + + const quickList = await fileService.getQuickList(userID); + + res.send(quickList); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async getList(req: RequestType, res: Response) { + + if (!req.user) { + return + } + + try { + + const query = req.query; + const userID = req.user._id; + + const fileList = await fileService.getList(userID, query); + + res.send(fileList); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async getDownloadToken(req: RequestType, res: Response) { + + if (!req.user) { + return + } + + try { + + const user = req.user; + + const tempToken = await fileService.getDownloadToken(user); + + res.send({tempToken}); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async getDownloadTokenVideo(req: RequestType, res: Response) { + + if (!req.user) { + return + } + + try { + + const user = req.user; + const cookie = req.headers.uuid as string; + + const tempToken = await fileService.getDownloadTokenVideo(user, cookie); + + res.send({tempToken}); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async removeTempToken(req: RequestType, res: Response) { + + if (!req.user) { + return + } + + try { + + const user = req.user + const tempToken = req.params.tempToken; + + await fileService.removeTempToken(user, tempToken); + + res.send(); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + // async transcodeVideo(req: RequestType, res: Response) { + + // if (!req.user) { + + // return; + // } + + // try { + + // console.log("transcode request", req.body.file._id) + + // const user = req.user; + // const body = req.body; + + // await fileService.transcodeVideo(user, body); + + // res.send("Finished"); + + // } catch (e) { + + // const code = e.code || 500; + // console.log(e.message, e.exception) + // return res.status(code).send(); + // } + // } + + // async removeTranscodeVideo(req: RequestType, res: Response) { + + // if (!req.user) { + + // return; + // } + + // try { + + // const fileID = req.body.id; + // const userID = req.user._id; + + // await fileService.removeTranscodeVideo(userID, fileID); + + // res.send(); + + // } catch (e) { + + // const code = e.code || 500; + + // console.log(e); + // res.status(code).send() + // } + // } + + // async streamTranscodedVideo(req: RequestType, res: Response) { + + // if (!req.auth || !req.user) { + // return; + // } + + // try { + + // console.log("stream request transcoded", req.params.id) + + // const fileID = req.params.id; + // const userID = req.user._id; + // const headers = req.headers; + + // await fileService.streamTranscodedVideo(userID, fileID, headers, res); + + // } catch (e) { + + // const code = e.code || 500; + // const message = e.message || e; + + // console.log(message, e); + // res.status(code).send(); + // } + // } + + async streamVideo(req: RequestType, res: Response) { + + if (!req.auth || !req.user) { + return; + } + + try { + + const user = req.user; + const fileID = req.params.id; + const headers = req.headers; + + console.log("stream request", req.params.id) + + await fileSystemService.streamVideo(user, fileID, headers, res); + + } catch (e) { + + const code = e.code || 500; + const message = e.message || e; + + console.log(message, e); + res.status(code).send(); + } + + } + + async downloadFile(req: RequestType, res: Response) { + + if (!req.auth || !req.user) { + return; + } + + try { + + console.log("download request") + + const user = req.user; + const fileID = req.params.id; + + //await fileService.downloadFile(user, fileID, res); + await fileSystemService.downloadFile(user, fileID, res); + + } catch (e) { + + const code = e.code || 500; + const message = e.message || e; + + console.log(message, e); + res.status(code).send(); + } + } + + async getSuggestedList(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const userID = req.user._id; + let searchQuery = req.query.search || ""; + + const {fileList, folderList} = await fileService.getSuggestedList(userID, searchQuery); + + return res.send({folderList, fileList}) + + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } + + async renameFile(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const fileID = req.body.id; + const title = req.body.title + const userID = req.user._id; + + await fileService.renameFile(userID, fileID, title) + + res.send(); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + + } + + async moveFile(req: RequestType, res: Response) { + + console.log("move request"); + + if (!req.user) { + return; + } + + try { + + const fileID = req.body.id; + const userID = req.user._id; + const parentID = req.body.parent; + + console.log(fileID, userID, parentID); + + await fileService.moveFile(userID, fileID, parentID); + + res.send(); + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + + } + + async deleteFile(req: RequestType, res: Response) { + + if (!req.user) { + return; + } + + try { + + const userID = req.user._id; + const fileID = req.body.id; + + await fileService.deleteFile(userID, fileID); + + res.send() + + } catch (e) { + + const code = e.code || 500; + + console.log(e); + res.status(code).send() + } + } +} + +export default FileSystemController; diff --git a/backend/enviroment/env.js b/backend/enviroment/env.js index df55f36..309fd68 100644 --- a/backend/enviroment/env.js +++ b/backend/enviroment/env.js @@ -5,5 +5,6 @@ module.exports = { createAcctBlocked: process.env.BLOCK_CREATE_ACCOUNT, root: process.env.ROOT, url: process.env.URL, - mongoURL: process.env.MONGODB_URL + mongoURL: process.env.MONGODB_URL, + dbType: process.env.DB_TYPE } \ No newline at end of file diff --git a/backend/express-routers/file.ts b/backend/express-routers/file.ts index bb5e22c..bbf8242 100644 --- a/backend/express-routers/file.ts +++ b/backend/express-routers/file.ts @@ -7,8 +7,18 @@ const tempAuth = require("../middleware/tempAuth") const tempAuthVideo = require("../middleware/tempAuthVideo") import FileController from "../controllers/file"; +import FsFileController from "../controllers/fileSystem"; +import env from "../enviroment/env"; -const fileController = new FileController() +let fileController: FileController | FsFileController; + +if (env.dbType === "mongo") { + fileController = new FileController(); +} else { + fileController = new FsFileController(); +} + +//const fileController = new FileController() router.post("/file-service/upload", auth, fileController.uploadFile); diff --git a/backend/services/ChunkService/FileSystemService.ts b/backend/services/ChunkService/FileSystemService.ts index bc4d538..98b9e91 100644 --- a/backend/services/ChunkService/FileSystemService.ts +++ b/backend/services/ChunkService/FileSystemService.ts @@ -8,7 +8,7 @@ import getBusboyData from "./utils/getBusboyData"; import videoChecker from "../../utils/videoChecker"; import fs from "fs"; import uuid from "uuid"; -import awaitUploadStream from "./utils/awaitUploadStream"; +import awaitUploadStreamFS from "./utils/awaitUploadStreamFS"; import File, { FileInterface } from "../../models/file"; import getFileSize from "./utils/getFileSize"; import DbUtilFile from "../../db/utils/fileUtils/index"; @@ -67,7 +67,7 @@ class FileSystemService { const fileWriteStream = fs.createWriteStream(metadata.filePath); - await awaitUploadStream(file.pipe(cipher), fileWriteStream, req); + await awaitUploadStreamFS(file.pipe(cipher), fileWriteStream, req, metadata.filePath); const date = new Date(); const encryptedFileSize = await getFileSize(metadata.filePath); diff --git a/backend/services/ChunkService/utils/awaitUploadStreamFS.ts b/backend/services/ChunkService/utils/awaitUploadStreamFS.ts new file mode 100644 index 0000000..cdec25f --- /dev/null +++ b/backend/services/ChunkService/utils/awaitUploadStreamFS.ts @@ -0,0 +1,59 @@ +import {Request} from "express" +import fs from "fs"; + +const removeChunks = (path: string) => { + + return new Promise((resolve, reject) => { + + fs.unlink(path, (err) => { + + if (err) { + console.log("Could not remove fs file", err); + } + + console.log("File Removed"); + }) + }) +} + +const awaitUploadStream = (inputSteam: any, outputStream: any, req: Request, path: string) => { + + return new Promise((resolve, reject) => { + + inputSteam.on("error", (e: Error) => { + + removeChunks(path); + + reject({ + message: "Await Stream Input Error", + code: 500, + error: e + }) + }) + + outputStream.on("error", (e: Error) => { + + removeChunks(path); + + reject({ + message: "Await Stream Output Error", + code: 500, + error: e + }) + }) + + req.on("aborted", () => { + + console.log("Upload Request Cancelling..."); + + removeChunks(path); + }) + + inputSteam.pipe(outputStream).on("finish", (data: T) => { + console.log("await stream finished") + resolve(data); + }) + }) +} + +export default awaitUploadStream; \ No newline at end of file diff --git a/dist/controllers/FileSystem/fileSystem.js b/dist/controllers/FileSystem/fileSystem.js deleted file mode 100644 index 3918c74..0000000 --- a/dist/controllers/FileSystem/fileSystem.js +++ /dev/null @@ -1 +0,0 @@ -"use strict"; diff --git a/dist/controllers/file.js b/dist/controllers/file.js deleted file mode 100644 index dca4a09..0000000 --- a/dist/controllers/file.js +++ /dev/null @@ -1,434 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -//const FileService = require("../services/FileService") -const indexnew_1 = __importDefault(require("../services/FileService/indexnew")); -const fileService = new indexnew_1.default(); -const MongoService_1 = __importDefault(require("../services/ChunkService/MongoService")); -const mongoService = new MongoService_1.default(); -const FileSystemService_1 = __importDefault(require("../services/ChunkService/FileSystemService")); -const fileSystemService = new FileSystemService_1.default(); -class FileController { - // fileService: ; - constructor() { - this.getThumbnail = (req, res) => __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const id = req.params.id; - const decryptedThumbnail = yield fileSystemService.getThumbnail(user, id); - res.send(decryptedThumbnail); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getFullThumbnail(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const fileID = req.params.id; - yield fileSystemService.getFullThumbnail(user, fileID, res); - } - catch (e) { - const code = e.code || 500; - console.log(e.message, e.exception); - return res.status(code).send(); - } - }); - } - uploadFile(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const busboy = req.busboy; - req.pipe(busboy); - const file = yield fileSystemService.uploadFile(user, busboy, req); - res.send(file); - console.log("file uploaded"); - } - catch (e) { - const code = e.code || 500; - console.log(e.message, e.exception); - return res.status(code).send(); - } - }); - } - getPublicDownload(req, res) { - return __awaiter(this, void 0, void 0, function* () { - try { - const ID = req.params.id; - const tempToken = req.params.tempToken; - yield fileSystemService.getPublicDownload(ID, tempToken, res); - } - catch (e) { - const code = e.code || 500; - const message = e.message || e; - console.log(message, e); - res.status(code).send(); - } - }); - } - removeLink(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const id = req.params.id; - const userID = req.user._id; - yield fileService.removeLink(userID, id); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - makePublic(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const fileID = req.params.id; - const user = req.user; - const token = yield fileService.makePublic(user, fileID); - res.send(token); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getPublicInfo(req, res) { - return __awaiter(this, void 0, void 0, function* () { - try { - const id = req.params.id; - const tempToken = req.params.tempToken; - const file = yield fileService.getPublicInfo(id, tempToken); - res.send(file); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - makeOneTimePublic(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const id = req.params.id; - const userID = req.user._id; - const token = yield fileService.makeOneTimePublic(userID, id); - res.send(token); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getFileInfo(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const fileID = req.params.id; - const userID = req.user._id; - const file = yield fileService.getFileInfo(userID, fileID); - res.send(file); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getQuickList(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const quickList = yield fileService.getQuickList(userID); - res.send(quickList); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getList(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const query = req.query; - const userID = req.user._id; - const fileList = yield fileService.getList(userID, query); - res.send(fileList); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getDownloadToken(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const tempToken = yield fileService.getDownloadToken(user); - res.send({ tempToken }); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - getDownloadTokenVideo(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const cookie = req.headers.uuid; - const tempToken = yield fileService.getDownloadTokenVideo(user, cookie); - res.send({ tempToken }); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - removeTempToken(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const tempToken = req.params.tempToken; - yield fileService.removeTempToken(user, tempToken); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - // async transcodeVideo(req: RequestType, res: Response) { - // if (!req.user) { - // return; - // } - // try { - // console.log("transcode request", req.body.file._id) - // const user = req.user; - // const body = req.body; - // await fileService.transcodeVideo(user, body); - // res.send("Finished"); - // } catch (e) { - // const code = e.code || 500; - // console.log(e.message, e.exception) - // return res.status(code).send(); - // } - // } - // async removeTranscodeVideo(req: RequestType, res: Response) { - // if (!req.user) { - // return; - // } - // try { - // const fileID = req.body.id; - // const userID = req.user._id; - // await fileService.removeTranscodeVideo(userID, fileID); - // res.send(); - // } catch (e) { - // const code = e.code || 500; - // console.log(e); - // res.status(code).send() - // } - // } - // async streamTranscodedVideo(req: RequestType, res: Response) { - // if (!req.auth || !req.user) { - // return; - // } - // try { - // console.log("stream request transcoded", req.params.id) - // const fileID = req.params.id; - // const userID = req.user._id; - // const headers = req.headers; - // await fileService.streamTranscodedVideo(userID, fileID, headers, res); - // } catch (e) { - // const code = e.code || 500; - // const message = e.message || e; - // console.log(message, e); - // res.status(code).send(); - // } - // } - streamVideo(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.auth || !req.user) { - return; - } - try { - const user = req.user; - const fileID = req.params.id; - const headers = req.headers; - console.log("stream request", req.params.id); - yield fileSystemService.streamVideo(user, fileID, headers, res); - } - catch (e) { - const code = e.code || 500; - const message = e.message || e; - console.log(message, e); - res.status(code).send(); - } - }); - } - downloadFile(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.auth || !req.user) { - return; - } - try { - console.log("download request"); - const user = req.user; - const fileID = req.params.id; - //await fileService.downloadFile(user, fileID, res); - yield fileSystemService.downloadFile(user, fileID, res); - } - catch (e) { - const code = e.code || 500; - const message = e.message || e; - console.log(message, e); - res.status(code).send(); - } - }); - } - getSuggestedList(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - let searchQuery = req.query.search || ""; - const { fileList, folderList } = yield fileService.getSuggestedList(userID, searchQuery); - return res.send({ folderList, fileList }); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - renameFile(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const fileID = req.body.id; - const title = req.body.title; - const userID = req.user._id; - yield fileService.renameFile(userID, fileID, title); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - moveFile(req, res) { - return __awaiter(this, void 0, void 0, function* () { - console.log("move request"); - if (!req.user) { - return; - } - try { - const fileID = req.body.id; - const userID = req.user._id; - const parentID = req.body.parent; - console.log(fileID, userID, parentID); - yield fileService.moveFile(userID, fileID, parentID); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } - deleteFile(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const fileID = req.body.id; - yield fileService.deleteFile(userID, fileID); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(); - } - }); - } -} -exports.default = FileController; diff --git a/dist/controllers/folder.js b/dist/controllers/folder.js deleted file mode 100644 index 630402d..0000000 --- a/dist/controllers/folder.js +++ /dev/null @@ -1,163 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const FolderService = require("../services/FolderService"); -const folderService = new FolderService(); -class FolderController { - constructor() { - } - uploadFolder(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const data = req.body; - const folder = yield folderService.uploadFolder(data); - res.send(folder); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - deleteFolder(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const folderID = req.body.id; - const parentList = req.body.parentList; - yield folderService.deleteFolder(userID, folderID, parentList); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - deleteAll(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - yield folderService.deleteAll(userID); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - getInfo(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const folderID = req.params.id; - const folder = yield folderService.getFolderInfo(userID, folderID); - res.send(folder); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - getSubfolderList(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const folderID = req.query.id; - const { folderIDList, folderNameList } = yield folderService.getFolderSublist(userID, folderID); - res.send({ folderIDList, folderNameList }); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - getFolderList(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const query = req.query; - const folderList = yield folderService.getFolderList(userID, query); - res.send(folderList); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - moveFolder(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const folderID = req.body.id; - const parent = req.body.parent; - yield folderService.moveFolder(userID, folderID, parent); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - renameFolder(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const userID = req.user._id; - const folderID = req.body.id; - const title = req.body.title; - yield folderService.renameFolder(userID, folderID, title); - res.send(); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } -} -module.exports = FolderController; diff --git a/dist/controllers/storage.js b/dist/controllers/storage.js deleted file mode 100644 index b1acae1..0000000 --- a/dist/controllers/storage.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const env = require("../enviroment/env"); -const disk = require('diskusage'); -class StorageController { - constructor() { - } - getStorageInfo(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const info = yield disk.check(env.root); - res.send(info); - } - catch (e) { - console.log(e); - res.status(500).send(e); - } - }); - } -} -module.exports = StorageController; diff --git a/dist/controllers/user.js b/dist/controllers/user.js deleted file mode 100644 index 34aeeff..0000000 --- a/dist/controllers/user.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const env = require("../enviroment/env"); -const UserService = require("../services/UserService"); -const UserProvider = new UserService(); -class UserController { - constructor() { - } - getUser(req, res) { - return __awaiter(this, void 0, void 0, function* () { - try { - const user = req.user; - user.tokens = undefined; - user.tempTokens = undefined; - user.password = undefined; - user.privateKey = undefined; - user.publicKey = undefined; - res.send(user); - } - catch (e) { - res.status(500).send(e); - } - }); - } - login(req, res) { - return __awaiter(this, void 0, void 0, function* () { - try { - const body = req.body; - const { user, token } = yield UserProvider.login(body); - user.tokens = undefined; - user.tempTokens = undefined; - user.password = undefined; - user.privateKey = undefined; - user.publicKey = undefined; - res.status(200).send({ user, token }); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - logout(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const token = req.encryptedToken; - yield UserProvider.logout(user, token); - res.send(); - } - catch (e) { - res.status(500).send(e); - } - }); - } - logoutAll(req, res) { - return __awaiter(this, void 0, void 0, function* () { - try { - const user = req.user; - yield UserProvider.logoutAll(user); - res.send(); - } - catch (e) { - res.status(500).send(e); - } - }); - } - createUser(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (env.createAcctBlocked) { - return yield res.status(401).send(); - } - try { - const { user, token } = yield UserProvider.create(req.body); - user.tokens = undefined; - user.tempTokens = undefined; - user.password = undefined; - user.privateKey = undefined; - user.publicKey = undefined; - res.status(201).send({ user, token }); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } - changePassword(req, res) { - return __awaiter(this, void 0, void 0, function* () { - if (!req.user) { - return; - } - try { - const user = req.user; - const oldPassword = req.body.oldPassword; - const newPassword = req.body.newPassword; - const newToken = yield UserProvider.changePassword(user, oldPassword, newPassword); - res.send(newToken); - } - catch (e) { - const code = e.code || 500; - console.log(e); - res.status(code).send(e); - } - }); - } -} -module.exports = UserController; diff --git a/dist/db/mongoose.js b/dist/db/mongoose.js deleted file mode 100644 index 63e99c8..0000000 --- a/dist/db/mongoose.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -const mongoose = require("mongoose"); -const env = require("../enviroment/env"); -mongoose.connect(env.mongoURL, { - useNewUrlParser: true, - useCreateIndex: true, - useUnifiedTopology: true, -}); -module.exports = mongoose; diff --git a/dist/db/mongooseServerUtils.js b/dist/db/mongooseServerUtils.js deleted file mode 100644 index 14e286d..0000000 --- a/dist/db/mongooseServerUtils.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -const mongoose = require("mongoose"); -const env = require("../enviroment/env"); -mongoose.connect(env.mongoURL, { - useNewUrlParser: true, - useCreateIndex: true, - useUnifiedTopology: true, - socketTimeoutMS: 30000000, - keepAlive: true, -}); -module.exports = mongoose; diff --git a/dist/db/utils/fileUtils/index.js b/dist/db/utils/fileUtils/index.js deleted file mode 100644 index 1942447..0000000 --- a/dist/db/utils/fileUtils/index.js +++ /dev/null @@ -1,117 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const mongoose = require("../../mongoose"); -const conn = mongoose.connection; -const ObjectID = require('mongodb').ObjectID; -const DbUtil = function () { - this.getPublicFile = (fileID) => __awaiter(this, void 0, void 0, function* () { - let file = yield conn.db.collection("fs.files") - .findOne({ "_id": ObjectID(fileID) }); - return file; - }); - this.removeOneTimePublicLink = (fileID) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(fileID) }, { - "$unset": { "metadata.linkType": "", "metadata.link": "" } - }); - return file; - }); - this.removeLink = (fileID, userID) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(fileID), - "metadata.owner": userID }, { "$unset": { "metadata.linkType": "", "metadata.link": "" } }); - return file; - }); - this.makePublic = (fileID, userID, token) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(fileID), - "metadata.owner": userID }, { "$set": { "metadata.linkType": "public", "metadata.link": token } }); - return file; - }); - this.getPublicInfo = (fileID, tempToken) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOne({ "_id": ObjectID(fileID), "metadata.link": tempToken }); - return file; - }); - this.makeOneTimePublic = (fileID, userID, token) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(fileID), - "metadata.owner": userID }, { "$set": { "metadata.linkType": "one", "metadata.link": token } }); - return file; - }); - this.getFileInfo = (fileID, userID) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOne({ "metadata.owner": userID, "_id": ObjectID(fileID) }); - return file; - }); - this.getQuickList = (userID) => __awaiter(this, void 0, void 0, function* () { - const fileList = yield conn.db.collection("fs.files") - .find({ "metadata.owner": userID }) - .sort({ uploadDate: -1 }) - .limit(10) - .toArray(); - return fileList; - }); - this.getList = (queryObj, sortBy, limit) => __awaiter(this, void 0, void 0, function* () { - const fileList = yield conn.db.collection("fs.files") - .find(queryObj) - .sort(sortBy) - .limit(limit) - .toArray(); - return fileList; - }); - this.removeTempToken = (user, tempToken) => __awaiter(this, void 0, void 0, function* () { - user.tempTokens = user.tempTokens.filter((filterToken) => { - return filterToken.token !== tempToken; - }); - return user; - }); - this.removeTranscodeVideo = (fileID, userID) => __awaiter(this, void 0, void 0, function* () { - const file = yield 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 = (userID, searchQuery) => __awaiter(this, void 0, void 0, function* () { - const fileList = yield conn.db.collection("fs.files") - .find({ "metadata.owner": userID, "filename": searchQuery }) - .limit(10) - .toArray(); - return fileList; - }); - this.renameFile = (fileID, userID, title) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(fileID), - "metadata.owner": userID }, { "$set": { "filename": title } }); - return file; - }); - this.moveFile = (fileID, userID, parent, parentList) => __awaiter(this, void 0, void 0, function* () { - const file = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(fileID), - "metadata.owner": userID }, { "$set": { "metadata.parent": parent, "metadata.parentList": parentList } }); - return file; - }); - this.getFileListByParent = (userID, parentListString) => __awaiter(this, void 0, void 0, function* () { - const fileList = yield conn.db.collection("fs.files") - .find({ "metadata.owner": userID, - "metadata.parentList": { $regex: `.*${parentListString}.*` } }).toArray(); - return fileList; - }); - this.getFileListByOwner = (userID) => __awaiter(this, void 0, void 0, function* () { - const fileList = yield conn.db.collection("fs.files") - .find({ "metadata.owner": userID }).toArray(); - return fileList; - }); - this.removeChunksByID = (fileID) => __awaiter(this, void 0, void 0, function* () { - yield conn.db.collection("fs.chunks").deleteMany({ files_id: fileID }); - }); -}; -module.exports = DbUtil; diff --git a/dist/db/utils/folderUtils/index.js b/dist/db/utils/folderUtils/index.js deleted file mode 100644 index f4c3ea4..0000000 --- a/dist/db/utils/folderUtils/index.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const Folder = require("../../../models/folder"); -const ObjectID = require('mongodb').ObjectID; -const DbUtil = function () { - this.getFolderSearchList = (userID, searchQuery) => __awaiter(this, void 0, void 0, function* () { - const folderList = yield Folder.find({ "owner": userID, "name": searchQuery }).limit(10); - return folderList; - }); - this.getFolderInfo = (folderID, userID) => __awaiter(this, void 0, void 0, function* () { - const folder = yield Folder.findOne({ "owner": userID, "_id": ObjectID(folderID) }); - return folder; - }); - this.getFolderListByParent = (userID, parent, sortBy) => __awaiter(this, void 0, void 0, function* () { - const folderList = yield Folder.find({ "owner": userID, "parent": parent }) - .sort(sortBy); - return folderList; - }); - this.getFolderListBySearch = (userID, searchQuery, sortBy) => __awaiter(this, void 0, void 0, function* () { - const folderList = yield Folder.find({ "name": searchQuery, "owner": userID }) - .sort(sortBy); - return folderList; - }); - this.moveFolder = (folderID, userID, parent, parentList) => __awaiter(this, void 0, void 0, function* () { - const folder = yield Folder.findOneAndUpdate({ "_id": ObjectID(folderID), - "owner": userID }, { "$set": { "parent": parent, "parentList": parentList } }); - return folder; - }); - this.renameFolder = (folderID, userID, title) => __awaiter(this, void 0, void 0, function* () { - const folder = yield Folder.findOneAndUpdate({ "_id": ObjectID(folderID), - "owner": userID }, { "$set": { "name": title } }); - return folder; - }); - this.findAllFoldersByParent = (parentID, userID) => __awaiter(this, void 0, void 0, function* () { - const folderList = yield Folder.find({ "parentList": parentID, "owner": userID }); - return folderList; - }); -}; -module.exports = DbUtil; diff --git a/dist/enviroment/env.js b/dist/enviroment/env.js deleted file mode 100644 index 19007e7..0000000 --- a/dist/enviroment/env.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -module.exports = { - key: process.env.KEY, - newKey: process.env.NEW_KEY, - password: process.env.PASSWORD, - createAcctBlocked: process.env.BLOCK_CREATE_ACCOUNT, - root: process.env.ROOT, - url: process.env.URL, - mongoURL: process.env.MONGODB_URL -}; diff --git a/dist/express-routers/file.js b/dist/express-routers/file.js deleted file mode 100644 index 40772e5..0000000 --- a/dist/express-routers/file.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = require("express"); -const router = express_1.Router(); -const auth = require("../middleware/auth"); -const tempAuth = require("../middleware/tempAuth"); -const tempAuthVideo = require("../middleware/tempAuthVideo"); -const file_1 = __importDefault(require("../controllers/file")); -const fileController = new file_1.default(); -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); -router.get("/file-service/public/download/:id/:tempToken", fileController.getPublicDownload); -router.get("/file-service/public/info/:id/:tempToken", fileController.getPublicInfo); -router.get("/file-service/info/:id", auth, fileController.getFileInfo); -router.get("/file-service/quick-list", auth, fileController.getQuickList); -router.get("/file-service/list", auth, fileController.getList); -router.get("/file-service/download/get-token", auth, fileController.getDownloadToken); -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); -router.get("/file-service/suggested-list", auth, fileController.getSuggestedList); -router.patch("/file-service/make-public/:id", auth, fileController.makePublic); -router.patch("/file-service/make-one/:id", auth, fileController.makeOneTimePublic); -router.patch("/file-service/rename", auth, fileController.renameFile); -router.patch("/file-service/move", auth, fileController.moveFile); -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); -module.exports = router; diff --git a/dist/express-routers/folder.js b/dist/express-routers/folder.js deleted file mode 100644 index 17d2f1c..0000000 --- a/dist/express-routers/folder.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = require("express"); -const router = express_1.Router(); -const auth = require("../middleware/auth"); -const FolderController = require("../controllers/folder"); -const folderController = new FolderController(); -router.post("/folder-service/upload", auth, folderController.uploadFolder); -router.delete("/folder-service/remove", auth, folderController.deleteFolder); -router.delete("/folder-service/remove-all", auth, folderController.deleteAll); -router.get("/folder-service/info/:id", auth, folderController.getInfo); -router.get("/folder-service/subfolder-list", auth, folderController.getSubfolderList); -router.get("/folder-service/list", auth, folderController.getFolderList); -router.patch("/folder-service/rename", auth, folderController.renameFolder); -router.patch("/folder-service/move", auth, folderController.moveFolder); -module.exports = router; diff --git a/dist/express-routers/storage.js b/dist/express-routers/storage.js deleted file mode 100644 index 3436a64..0000000 --- a/dist/express-routers/storage.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = require("express"); -const router = express_1.Router(); -const auth = require("../middleware/auth"); -const StorageController = require("../controllers/storage"); -const storageController = new StorageController(); -router.get("/storage-service/info", auth, storageController.getStorageInfo); -module.exports = router; diff --git a/dist/express-routers/user.js b/dist/express-routers/user.js deleted file mode 100644 index 4a8a393..0000000 --- a/dist/express-routers/user.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = require("express"); -const router = express_1.Router(); -const auth = require("../middleware/auth"); -const UserController = require("../controllers/user"); -const userController = new UserController(); -router.get("/user-service/user", auth, userController.getUser); -router.post("/user-service/login", userController.login); -router.post("/user-service/logout", auth, userController.logout); -router.post("/user-service/logout-all", auth, userController.logoutAll); -router.post("/user-service/create", userController.createUser); -router.post("/user-service/change-password", auth, userController.changePassword); -module.exports = router; diff --git a/dist/key/getKey.js b/dist/key/getKey.js deleted file mode 100644 index 87cdd47..0000000 --- a/dist/key/getKey.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const prompt = require('password-prompt'); -const env = require("../enviroment/env"); -const crypto = require("crypto"); -const getKey = () => __awaiter(void 0, void 0, void 0, function* () { - if (process.env.KEY) { - // For Docker - env.key = process.env.KEY; - } - else if (process.env.NODE_ENV) { - let password = yield prompt("Enter Server Encryption Password: ", { method: "hide" }); - password = crypto.createHash("md5").update(password).digest("hex"); - env.key = password; - } - else { - let password = "1234"; - password = crypto.createHash("md5").update(password).digest("hex"); - env.key = password; - } -}); -module.exports = getKey; diff --git a/dist/middleware/auth.js b/dist/middleware/auth.js deleted file mode 100644 index 0af0b65..0000000 --- a/dist/middleware/auth.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const jwt = require("jsonwebtoken"); -const user_1 = __importDefault(require("../models/user")); -const env = require("../enviroment/env"); -const auth = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () { - try { - const token = req.header("Authorization").replace("Bearer ", ""); - const decoded = yield jwt.verify(token, env.password); - const iv = decoded.iv; - const user = yield user_1.default.findOne({ _id: decoded._id }); - const encrpytionKey = user.getEncryptionKey(); - const encryptedToken = user.encryptToken(token, encrpytionKey, iv); - let tokenFound = false; - for (let i = 0; i < user.tokens.length; i++) { - const currentToken = user.tokens[i].token; - if (currentToken === encryptedToken) { - tokenFound = true; - break; - } - } - if (!user || !tokenFound) { - throw new Error("User not found"); - } - else { - req.token = token; - req.encryptedToken = encryptedToken; - req.user = user; - next(); - } - } - catch (e) { - console.log(e); - res.status(401).send({ error: "Error Authenticating" }); - } -}); -module.exports = auth; diff --git a/dist/middleware/tempAuth.js b/dist/middleware/tempAuth.js deleted file mode 100644 index 6cf4982..0000000 --- a/dist/middleware/tempAuth.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const jwt = require("jsonwebtoken"); -const user_1 = __importDefault(require("../models/user")); -const env = require("../enviroment/env"); -const tempAuth = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () { - try { - const token = req.params.tempToken; - const decoded = yield jwt.verify(token, env.password); - const iv = decoded.iv; - const user = yield user_1.default.findOne({ _id: decoded._id }); - const encrpytionKey = user.getEncryptionKey(); - const encryptedToken = user.encryptToken(token, encrpytionKey, iv); - let tokenFound = false; - for (let i = 0; i < user.tempTokens.length; i++) { - const currentToken = user.tempTokens[i].token; - if (currentToken === encryptedToken) { - tokenFound = true; - break; - } - } - if (!user || !tokenFound) { - throw new Error("User Not Found"); - } - else { - user.tempTokens = user.tempTokens.filter((filterToken) => { - return filterToken.token !== encryptedToken; - }); - yield user.save(); - req.user = user; - req.auth = true; - req.encryptedTempToken = encryptedToken; - next(); - } - } - catch (e) { - console.log(e); - res.status(401).send(); - } -}); -module.exports = tempAuth; diff --git a/dist/middleware/tempAuthVideo.js b/dist/middleware/tempAuthVideo.js deleted file mode 100644 index 3f8931c..0000000 --- a/dist/middleware/tempAuthVideo.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const jwt = require("jsonwebtoken"); -const user_1 = __importDefault(require("../models/user")); -const env = require("../enviroment/env"); -const tempAuthVideo = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () { - try { - const token = req.params.tempToken; - const decoded = yield jwt.verify(token, env.password); - const iv = decoded.iv; - if (req.params.uuid !== decoded.cookie) { - throw new Error("Cookie mismatch"); - } - const user = yield user_1.default.findOne({ _id: decoded._id }); - const encrpytionKey = user.getEncryptionKey(); - const encryptedToken = user.encryptToken(token, encrpytionKey, iv); - let tokenFound = false; - for (let i = 0; i < user.tempTokens.length; i++) { - const currentToken = user.tempTokens[i].token; - if (currentToken === encryptedToken) { - tokenFound = true; - break; - } - } - if (!user || !tokenFound) { - throw new Error("User not found"); - } - else { - yield user.save(); - req.user = user; - req.auth = true; - req.encryptedTempToken = encryptedToken; - next(); - } - } - catch (e) { - console.log(e); - res.status(401).send(); - } -}); -module.exports = tempAuthVideo; diff --git a/dist/models/file.js b/dist/models/file.js deleted file mode 100644 index 4f4a7e4..0000000 --- a/dist/models/file.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose_1 = __importDefault(require("mongoose")); -const mongodb_1 = require("mongodb"); -const fileSchema = new mongoose_1.default.Schema({ - length: { - type: Number, - required: true, - }, - chunkSize: { - type: Number, - }, - uploadDate: { - type: Date, - required: true - }, - filename: { - type: String, - required: true - }, - metadata: { - type: { - owner: { - type: String, - required: true - }, - parent: { - type: String, - required: true - }, - parentList: { - type: String, - required: true - }, - hasThumbnail: { - type: Boolean, - required: true - }, - isVideo: { - type: Boolean, - required: true - }, - thumbnailID: String, - size: { - type: Number, - required: true, - }, - IV: { - type: mongodb_1.Binary, - required: true - }, - linkType: String, - link: String, - filePath: String - }, - required: true - } -}); -const File = mongoose_1.default.model("fs.files", fileSchema); -exports.default = File; diff --git a/dist/models/fileSystem.js b/dist/models/fileSystem.js deleted file mode 100644 index 458df75..0000000 --- a/dist/models/fileSystem.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose_1 = __importDefault(require("mongoose")); -const fileSystemSchema = new mongoose_1.default.Schema({ - name: { - type: String, - required: true, - }, - owner: { - type: String, - required: true - }, - path: { - type: String, - required: true - }, - parent: { - type: String, - required: true, - }, - parentList: { - type: Array, - required: true - }, - hasThumbnail: { - type: Boolean, - required: true - }, - thumbnailID: { - type: String - }, - originalSize: { - type: Number, - required: true - }, - size: { - type: Number, - required: true - }, - isVideo: { - type: Boolean, - required: true - }, - IV: { - type: Buffer, - required: true - } -}, { - timestamps: true -}); -const FileSystem = mongoose_1.default.model("FileSystem", fileSystemSchema); -exports.default = FileSystem; diff --git a/dist/models/folder.js b/dist/models/folder.js deleted file mode 100644 index 39a8948..0000000 --- a/dist/models/folder.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -const mongoose = require("mongoose"); -const folderSchema = new mongoose.Schema({ - name: { - type: String, - required: true, - }, - parent: { - type: String, - required: true, - }, - owner: { - type: String, - required: true - }, - parentList: { - type: Array, - required: true - } -}, { - timestamps: true -}); -const Folder = mongoose.model("Folder", folderSchema); -module.exports = Folder; diff --git a/dist/models/thumbnail.js b/dist/models/thumbnail.js deleted file mode 100644 index a4e545c..0000000 --- a/dist/models/thumbnail.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose_1 = __importDefault(require("mongoose")); -const thumbnailSchema = new mongoose_1.default.Schema({ - name: { - type: String, - required: true, - }, - owner: { - type: String, - required: true - }, - data: { - type: Buffer, - }, - path: { - type: String - }, - IV: { - type: Buffer, - } -}, { - timestamps: true -}); -const Thumbnail = mongoose_1.default.model("Thumbnail", thumbnailSchema); -exports.default = Thumbnail; diff --git a/dist/models/user.js b/dist/models/user.js deleted file mode 100644 index 08747d4..0000000 --- a/dist/models/user.js +++ /dev/null @@ -1,230 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose_1 = __importDefault(require("mongoose")); -const validator = require("validator"); -const crypto = require("crypto"); -const bcrypt = require("bcrypt"); -const jwt = require("jsonwebtoken"); -const env = require("../enviroment/env"); -const userSchema = new mongoose_1.default.Schema({ - name: { - type: String, - trim: true - }, - email: { - type: String, - required: true, - trim: true, - unique: true, - lowercase: true, - validate(value) { - if (!validator.isEmail(value)) { - throw new Error("Email is invalid"); - } - } - }, - password: { - type: String, - trim: true, - required: true, - validate(value) { - if (value.length < 6) { - throw new Error("Password Length Not Sufficent"); - } - } - }, - tokens: [{ - token: { - type: String, - required: true - } - }], - tempTokens: [{ - token: { - type: String, - required: true - } - }], - privateKey: { - type: String, - }, - publicKey: { - type: String, - } -}, { - timestamps: true -}); -// userSchema.virtual("files", { -// ref: "fs.files", -// localField: "_id" -// }) -userSchema.pre("save", function (next) { - return __awaiter(this, void 0, void 0, function* () { - const user = this; - if (user.isModified("password")) { - user.password = yield bcrypt.hash(user.password, 8); - } - next(); - }); -}); -userSchema.statics.findByCreds = (email, password) => __awaiter(void 0, void 0, void 0, function* () { - const user = yield User.findOne({ email }); - if (!user) { - throw new Error("User not found"); - } - const isMatch = yield bcrypt.compare(password, user.password); - if (!isMatch) { - console.log("incorrect password"); - throw new Error("Incorrect password"); - } - return user; -}); -userSchema.methods.toJSON = function () { - const user = this; - const userObject = user.toObject(); - delete userObject.password; - delete userObject.tokens; - delete userObject.tempTokens; - return userObject; -}; -userSchema.methods.generateAuthToken = function () { - return __awaiter(this, void 0, void 0, function* () { - const iv = crypto.randomBytes(16); - const user = this; - let token = jwt.sign({ _id: user._id.toString(), iv }, env.password); - const publicKey = user.publicKey; - const encryptionKey = user.getEncryptionKey(); - const encryptedToken = user.encryptToken(token, encryptionKey, iv); - user.tokens = user.tokens.concat({ token: encryptedToken }); - yield user.save(); - return token; - }); -}; -userSchema.methods.encryptToken = function (token, key, iv) { - iv = Buffer.from(iv, "hex"); - 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"); - return encryptedText; -}; -userSchema.methods.decryptToken = function (encryptedToken, key, iv) { - encryptedToken = Buffer.from(encryptedToken, "hex"); - iv = Buffer.from(iv, "hex"); - 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(); - return tokenDecrypted; -}; -userSchema.methods.generateEncryptionKeys = function () { - return __awaiter(this, void 0, void 0, function* () { - const user = this; - const userPassword = user.password; - const masterPassword = env.key; - const randomKey = crypto.randomBytes(32); - const iv = crypto.randomBytes(16); - const USER_CIPHER_KEY = crypto.createHash('sha256').update(userPassword).digest(); - const cipher = crypto.createCipheriv('aes-256-cbc', USER_CIPHER_KEY, iv); - let encryptedText = cipher.update(randomKey); - encryptedText = Buffer.concat([encryptedText, cipher.final()]); - 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"); - user.privateKey = masterEncryptedText; - user.publicKey = iv.toString("hex"); - yield user.save(); - }); -}; -userSchema.methods.getEncryptionKey = function () { - try { - const user = this; - const userPassword = user.password; - const masterEncryptedText = user.privateKey; - const masterPassword = env.key; - const iv = Buffer.from(user.publicKey, "hex"); - const USER_CIPHER_KEY = crypto.createHash('sha256').update(userPassword).digest(); - const MASTER_CIPHER_KEY = crypto.createHash('sha256').update(masterPassword).digest(); - const unhexMasterText = Buffer.from(masterEncryptedText, "hex"); - const masterDecipher = crypto.createDecipheriv('aes-256-cbc', MASTER_CIPHER_KEY, iv); - let masterDecrypted = masterDecipher.update(unhexMasterText); - masterDecrypted = Buffer.concat([masterDecrypted, masterDecipher.final()]); - let decipher = crypto.createDecipheriv('aes-256-cbc', USER_CIPHER_KEY, iv); - let decrypted = decipher.update(masterDecrypted); - decrypted = Buffer.concat([decrypted, decipher.final()]); - return decrypted; - } - catch (e) { - console.log("Get Encryption Key Error"); - return undefined; - } -}; -userSchema.methods.changeEncryptionKey = function (randomKey) { - return __awaiter(this, void 0, void 0, function* () { - const user = this; - const userPassword = user.password; - const masterPassword = env.key; - const iv = crypto.randomBytes(16); - const USER_CIPHER_KEY = crypto.createHash('sha256').update(userPassword).digest(); - const cipher = crypto.createCipheriv('aes-256-cbc', USER_CIPHER_KEY, iv); - let encryptedText = cipher.update(randomKey); - encryptedText = Buffer.concat([encryptedText, cipher.final()]); - 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"); - user.privateKey = masterEncryptedText; - user.publicKey = iv.toString("hex"); - yield user.save(); - }); -}; -userSchema.methods.generateTempAuthToken = function () { - return __awaiter(this, void 0, void 0, 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; - const token = jwt.sign({ _id: user._id.toString(), iv }, env.password, { expiresIn: 2 }); - const publicKey = user.publicKey; - const encryptionKey = user.getEncryptionKey(); - const encryptedToken = user.encryptToken(token, encryptionKey, iv); - user.tempTokens = user.tempTokens.concat({ token: encryptedToken }); - yield user.save(); - return token; - }); -}; -userSchema.methods.generateTempAuthTokenVideo = function (cookie) { - return __awaiter(this, void 0, void 0, function* () { - 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 encryptionKey = user.getEncryptionKey(); - const encryptedToken = user.encryptToken(token, encryptionKey, iv); - //user.tempTokens = user.tempTokens.concat({token}); - user.tempTokens = user.tempTokens.concat({ token: encryptedToken }); - yield user.save(); - return token; - }); -}; -const User = mongoose_1.default.model("User", userSchema); -exports.default = User; diff --git a/dist/server/server.js b/dist/server/server.js deleted file mode 100644 index cb5505f..0000000 --- a/dist/server/server.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -const express = require("express"); -const app = express(); -const path = require("path"); -const publicPath = path.join(__dirname, "..", "..", "public"); -const userRouter = require("../express-routers/user"); -const fileRouter = require("../express-routers/file"); -const folderRouter = require("../express-routers/folder"); -const storageRouter = require("../express-routers/storage"); -const bodyParser = require('body-parser'); -const https = require("https"); -const fs = require("fs"); -const helmet = require("helmet"); -const busboy = require("connect-busboy"); -const compression = require("compression"); -const http = require("http"); -let server; -let serverHttps; -if (process.env.NODE_ENV === 'production') { - const cert = fs.readFileSync("certificate.crt"); - const ca = fs.readFileSync("certificate.ca-bundle"); - const key = fs.readFileSync("certificate.key"); - const options = { - cert, - ca, - key - }; - serverHttps = https.createServer(options, app); -} -server = http.createServer(app); -require("../db/mongoose"); -app.use(helmet()); -app.use(compression()); -app.use(express.json()); -app.use(express.static(publicPath)); -app.use(bodyParser.json({ limit: "50mb" })); -app.use(bodyParser.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 })); -app.use(busboy({ - highWaterMark: 2 * 1024 * 1024, -})); -app.use(userRouter, fileRouter, folderRouter, storageRouter); -const nodeMode = process.env.NODE_ENV ? "Production" : "Development/Testing"; -console.log("Node Enviroment Mode:", nodeMode); -app.get("*", (req, res) => { - res.sendFile(path.join(publicPath, "index.html")); -}); -if (process.env.NODE_ENV === 'production') { - module.exports = { server, serverHttps }; -} -else { - module.exports = server; -} diff --git a/dist/server/serverStart.js b/dist/server/serverStart.js deleted file mode 100644 index ab1b73b..0000000 --- a/dist/server/serverStart.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const getKey = require("../key/getKey"); -const serverStart = () => __awaiter(void 0, void 0, void 0, function* () { - yield getKey(); - if (process.env.NODE_ENV === 'production') { - const { server, serverHttps } = require("./server"); - server.listen(process.env.HTTP_PORT, process.env.URL, () => { - console.log("Http Server Running On Port:", process.env.HTTP_PORT); - }); - serverHttps.listen(process.env.HTTPS_PORT, function () { - console.log('Https Server Running On Port:', process.env.HTTPS_PORT); - }); - } - else if (process.env.NODE_ENV === 'production-no-ssl') { - const server = require("./server"); - server.listen(process.env.HTTP_PORT, process.env.URL, () => { - console.log("Http Server (No-SSL) Running On Port:", process.env.HTTP_PORT); - }); - } - else { - const server = require("./server"); - server.listen(process.env.HTTP_PORT, process.env.URL, () => { - console.log("Development Server Running On Port:", process.env.HTTP_PORT); - }); - } -}); -serverStart(); diff --git a/dist/services/ChunkService/FileSystemService.js b/dist/services/ChunkService/FileSystemService.js deleted file mode 100644 index ff90e52..0000000 --- a/dist/services/ChunkService/FileSystemService.js +++ /dev/null @@ -1,188 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const NotAuthorizedError_1 = __importDefault(require("../../utils/NotAuthorizedError")); -const NotFoundError_1 = __importDefault(require("../../utils/NotFoundError")); -const crypto_1 = __importDefault(require("crypto")); -const getBusboyData_1 = __importDefault(require("./utils/getBusboyData")); -const videoChecker_1 = __importDefault(require("../../utils/videoChecker")); -const fs_1 = __importDefault(require("fs")); -const uuid_1 = __importDefault(require("uuid")); -const awaitUploadStream_1 = __importDefault(require("./utils/awaitUploadStream")); -const file_1 = __importDefault(require("../../models/file")); -const getFileSize_1 = __importDefault(require("./utils/getFileSize")); -const index_1 = __importDefault(require("../../db/utils/fileUtils/index")); -const awaitStream_1 = __importDefault(require("./utils/awaitStream")); -const createThumbnailFS_1 = __importDefault(require("../FileService/utils/createThumbnailFS")); -const imageChecker_1 = __importDefault(require("../../utils/imageChecker")); -const thumbnail_1 = __importDefault(require("../../models/thumbnail")); -const streamToBuffer_1 = __importDefault(require("../../utils/streamToBuffer")); -const user_1 = __importDefault(require("../../models/user")); -const dbUtilsFile = new index_1.default(); -// implements ChunkInterface -class FileSystemService { - constructor() { - this.uploadFile = (user, busboy, req) => __awaiter(this, void 0, void 0, function* () { - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const initVect = crypto_1.default.randomBytes(16); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const cipher = crypto_1.default.createCipheriv('aes256', CIPHER_KEY, initVect); - const { file, filename, formData } = yield getBusboyData_1.default(busboy); - const parent = formData.get("parent") || "/"; - const parentList = formData.get("parentList") || "/"; - const size = formData.get("size") || ""; - let hasThumbnail = false; - let thumbnailID = ""; - const isVideo = videoChecker_1.default(filename); - const systemFileName = uuid_1.default.v4(); - const metadata = { - owner: user._id, - parent, - parentList, - hasThumbnail, - thumbnailID, - isVideo, - size, - IV: initVect, - filePath: `/Users/kylehoell/Documents/fstestdata/${systemFileName}` - }; - const fileWriteStream = fs_1.default.createWriteStream(metadata.filePath); - yield awaitUploadStream_1.default(file.pipe(cipher), fileWriteStream, req); - const date = new Date(); - const encryptedFileSize = yield getFileSize_1.default(metadata.filePath); - const currentFile = new file_1.default({ - filename, - uploadDate: date.toISOString(), - length: encryptedFileSize, - metadata - }); - yield currentFile.save(); - console.log(currentFile); - const imageCheck = imageChecker_1.default(currentFile.filename); - if (currentFile.length < 15728640 && imageCheck) { - const updatedFile = yield createThumbnailFS_1.default(currentFile, filename, user); - return updatedFile; - } - else { - return currentFile; - } - }); - this.downloadFile = (user, fileID, res) => __awaiter(this, void 0, void 0, function* () { - const currentFile = yield dbUtilsFile.getFileInfo(fileID, user._id); - if (!currentFile) - throw new NotFoundError_1.default("Download File Not Found"); - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const filePath = currentFile.metadata.filePath; - const IV = currentFile.metadata.IV.buffer; - const readStream = fs_1.default.createReadStream(filePath); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + currentFile.filename + '"'); - res.set('Content-Length', currentFile.metadata.size.toString()); - yield awaitStream_1.default(readStream.pipe(decipher), res); - }); - this.getThumbnail = (user, id) => __awaiter(this, void 0, void 0, function* () { - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const thumbnail = yield thumbnail_1.default.findById(id); - if (thumbnail.owner !== user._id.toString()) { - throw new NotAuthorizedError_1.default('Thumbnail Unauthorized Error'); - } - const iv = thumbnail.IV; - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv("aes256", CIPHER_KEY, iv); - const readStream = fs_1.default.createReadStream(thumbnail.path); - const bufferData = yield streamToBuffer_1.default(readStream.pipe(decipher)); - return bufferData; - }); - this.getFullThumbnail = (user, fileID, res) => __awaiter(this, void 0, void 0, function* () { - const userID = user._id; - const file = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!file) - throw new NotFoundError_1.default("File Thumbnail Not Found"); - const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer; - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const readStream = fs_1.default.createReadStream(file.metadata.filePath); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size.toString()); - console.log("Sending Full Thumbnail..."); - yield awaitStream_1.default(readStream.pipe(decipher), res); - console.log("Full thumbnail sent"); - }); - this.streamVideo = (user, fileID, headers, res) => __awaiter(this, void 0, void 0, function* () { - const userID = user._id; - const currentFile = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!currentFile) - throw new NotFoundError_1.default("Video File Not Found"); - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const fileSize = currentFile.metadata.size; - const range = headers.range; - const parts = range.replace(/bytes=/, "").split("-"); - let start = parseInt(parts[0], 10); - let end = parts[1] - ? parseInt(parts[1], 10) - : fileSize - 1; - const chunksize = (end - start) + 1; - const IV = currentFile.metadata.IV.buffer; - let head = { - 'Content-Range': 'bytes ' + start + '-' + end + '/' + fileSize, - 'Accept-Ranges': 'bytes', - 'Content-Length': chunksize, - 'Content-Type': 'video/mp4' - }; - const readStream = fs_1.default.createReadStream(currentFile.metadata.filePath, { start: start, - end: end }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.writeHead(206, head); - yield awaitStream_1.default(readStream.pipe(decipher), res); - }); - this.getPublicDownload = (fileID, tempToken, res) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.getPublicFile(fileID); - if (!file || !file.metadata.link || file.metadata.link !== tempToken) { - throw new NotAuthorizedError_1.default("File Not Public"); - } - const user = yield user_1.default.findById(file.metadata.owner); - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const IV = file.metadata.IV.buffer; - const readStream = fs_1.default.createReadStream(file.metadata.filePath); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size.toString()); - yield awaitStream_1.default(readStream.pipe(decipher), res); - if (file.metadata.linkType === "one") { - console.log("removing public link"); - yield dbUtilsFile.removeOneTimePublicLink(fileID); - } - }); - } -} -exports.default = FileSystemService; diff --git a/dist/services/ChunkService/MongoService.js b/dist/services/ChunkService/MongoService.js deleted file mode 100644 index 10188e3..0000000 --- a/dist/services/ChunkService/MongoService.js +++ /dev/null @@ -1,184 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose_1 = __importDefault(require("../../db/mongoose")); -const conn = mongoose_1.default.connection; -const DbUtilFolder = require("../../db/utils/folderUtils"); -const index_1 = __importDefault(require("../../db/utils/fileUtils/index")); -const crypto_1 = __importDefault(require("crypto")); -const videoChecker_1 = __importDefault(require("../../utils/videoChecker")); -const imageChecker_1 = __importDefault(require("../../utils/imageChecker")); -const mongodb_1 = require("mongodb"); -const createThumbnail_1 = __importDefault(require("../FileService/utils/createThumbnail")); -const thumbnail_1 = __importDefault(require("../../models/thumbnail")); -const NotAuthorizedError_1 = __importDefault(require("../../utils/NotAuthorizedError")); -const NotFoundError_1 = __importDefault(require("../../utils/NotFoundError")); -const awaitStream_1 = __importDefault(require("./utils/awaitStream")); -const awaitUploadStream_1 = __importDefault(require("./utils/awaitUploadStream")); -const user_1 = __importDefault(require("../../models/user")); -const getBusboyData_1 = __importDefault(require("./utils/getBusboyData")); -const dbUtilsFile = new index_1.default(); -const dbUtilsFolder = new DbUtilFolder(); -class MongoService { - constructor() { - this.uploadFile = (user, busboy, req) => __awaiter(this, void 0, void 0, function* () { - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - let bucketStream; - const initVect = crypto_1.default.randomBytes(16); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const cipher = crypto_1.default.createCipheriv('aes256', CIPHER_KEY, initVect); - const { file, filename, formData } = yield getBusboyData_1.default(busboy); - const parent = formData.get("parent") || "/"; - const parentList = formData.get("parentList") || "/"; - const size = formData.get("size") || ""; - let hasThumbnail = false; - let thumbnailID = ""; - const isVideo = videoChecker_1.default(filename); - const metadata = { - owner: user._id, - parent, - parentList, - hasThumbnail, - thumbnailID, - isVideo, - size, - IV: initVect - }; - let bucket = new mongoose_1.default.mongo.GridFSBucket(conn.db); - bucketStream = bucket.openUploadStream(filename, { metadata }); - const finishedFile = yield awaitUploadStream_1.default(file.pipe(cipher), bucketStream, req); - const imageCheck = imageChecker_1.default(filename); - if (finishedFile.length < 15728640 && imageCheck) { - const updatedFile = yield createThumbnail_1.default(finishedFile, filename, user); - return updatedFile; - } - else { - return finishedFile; - } - }); - this.downloadFile = (user, fileID, res) => __awaiter(this, void 0, void 0, function* () { - const currentFile = yield dbUtilsFile.getFileInfo(fileID, user._id); - if (!currentFile) - throw new NotFoundError_1.default("Download File Not Found"); - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const bucket = new mongoose_1.default.mongo.GridFSBucket(conn.db); - const IV = currentFile.metadata.IV.buffer; - const readStream = bucket.openDownloadStream(new mongodb_1.ObjectID(fileID)); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + currentFile.filename + '"'); - res.set('Content-Length', currentFile.metadata.size.toString()); - yield awaitStream_1.default(readStream.pipe(decipher), res); - }); - this.getThumbnail = (user, id) => __awaiter(this, void 0, void 0, function* () { - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const thumbnail = yield thumbnail_1.default.findById(id); - if (thumbnail.owner !== user._id.toString()) { - throw new NotAuthorizedError_1.default('Thumbnail Unauthorized Error'); - } - const iv = thumbnail.data.slice(0, 16); - const chunk = thumbnail.data.slice(16); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv("aes256", CIPHER_KEY, iv); - const decryptedThumbnail = Buffer.concat([decipher.update(chunk), decipher.final()]); - return decryptedThumbnail; - }); - this.getFullThumbnail = (user, fileID, res) => __awaiter(this, void 0, void 0, function* () { - const userID = user._id; - const file = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!file) - throw new NotFoundError_1.default("File Thumbnail Not Found"); - const bucket = new mongoose_1.default.mongo.GridFSBucket(conn.db); - const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer; - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const readStream = bucket.openDownloadStream(new mongodb_1.ObjectID(fileID)); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size.toString()); - console.log("Sending Full Thumbnail..."); - yield awaitStream_1.default(readStream.pipe(decipher), res); - console.log("Full thumbnail sent"); - }); - this.getPublicDownload = (fileID, tempToken, res) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.getPublicFile(fileID); - if (!file || !file.metadata.link || file.metadata.link !== tempToken) { - throw new NotAuthorizedError_1.default("File Not Public"); - } - const user = yield user_1.default.findById(file.metadata.owner); - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const bucket = new mongoose_1.default.mongo.GridFSBucket(conn.db); - const IV = file.metadata.IV.buffer; - const readStream = bucket.openDownloadStream(new mongodb_1.ObjectID(fileID)); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size.toString()); - yield awaitStream_1.default(readStream.pipe(decipher), res); - if (file.metadata.linkType === "one") { - console.log("removing public link"); - yield dbUtilsFile.removeOneTimePublicLink(fileID); - } - }); - this.streamVideo = (user, fileID, headers, res) => __awaiter(this, void 0, void 0, function* () { - const userID = user._id; - const currentFile = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!currentFile) - throw new NotFoundError_1.default("Video File Not Found"); - const password = user.getEncryptionKey(); - if (!password) - throw new NotAuthorizedError_1.default("Invalid Encryption Key"); - const fileSize = currentFile.metadata.size; - const range = headers.range; - const parts = range.replace(/bytes=/, "").split("-"); - let start = parseInt(parts[0], 10); - let end = parts[1] - ? parseInt(parts[1], 10) - : fileSize - 1; - const chunksize = (end - start) + 1; - const IV = currentFile.metadata.IV.buffer; - let head = { - 'Content-Range': 'bytes ' + start + '-' + end + '/' + fileSize, - 'Accept-Ranges': 'bytes', - 'Content-Length': chunksize, - 'Content-Type': 'video/mp4' - }; - const bucket = new mongoose_1.default.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 - }); - const readStream = bucket.openDownloadStream(new mongodb_1.ObjectID(fileID), { - start: start, - end: end - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - res.writeHead(206, head); - yield awaitStream_1.default(readStream.pipe(decipher), res); - }); - } -} -exports.default = MongoService; diff --git a/dist/services/ChunkService/utils/ChunkInterface.js b/dist/services/ChunkService/utils/ChunkInterface.js deleted file mode 100644 index c8ad2e5..0000000 --- a/dist/services/ChunkService/utils/ChunkInterface.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/services/ChunkService/utils/awaitStream.js b/dist/services/ChunkService/utils/awaitStream.js deleted file mode 100644 index d363b07..0000000 --- a/dist/services/ChunkService/utils/awaitStream.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const awaitStream = (inputSteam, outputStream) => { - return new Promise((resolve, reject) => { - inputSteam.on("error", (e) => { - reject({ - message: "Await Stream Input Error", - code: 500, - error: e - }); - }); - outputStream.on("error", (e) => { - reject({ - message: "Await Stream Output Error", - code: 500, - error: e - }); - }); - inputSteam.pipe(outputStream).on("finish", (data) => { - console.log("await stream finished"); - resolve(data); - }); - }); -}; -exports.default = awaitStream; diff --git a/dist/services/ChunkService/utils/awaitUploadStream.js b/dist/services/ChunkService/utils/awaitUploadStream.js deleted file mode 100644 index aeb9d7a..0000000 --- a/dist/services/ChunkService/utils/awaitUploadStream.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const removeChunks_1 = __importDefault(require("../../FileService/utils/removeChunks")); -const awaitUploadStream = (inputSteam, outputStream, req) => { - return new Promise((resolve, reject) => { - inputSteam.on("error", (e) => { - removeChunks_1.default(outputStream); - reject({ - message: "Await Stream Input Error", - code: 500, - error: e - }); - }); - outputStream.on("error", (e) => { - removeChunks_1.default(outputStream); - reject({ - message: "Await Stream Output Error", - code: 500, - error: e - }); - }); - req.on("aborted", () => { - console.log("Upload Request Cancelling..."); - removeChunks_1.default(outputStream); - }); - inputSteam.pipe(outputStream).on("finish", (data) => { - console.log("await stream finished"); - resolve(data); - }); - }); -}; -exports.default = awaitUploadStream; diff --git a/dist/services/ChunkService/utils/getBusboyData.js b/dist/services/ChunkService/utils/getBusboyData.js deleted file mode 100644 index 5698054..0000000 --- a/dist/services/ChunkService/utils/getBusboyData.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const getBusboyData = (busboy) => { - return new Promise((resolve, reject) => { - const formData = new Map(); - busboy.on("field", (field, val) => { - formData.set(field, val); - }); - busboy.on("file", (_, file, filename) => __awaiter(void 0, void 0, void 0, function* () { - resolve({ - file, - filename, - formData - }); - })); - }); -}; -exports.default = getBusboyData; diff --git a/dist/services/ChunkService/utils/getFileSize.js b/dist/services/ChunkService/utils/getFileSize.js deleted file mode 100644 index 0ca261c..0000000 --- a/dist/services/ChunkService/utils/getFileSize.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const fs_1 = __importDefault(require("fs")); -const getFileSize = (path) => { - return new Promise((resolve, reject) => { - fs_1.default.stat(path, (error, stats) => { - if (error) { - resolve(0); - } - resolve(stats.size); - }); - }); -}; -exports.default = getFileSize; diff --git a/dist/services/FileService/index.js b/dist/services/FileService/index.js deleted file mode 100644 index a20bd95..0000000 --- a/dist/services/FileService/index.js +++ /dev/null @@ -1,668 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const imageChecker = require("../../utils/imageChecker"); -const crypto_1 = __importDefault(require("crypto")); -const videoChecker = require("../../utils/videoChecker"); -const mongoose = require("../../db/mongoose"); -const conn = mongoose.connection; -const createThumbnail = require("./utils/createThumbnail.ss"); -const Thumbnail = require("../../models/thumbnail"); -const ObjectID = require('mongodb').ObjectID; -const NotAuthorizedError = require("../../utils/NotAuthorizedError"); -const NotFoundError = require("../../utils/NotFoundError"); -const env = require("../../enviroment/env"); -const jwt = require("jsonwebtoken"); -const removeChunks = require("./utils/removeChunks"); -const User = require("../../models/user"); -const Folder = require("../../models/folder"); -const sortBySwitch = require("../../utils/sortBySwitch"); -const createQuery = require("../../utils/createQuery"); -const ffmpeg = require("fluent-ffmpeg"); -const temp = require("temp").track(); -const progress = require("progress-stream"); -const fs = require("fs"); -const DbUtilFile = require("../../db/utils/fileUtils"); -const DbUtilFolder = require("../../db/utils/folderUtils"); -const dbUtilsFile = new DbUtilFile(); -const dbUtilsFolder = new DbUtilFolder(); -const FileService = function () { - this.upload = (user, busboy, req) => { - return new Promise((resolve, reject) => { - const password = user.getEncryptionKey(); - let bucketStream; - const initVect = crypto_1.default.randomBytes(16); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const cipher = crypto_1.default.createCipheriv('aes256', CIPHER_KEY, initVect); - cipher.on("error", (e) => __awaiter(this, void 0, void 0, function* () { - yield removeChunks(bucketStream); - reject({ - message: "File service upload cipher error", - exception: e, - code: 500 - }); - })); - const formData = new Map(); - busboy.on("error", (e) => __awaiter(this, void 0, void 0, function* () { - yield removeChunks(bucketStream); - reject({ - message: "File service upload busboy error", - exception: e, - code: 500 - }); - })); - busboy.on("file", (fieldname, file, filename) => __awaiter(this, void 0, void 0, function* () { - const parent = formData.get("parent") || "/"; - const parentList = formData.get("parentList") || "/"; - const size = formData.get("size") || ""; - let hasThumbnail = false; - let thumbnailID = ""; - const isVideo = videoChecker(filename); - const metadata = { - owner: user._id, - parent, - parentList, - hasThumbnail, - thumbnailID, - isVideo, - size, - IV: initVect - }; - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255 - }); - bucketStream = bucket.openUploadStream(filename, { metadata }); - bucketStream.on("error", (e) => __awaiter(this, void 0, void 0, function* () { - yield removeChunks(bucketStream); - reject({ - message: "Cannot upload file to database", - exception: e, - code: 500 - }); - })); - req.on("aborted", () => __awaiter(this, void 0, void 0, function* () { - console.log("Upload Request Cancelling..."); - yield removeChunks(bucketStream); - })); - file.pipe(cipher).pipe(bucketStream); - bucketStream.on("finish", (file) => __awaiter(this, void 0, void 0, function* () { - const imageCheck = imageChecker(filename); - if (file.length < 15728640 && imageCheck) { - let updatedFile = yield createThumbnail(file, filename, user); - resolve(updatedFile); - } - else { - resolve(file); - } - })); - })).on("field", (field, val) => { - formData.set(field, val); - }); - }); - }; - this.getThumbnail = (user, id) => __awaiter(this, void 0, void 0, function* () { - const password = user.getEncryptionKey(); - const thumbnail = yield Thumbnail.findById(id); - if (user._id.toString() !== thumbnail.owner) { - throw new NotAuthorizedError("Thumbnail Unauthorized Error"); - } - const iv = thumbnail.data.slice(0, 16); - const chunk = thumbnail.data.slice(16); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv("aes256", CIPHER_KEY, iv); - const decryptedThumbnail = Buffer.concat([decipher.update(chunk), decipher.final()]); - //console.log("decry", decryptedThumbnail); - return decryptedThumbnail; - }); - this.getFullThumbnail = (user, fileID, res) => __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => { - const userID = user._id; - dbUtilsFile.getFileInfo(fileID, userID).then((file) => __awaiter(this, void 0, void 0, function* () { - if (!file) { - reject({ - code: 401, - message: "File For Full Thumbnail Not Found", - exception: undefined - }); - } - const bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255, - }); - const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer; - const readStream = bucket.openDownloadStream(ObjectID(fileID)); - readStream.on("error", (e) => { - reject({ - code: 500, - message: "File service Full Thumbnail stream error", - exception: e - }); - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - decipher.on("error", (e) => { - reject({ - code: 500, - message: "File service Full Thumbnail decipher error", - exception: e - }); - }); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size); - readStream.pipe(decipher).pipe(res).on("finish", () => __awaiter(this, void 0, void 0, function* () { - console.log("Sent Full Thumbnail"); - resolve(); - })); - })); - }); - }); - this.publicDownload = (ID, tempToken, res) => { - return new Promise((resolve, reject) => { - dbUtilsFile.getPublicFile(ID).then((file) => __awaiter(this, void 0, void 0, function* () { - if (!file || !file.metadata.link || file.metadata.link !== tempToken) { - reject({ - code: 401, - message: "File not public/Not found", - exception: undefined - }); - } - else { - const user = yield User.findById(file.metadata.owner); - const bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255, - }); - const password = user.getEncryptionKey(); - const IV = file.metadata.IV.buffer; - const readStream = bucket.openDownloadStream(ObjectID(ID)); - readStream.on("error", (e) => { - reject({ - code: 500, - message: "File service public download decipher error", - exception: e - }); - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - decipher.on("error", (e) => { - reject({ - code: 500, - message: "File service public download decipher error", - exception: e - }); - }); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size); - readStream.pipe(decipher).pipe(res).on("finish", () => __awaiter(this, void 0, void 0, function* () { - console.log("removing public link"); - yield this.removePublicOneTimeLink(file); - resolve(); - })); - } - })); - }); - }; - this.removePublicOneTimeLink = (currentFile) => __awaiter(this, void 0, void 0, function* () { - const ID = currentFile._id; - if (currentFile.metadata.linkType === "one") { - yield dbUtilsFile.removeOneTimePublicLink(ID); - } - }); - this.removeLink = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.removeLink(fileID, userID); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError("Remove Link File Not Found Error"); - }); - this.makePublic = (user, fileID) => __awaiter(this, void 0, void 0, function* () { - const userID = user._id; - const token = yield jwt.sign({ _id: userID.toString() }, env.password); - const file = yield dbUtilsFile.makePublic(fileID, userID, token, "public"); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError("Make Public File Not Found Error"); - return token; - }); - this.getPublicInfo = (fileID, tempToken) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.getPublicInfo(fileID, tempToken); - if (!file || !file.metadata.link || file.metadata.link !== tempToken) { - throw new NotFoundError("Public Info Not Found"); - } - else { - return file; - } - }); - this.makeOneTimePublic = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - const token = yield jwt.sign({ _id: userID.toString() }, env.password); - const file = yield dbUtilsFile.makeOneTimePublic(fileID, userID, token); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError("Make One Time Public Not Found Error"); - return token; - }); - this.getFileInfo = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - let currentFile = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!currentFile) - throw new NotFoundError("Get File Info Not Found Error"); - const parentID = currentFile.metadata.parent; - let parentName = ""; - if (parentID === "/") { - parentName = "Home"; - } - else { - const parentFolder = yield Folder.findOne({ "owner": userID, "_id": parentID }); - if (parentFolder) { - parentName = parentFolder.name; - } - else { - parentName = "Unknown"; - } - } - return Object.assign(Object.assign({}, currentFile), { parentName }); - }); - this.getQuickList = (userID) => __awaiter(this, void 0, void 0, function* () { - const quickList = yield dbUtilsFile.getQuickList(userID); - if (!quickList) - throw new NotFoundError("Quick List Not Found Error"); - return quickList; - }); - this.getList = (userID, query) => __awaiter(this, void 0, void 0, function* () { - let searchQuery = query.search || ""; - const parent = query.parent || "/"; - let limit = query.limit || 50; - let sortBy = query.sortby || "DEFAULT"; - const startAt = query.startAt || undefined; - const startAtDate = query.startAtDate || "0"; - const startAtName = query.startAtName || ""; - sortBy = sortBySwitch(sortBy); - limit = parseInt(limit); - const queryObj = createQuery(userID, parent, query.sortby, startAt, startAtDate, searchQuery, startAtName); - const fileList = yield dbUtilsFile.getList(queryObj, sortBy, limit); - if (!fileList) - throw new NotFoundError("File List Not Found"); - return fileList; - }); - this.getDownloadToken = (user) => __awaiter(this, void 0, void 0, function* () { - const tempToken = yield user.generateTempAuthToken(); - if (!tempToken) - throw new NotAuthorizedError("Get Download Token Not Authorized Error"); - return tempToken; - }); - this.getDownloadTokenVideo = (user, cookie) => __awaiter(this, void 0, void 0, function* () { - if (!cookie) - throw new NotAuthorizedError("Get Download Token Video Cookie Not Authorized Error"); - const tempToken = yield user.generateTempAuthTokenVideo(cookie); - if (!tempToken) - throw new NotAuthorizedError("Get Download Token Video Not Authorized Error"); - return tempToken; - }); - this.removeTempToken = (user, tempToken) => __awaiter(this, void 0, void 0, function* () { - const key = user.getEncryptionKey(); - const decoded = yield jwt.verify(tempToken, env.password); - const publicKey = decoded.iv; - const encryptedToken = user.encryptToken(tempToken, key, publicKey); - const removedTokenUser = yield dbUtilsFile.removeTempToken(user, encryptedToken); - if (!removedTokenUser) - throw new NotFoundError("Remove Temp Token User Not Found Errors"); - yield removedTokenUser.save(); - }); - this.transcodeVideo = (user, body) => { - return new Promise((resolve, reject) => { - const id = body.file._id; - const userID = user._id; - conn.db.collection("fs.files") - .findOne({ "_id": ObjectID(id), "metadata.owner": userID }).then((currentFile) => { - if (!currentFile) { - reject({ - message: "Transcode Video Not Found Error", - exception: undefined, - code: 401 - }); - } - else { - const password = user.getEncryptionKey(); //env.key; - const IV = currentFile.metadata.IV.buffer; - const bucket = new mongoose.mongo.GridFSBucket(conn.db); - const readStream = bucket.openDownloadStream(ObjectID(id)); - readStream.on("error", (e) => { - reject({ - message: "File service transcode video stream error", - exception: e, - code: 500 - }); - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - decipher.on("error", (e) => { - reject({ - message: "File service transcode video decipher error", - exception: e, - code: 500 - }); - }); - const tempStream = temp.createWriteStream(); - tempStream.on("error", (e) => { - reject({ - message: "File service transcode video temp error", - exception: e, - code: 500 - }); - }); - readStream.pipe(decipher).pipe(tempStream).on("finish", () => { - const writeBucket = new mongoose.mongo.GridFSBucket(conn.db, { - bucketName: "videos", - }); - const gfsWrite = writeBucket.openUploadStream(currentFile.filename, { - _id: id, - }); - gfsWrite.on("error", (e) => { - reject({ - message: "File service transcode video write stream error", - exception: e, - code: 500 - }); - }); - const initVect = crypto_1.default.randomBytes(16); - const cipher = crypto_1.default.createCipheriv('aes256', CIPHER_KEY, initVect); - cipher.on("error", (e) => { - reject({ - message: "File service transcode video cipher write error", - exception: e, - code: 500 - }); - }); - const str = progress({ time: 100 }); - str.on("progress", () => { - }); - str.on("finish", () => { - }); - const tempStream2 = temp.createWriteStream(); - tempStream2.on("error", (e) => { - reject({ - message: "File service transcode video temp write error", - exception: e, - code: 500 - }); - }); - const ffmpegCommand = ffmpeg() - .input(tempStream.path).outputOptions(['-movflags frag_keyframe+empty_moov', '-movflags +faststart']) - .outputFormat('mp4').on("error", (err, stdout, stderr) => { - console.log('An error occurred: ' + err.message, err, stderr); - reject({ - message: "Video Transcode Failed Error", - exception: err.message, - code: 500 - }); - }) - .videoCodec('libx264') - .audioBitrate('128k') - .videoBitrate(8000, true) - .pipe(tempStream2).on("finish", () => { - fs.createReadStream(tempStream2.path).pipe(cipher).pipe(gfsWrite).on("finish", (file) => __awaiter(this, void 0, void 0, function* () { - console.log("transcode finished"); - yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": ObjectID(id) }, { "$set": { "metadata.transcoded": true, "metadata.transcodedIV": initVect, "metadata.transcoded_size": tempStream2.bytesWritten, "metadata.transcodedID": file._id } }); - resolve(); - })).on("error", (e) => { - reject({ - message: "File service transcode read stream error", - exception: e, - code: 500 - }); - }); - }); - ffmpegCommand.on("error", (e) => { - reject({ - message: "File service FFMPEG error", - exception: e, - code: 500 - }); - }); - }); - } - }); - }); - }; - this.removeTranscodeVideo = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - const parentFile = yield dbUtilsFile.getFileInfo(fileID, userID); - const transcodedVideoID = parentFile.metadata.transcodedID; - const bucket = new mongoose.mongo.GridFSBucket(conn.db, { - bucketName: "videos" - }); - try { - yield bucket.delete(ObjectID(transcodedVideoID)); - } - catch (e) { - console.log("Could Not Find Transcoded Video"); - } - const file = yield dbUtilsFile.removeTranscodeVideo(fileID, userID); - if (!file) - throw new NotFoundError("Remove Transcode Video Error"); - }); - this.streamTranscodedVideo = (userID, fileID, headers, res) => { - return new Promise((resolve, reject) => { - dbUtilsFile.getFileInfo(fileID, userID).then((file) => { - if (!file) { - reject({ - code: 401, - message: "Stream Transcoded File Not Found", - exception: undefined - }); - } - else { - const fileSize = file.metadata.transcoded_size; - const transcodedVideoID = file.metadata.transcodedID; - const password = user.getEncryptionKey(); //env.key; - const range = headers.range; - const parts = range.replace(/bytes=/, "").split("-"); - const start = parseInt(parts[0], 10); - const end = parts[1] - ? parseInt(parts[1], 10) - : fileSize - 1; - const chunksize = (end - start) + 1; - const IV = file.metadata.transcodedIV.buffer; - let head = { - 'Content-Range': 'bytes ' + start + '-' + end + '/' + fileSize, - 'Accept-Ranges': 'bytes', - 'Content-Length': chunksize, - 'Content-Type': 'video/mp4' - }; - const bucket = new mongoose.mongo.GridFSBucket(conn.db, { - bucketName: "videos", - chunkSizeBytes: chunksize - }); - const readStream = bucket.openDownloadStream(ObjectID(transcodedVideoID), { - start: start, - end: end - }); - readStream.on("error", (e) => { - reject({ - code: 500, - message: "File service transcode video stream error", - exception: e - }); - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - decipher.setAutoPadding(false); - decipher.on("error", (e) => { - reject({ - code: 500, - message: "File service transcode video decipher error", - exception: e - }); - }); - res.writeHead(206, head); - readStream.pipe(decipher).pipe(res).on("finish", () => { - resolve(); - }); - } - }); - }); - }; - this.streamVideo = (user, fileID, headers, res) => { - return new Promise((resolve, reject) => { - const userID = user._id; - dbUtilsFile.getFileInfo(fileID, userID).then((currentFile) => { - if (!currentFile) { - reject({ - code: 401, - message: "Video Steam Not Found Error", - exception: undefined - }); - } - else { - const password = user.getEncryptionKey(); - const fileSize = currentFile.metadata.size; - const range = headers.range; - const parts = range.replace(/bytes=/, "").split("-"); - let start = parseInt(parts[0], 10); - let end = parts[1] - ? parseInt(parts[1], 10) - : fileSize - 1; - const chunksize = (end - start) + 1; - const IV = currentFile.metadata.IV.buffer; - let head = { - 'Content-Range': 'bytes ' + start + '-' + end + '/' + fileSize, - 'Accept-Ranges': 'bytes', - 'Content-Length': chunksize, - 'Content-Type': 'video/mp4' - }; - const bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 - }); - const readStream = bucket.openDownloadStream(ObjectID(fileID), { - start: start, - end: end.length - }); - readStream.on("error", (e) => { - reject({ - code: 500, - message: "File service stream video stream error", - exception: e - }); - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - decipher.on("error", (e) => { - reject({ - code: 500, - message: "File service stream video decipher error", - exception: e - }); - }); - res.writeHead(206, head); - readStream.pipe(decipher).pipe(res).on("finish", () => { - resolve(); - }); - } - }); - }); - }; - this.downloadFile = (user, fileID, res) => { - return new Promise((resolve, reject) => { - const userID = user._id; - dbUtilsFile.getFileInfo(fileID, userID).then((file) => { - if (!file) { - reject({ - code: 401, - message: "Download File Not Found Error", - exception: undefined - }); - } - else { - const password = user.getEncryptionKey(); - const bucket = new mongoose.mongo.GridFSBucket(conn.db); - const IV = file.metadata.IV.buffer; - const readStream = bucket.openDownloadStream(ObjectID(fileID)); - readStream.on("error", (e) => { - reject({ - code: 500, - message: "File service download decipher error", - exception: e - }); - }); - const CIPHER_KEY = crypto_1.default.createHash('sha256').update(password).digest(); - const decipher = crypto_1.default.createDecipheriv('aes256', CIPHER_KEY, IV); - decipher.on("error", (e) => { - reject({ - code: 500, - message: "File service download decipher error", - exception: e - }); - }); - res.set('Content-Type', 'binary/octet-stream'); - res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); - res.set('Content-Length', file.metadata.size); - readStream.pipe(decipher).pipe(res).on("finish", () => { - resolve(); - }); - } - }); - }); - }; - this.getSuggestedList = (userID, searchQuery) => __awaiter(this, void 0, void 0, function* () { - searchQuery = new RegExp(searchQuery, 'i'); - const fileList = yield dbUtilsFile.getFileSearchList(userID, searchQuery); - const folderList = yield dbUtilsFolder.getFolderSearchList(userID, searchQuery); - if (!fileList || !folderList) - throw new NotFoundError("Suggested List Not Found Error"); - return { - fileList, - folderList - }; - }); - this.renameFile = (userID, fileID, title) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.renameFile(fileID, userID, title); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError("Rename File Not Found Error"); - return file; - }); - this.moveFile = (userID, fileID, parentID) => __awaiter(this, void 0, void 0, function* () { - let parentList = ["/"]; - if (parentID.length !== 1) { - const parentFile = yield dbUtilsFolder.getFolderInfo(parentID, userID); - if (!parentFile) - throw new NotFoundError("Rename Parent File Not Found Error"); - const parentList = parentFile.parentList; - parentList.push(parentID); - } - const file = yield dbUtilsFile.moveFile(fileID, userID, parentID, parentList.toString()); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError("Rename File Not Found Error"); - return file; - }); - this.deleteFile = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255, - }); - const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, { - bucketName: "videos" - }); - const file = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!file) - throw new NotFoundError("Delete File Not Found Error"); - if (file.metadata.thumbnailID) { - yield Thumbnail.deleteOne({ _id: file.metadata.thumbnailID }); - } - if (file.metadata.isVideo && file.metadata.transcoded) { - try { - yield bucket.delete(ObjectID(file.metadata.transcodedID)); - } - catch (e) { - console.log("Could Not Find Transcoded Video"); - } - } - yield bucket.delete(ObjectID(fileID)); - }); -}; -module.exports = FileService; diff --git a/dist/services/FileService/indexnew.js b/dist/services/FileService/indexnew.js deleted file mode 100644 index 8a06593..0000000 --- a/dist/services/FileService/indexnew.js +++ /dev/null @@ -1,195 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const imageChecker = require("../../utils/imageChecker"); -const videoChecker = require("../../utils/videoChecker"); -const mongoose = require("../../db/mongoose"); -const conn = mongoose.connection; -const createThumbnail = require("../../services/FileService/utils/createThumbnail"); -const thumbnail_1 = __importDefault(require("../../models/thumbnail")); -const ObjectID = require('mongodb').ObjectID; -const NotAuthorizedError_1 = __importDefault(require("../../utils/NotAuthorizedError")); -const NotFoundError_1 = __importDefault(require("../../utils/NotFoundError")); -const env = require("../../enviroment/env"); -const jwt = require("jsonwebtoken"); -const removeChunks = require("./utils/removeChunks"); -const User = require("../../models/user"); -const Folder = require("../../models/folder"); -const sortBySwitch = require("../../utils/sortBySwitch"); -const createQuery = require("../../utils/createQuery"); -const ffmpeg = require("fluent-ffmpeg"); -const temp = require("temp").track(); -const progress = require("progress-stream"); -const fs = require("fs"); -const index_1 = __importDefault(require("../../db/utils/fileUtils/index")); -const DbUtilFolder = require("../../db/utils/folderUtils"); -const dbUtilsFile = new index_1.default(); -const dbUtilsFolder = new DbUtilFolder(); -class MongoFileService { - constructor() { - this.removePublicOneTimeLink = (currentFile) => __awaiter(this, void 0, void 0, function* () { - const fileID = currentFile._id; - if (currentFile.metadata.linkType === "one") { - yield dbUtilsFile.removeOneTimePublicLink(fileID); - } - }); - this.removeLink = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.removeLink(fileID, userID); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError_1.default("Remove Link File Not Found Error"); - }); - this.makePublic = (user, fileID) => __awaiter(this, void 0, void 0, function* () { - const userID = user._id; - const token = yield jwt.sign({ _id: userID.toString() }, env.password); - const file = yield dbUtilsFile.makePublic(fileID, userID, token); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError_1.default("Make Public File Not Found Error"); - return token; - }); - this.getPublicInfo = (fileID, tempToken) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.getPublicInfo(fileID, tempToken); - if (!file || !file.metadata.link || file.metadata.link !== tempToken) { - throw new NotFoundError_1.default("Public Info Not Found"); - } - else { - return file; - } - }); - this.makeOneTimePublic = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - const token = yield jwt.sign({ _id: userID.toString() }, env.password); - const file = yield dbUtilsFile.makeOneTimePublic(fileID, userID, token); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError_1.default("Make One Time Public Not Found Error"); - return token; - }); - this.getFileInfo = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - let currentFile = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!currentFile) - throw new NotFoundError_1.default("Get File Info Not Found Error"); - const parentID = currentFile.metadata.parent; - let parentName = ""; - if (parentID === "/") { - parentName = "Home"; - } - else { - const parentFolder = yield Folder.findOne({ "owner": userID, "_id": parentID }); - if (parentFolder) { - parentName = parentFolder.name; - } - else { - parentName = "Unknown"; - } - } - return Object.assign(Object.assign({}, currentFile), { parentName }); - }); - this.getQuickList = (userID) => __awaiter(this, void 0, void 0, function* () { - const quickList = yield dbUtilsFile.getQuickList(userID); - if (!quickList) - throw new NotFoundError_1.default("Quick List Not Found Error"); - return quickList; - }); - this.getList = (userID, query) => __awaiter(this, void 0, void 0, function* () { - let searchQuery = query.search || ""; - const parent = query.parent || "/"; - let limit = query.limit || 50; - let sortBy = query.sortby || "DEFAULT"; - const startAt = query.startAt || undefined; - const startAtDate = query.startAtDate || "0"; - const startAtName = query.startAtName || ""; - sortBy = sortBySwitch(sortBy); - limit = parseInt(limit); - const queryObj = createQuery(userID, parent, query.sortby, startAt, startAtDate, searchQuery, startAtName); - const fileList = yield dbUtilsFile.getList(queryObj, sortBy, limit); - if (!fileList) - throw new NotFoundError_1.default("File List Not Found"); - return fileList; - }); - this.getDownloadToken = (user) => __awaiter(this, void 0, void 0, function* () { - const tempToken = yield user.generateTempAuthToken(); - if (!tempToken) - throw new NotAuthorizedError_1.default("Get Download Token Not Authorized Error"); - return tempToken; - }); - this.getDownloadTokenVideo = (user, cookie) => __awaiter(this, void 0, void 0, function* () { - if (!cookie) - throw new NotAuthorizedError_1.default("Get Download Token Video Cookie Not Authorized Error"); - const tempToken = yield user.generateTempAuthTokenVideo(cookie); - if (!tempToken) - throw new NotAuthorizedError_1.default("Get Download Token Video Not Authorized Error"); - return tempToken; - }); - this.removeTempToken = (user, tempToken) => __awaiter(this, void 0, void 0, function* () { - const key = user.getEncryptionKey(); - const decoded = yield jwt.verify(tempToken, env.password); - const publicKey = decoded.iv; - const encryptedToken = user.encryptToken(tempToken, key, publicKey); - const removedTokenUser = yield dbUtilsFile.removeTempToken(user, encryptedToken); - if (!removedTokenUser) - throw new NotFoundError_1.default("Remove Temp Token User Not Found Errors"); - yield removedTokenUser.save(); - }); - this.getSuggestedList = (userID, searchQuery) => __awaiter(this, void 0, void 0, function* () { - searchQuery = new RegExp(searchQuery, 'i'); - const fileList = yield dbUtilsFile.getFileSearchList(userID, searchQuery); - const folderList = yield dbUtilsFolder.getFolderSearchList(userID, searchQuery); - if (!fileList || !folderList) - throw new NotFoundError_1.default("Suggested List Not Found Error"); - return { - fileList, - folderList - }; - }); - this.renameFile = (userID, fileID, title) => __awaiter(this, void 0, void 0, function* () { - const file = yield dbUtilsFile.renameFile(fileID, userID, title); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError_1.default("Rename File Not Found Error"); - return file; - }); - this.moveFile = (userID, fileID, parentID) => __awaiter(this, void 0, void 0, function* () { - let parentList = ["/"]; - if (parentID.length !== 1) { - const parentFile = yield dbUtilsFolder.getFolderInfo(parentID, userID); - if (!parentFile) - throw new NotFoundError_1.default("Rename Parent File Not Found Error"); - const parentList = parentFile.parentList; - parentList.push(parentID); - } - const file = yield dbUtilsFile.moveFile(fileID, userID, parentID, parentList.toString()); - if (!file.lastErrorObject.updatedExisting) - throw new NotFoundError_1.default("Rename File Not Found Error"); - return file; - }); - this.deleteFile = (userID, fileID) => __awaiter(this, void 0, void 0, function* () { - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255, - }); - const file = yield dbUtilsFile.getFileInfo(fileID, userID); - if (!file) - throw new NotFoundError_1.default("Delete File Not Found Error"); - if (file.metadata.thumbnailID) { - yield thumbnail_1.default.deleteOne({ _id: file.metadata.thumbnailID }); - } - if (file.metadata.isVideo && file.metadata.transcoded) { - try { - yield bucket.delete(ObjectID(file.metadata.transcodedID)); - } - catch (e) { - console.log("Could Not Find Transcoded Video"); - } - } - yield bucket.delete(ObjectID(fileID)); - }); - } -} -exports.default = MongoFileService; diff --git a/dist/services/FileService/utils/createThumbnail.js b/dist/services/FileService/utils/createThumbnail.js deleted file mode 100644 index bef3ef3..0000000 --- a/dist/services/FileService/utils/createThumbnail.js +++ /dev/null @@ -1,68 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose = require("../../../db/mongoose"); -const conn = mongoose.connection; -const crypto = require("crypto"); -const env = require("../../../enviroment/env"); -const thumbnail_1 = __importDefault(require("../../../models/thumbnail")); -const ObjectID = require('mongodb').ObjectID; -const sharp = require("sharp"); -const concat = require("concat-stream"); -const createThumbnail = (file, filename, user) => { - return new Promise((resolve) => { - const password = user.getEncryptionKey(); - let CIPHER_KEY = crypto.createHash('sha256').update(password).digest(); - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255 - }); - const readStream = bucket.openDownloadStream(ObjectID(file._id)); - readStream.on("error", (e) => { - console.log("File service upload thumbnail error", e); - resolve(file); - }); - const decipher = crypto.createDecipheriv('aes256', CIPHER_KEY, file.metadata.IV); - decipher.on("error", (e) => { - console.log("File service upload thumbnail decipher error", e); - resolve(file); - }); - try { - const concatStream = concat((bufferData) => __awaiter(void 0, void 0, void 0, function* () { - const thumbnailIV = crypto.randomBytes(16); - const thumbnailCipher = crypto.createCipheriv("aes256", CIPHER_KEY, thumbnailIV); - bufferData = Buffer.concat([thumbnailIV, thumbnailCipher.update(bufferData), thumbnailCipher.final()]); - const thumbnailModel = new thumbnail_1.default({ name: filename, owner: user._id, data: bufferData }); - yield thumbnailModel.save(); - let updatedFile = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": file._id }, { "$set": { "metadata.hasThumbnail": true, "metadata.thumbnailID": thumbnailModel._id } }); - updatedFile = updatedFile.value; - updatedFile = Object.assign(Object.assign({}, updatedFile), { metadata: Object.assign(Object.assign({}, updatedFile.metadata), { hasThumbnail: true, thumbnailID: thumbnailModel._id }) }); - resolve(updatedFile); - })).on("error", (e) => { - console.log("File service upload concat stream error", e); - resolve(file); - }); - const imageResize = sharp().resize(300).on("error", (e) => { - console.log("resize error", e); - resolve(file); - }); - readStream.pipe(decipher).pipe(imageResize).pipe(concatStream); - } - catch (e) { - console.log(e); - resolve(file); - } - }); -}; -exports.default = createThumbnail; diff --git a/dist/services/FileService/utils/createThumbnailFS.js b/dist/services/FileService/utils/createThumbnailFS.js deleted file mode 100644 index 65e3a7b..0000000 --- a/dist/services/FileService/utils/createThumbnailFS.js +++ /dev/null @@ -1,95 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const mongoose = require("../../../db/mongoose"); -const conn = mongoose.connection; -const crypto = require("crypto"); -const env = require("../../../enviroment/env"); -const thumbnail_1 = __importDefault(require("../../../models/thumbnail")); -const ObjectID = require('mongodb').ObjectID; -const sharp = require("sharp"); -const concat = require("concat-stream"); -const fs_1 = __importDefault(require("fs")); -const uuid_1 = __importDefault(require("uuid")); -const createThumbnailFS = (file, filename, user) => { - return new Promise((resolve) => { - const password = user.getEncryptionKey(); - let CIPHER_KEY = crypto.createHash('sha256').update(password).digest(); - const thumbnailFilename = uuid_1.default.v4(); - const readStream = fs_1.default.createReadStream(file.metadata.filePath); - const writeStream = fs_1.default.createWriteStream(`/Users/kylehoell/Documents/fstestdata/${thumbnailFilename}`); - const decipher = crypto.createDecipheriv('aes256', CIPHER_KEY, file.metadata.IV); - readStream.on("error", (e) => { - console.log("File service upload thumbnail error", e); - resolve(file); - }); - writeStream.on("error", (e) => { - console.log("File service upload write thumbnail error", e); - resolve(file); - }); - decipher.on("error", (e) => { - console.log("File service upload thumbnail decipher error", e); - resolve(file); - }); - try { - const thumbnailIV = crypto.randomBytes(16); - const thumbnailCipher = crypto.createCipheriv("aes256", CIPHER_KEY, thumbnailIV); - const imageResize = sharp().resize(300).on("error", (e) => { - console.log("resize error", e); - resolve(file); - }); - readStream.pipe(decipher).pipe(imageResize).pipe(thumbnailCipher).pipe(writeStream); - writeStream.on("finish", () => __awaiter(void 0, void 0, void 0, function* () { - console.log("Thumbnail written"); - const thumbnailModel = new thumbnail_1.default({ name: filename, owner: user._id, IV: thumbnailIV, path: `/Users/kylehoell/Documents/fstestdata/${thumbnailFilename}` }); - yield thumbnailModel.save(); - let updatedFile = yield conn.db.collection("fs.files") - .findOneAndUpdate({ "_id": file._id }, { "$set": { "metadata.hasThumbnail": true, "metadata.thumbnailID": thumbnailModel._id } }); - updatedFile = updatedFile.value; - updatedFile = Object.assign(Object.assign({}, updatedFile), { metadata: Object.assign(Object.assign({}, updatedFile.metadata), { hasThumbnail: true, thumbnailID: thumbnailModel._id }) }); - resolve(updatedFile); - })); - } - catch (e) { - console.log("Thumbnail error", e); - resolve(file); - } - // try { - // const concatStream = concat(async(bufferData: Buffer) => { - // const thumbnailIV = crypto.randomBytes(16); - // const thumbnailCipher = crypto.createCipheriv("aes256", CIPHER_KEY, thumbnailIV); - // bufferData = Buffer.concat([thumbnailIV, thumbnailCipher.update(bufferData), thumbnailCipher.final()]); - // const thumbnailModel = new Thumbnail({name: filename, owner: user._id, data: bufferData}); - // await thumbnailModel.save(); - // let updatedFile = await conn.db.collection("fs.files") - // .findOneAndUpdate({"_id": file._id}, {"$set": {"metadata.hasThumbnail": true, "metadata.thumbnailID": thumbnailModel._id}}) - // updatedFile = updatedFile.value; - // updatedFile = {...updatedFile, metadata: {...updatedFile.metadata, hasThumbnail: true, thumbnailID: thumbnailModel._id}} - // resolve(updatedFile); - // }).on("error", (e: Error) => { - // console.log("File service upload concat stream error", e); - // resolve(file); - // }) - // const imageResize = sharp().resize(300).on("error", (e: Error) => { - // console.log("resize error", e); - // resolve(file); - // }) - // readStream.pipe(decipher).pipe(imageResize).pipe(concatStream); - // } catch (e) { - // console.log(e); - // resolve(file); - // } - }); -}; -exports.default = createThumbnailFS; diff --git a/dist/services/FileService/utils/removeChunks.js b/dist/services/FileService/utils/removeChunks.js deleted file mode 100644 index c2deae9..0000000 --- a/dist/services/FileService/utils/removeChunks.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const DbUtilsFile = require("../../../db/utils/fileUtils"); -const dbUtilsFile = new DbUtilsFile(); -const removeChunks = (bucketStream) => __awaiter(void 0, void 0, void 0, function* () { - const uploadID = bucketStream.id; - try { - if (!uploadID || uploadID.length === 0) { - console.log("Invalid uploadID for remove chunks"); - return; - } - yield dbUtilsFile.removeChunksByID(uploadID); - console.log("Upload Request Cancelled, Chunks Removed"); - } - catch (e) { - console.log("Could not remove chunks for canceled upload", uploadID, e); - } -}); -exports.default = removeChunks; diff --git a/dist/services/FolderService/index.js b/dist/services/FolderService/index.js deleted file mode 100644 index 6993c00..0000000 --- a/dist/services/FolderService/index.js +++ /dev/null @@ -1,202 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const Folder = require("../../models/folder"); -const InternalServerError = require("../../utils/InternalServerError"); -const NotFoundError = require("../../utils/NotFoundError"); -const UtilsFile = require("../../db/utils/fileUtils"); -const ObjectID = require('mongodb').ObjectID; -const UtilsFolder = require("../../db/utils/folderUtils"); -const mongoose = require("../../db/mongoose"); -const conn = mongoose.connection; -const Thumbnail = require("../../models/thumbnail"); -const sortBySwitch = require("../../utils/sortBySwitchFolder"); -const utilsFile = new UtilsFile(); -const utilsFolder = new UtilsFolder(); -const FolderService = function () { - this.uploadFolder = (data) => __awaiter(this, void 0, void 0, function* () { - const folder = new Folder(data); - yield folder.save(); - if (!folder) - throw new InternalServerError("Upload Folder Error"); - return folder; - }); - this.deleteFolder = (userID, folderID, parentList) => __awaiter(this, void 0, void 0, function* () { - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255 - }); - const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, { - bucketName: "videos" - }); - const parentListString = parentList.toString(); - yield Folder.deleteMany({ "owner": userID, "parentList": { $all: parentList } }); - yield Folder.deleteMany({ "owner": userID, "_id": folderID }); - const fileList = yield utilsFile.getFileListByParent(userID, parentListString); - if (!fileList) - throw new NotFoundError("Delete File List Not Found"); - for (let i = 0; i < fileList.length; i++) { - const currentFile = fileList[i]; - try { - if (currentFile.metadata.thumbnailID) { - yield Thumbnail.deleteOne({ _id: currentFile.metadata.thumbnailID }); - } - if (currentFile.metadata.isVideo && currentFile.metadata.transcoded) { - try { - yield videoBucket.delete(ObjectID(currentFile.metadata.transcodedID)); - } - catch (e) { - console.log("Could Not Find Transcoded Video"); - } - } - yield bucket.delete(ObjectID(currentFile._id)); - } - catch (e) { - console.log("Could not delete file", currentFile.filename, currentFile._id); - } - } - }); - this.deleteAll = (userID) => __awaiter(this, void 0, void 0, function* () { - console.log("remove all request"); - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255 - }); - const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, { - bucketName: "videos" - }); - yield Folder.deleteMany({ "owner": userID }); - const fileList = yield utilsFile.getFileListByOwner(userID); - if (!fileList) - throw new NotFoundError("Delete All File List Not Found Error"); - for (let i = 0; i < fileList.length; i++) { - const currentFile = fileList[i]; - try { - if (currentFile.metadata.thumbnailID) { - yield Thumbnail.deleteOne({ _id: currentFile.metadata.thumbnailID }); - } - if (currentFile.metadata.isVideo && currentFile.metadata.transcoded) { - try { - yield videoBucket.delete(ObjectID(currentFile.metadata.transcodedID)); - } - catch (e) { - console.log("Cannot Find Transcoded Video"); - } - } - yield bucket.delete(ObjectID(currentFile._id)); - } - catch (e) { - console.log("Could Not Remove File", currentFile.filename, currentFile._id); - } - } - }); - this.getFolderInfo = (userID, folderID) => __awaiter(this, void 0, void 0, function* () { - let currentFolder = yield utilsFolder.getFolderInfo(folderID, userID); - if (!currentFolder) - throw new NotFoundError("Folder Info Not Found Error"); - const parentID = currentFolder.parent; - let parentName = ""; - if (parentID === "/") { - parentName = "Home"; - } - else { - const parentFolder = yield utilsFolder.getFolderInfo(parentID, userID); - if (parentFolder) { - parentName = parentFolder.name; - } - else { - parentName = "Unknown"; - } - } - const folderName = currentFolder.name; - currentFolder = Object.assign(Object.assign({}, currentFolder._doc), { parentName, folderName }); - // Must Use ._doc here, or the destucturing/spreading - // Will add a bunch of unneeded variables to the object. - return currentFolder; - }); - this.getFolderSublist = (userID, folderID) => __awaiter(this, void 0, void 0, function* () { - const folder = yield utilsFolder.getFolderInfo(folderID, userID); - if (!folder) - throw new NotFoundError("Folder Sublist Not Found Error"); - const subfolderList = folder.parentList; - let folderIDList = []; - let folderNameList = []; - for (let i = 0; i < subfolderList.length; i++) { - const currentSubFolderID = subfolderList[i]; - if (currentSubFolderID === "/") { - folderIDList.push("/"); - folderNameList.push("Home"); - } - else { - const currentFolder = yield utilsFolder.getFolderInfo(currentSubFolderID, userID); - folderIDList.push(currentFolder._id); - folderNameList.push(currentFolder.name); - } - } - folderIDList.push(folderID); - folderNameList.push(folder.name); - return { - folderIDList, - folderNameList - }; - }); - this.getFolderList = (userID, query) => __awaiter(this, void 0, void 0, function* () { - let searchQuery = query.search || ""; - const parent = query.parent || "/"; - let sortBy = query.sortby || "DEFAULT"; - sortBy = sortBySwitch(sortBy); - if (searchQuery.length === 0) { - const folderList = yield utilsFolder.getFolderListByParent(userID, parent, sortBy); - if (!folderList) - throw new NotFoundError("Folder List Not Found Error"); - return folderList; - } - else { - searchQuery = new RegExp(searchQuery, 'i'); - const folderList = yield utilsFolder.getFolderListBySearch(userID, searchQuery, sortBy); - if (!folderList) - throw new NotFoundError("Folder List Not Found Error"); - return folderList; - } - }); - this.renameFolder = (userID, folderID, title) => __awaiter(this, void 0, void 0, function* () { - const folder = yield utilsFolder.renameFolder(folderID, userID, title); - if (!folder) - throw new NotFoundError("Rename Folder Not Found"); - }); - this.moveFolder = (userID, folderID, parentID) => __awaiter(this, void 0, void 0, function* () { - let parentList = ["/"]; - if (parentID.length !== 1) { - const parentFile = yield utilsFolder.getFolderInfo(parentID, userID); - parentList = parentFile.parentList; - parentList.push(parentID); - } - const folder = yield utilsFolder.moveFolder(folderID, userID, parentID, parentList); - if (!folder) - throw new NotFoundError("Move Folder Not Found"); - const folderChilden = yield utilsFolder.findAllFoldersByParent(folderID.toString(), userID); - folderChilden.map((currentFolderChild) => __awaiter(this, void 0, void 0, function* () { - let currentFolderChildParentList = currentFolderChild.parentList; - const indexOfFolderID = currentFolderChildParentList.indexOf(folderID.toString()); - currentFolderChildParentList = currentFolderChildParentList.splice(indexOfFolderID); - currentFolderChildParentList = [...parentList, ...currentFolderChildParentList]; - currentFolderChild.parentList = currentFolderChildParentList; - yield currentFolderChild.save(); - })); - const fileChildren = yield utilsFile.getFileListByParent(userID, folderID.toString()); - fileChildren.map((currentFileChild) => __awaiter(this, void 0, void 0, function* () { - let currentFileChildParentList = currentFileChild.metadata.parentList; - currentFileChildParentList = currentFileChildParentList.split(","); - const indexOfFolderID = currentFileChildParentList.indexOf(folderID.toString()); - currentFileChildParentList = currentFileChildParentList.splice(indexOfFolderID); - currentFileChildParentList = [...parentList, ...currentFileChildParentList]; - yield utilsFile.moveFile(currentFileChild._id, userID, currentFileChild.metadata.parent, currentFileChildParentList.toString()); - })); - }); -}; -module.exports = FolderService; diff --git a/dist/services/UserService/index.js b/dist/services/UserService/index.js deleted file mode 100644 index 89b6d61..0000000 --- a/dist/services/UserService/index.js +++ /dev/null @@ -1,66 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const user_1 = __importDefault(require("../../models/user")); -const bcrypt = require("bcrypt"); -const crypto = require("crypto"); -const NotFoundError = require("../../utils/NotFoundError"); -const InternalServerError = require("../../utils/InternalServerError"); -const NotAuthorizedError = require("../../utils/NotAuthorizedError"); -const UserService = function () { - this.login = (userData) => __awaiter(this, void 0, void 0, function* () { - const email = userData.email; - const password = userData.password; - const user = yield user_1.default.findByCreds(email, password); - const token = yield user.generateAuthToken(); - if (!user || !token) - throw new NotFoundError("Login User Not Found Error"); - return { user, token }; - }); - this.logout = (user, userToken) => __awaiter(this, void 0, void 0, function* () { - user.tokens = user.tokens.filter((token) => { - return token.token !== userToken; - }); - yield user.save(); - }); - this.logoutAll = (user) => __awaiter(this, void 0, void 0, function* () { - user.tokens = []; - user.tempTokens = []; - yield user.save(); - }); - this.create = (userData) => __awaiter(this, void 0, void 0, function* () { - console.log("Create"); - const user = new user_1.default(userData); - yield user.save(); - yield user.generateEncryptionKeys(); - const token = yield user.generateAuthToken(); - if (!user || !token) - throw new InternalServerError("Could Not Create New User Error"); - return { user, token }; - }); - this.changePassword = (user, oldPassword, newPassword) => __awaiter(this, void 0, void 0, function* () { - const isMatch = yield bcrypt.compare(oldPassword, user.password); - if (!isMatch) - throw new NotAuthorizedError("Change Passwords Do Not Match Error"); - const encryptionKey = user.getEncryptionKey(); - user.password = newPassword; - user.tokens = []; - user.tempTokens = []; - yield user.save(); - yield user.changeEncryptionKey(encryptionKey); - const newToken = yield user.generateAuthToken(); - return newToken; - }); -}; -module.exports = UserService; diff --git a/dist/test.js b/dist/test.js deleted file mode 100644 index 3918c74..0000000 --- a/dist/test.js +++ /dev/null @@ -1 +0,0 @@ -"use strict"; diff --git a/dist/utils/InternalServerError.js b/dist/utils/InternalServerError.js deleted file mode 100644 index b54404a..0000000 --- a/dist/utils/InternalServerError.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -class InternalServerError extends Error { - constructor(args) { - super(args); - this.code = 500; - } -} -module.exports = InternalServerError; diff --git a/dist/utils/NotAuthorizedError.js b/dist/utils/NotAuthorizedError.js deleted file mode 100644 index 05c85c6..0000000 --- a/dist/utils/NotAuthorizedError.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -class NotAuthorizedError extends Error { - constructor(args) { - super(args); - this.code = 401; - } -} -module.exports = NotAuthorizedError; diff --git a/dist/utils/NotFoundError.js b/dist/utils/NotFoundError.js deleted file mode 100644 index daddb1c..0000000 --- a/dist/utils/NotFoundError.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -class NotFoundError extends Error { - constructor(args) { - super(args); - this.code = 404; - } -} -module.exports = NotFoundError; diff --git a/dist/utils/createError.js b/dist/utils/createError.js deleted file mode 100644 index e19bcc0..0000000 --- a/dist/utils/createError.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -const createError = (message, code, exception) => { - let error = new Error(message); - error.message = message; - error.code = code; - error.exception = exception; - throw error; -}; -module.exports = createError; diff --git a/dist/utils/createQuery.js b/dist/utils/createQuery.js deleted file mode 100644 index 594d1dd..0000000 --- a/dist/utils/createQuery.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -const createQuery = (owner, parent, sortBy, startAt, startAtDate, searchQuery, startAtName) => { - let query = { "metadata.owner": owner }; - if (searchQuery !== "") { - searchQuery = new RegExp(searchQuery, 'i'); - query = Object.assign(Object.assign({}, query), { filename: searchQuery }); - } - else { - query = Object.assign(Object.assign({}, query), { "metadata.parent": parent }); - } - if (startAt) { - if (sortBy === "date_desc" || sortBy === "DEFAULT") { - query = Object.assign(Object.assign({}, query), { "uploadDate": { $lt: new Date(startAtDate) } }); - } - else if (sortBy === "date_asc") { - query = Object.assign(Object.assign({}, query), { "uploadDate": { $gt: new Date(startAtDate) } }); - } - else if (sortBy === "alp_desc") { - query = Object.assign(Object.assign({}, query), { "filename": { $lt: startAtName } }); - } - else { - query = Object.assign(Object.assign({}, query), { "filename": { $gt: startAtName } }); - } - } - return query; -}; -module.exports = createQuery; diff --git a/dist/utils/imageChecker.js b/dist/utils/imageChecker.js deleted file mode 100644 index 7426a09..0000000 --- a/dist/utils/imageChecker.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const imageExtList = [ - "jpeg", - "jpg", - "png", - "gif", - "svg", - "tiff", - "bmp" -]; -const imageChecker = (filename) => { - if (filename.length < 1 || !filename.includes(".")) { - return false; - } - const extSplit = filename.split("."); - if (extSplit.length <= 1) { - return false; - } - const ext = extSplit[extSplit.length - 1]; - return imageExtList.includes(ext.toLowerCase()); -}; -exports.default = imageChecker; diff --git a/dist/utils/mobileCheck.js b/dist/utils/mobileCheck.js deleted file mode 100644 index 5926377..0000000 --- a/dist/utils/mobileCheck.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const mobilecheck = () => { - var check = false; - (function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) - check = true; })(navigator.userAgent || navigator.vendor || window.opera); - return check; -}; -exports.default = mobilecheck; diff --git a/dist/utils/sortBySwitch.js b/dist/utils/sortBySwitch.js deleted file mode 100644 index 08b6927..0000000 --- a/dist/utils/sortBySwitch.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -const sortBySwitch = (sortBy) => { - switch (sortBy) { - case "alp_asc": - return { filename: 1 }; - case "alp_desc": - return { filename: -1 }; - case "date_asc": - return { uploadDate: 1 }; - default: - return { uploadDate: -1 }; - } -}; -module.exports = sortBySwitch; diff --git a/dist/utils/sortBySwitchFolder.js b/dist/utils/sortBySwitchFolder.js deleted file mode 100644 index 01f8cd2..0000000 --- a/dist/utils/sortBySwitchFolder.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -const sortBySwitch = (sortBy) => { - switch (sortBy) { - case "alp_asc": - return { name: 1 }; - case "alp_desc": - return { name: -1 }; - case "date_asc": - return { createdAt: 1 }; - default: - return { createdAt: -1 }; - } -}; -module.exports = sortBySwitch; diff --git a/dist/utils/streamToBuffer.js b/dist/utils/streamToBuffer.js deleted file mode 100644 index df36dd5..0000000 --- a/dist/utils/streamToBuffer.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const streamToBuffer = (stream) => { - const chunks = []; - return new Promise((resolve, reject) => { - stream.on('data', (chunk) => chunks.push(chunk)); - stream.on('error', reject); - stream.on('end', () => resolve(Buffer.concat(chunks))); - }); -}; -exports.default = streamToBuffer; diff --git a/dist/utils/streamToStrings.js b/dist/utils/streamToStrings.js deleted file mode 100644 index 2446b3c..0000000 --- a/dist/utils/streamToStrings.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const streamToString = (stream) => { - const chunks = []; - return new Promise((resolve, reject) => { - stream.on('data', (chunk) => chunks.push(chunk)); - stream.on('error', reject); - stream.on('end', () => resolve(Buffer.concat(chunks))); - }); -}; -exports.default = streamToString; diff --git a/dist/utils/videoChecker.js b/dist/utils/videoChecker.js deleted file mode 100644 index 2af56bd..0000000 --- a/dist/utils/videoChecker.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const videoExtList = [ - "3g2", - "3gp", - "aaf", - "asf", - "avchd", - "avi", - "drc", - "flv", - "m2v", - "m4p", - "m4v", - "mkv", - "mng", - "mov", - "mp2", - "mp4", - "mpe", - "mpeg", - "mpg", - "mpv", - "mxf", - "nsv", - "ogg", - "ogv", - "qt", - "rm", - "rmvb", - "roq", - "svi", - "vob", - "webm", - "wmv", - "yuv" -]; -const videoChecker = (filename) => { - if (filename.length < 1 || !filename.includes(".")) { - return false; - } - const extSplit = filename.split("."); - if (extSplit.length <= 1) { - return false; - } - const ext = extSplit[extSplit.length - 1]; - return videoExtList.includes(ext.toLowerCase()); -}; -exports.default = videoChecker;