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(`${process.env.CAIRO_URL}/api/user/info`, { headers: { authorization: `Bearer ${req.token}` }, }) .then((authRes) => { if (authRes.data && authRes.data.id) { asUser.load(authRes.data.id).then((user) => { req.user = user; next(); }); } else res.status(500).json(authRes.data); }) .catch((e) => { if (e.response) return res .status(401) .send(`Auth server responded with: ${e.response.status}`); console.error(e); res.sendStatus(500); }); }; const authMiddleware = (req, res, next) => { if (req.token == null) return res.sendStatus(401); next(); }; router.use(cairoMiddleware); router.get("/files", authMiddleware, (req, res) => asUser.getOwnedFiles(req.user.cairoId, req.user.owned).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.cairoId, 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.cairoId, 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.cairoId; 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.cairoId, req.body); if (!failed) return res.sendStatus(200); res.status(500).json(failed); }); module.exports = router;