Files
myDrive/dist/services/FileService/utils/createThumbnailFS.js
T

96 lines
5.4 KiB
JavaScript

"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;