1
0

api.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const fs = require('fs');
  2. const Security = require('../src/security.js');
  3. const MediaService = require('../model/mediaService.js');
  4. module.exports = { register: app => {
  5. app.router.get("/api/access/list", (req, res) => {
  6. app.routerUtils.onApiRequest(req, res);
  7. app.routerUtils.jsonResponse(res, req.accessList);
  8. });
  9. app.router.post("/api/access/link", async (req, res) => { // /api/access/link, post: { linkId: string }
  10. app.routerUtils.onApiRequest(req, res);
  11. if (!req.post?.linkId?.length)
  12. return app.routerUtils.httpResponse(res, 400, "Missing argument");
  13. let access = Security.addLinkToSession(req, req.post.linkId);
  14. app.routerUtils.jsonResponse(res, access);
  15. });
  16. app.router.del("/api/access/:id", (req, res) => {
  17. app.routerUtils.onApiRequest(req, res);
  18. Security.removeFromSession(req, req.params.id);
  19. let access = Security.getAccessList(req.cookies);
  20. app.routerUtils.jsonResponse(res, access);
  21. });
  22. app.router.get("/api/media/list", async (req, res) => {
  23. app.routerUtils.onApiRequest(req, res);
  24. app.routerUtils.jsonResponse(res, {
  25. data: await MediaService.fetchMediasWithAccess(app, 0, 50, req.accessList)
  26. });
  27. });
  28. app.router.get("/api/media/thumbnail/:md5sum.png", async (req, res) => {
  29. app.routerUtils.onApiRequest(req, res);
  30. let data = await MediaService.fetchOne(app, req.params.md5sum, req.accessList);
  31. if (!data)
  32. return app.routerUtils.onPageNotFound(res);
  33. try {
  34. let thumbnail = await (await app.libraryManager.findMedia(data.path))?.createThumbnail(req.body?.w || 0, req.body?.h || 0);
  35. if (!thumbnail)
  36. return app.routerUtils.onPageNotFound(res);
  37. res.setHeader("Content-Type", "image/png");
  38. res.setHeader("Content-Length", fs.statSync(thumbnail.name)?.size || undefined);
  39. res.setHeader("Cache-Control", "private, max-age=2630000"); // 1 month cache
  40. let rd = fs.createReadStream(thumbnail.name);
  41. rd.once('end', () => thumbnail.removeCallback());
  42. rd.pipe(res);
  43. }
  44. catch (err) {
  45. console.error(err);
  46. app.routerUtils.onPageNotFound(res);
  47. }
  48. });
  49. }};