UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

86 lines (67 loc) 1.82 kB
import ProfileDatabase from './profiles/ProfileDatabase.js'; import ProfileResultStatus from './profiles/ProfileResultStatus.js'; /** @typedef {import('../../src/getAppConfig.js').DevCmsConfig} DevCmsConfig */ /** @typedef {import('./profiles/ProfileDatabase.js')} ProfileDatabase */ /** * @param {ProfileDatabase} profileDatabase * @param {DevCmsConfig} config */ export default function configureProfileAvatarGetRouteHandler( profileDatabase, config ) { return (req, res) => { const stringContext = req.query.context; if (!stringContext) { res.status(400).end(); return; } const context = JSON.parse(stringContext); const editSessionToken = context.editSessionToken; if (!editSessionToken) { res.status(400).end(); return; } const profileId = req.query.profileId; if (!profileId) { res.status(400).end(); return; } const variant = req.query.variant; if (!variant) { res.status(400).end(); return; } const currentSession = req.getFontoSession(editSessionToken); profileDatabase .getProfile(req.cms, currentSession, profileId) .then((profileResult) => { if (profileResult.status === ProfileResultStatus.NOT_FOUND) { res.status(404).end(); return; } const avatars = profileResult.profile.avatars; if (!avatars) { res.status(404).end(); return; } const avatarPath = avatars[variant]; if (!avatarPath) { res.status(404).end(); return; } const filePath = req.cms.getPath(avatarPath, editSessionToken); if (filePath) { res.sendFile(filePath, { cacheControl: !config.cacheControlDisabled, maxAge: config.cacheControlMaxAge, }); } else { res.status(404).end(); } }) .catch((_error) => { res.status(500).end(); }); }; }