mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: Add admin api for context-field definitions
This commit is contained in:
		
							parent
							
								
									c86c035c6c
								
							
						
					
					
						commit
						c9c26e249c
					
				@ -27,6 +27,7 @@ function defaultOptions() {
 | 
			
		||||
        importFile: undefined,
 | 
			
		||||
        dropBeforeImport: false,
 | 
			
		||||
        getLogger: defaultLogProvider,
 | 
			
		||||
        customContextFields: [],
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "state": {
 | 
			
		||||
      "uri": "/api/admin/state"
 | 
			
		||||
    },
 | 
			
		||||
    "context": {
 | 
			
		||||
      "uri": "/api/admin/context"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								lib/routes/admin-api/context.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								lib/routes/admin-api/context.js
									
									
									
									
									
										Normal 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;
 | 
			
		||||
							
								
								
									
										42
									
								
								lib/routes/admin-api/context.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								lib/routes/admin-api/context.test.js
									
									
									
									
									
										Normal 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');
 | 
			
		||||
        });
 | 
			
		||||
});
 | 
			
		||||
@ -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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user