From 10f632b8c00af45919fa62527eb73ccab56a1627 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Tue, 30 Jun 2020 10:32:25 -0400 Subject: [PATCH] Return file info in /files Closes #31 --- src/constants.ts | 44 +++++++++++++++++++++++++++++++++++++++++++ src/services/files.ts | 25 +++++++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/constants.ts diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000000..a7e45ce214 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,44 @@ +export const SYSTEM_ASSET_WHITELIST = [ + { + key: 'directus-small-crop', + width: 64, + height: 64, + fit: 'crop', + quality: 80, + }, + { + key: 'directus-small-contain', + width: 64, + height: 64, + fit: 'contain', + quality: 80, + }, + { + key: 'directus-medium-crop', + width: 300, + height: 300, + fit: 'crop', + quality: 80, + }, + { + key: 'directus-medium-contain', + width: 300, + height: 300, + fit: 'contain', + quality: 80, + }, + { + key: 'directus-large-crop', + width: 800, + height: 600, + fit: 'crop', + quality: 80, + }, + { + key: 'directus-large-contain', + width: 800, + height: 600, + fit: 'contain', + quality: 80, + }, +]; diff --git a/src/services/files.ts b/src/services/files.ts index 058822a5e6..3642513d17 100644 --- a/src/services/files.ts +++ b/src/services/files.ts @@ -9,6 +9,7 @@ import { parse as parseICC } from 'icc'; import parseEXIF from 'exif-reader'; import parseIPTC from '../utils/parse-iptc'; import path from 'path'; +import { SYSTEM_ASSET_WHITELIST } from '../constants'; export const createFile = async ( data: Record, @@ -54,7 +55,29 @@ export const readFiles = async (query: Query) => { }; export const readFile = async (pk: string | number, query: Query) => { - return await ItemsService.readItem('directus_files', pk, query); + const file = await ItemsService.readItem('directus_files', pk, query); + + const { asset_allowlist: assetAllowlist } = + (await database.select('asset_allowlist').from('directus_settings').first()) || {}; + + const assetSizes = [...SYSTEM_ASSET_WHITELIST, ...(assetAllowlist || [])]; + + file.links = { + asset_url: new URL(`/assets/${file.id}`, process.env.PUBLIC_URL), + /** @TODO confirm is public url is set before returning */ + original_url: new URL( + file.filename_disk, + process.env[`STORAGE_${file.storage.toUpperCase()}_PUBLIC_URL`] + ), + thumbnails: assetSizes.map((size) => { + return { + ...size, + url: new URL(`/assets/${file.id}?key=${size.key}`, process.env.PUBLIC_URL), + }; + }), + }; + + return file; }; // @todo Add query support