32 lines
977 B
JavaScript
32 lines
977 B
JavaScript
const mongoose = require("../../src/db/mongoose");
|
|
const conn = mongoose.connection;
|
|
const crypto = require("crypto");
|
|
const fs = require("fs");
|
|
|
|
const createFile = (filename, filepath, metadata, user) => {
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const password = user.getEncryptionKey(); //process.env.KEY;
|
|
|
|
const initVect = metadata.IV || crypto.randomBytes(16);
|
|
|
|
const CIPHER_KEY = crypto.createHash('sha256').update(password).digest()
|
|
|
|
const cipher = crypto.createCipheriv('aes256', CIPHER_KEY, initVect);
|
|
|
|
const fileReadStream = fs.createReadStream(filepath);
|
|
|
|
let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
|
chunkSizeBytes: 1024 * 255
|
|
});
|
|
|
|
const uploadStream = bucket.openUploadStream(filename, {metadata});
|
|
|
|
fileReadStream.pipe(cipher).pipe(uploadStream).on("finish", (file) => {
|
|
|
|
resolve(file);
|
|
});
|
|
})
|
|
}
|
|
|
|
module.exports = createFile; |