diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-08-02 17:06:13 +0200 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-08-03 09:33:01 +0200 |
commit | b6bbd8f322b155e1969a6f356f1e4c8e8ca7fee2 (patch) | |
tree | 1f4c5a6a94d494e5af4e5b5a47b47042c9e91342 /ogcp | |
parent | c4aa1f2f54d312581a70ad97e09198154f3840b3 (diff) |
Retreive scopes from several ogServers
Update the configuration file format to support several ogServers and
retrieve scopes from those ogServers.
The old config file format is still supported.
Diffstat (limited to 'ogcp')
-rw-r--r-- | ogcp/cfg/ogcp.json | 16 | ||||
-rw-r--r-- | ogcp/og_server.py | 21 | ||||
-rw-r--r-- | ogcp/views.py | 23 |
3 files changed, 46 insertions, 14 deletions
diff --git a/ogcp/cfg/ogcp.json b/ogcp/cfg/ogcp.json index 0cdbb6d..6693333 100644 --- a/ogcp/cfg/ogcp.json +++ b/ogcp/cfg/ogcp.json @@ -1,7 +1,4 @@ { - "IP": "127.0.0.1", - "PORT": 8888, - "API_TOKEN": "c3fe7bb0395747ec42a25df027585871", "LANG": "en", "USERS": [ { @@ -17,6 +14,19 @@ "SCOPES": [ "Unidad Organizativa (Default)" ] + ], + "SERVERS": [ + { + "NAME": "Server 1", + "IP": "127.0.0.1", + "PORT": 8888, + "API_TOKEN": "a0e9ab768cbe93dab5b1998e952bcdb7" + }, + { + "NAME": "Server 2", + "IP": "127.0.0.1", + "PORT": 18888, + "API_TOKEN": "e4c8gh913dph32nxm6q2768c427jrsj1" } ] } diff --git a/ogcp/og_server.py b/ogcp/og_server.py index 0d7fdf8..07dcb2b 100644 --- a/ogcp/og_server.py +++ b/ogcp/og_server.py @@ -11,9 +11,8 @@ import requests import json class OGServer: - def __init__(self, ip=app.config['IP'], - port=app.config['PORT'], - api_token=app.config['API_TOKEN']): + def __init__(self, name, ip, port, api_token): + self.name = name self.ip = ip self.port = port self.api_token = api_token @@ -34,3 +33,19 @@ class OGServer: headers=self.HEADERS, json=payload) return r + + +servers = [] +if {'IP', 'PORT', 'API_TOKEN'} <= app.config.keys(): + # Config file backward compatibility + servers.append(OGServer(app.config['IP'], + app.config['IP'], + app.config['PORT'], + app.config['API_TOKEN'])) +else: + for server in app.config['SERVERS']: + ogserver = OGServer(server['NAME'], + server['IP'], + server['PORT'], + server['API_TOKEN']) + servers.append(ogserver) diff --git a/ogcp/views.py b/ogcp/views.py index 84bcc56..1ccd39b 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -25,7 +25,7 @@ from pathlib import Path from ogcp.models import User from ogcp.forms.auth import LoginForm, UserForm, DeleteUserForm -from ogcp.og_server import OGServer +from ogcp.og_server import servers from flask_babel import lazy_gettext as _l from flask_babel import _ from ogcp import app @@ -177,17 +177,24 @@ def get_allowed_scopes(scopes, allowed_scopes): get_allowed_scopes(scope, allowed_scopes) def get_scopes(ips=set()): - r = g.server.get('/scopes') - scopes = r.json() + list_scopes = [] + for server in servers: + r = server.get('/scopes') + scopes = r.json() + server_scope = {} + server_scope['name'] = server.name + server_scope.update(scopes) + list_scopes.append(server_scope) + all_scopes = {'scope': list_scopes} if current_user.scopes: allowed_scopes = [] - get_allowed_scopes(scopes, allowed_scopes) - scopes = {'scope': allowed_scopes} + get_allowed_scopes(all_scopes, allowed_scopes) + all_scopes = {'scope': allowed_scopes} r = g.server.get('/clients') clients = r.json() - add_state_and_ips(scopes, clients['clients'], ips) + add_state_and_ips(all_scopes, clients['clients'], ips) - return scopes, clients + return all_scopes, clients def hash_password(pwd): @@ -245,7 +252,7 @@ def load_user(username): @app.before_request def load_config(): - g.server = OGServer() + g.server = servers[0] @app.errorhandler(404) def page_not_found(error): |