UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

84 lines (64 loc) 1.75 kB
import asyncRouteWithLockCleanupHandler from '../asyncRouteWithLockCleanupHandler.js'; import ProfileResultStatus from './profiles/ProfileResultStatus.js'; /** @typedef {import('../../src/getAppConfig.js').DevCmsConfig} DevCmsConfig */ /** * @param {DevCmsConfig} config */ export default function configureProfileAvatarGetRouteHandler(config) { return asyncRouteWithLockCleanupHandler(async (_acquireLock, 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); const profileResult = await req.repositories.profile.getProfile( req.cms, currentSession, profileId, ); 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; } // TODO: Make this work with memory store as well. const filePath = req.cms.getPathInFilesystemSync( avatarPath, editSessionToken, ); if (filePath) { res.sendFile(filePath, { cacheControl: !config.cacheControlDisabled, maxAge: config.cacheControlMaxAge, }); } else { res.status(404).end(); } }); }