From 443140d79d598a4514f07bf3805f0a53c8e5616e Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Nov 08 2019 08:11:13 +0000 Subject: Add config endpoint The new endpoint lists configuration for PERMISSION_MAPPING and SUPERUSERS. JIRA: FACTORY-4589 Signed-off-by: Lukas Holecek --- diff --git a/tests/test_api_v10.py b/tests/test_api_v10.py index e0a361c..06b5d7f 100644 --- a/tests/test_api_v10.py +++ b/tests/test_api_v10.py @@ -651,6 +651,39 @@ def test_about_endpoint(client, trailing_slash): assert output['auth_method'] == client.application.config['AUTH_METHOD'] +def test_config_endpoint_permissions_map(client): + config = { + 'PERMISSION_MAPPING': { + '^kernel-qe\\.': { + 'groups': ['devel', 'qa'], + 'users': [], + }, + '': { + 'groups': ['factory2-admins'], + 'users': [], + }, + } + } + + with patch.dict(client.application.config, config): + r = client.get('/api/v1.0/config') + + assert r.status_code == 200 + assert r.json['permission_mapping'] == config['PERMISSION_MAPPING'] + + +def test_config_endpoint_superusers(client): + config = { + 'SUPERUSERS': ['alice', 'bob'] + } + + with patch.dict(client.application.config, config): + r = client.get('/api/v1.0/config') + + assert r.status_code == 200 + assert r.json['superusers'] == config['SUPERUSERS'] + + def test_cors_good(client, session): headers = { 'Access-Control-Request-Method': 'POST', diff --git a/waiverdb/api_v1.py b/waiverdb/api_v1.py index fdb25a2..c14465e 100644 --- a/waiverdb/api_v1.py +++ b/waiverdb/api_v1.py @@ -629,6 +629,40 @@ class AboutResource(Resource): return {'version': __version__, 'auth_method': current_app.config['AUTH_METHOD']} +class ConfigResource(Resource): + @jsonp + def get(self): + """ + Returns the current configuration (PERMISSION_MAPPING and SUPERUSERS). + + **Sample response**: + + .. sourcecode:: none + + HTTP/1.0 200 OK + Content-Length: 55 + Content-Type: application/json + Date: Tue, 31 Oct 2017 04:29:19 GMT + Server: Werkzeug/0.11.10 Python/2.7.13 + + { + "permission_mapping": { + "^kernel-qe": { + "groups": ["devel", "qa"], + "users": [] + } + }, + "superusers": ["alice", "bob"] + } + + :statuscode 200: Configuration is returned. + """ + return { + 'permission_mapping': current_app.config.get('PERMISSION_MAPPING'), + 'superusers': current_app.config.get('SUPERUSERS'), + } + + class MonitorResource(Resource): def get(self): from waiverdb.monitor import MonitorAPI @@ -641,4 +675,5 @@ api.add_resource(WaiverResource, '/waivers/') api.add_resource(FilteredWaiversResource, '/waivers/+filtered') api.add_resource(GetWaiversBySubjectsAndTestcases, '/waivers/+by-subjects-and-testcases') api.add_resource(AboutResource, '/about', strict_slashes=False) +api.add_resource(ConfigResource, '/config', strict_slashes=False) api.add_resource(MonitorResource, '/metrics')