From 9aa1f39add4a6a38322d794d291c6a5e6288b353 Mon Sep 17 00:00:00 2001 From: olav Date: Tue, 7 Jun 2022 09:32:18 +0200 Subject: [PATCH] refactor: always accept any content type for GET reqs (#1672) --- src/lib/routes/admin-api/archive.ts | 2 -- src/lib/routes/admin-api/feature.ts | 2 -- src/lib/routes/admin-api/project/features.ts | 5 ----- src/lib/routes/admin-api/project/variants.ts | 1 - src/lib/routes/controller.ts | 18 +++++++++++++----- 5 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/lib/routes/admin-api/archive.ts b/src/lib/routes/admin-api/archive.ts index 384626402d..95d4a91bb7 100644 --- a/src/lib/routes/admin-api/archive.ts +++ b/src/lib/routes/admin-api/archive.ts @@ -31,7 +31,6 @@ export default class ArchiveController extends Controller { this.route({ method: 'get', path: '/features', - acceptAnyContentType: true, handler: this.getArchivedFeatures, permission: NONE, middleware: [ @@ -46,7 +45,6 @@ export default class ArchiveController extends Controller { this.route({ method: 'get', path: '/features/:projectId', - acceptAnyContentType: true, handler: this.getArchivedFeaturesByProjectId, permission: NONE, middleware: [ diff --git a/src/lib/routes/admin-api/feature.ts b/src/lib/routes/admin-api/feature.ts index d9f2e73a2e..04758c5c00 100644 --- a/src/lib/routes/admin-api/feature.ts +++ b/src/lib/routes/admin-api/feature.ts @@ -69,7 +69,6 @@ class FeatureController extends Controller { this.route({ method: 'get', path: '', - acceptAnyContentType: true, handler: this.getAllToggles, permission: NONE, middleware: [ @@ -100,7 +99,6 @@ class FeatureController extends Controller { method: 'get', path: '/:featureName/tags', handler: this.listTags, - acceptAnyContentType: true, permission: NONE, middleware: [ openApiService.validPath({ diff --git a/src/lib/routes/admin-api/project/features.ts b/src/lib/routes/admin-api/project/features.ts index a28172e0a6..f873dc0c4a 100644 --- a/src/lib/routes/admin-api/project/features.ts +++ b/src/lib/routes/admin-api/project/features.ts @@ -86,7 +86,6 @@ export default class ProjectFeaturesController extends Controller { this.route({ method: 'get', path: PATH_ENV, - acceptAnyContentType: true, permission: NONE, handler: this.getEnvironment, middleware: [ @@ -130,7 +129,6 @@ export default class ProjectFeaturesController extends Controller { method: 'get', path: PATH_STRATEGIES, handler: this.getStrategies, - acceptAnyContentType: true, permission: NONE, middleware: [ openApiService.validPath({ @@ -160,7 +158,6 @@ export default class ProjectFeaturesController extends Controller { method: 'get', path: PATH_STRATEGY, handler: this.getStrategy, - acceptAnyContentType: true, permission: NONE, middleware: [ openApiService.validPath({ @@ -217,7 +214,6 @@ export default class ProjectFeaturesController extends Controller { this.route({ method: 'get', path: PATH, - acceptAnyContentType: true, handler: this.getFeatures, permission: NONE, middleware: [ @@ -263,7 +259,6 @@ export default class ProjectFeaturesController extends Controller { this.route({ method: 'get', path: PATH_FEATURE, - acceptAnyContentType: true, handler: this.getFeature, permission: NONE, middleware: [ diff --git a/src/lib/routes/admin-api/project/variants.ts b/src/lib/routes/admin-api/project/variants.ts index 6d25c5355d..b798d353d0 100644 --- a/src/lib/routes/admin-api/project/variants.ts +++ b/src/lib/routes/admin-api/project/variants.ts @@ -42,7 +42,6 @@ export default class VariantsController extends Controller { method: 'get', path: PREFIX, permission: NONE, - acceptAnyContentType: true, handler: this.getVariants, middleware: [ openApiService.validPath({ diff --git a/src/lib/routes/controller.ts b/src/lib/routes/controller.ts index 923c8945d7..fc1f3ac485 100644 --- a/src/lib/routes/controller.ts +++ b/src/lib/routes/controller.ts @@ -18,16 +18,25 @@ interface IRequestHandler< ): Promise | void; } -interface IRouteOptions { - method: 'get' | 'post' | 'put' | 'patch' | 'delete'; +interface IRouteOptionsBase { path: string; permission: string; middleware?: RequestHandler[]; handler: IRequestHandler; - acceptAnyContentType?: boolean; acceptedContentTypes?: string[]; } +interface IRouteOptionsGet extends IRouteOptionsBase { + method: 'get'; +} + +interface IRouteOptionsNonGet extends IRouteOptionsBase { + method: 'post' | 'put' | 'patch' | 'delete'; + acceptAnyContentType?: boolean; +} + +type IRouteOptions = IRouteOptionsNonGet | IRouteOptionsGet; + const checkPermission = (permission) => async (req, res, next) => { if (!permission || permission === NONE) { return next(); @@ -74,7 +83,7 @@ export default class Controller { private useContentTypeMiddleware(options: IRouteOptions): RequestHandler[] { const { middleware = [], acceptedContentTypes = [] } = options; - return options.acceptAnyContentType + return options.method === 'get' || options.acceptAnyContentType ? middleware : [requireContentType(...acceptedContentTypes), ...middleware]; } @@ -94,7 +103,6 @@ export default class Controller { path, handler, permission, - acceptAnyContentType: true, }); }