1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-10 01:16:39 +02:00

fix: Add admin api for context-field definitions

This commit is contained in:
Ivar Conradi Østhus 2019-10-13 20:21:04 +02:00
parent c86c035c6c
commit c9c26e249c
6 changed files with 78 additions and 1 deletions

View File

@ -27,6 +27,7 @@ function defaultOptions() {
importFile: undefined,
dropBeforeImport: false,
getLogger: defaultLogProvider,
customContextFields: [],
};
}

View File

@ -18,6 +18,9 @@
},
"state": {
"uri": "/api/admin/state"
},
"context": {
"uri": "/api/admin/context"
}
}
}

View File

@ -0,0 +1,27 @@
'use strict';
const Controller = require('../controller');
const builtInContextFields = [
{ name: 'environment' },
{ name: 'userId' },
{ name: 'appName' },
];
class ContextController extends Controller {
constructor(config) {
super(config);
this.contextFields = builtInContextFields.concat(
config.customContextFields
);
this.get('/', this.getContextFields);
}
getContextFields(req, res) {
res.status(200)
.json(this.contextFields)
.end();
}
}
module.exports = ContextController;

View File

@ -0,0 +1,42 @@
'use strict';
const test = require('ava');
const store = require('./../../../test/fixtures/store');
const getLogger = require('../../../test/fixtures/no-logger');
const supertest = require('supertest');
const getApp = require('../../app');
const { EventEmitter } = require('events');
const eventBus = new EventEmitter();
function getSetup() {
const base = `/random${Math.round(Math.random() * 1000)}`;
const stores = store.createStores();
const app = getApp({
baseUriPath: base,
stores,
eventBus,
extendedPermissions: false,
customContextFields: [{ name: 'tenantId' }],
getLogger,
});
return {
base,
request: supertest(app),
};
}
test('should get context definition', t => {
t.plan(2);
const { request, base } = getSetup();
return request
.get(`${base}/api/admin/context`)
.expect('Content-Type', /json/)
.expect(200)
.expect(res => {
t.true(res.body.length === 4);
const envField = res.body.find(c => c.name === 'environment');
t.true(envField.name === 'environment');
});
});

View File

@ -8,6 +8,7 @@ const StrategyController = require('./strategy');
const MetricsController = require('./metrics');
const UserController = require('./user');
const ConfigController = require('./config');
const ContextController = require('./context');
const StateController = require('./state');
const apiDef = require('./api-def.json');
@ -23,6 +24,7 @@ class AdminApi extends Controller {
this.app.use('/metrics', new MetricsController(config).router);
this.app.use('/user', new UserController(config).router);
this.app.use('/ui-config', new ConfigController(config).router);
this.app.use('/context', new ContextController(config).router);
this.app.use('/state', new StateController(config).router);
}

View File

@ -30,7 +30,9 @@ class RegisterController extends Controller {
await this.clientApplicationsStore.upsert(clientRegistration);
await this.clientInstanceStore.insert(clientRegistration);
this.logger.info(
`New client registered with appName=${clientRegistration.appName} and instanceId=${clientRegistration.instanceId}`
`New client registered with appName=${
clientRegistration.appName
} and instanceId=${clientRegistration.instanceId}`
);
return res.status(202).end();
} catch (err) {