Files
myDrive/backend/controllers/file.js
T

576 lines
11 KiB
JavaScript

const FileService = require("../services/FileService")
const fileService = new FileService()
class FileController {
constructor() {
}
async getThumbnail(req, res) {
if (!req.user) {
return;
}
try {
const user = req.user;
const id = req.params.id;
const decryptedThumbnail = await fileService.getThumbnail(user, id);
res.send(decryptedThumbnail);
} catch (e) {
const code = e.code || 500;
console.log(e);
res.status(code).send();
}
}
async getFullThumbnail(req, res) {
if (!req.user) {
return;
}
try {
const user = req.user;
const fileID = req.params.id;
await fileService.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, res) {
if (!req.user) {
return
}
try {
const user = req.user;
const busboy = req.busboy;
req.pipe(busboy);
const file = await fileService.upload(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, res) {
try {
const ID = req.params.id;
const tempToken = req.params.tempToken;
await fileService.publicDownload(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, res) {
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, res) {
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, res) {
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, res) {
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, res) {
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, res) {
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, res) {
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, res) {
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, res) {
if (!req.user) {
return
}
try {
const user = req.user;
const cookie = req.headers.uuid
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, res) {
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, res) {
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, res) {
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, res) {
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, res) {
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 fileService.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, res) {
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);
} catch (e) {
const code = e.code || 500;
const message = e.message || e;
console.log(message, e);
res.status(code).send();
}
}
async getSuggestedList(req, res) {
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, res) {
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, res) {
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, res) {
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()
}
}
}
module.exports = FileController;