const express = require("express"); const axios = require("axios"); //Local Imports & Configs const asUser = require("../api/user"); const upload = require("../api/upload"); const storage = require("../api/storage"); const config = require("../config.json"); //Establish path and create router /** Absolute Router Path /api/stash*/ const router = express.Router(); const cairoMiddleware = (req, res, next) => { if (req.token == null) return next(); else axios .get(config.Server.authServer, { headers: { authorization: `Bearer ${req.token}` }, }) .then((authRes) => { if (authRes.status !== 200) return res.status(authres.status); if (authRes.data != null && authRes.data.uuid != null) { asUser.load(authRes.data.uuid).then((user) => { req.user = user; next(); }); } else res.status(500).json(authRes.data); }) .catch((e) => { if (e.response != null) res.sendStatus(e.response.status); else res.sendStatus(500); }); }; router.use(cairoMiddleware); const authMiddleware = (req, res, next) => { if (req.token == null) return res.sendStatus(401); next(); }; router.get("/files", authMiddleware, (req, res) => asUser.getOwnedFiles(req.user._id).then((files) => { res.status(200).json(files); }) ); router.post("/upload", authMiddleware, (req, res) => { upload.userUpload(req, res, (err) => { if (err || req.file == null) return res.sendStatus(500); asUser.uploadFile(req.user._id, req.file).then((file) => { if (file != null) return res.json(file); upload.cancelUpload(req.file.path); return res.sendStatus(500); }); }); }); router.post("/delete", authMiddleware, (req, res) => { if (!req.body || !(req.body instanceof Array)) return res.sendStatus(400); asUser.deleteFiles(req.user._id, req.body).then((failed) => { if (!failed) return res.sendStatus(200); res.status(500).json(failed); }); }); router.get("/download", (req, res) => { if (!req.query || (!req.query.target && !req.query.zipTarget)) return res.sendStatus(404); const userId = req.user == null ? null : req.user._id; if (req.query.target) return storage.getFile(userId, req.query.target).then((file) => { if (file) return res.download(file.path); return res.sendStatus(404); }); return res.sendStatus(404); }); router.post("/public", authMiddleware, async (req, res) => { if (!req.body || !(req.body instanceof Array)) return res.sendStatus(400); const failed = asUser.publicfyFiles(req.user._id, req.body); if (!failed) return res.sendStatus(200); res.status(500).json(failed); }); module.exports = router;