From a3e448a1bc7b7aa2a92f67188e3d0985ae370606 Mon Sep 17 00:00:00 2001 From: Fredrik Oseberg Date: Fri, 7 Jan 2022 11:35:26 +0100 Subject: [PATCH] feat: add configuration option for disabling legacy api --- src/lib/create-config.ts | 5 +++++ src/lib/routes/admin-api/index.ts | 12 +++++++---- src/lib/types/option.ts | 2 ++ src/test/e2e/api/admin/feature.e2e.test.ts | 24 +++++++++++++++++++++- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/lib/create-config.ts b/src/lib/create-config.ts index 2e4ddcc203..0c558ab9e4 100644 --- a/src/lib/create-config.ts +++ b/src/lib/create-config.ts @@ -287,6 +287,10 @@ export function createConfig(options: IUnleashOptions): IUnleashConfig { const enableOAS = options.enableOAS || safeBoolean(process.env.ENABLE_OAS, false); + const disableLegacyFeaturesApi = + options.disableLegacyFeaturesApi || + safeBoolean(process.env.DISABLE_LEGACY_FEATURES_API, false); + return { db, session, @@ -301,6 +305,7 @@ export function createConfig(options: IUnleashOptions): IUnleashConfig { email, secureHeaders, enableOAS, + disableLegacyFeaturesApi, preHook: options.preHook, preRouterHook: options.preRouterHook, eventHook: options.eventHook, diff --git a/src/lib/routes/admin-api/index.ts b/src/lib/routes/admin-api/index.ts index f1aa75c7fa..7c29cfb2c9 100644 --- a/src/lib/routes/admin-api/index.ts +++ b/src/lib/routes/admin-api/index.ts @@ -30,10 +30,14 @@ class AdminApi extends Controller { super(config); this.app.get('/', this.index); - this.app.use( - '/features', - new FeatureController(config, services).router, - ); + + if (!config.disableLegacyFeaturesApi) { + this.app.use( + '/features', + new FeatureController(config, services).router, + ); + } + this.app.use( '/feature-types', new FeatureTypeController(config, services).router, diff --git a/src/lib/types/option.ts b/src/lib/types/option.ts index d0e60e24c4..f60413cd4a 100644 --- a/src/lib/types/option.ts +++ b/src/lib/types/option.ts @@ -101,6 +101,7 @@ export interface IUnleashOptions { preRouterHook?: Function; eventHook?: EventHook; enterpriseVersion?: string; + disableLegacyFeaturesApi?: boolean; } export interface IEmailOption { @@ -156,4 +157,5 @@ export interface IUnleashConfig { eventHook?: EventHook; enterpriseVersion?: string; eventBus: EventEmitter; + disableLegacyFeaturesApi?: boolean; } diff --git a/src/test/e2e/api/admin/feature.e2e.test.ts b/src/test/e2e/api/admin/feature.e2e.test.ts index d509741fed..a8a2182130 100644 --- a/src/test/e2e/api/admin/feature.e2e.test.ts +++ b/src/test/e2e/api/admin/feature.e2e.test.ts @@ -1,7 +1,11 @@ import faker from 'faker'; import { FeatureToggleDTO, IStrategyConfig, IVariant } from 'lib/types/model'; import dbInit, { ITestDb } from '../../helpers/database-init'; -import { IUnleashTest, setupApp } from '../../helpers/test-helper'; +import { + IUnleashTest, + setupApp, + setupAppWithCustomConfig, +} from '../../helpers/test-helper'; import getLogger from '../../../fixtures/no-logger'; import { DEFAULT_ENV } from '../../../../lib/util/constants'; @@ -680,3 +684,21 @@ test('marks feature toggle as stale', async () => { expect(res.body.stale).toBe(true); }); }); + +test('should not hit endpoints if disable configuration is set', async () => { + const appWithDisabledLegacyFeatures = await setupAppWithCustomConfig( + db.stores, + { + disableLegacyFeaturesApi: true, + }, + ); + + await appWithDisabledLegacyFeatures.request + .get('/api/admin/features') + .expect(404); + + return appWithDisabledLegacyFeatures.request + .get('/api/admin/features/featureX') + .expect('Content-Type', /json/) + .expect(404); +});