const fs = require('fs'); const Security = require('../src/security.js'); const MediaService = require('../model/mediaService.js'); module.exports = { register: app => { app.router.get("/api/access/list", (req, res) => { app.routerUtils.onApiRequest(req, res); app.routerUtils.jsonResponse(res, req.accessList); }); app.router.post("/api/access/link", async (req, res) => { // /api/access/link, post: { linkId: string } app.routerUtils.onApiRequest(req, res); if (!req.post?.linkId?.length) return app.routerUtils.httpResponse(res, 400, "Missing argument"); let access = Security.addLinkToSession(req, req.post.linkId); app.routerUtils.jsonResponse(res, access); }); app.router.del("/api/access/:id", (req, res) => { app.routerUtils.onApiRequest(req, res); Security.removeFromSession(req, req.params.id); let access = Security.getAccessList(req.cookies); app.routerUtils.jsonResponse(res, access); }); app.router.get("/api/media/list", async (req, res) => { app.routerUtils.onApiRequest(req, res); app.routerUtils.jsonResponse(res, { data: await MediaService.fetchMediasWithAccess(app, 0, 50, req.accessList) }); }); app.router.get("/api/media/thumbnail/:md5sum.png", async (req, res) => { app.routerUtils.onApiRequest(req, res); let data = await MediaService.fetchOne(app, req.params.md5sum, req.accessList); if (!data) return app.routerUtils.onPageNotFound(res); try { let thumbnail = await (await app.libraryManager.findMedia(data.path))?.createThumbnail(req.body?.w || 0, req.body?.h || 0); if (!thumbnail) return app.routerUtils.onPageNotFound(res); res.setHeader("Content-Type", "image/png"); res.setHeader("Content-Length", fs.statSync(thumbnail.name)?.size || undefined); res.setHeader("Cache-Control", "private, max-age=2630000"); // 1 month cache let rd = fs.createReadStream(thumbnail.name); rd.once('end', () => thumbnail.removeCallback()); rd.pipe(res); } catch (err) { console.error(err); app.routerUtils.onPageNotFound(res); } }); }};