From 236d29d0783f87d3693ee44f8524fedfc665fd17 Mon Sep 17 00:00:00 2001 From: Tanya Byrne Date: Mon, 24 Aug 2020 15:39:51 +0100 Subject: [PATCH] adding to all gets when fetching add ?TTL=600&dTTL=600 for use the cache --- api/src/controllers/fields.ts | 1 + api/src/controllers/files.ts | 16 ++++++--- api/src/controllers/folders.ts | 3 ++ api/src/controllers/items.ts | 2 ++ api/src/controllers/permissions.ts | 12 ++++--- api/src/controllers/presets.ts | 3 ++ api/src/controllers/relations.ts | 3 ++ api/src/controllers/revisions.ts | 2 ++ api/src/controllers/roles.ts | 3 ++ api/src/controllers/settings.ts | 2 ++ api/src/controllers/users.ts | 58 +++++++++++++++++------------- 11 files changed, 72 insertions(+), 33 deletions(-) diff --git a/api/src/controllers/fields.ts b/api/src/controllers/fields.ts index bb856e0f64..8e2db001b3 100644 --- a/api/src/controllers/fields.ts +++ b/api/src/controllers/fields.ts @@ -47,6 +47,7 @@ router.get( '/:collection/:field', validateCollection, useCollection('directus_fields'), + cacheMiddleware, asyncHandler(async (req, res) => { const service = new FieldsService({ accountability: req.accountability }); diff --git a/api/src/controllers/files.ts b/api/src/controllers/files.ts index a7acc7ddab..05451ae126 100644 --- a/api/src/controllers/files.ts +++ b/api/src/controllers/files.ts @@ -4,6 +4,7 @@ import Busboy from 'busboy'; import sanitizeQuery from '../middleware/sanitize-query'; import FilesService from '../services/files'; import MetaService from '../services/meta'; +import cacheMiddleware from '../middleware/cache'; import useCollection from '../middleware/use-collection'; import { File, PrimaryKey } from '../types'; import formatTitle from '@directus/format-title'; @@ -67,7 +68,11 @@ const multipartHandler = asyncHandler(async (req, res, next) => { storage: payload.storage || disk, }; - const primaryKey = await service.upload(fileStream, payloadWithRequiredFields, existingPrimaryKey); + const primaryKey = await service.upload( + fileStream, + payloadWithRequiredFields, + existingPrimaryKey + ); savedFiles.push(primaryKey); tryDone(); }); @@ -112,7 +117,7 @@ router.post( ); const importSchema = Joi.object({ - url: Joi.string().required() + url: Joi.string().required(), }); router.post( @@ -128,7 +133,7 @@ router.post( const service = new FilesService({ accountability: req.accountability }); const fileResponse = await axios.get(req.body.url, { - responseType: 'stream' + responseType: 'stream', }); const parsedURL = url.parse(fileResponse.request.res.responseUrl); @@ -139,7 +144,7 @@ router.post( storage: (env.STORAGE_LOCATIONS as string).split(',')[0].trim(), type: fileResponse.headers['content-type'], title: formatTitle(filename), - ...req.body + ...req.body, }; delete payload.url; @@ -148,11 +153,12 @@ router.post( const record = await service.readByKey(primaryKey, req.sanitizedQuery); return res.json({ data: record || null }); }) -) +); router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new FilesService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); diff --git a/api/src/controllers/folders.ts b/api/src/controllers/folders.ts index e27640a392..a74c506dca 100644 --- a/api/src/controllers/folders.ts +++ b/api/src/controllers/folders.ts @@ -2,6 +2,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import FoldersService from '../services/folders'; import MetaService from '../services/meta'; @@ -23,6 +24,7 @@ router.post( router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new FoldersService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); @@ -37,6 +39,7 @@ router.get( router.get( '/:pk', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new FoldersService({ accountability: req.accountability }); const record = await service.readByKey(req.params.pk, req.sanitizedQuery); diff --git a/api/src/controllers/items.ts b/api/src/controllers/items.ts index 9dc11f8596..e1dfda8c4d 100644 --- a/api/src/controllers/items.ts +++ b/api/src/controllers/items.ts @@ -2,6 +2,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import ItemsService from '../services/items'; import sanitizeQuery from '../middleware/sanitize-query'; +import cacheMiddleware from '../middleware/cache'; import collectionExists from '../middleware/collection-exists'; import MetaService from '../services/meta'; import { RouteNotFoundException } from '../exceptions'; @@ -29,6 +30,7 @@ router.get( '/:collection', collectionExists, sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new ItemsService(req.collection, { accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); diff --git a/api/src/controllers/permissions.ts b/api/src/controllers/permissions.ts index f93d35064e..2799c47b48 100644 --- a/api/src/controllers/permissions.ts +++ b/api/src/controllers/permissions.ts @@ -3,6 +3,7 @@ import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; import PermissionsService from '../services/permissions'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import MetaService from '../services/meta'; import { InvalidCredentialsException } from '../exceptions'; @@ -24,6 +25,7 @@ router.post( router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new PermissionsService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); @@ -38,6 +40,7 @@ router.get( router.get( '/me', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { if (!req.accountability?.user || !req.accountability?.role) { throw new InvalidCredentialsException(); @@ -49,19 +52,20 @@ router.get( query.filter = { ...(query.filter || {}), role: { - _eq: req.accountability.role - } - } + _eq: req.accountability.role, + }, + }; const items = await service.readByQuery(req.sanitizedQuery); return res.json({ data: items || null }); }) -) +); router.get( '/:pk', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new PermissionsService({ accountability: req.accountability }); const record = await service.readByKey(Number(req.params.pk), req.sanitizedQuery); diff --git a/api/src/controllers/presets.ts b/api/src/controllers/presets.ts index f1e4f69bd5..f4467c280c 100644 --- a/api/src/controllers/presets.ts +++ b/api/src/controllers/presets.ts @@ -2,6 +2,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import PresetsService from '../services/presets'; import MetaService from '../services/meta'; @@ -23,6 +24,7 @@ router.post( router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new PresetsService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); @@ -37,6 +39,7 @@ router.get( router.get( '/:pk', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new PresetsService({ accountability: req.accountability }); const record = await service.readByKey(req.params.pk, req.sanitizedQuery); diff --git a/api/src/controllers/relations.ts b/api/src/controllers/relations.ts index a890ea8926..43c029e75c 100644 --- a/api/src/controllers/relations.ts +++ b/api/src/controllers/relations.ts @@ -2,6 +2,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import RelationsService from '../services/relations'; import MetaService from '../services/meta'; @@ -23,6 +24,7 @@ router.post( router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new RelationsService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); @@ -37,6 +39,7 @@ router.get( router.get( '/:pk', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new RelationsService({ accountability: req.accountability }); const record = await service.readByKey(req.params.pk, req.sanitizedQuery); diff --git a/api/src/controllers/revisions.ts b/api/src/controllers/revisions.ts index 1b278e8df7..7e6268371c 100644 --- a/api/src/controllers/revisions.ts +++ b/api/src/controllers/revisions.ts @@ -2,6 +2,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import RevisionsService from '../services/revisions'; import MetaService from '../services/meta'; @@ -26,6 +27,7 @@ router.get( '/:pk', useCollection('directus_revisions'), sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new RevisionsService({ accountability: req.accountability }); const record = await service.readByKey(req.params.pk, req.sanitizedQuery); diff --git a/api/src/controllers/roles.ts b/api/src/controllers/roles.ts index d85777b6ae..8296c54fe6 100644 --- a/api/src/controllers/roles.ts +++ b/api/src/controllers/roles.ts @@ -2,6 +2,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import RolesService from '../services/roles'; import MetaService from '../services/meta'; @@ -23,6 +24,7 @@ router.post( router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new RolesService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); @@ -37,6 +39,7 @@ router.get( router.get( '/:pk', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new RolesService({ accountability: req.accountability }); const record = await service.readByKey(req.params.pk, req.sanitizedQuery); diff --git a/api/src/controllers/settings.ts b/api/src/controllers/settings.ts index 6903c4ae3c..f1ae0713f7 100644 --- a/api/src/controllers/settings.ts +++ b/api/src/controllers/settings.ts @@ -1,6 +1,7 @@ import express from 'express'; import asyncHandler from 'express-async-handler'; import sanitizeQuery from '../middleware/sanitize-query'; +import cacheMiddleware from '../middleware/cache'; import useCollection from '../middleware/use-collection'; import SettingsService from '../services/settings'; @@ -10,6 +11,7 @@ router.get( '/', useCollection('directus_settings'), sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new SettingsService({ accountability: req.accountability }); const records = await service.readSingleton(req.sanitizedQuery); diff --git a/api/src/controllers/users.ts b/api/src/controllers/users.ts index acc61e2cf6..bb4688adef 100644 --- a/api/src/controllers/users.ts +++ b/api/src/controllers/users.ts @@ -4,6 +4,7 @@ import sanitizeQuery from '../middleware/sanitize-query'; import Joi from 'joi'; import { InvalidPayloadException, InvalidCredentialsException } from '../exceptions'; import useCollection from '../middleware/use-collection'; +import cacheMiddleware from '../middleware/cache'; import UsersService from '../services/users'; import MetaService from '../services/meta'; import AuthService from '../services/authentication'; @@ -26,6 +27,7 @@ router.post( router.get( '/', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new UsersService({ accountability: req.accountability }); const metaService = new MetaService({ accountability: req.accountability }); @@ -40,6 +42,7 @@ router.get( router.get( '/me', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { if (!req.accountability?.user) { throw new InvalidCredentialsException(); @@ -55,6 +58,7 @@ router.get( router.get( '/:pk', sanitizeQuery, + cacheMiddleware, asyncHandler(async (req, res) => { const service = new UsersService({ accountability: req.accountability }); const items = await service.readByKey(req.params.pk, req.sanitizedQuery); @@ -153,38 +157,44 @@ router.post( }) ); -router.post('/me/tfa/enable/', asyncHandler(async (req, res) => { - if (!req.accountability?.user) { - throw new InvalidCredentialsException(); - } +router.post( + '/me/tfa/enable/', + asyncHandler(async (req, res) => { + if (!req.accountability?.user) { + throw new InvalidCredentialsException(); + } - const service = new UsersService({ accountability: req.accountability }); - const url = await service.enableTFA(req.accountability.user); + const service = new UsersService({ accountability: req.accountability }); + const url = await service.enableTFA(req.accountability.user); - return res.json({ data: { otpauth_url: url }}); -})); + return res.json({ data: { otpauth_url: url } }); + }) +); -router.post('/me/tfa/disable', asyncHandler(async (req, res) => { - if (!req.accountability?.user) { - throw new InvalidCredentialsException(); - } +router.post( + '/me/tfa/disable', + asyncHandler(async (req, res) => { + if (!req.accountability?.user) { + throw new InvalidCredentialsException(); + } - if (!req.body.otp) { - throw new InvalidPayloadException(`"otp" is required`); - } + if (!req.body.otp) { + throw new InvalidPayloadException(`"otp" is required`); + } - const service = new UsersService({ accountability: req.accountability }); - const authService = new AuthService({ accountability: req.accountability }); + const service = new UsersService({ accountability: req.accountability }); + const authService = new AuthService({ accountability: req.accountability }); - const otpValid = await authService.verifyOTP(req.accountability.user, req.body.otp); + const otpValid = await authService.verifyOTP(req.accountability.user, req.body.otp); - if (otpValid === false) { - throw new InvalidPayloadException(`"otp" is invalid`); - } + if (otpValid === false) { + throw new InvalidPayloadException(`"otp" is invalid`); + } - await service.disableTFA(req.accountability.user); + await service.disableTFA(req.accountability.user); - return res.status(200).end(); -})); + return res.status(200).end(); + }) +); export default router;