summaryrefslogtreecommitdiffstats
path: root/ogcp
diff options
context:
space:
mode:
authorJavier Sánchez Parra <jsanchez@soleta.eu>2022-08-02 17:06:13 +0200
committerJavier Sánchez Parra <jsanchez@soleta.eu>2022-08-03 09:33:01 +0200
commitb6bbd8f322b155e1969a6f356f1e4c8e8ca7fee2 (patch)
tree1f4c5a6a94d494e5af4e5b5a47b47042c9e91342 /ogcp
parentc4aa1f2f54d312581a70ad97e09198154f3840b3 (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.json16
-rw-r--r--ogcp/og_server.py21
-rw-r--r--ogcp/views.py23
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):