This repository has been archived on 2024-08-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
nubian/src/routes/stash-route.js

87 lines
2.7 KiB
JavaScript
Raw Normal View History

2021-07-24 15:42:36 -06:00
const express = require("express");
const axios = require("axios");
2021-08-14 21:49:07 -06:00
// Local Imports & Configs
2021-07-24 15:42:36 -06:00
const asUser = require("../api/user");
const upload = require("../api/upload");
const storage = require("../api/storage");
2021-07-24 15:42:36 -06:00
const config = require("../config.json");
2021-08-14 21:49:07 -06:00
// Establish path and create router
// Absolute Router Path /api/stash
2021-07-24 15:42:36 -06:00
const router = express.Router();
const cairoMiddleware = (req, res, next) => {
if (req.token == null) return next();
else
axios
2021-08-21 22:52:19 -06:00
.get(`${process.env.CAIRO_PUBLIC_URL}/user/data`, {
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);
});
};
2021-07-24 15:42:36 -06:00
const authMiddleware = (req, res, next) => {
if (req.token == null) return res.sendStatus(401);
next();
2021-07-24 15:42:36 -06:00
};
router.use(cairoMiddleware);
2021-07-24 15:42:36 -06:00
router.get("/files", authMiddleware, (req, res) =>
2021-08-02 21:57:55 -06:00
asUser.getOwnedFiles(req.user.cairoId, req.user.owned).then((files) => {
res.status(200).json(files);
})
);
2021-07-24 15:42:36 -06:00
router.post("/upload", authMiddleware, (req, res) => {
upload.userUpload(req, res, (err) => {
if (err || req.file == null) return res.sendStatus(500);
2021-08-02 21:57:55 -06:00
asUser.uploadFile(req.user.cairoId, req.file).then((file) => {
if (file != null) return res.json(file);
2021-07-24 15:42:36 -06:00
upload.cancelUpload(req.file.path);
return res.sendStatus(500);
});
2021-07-24 15:42:36 -06:00
});
});
router.post("/delete", authMiddleware, (req, res) => {
if (!req.body || !(req.body instanceof Array)) return res.sendStatus(400);
2021-08-02 21:57:55 -06:00
asUser.deleteFiles(req.user.cairoId, req.body).then((failed) => {
if (!failed) return res.sendStatus(200);
res.status(500).json(failed);
});
2021-07-24 15:42:36 -06:00
});
router.get("/download", (req, res) => {
2021-07-24 15:42:36 -06:00
if (!req.query || (!req.query.target && !req.query.zipTarget))
return res.sendStatus(404);
2021-08-02 21:57:55 -06:00
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);
});
2021-07-24 15:42:36 -06:00
return res.sendStatus(404);
});
router.post("/public", authMiddleware, async (req, res) => {
if (!req.body || !(req.body instanceof Array)) return res.sendStatus(400);
2021-08-02 21:57:55 -06:00
const failed = asUser.publicfyFiles(req.user.cairoId, req.body);
2021-07-24 15:42:36 -06:00
if (!failed) return res.sendStatus(200);
res.status(500).json(failed);
});
module.exports = router;