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