@fontoxml/fontoxml-development-tools
Version:
Development tools for Fonto.
84 lines (64 loc) • 1.75 kB
JavaScript
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();
}
});
}