Browse Source

feat(nocodb): set cache header for attachment urls

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/5151/head
Pranav C 2 years ago
parent
commit
7ab3c6a61b
  1. 11
      packages/nocodb/src/lib/meta/api/attachmentApis.ts
  2. 13
      packages/nocodb/src/lib/meta/api/helpers/cacheHelpers.ts
  3. 1
      packages/nocodb/src/lib/meta/api/helpers/index.ts

11
packages/nocodb/src/lib/meta/api/attachmentApis.ts

@ -14,6 +14,7 @@ import catchError, { NcError } from '../helpers/catchError';
import NcPluginMgrv2 from '../helpers/NcPluginMgrv2';
import Local from '../../v1-legacy/plugins/adapters/storage/Local';
import { NC_ATTACHMENT_FIELD_SIZE } from '../../constants';
import { getCacheMiddleware } from './helpers';
const isUploadAllowed = async (req: Request, _res: Response, next: any) => {
if (!req['user']?.id) {
@ -161,7 +162,10 @@ export async function fileRead(req, res) {
const router = Router({ mergeParams: true });
router.get(/^\/dl\/([^/]+)\/([^/]+)\/(.+)$/, async (req, res) => {
router.get(
/^\/dl\/([^/]+)\/([^/]+)\/(.+)$/,
getCacheMiddleware(),
async (req, res) => {
try {
// const type = mimetypes[path.extname(req.params.fileName).slice(1)] || 'text/plain';
const type =
@ -186,7 +190,8 @@ router.get(/^\/dl\/([^/]+)\/([^/]+)\/(.+)$/, async (req, res) => {
} catch (e) {
res.status(404).send('Not found');
}
});
}
);
export function sanitizeUrlPath(paths) {
return paths.map((url) => url.replace(/[/.?#]+/g, '_'));
@ -217,6 +222,6 @@ router.post(
]
);
router.get(/^\/download\/(.+)$/, catchError(fileRead));
router.get(/^\/download\/(.+)$/, getCacheMiddleware(), catchError(fileRead));
export default router;

13
packages/nocodb/src/lib/meta/api/helpers/cacheHelpers.ts

@ -0,0 +1,13 @@
// return a middleware to set cache-control header
// default period is 30 days
export const getCacheMiddleware = (period: string | number = 2592000) => {
return async (req, res, next) => {
const { method } = req;
// only cache GET requests
if (method === 'GET') {
// set cache-control header
res.set('Cache-Control', `public, max-age=${period}`);
}
next();
};
};

1
packages/nocodb/src/lib/meta/api/helpers/index.ts

@ -1,5 +1,6 @@
import { populateMeta } from './populateMeta';
export * from './columnHelpers';
export * from './apiHelpers';
export * from './cacheHelpers';
export { populateMeta };

Loading…
Cancel
Save