forked from andyburke/autonomous.contact
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
|
|
import * as CANNED_RESPONSES from '../../../utils/canned_responses.ts';
|
||
|
|
import * as fs from '@std/fs';
|
||
|
|
import * as path from '@std/path';
|
||
|
|
import * as media_types from '@std/media-types';
|
||
|
|
|
||
|
|
// GET /icons/:icon_path - get an icon from settings or from defaults
|
||
|
|
export async function GET(_request: Request, meta: Record<string, any>): Promise<Response> {
|
||
|
|
const filename = meta.params.icon_path;
|
||
|
|
if (!filename || filename.indexOf('..') !== -1) {
|
||
|
|
return CANNED_RESPONSES.not_found();
|
||
|
|
}
|
||
|
|
|
||
|
|
const settings_version_exists = fs.existsSync(`./files/settings/icons/${filename}`);
|
||
|
|
if (settings_version_exists) {
|
||
|
|
return new Response(null, {
|
||
|
|
status: 301,
|
||
|
|
headers: {
|
||
|
|
Location: `/files/settings/icons/${filename}`
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const default_version_exists = fs.existsSync(`./icons/${filename}`);
|
||
|
|
if (default_version_exists) {
|
||
|
|
const extension = path.extname(filename)?.slice(1)?.toLowerCase() ?? '';
|
||
|
|
|
||
|
|
const content_type = media_types.contentType(extension) ?? 'application/octet-stream';
|
||
|
|
return new Response(await Deno.readFile(`./icons/${filename}`), {
|
||
|
|
headers: {
|
||
|
|
'Content-Type': content_type
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
return CANNED_RESPONSES.not_found();
|
||
|
|
}
|