pypomes-iam 0.1.9__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pypomes-iam might be problematic. Click here for more details.
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/PKG-INFO +1 -1
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/pyproject.toml +1 -1
- pypomes_iam-0.2.0/src/pypomes_iam/iam_pomes.py +176 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/src/pypomes_iam/jusbr_pomes.py +11 -144
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/src/pypomes_iam/keycloak_pomes.py +6 -140
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/.gitignore +0 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/LICENSE +0 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/README.md +0 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/src/pypomes_iam/__init__.py +0 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/src/pypomes_iam/common_pomes.py +0 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/src/pypomes_iam/provider_pomes.py +0 -0
- {pypomes_iam-0.1.9 → pypomes_iam-0.2.0}/src/pypomes_iam/token_pomes.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pypomes_iam
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: A collection of Python pomes, penyeach (IAM modules)
|
|
5
5
|
Project-URL: Homepage, https://github.com/TheWiseCoder/PyPomes-IAM
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/TheWiseCoder/PyPomes-IAM/issues
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
from flask import Response, redirect, request, jsonify
|
|
2
|
+
from logging import Logger
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from .common_pomes import (
|
|
6
|
+
_service_login, _service_logout,
|
|
7
|
+
_service_callback, _service_token, _log_init
|
|
8
|
+
)
|
|
9
|
+
from .jusbr_pomes import _jusbr_logger, _jusbr_registry
|
|
10
|
+
from .keycloak_pomes import _keycloak_logger, _keycloak_registry
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# @flask_app.route(rule=<login_endpoint>, # JUSBR_LOGIN_ENDPOINT: /iam/jusbr:login
|
|
14
|
+
# methods=["GET"])
|
|
15
|
+
# @flask_app.route(rule=<login_endpoint>, # KEYCLOAK_LOGIN_ENDPOINT: /iam/keycloak:logout
|
|
16
|
+
# methods=["GET"])
|
|
17
|
+
def service_login() -> Response:
|
|
18
|
+
"""
|
|
19
|
+
Entry point for the JusBR login service.
|
|
20
|
+
|
|
21
|
+
Redirect the request to the JusBR authentication page, with the appropriate parameters.
|
|
22
|
+
|
|
23
|
+
:return: the response from the redirect operation
|
|
24
|
+
"""
|
|
25
|
+
logger: Logger
|
|
26
|
+
registry: dict[str, Any]
|
|
27
|
+
if request.endpoint == "jusbr-login":
|
|
28
|
+
logger = _jusbr_logger
|
|
29
|
+
registry = _jusbr_registry
|
|
30
|
+
else:
|
|
31
|
+
logger = _keycloak_logger
|
|
32
|
+
registry = _keycloak_registry
|
|
33
|
+
|
|
34
|
+
# log the request
|
|
35
|
+
if logger:
|
|
36
|
+
logger.debug(msg=_log_init(request=request))
|
|
37
|
+
|
|
38
|
+
# obtain the redirect URL
|
|
39
|
+
auth_url: str = _service_login(registry=registry,
|
|
40
|
+
args=request.args,
|
|
41
|
+
logger=logger)
|
|
42
|
+
# redirect the request
|
|
43
|
+
result: Response = redirect(location=auth_url)
|
|
44
|
+
|
|
45
|
+
# log the response
|
|
46
|
+
if logger:
|
|
47
|
+
logger.debug(msg=f"Response {result}")
|
|
48
|
+
|
|
49
|
+
return result
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# @flask_app.route(rule=<logout_endpoint>, # JUSBR_LOGOUT_ENDPOINT: /iam/jusbr:logout
|
|
53
|
+
# methods=["GET"])
|
|
54
|
+
# @flask_app.route(rule=<login_endpoint>, # KEYCLOAK_LOGOUT_ENDPOINT: /iam/keycloak:logout
|
|
55
|
+
# methods=["GET"])
|
|
56
|
+
def service_logout() -> Response:
|
|
57
|
+
"""
|
|
58
|
+
Entry point for the JusBR logout service.
|
|
59
|
+
|
|
60
|
+
Remove all data associating the user with JusBR from the registry.
|
|
61
|
+
|
|
62
|
+
:return: response *OK*
|
|
63
|
+
"""
|
|
64
|
+
logger: Logger
|
|
65
|
+
registry: dict[str, Any]
|
|
66
|
+
if request.endpoint == "jusbr-logout":
|
|
67
|
+
logger = _jusbr_logger
|
|
68
|
+
registry = _jusbr_registry
|
|
69
|
+
else:
|
|
70
|
+
logger = _keycloak_logger
|
|
71
|
+
registry = _keycloak_registry
|
|
72
|
+
|
|
73
|
+
# log the request
|
|
74
|
+
if logger:
|
|
75
|
+
logger.debug(msg=_log_init(request=request))
|
|
76
|
+
|
|
77
|
+
# logout the user
|
|
78
|
+
_service_logout(registry=registry,
|
|
79
|
+
args=request.args,
|
|
80
|
+
logger=logger)
|
|
81
|
+
|
|
82
|
+
result: Response = Response(status=200)
|
|
83
|
+
|
|
84
|
+
# log the response
|
|
85
|
+
if logger:
|
|
86
|
+
logger.debug(msg=f"Response {result}")
|
|
87
|
+
|
|
88
|
+
return result
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# @flask_app.route(rule=<callback_endpoint>, # JUSBR_CALLBACK_ENDPOINT: /iam/jusbr:callback
|
|
92
|
+
# methods=["GET", "POST"])
|
|
93
|
+
# @flask_app.route(rule=<callback_endpoint>, # KEYCLOAK_CALLBACK_ENDPOINT: /iam/keycloak:callback
|
|
94
|
+
# methods=["POST"])
|
|
95
|
+
def service_callback() -> Response:
|
|
96
|
+
"""
|
|
97
|
+
Entry point for the callback from JusBR on authentication operation.
|
|
98
|
+
|
|
99
|
+
:return: the response containing the token, or *BAD REQUEST*
|
|
100
|
+
"""
|
|
101
|
+
logger: Logger
|
|
102
|
+
registry: dict[str, Any]
|
|
103
|
+
if request.endpoint == "jusbr-callback":
|
|
104
|
+
logger = _jusbr_logger
|
|
105
|
+
registry = _jusbr_registry
|
|
106
|
+
else:
|
|
107
|
+
logger = _keycloak_logger
|
|
108
|
+
registry = _keycloak_registry
|
|
109
|
+
|
|
110
|
+
# log the request
|
|
111
|
+
if logger:
|
|
112
|
+
logger.debug(msg=_log_init(request=request))
|
|
113
|
+
|
|
114
|
+
# process the callback operation
|
|
115
|
+
errors: list[str] = []
|
|
116
|
+
token_data: tuple[str, str] = _service_callback(registry=registry,
|
|
117
|
+
args=request.args,
|
|
118
|
+
errors=errors,
|
|
119
|
+
logger=logger)
|
|
120
|
+
result: Response
|
|
121
|
+
if errors:
|
|
122
|
+
result = jsonify({"errors": "; ".join(errors)})
|
|
123
|
+
result.status_code = 400
|
|
124
|
+
else:
|
|
125
|
+
result = jsonify({
|
|
126
|
+
"user_id": token_data[0],
|
|
127
|
+
"access_token": token_data[1]})
|
|
128
|
+
|
|
129
|
+
# log the response
|
|
130
|
+
if logger:
|
|
131
|
+
logger.debug(msg=f"Response {result}")
|
|
132
|
+
|
|
133
|
+
return result
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
# @flask_app.route(rule=<token_endpoint>, # JUSBR_TOKEN_ENDPOINT: /iam/jusbr:get-token
|
|
137
|
+
# methods=["GET"])
|
|
138
|
+
# @flask_app.route(rule=<token_endpoint>, # JUSBR_TOKEN_ENDPOINT: /iam/jusbr:get-token
|
|
139
|
+
# methods=["GET"])
|
|
140
|
+
def service_token() -> Response:
|
|
141
|
+
"""
|
|
142
|
+
Entry point for retrieving the JusBR token.
|
|
143
|
+
|
|
144
|
+
:return: the response containing the token, or *UNAUTHORIZED*
|
|
145
|
+
"""
|
|
146
|
+
logger: Logger
|
|
147
|
+
registry: dict[str, Any]
|
|
148
|
+
if request.endpoint == "jusbr-token":
|
|
149
|
+
logger = _jusbr_logger
|
|
150
|
+
registry = _jusbr_registry
|
|
151
|
+
else:
|
|
152
|
+
logger = _keycloak_logger
|
|
153
|
+
registry = _keycloak_registry
|
|
154
|
+
|
|
155
|
+
# log the request
|
|
156
|
+
if logger:
|
|
157
|
+
logger.debug(msg=_log_init(request=request))
|
|
158
|
+
|
|
159
|
+
# retrieve the token
|
|
160
|
+
errors: list[str] = []
|
|
161
|
+
token: str = _service_token(registry=registry,
|
|
162
|
+
args=request.args,
|
|
163
|
+
errors=errors,
|
|
164
|
+
logger=logger)
|
|
165
|
+
result: Response
|
|
166
|
+
if token:
|
|
167
|
+
result = jsonify({"token": token})
|
|
168
|
+
else:
|
|
169
|
+
result = Response("; ".join(errors))
|
|
170
|
+
result.status_code = 401
|
|
171
|
+
|
|
172
|
+
# log the response
|
|
173
|
+
if logger:
|
|
174
|
+
logger.debug(msg=f"Response {result}")
|
|
175
|
+
|
|
176
|
+
return result
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
from cachetools import FIFOCache
|
|
2
2
|
from datetime import datetime
|
|
3
|
-
from flask import Flask
|
|
3
|
+
from flask import Flask
|
|
4
4
|
from logging import Logger
|
|
5
5
|
from pypomes_core import (
|
|
6
6
|
APP_PREFIX, TZ_LOCAL, env_get_int, env_get_str
|
|
7
7
|
)
|
|
8
8
|
from typing import Any, Final
|
|
9
9
|
|
|
10
|
-
from .common_pomes import
|
|
11
|
-
_service_login, _service_logout,
|
|
12
|
-
_service_callback, _service_token,
|
|
13
|
-
_get_user_data, _log_init
|
|
14
|
-
)
|
|
10
|
+
from .common_pomes import _service_token, _get_user_data
|
|
15
11
|
|
|
16
12
|
JUSBR_CLIENT_ID: Final[str] = env_get_str(key=f"{APP_PREFIX}_JUSBR_CLIENT_ID")
|
|
17
13
|
JUSBR_CLIENT_SECRET: Final[str] = env_get_str(key=f"{APP_PREFIX}_JUSBR_CLIENT_SECRET")
|
|
@@ -59,7 +55,7 @@ JUSBR_URL_AUTH_CALLBACK: Final[str] = env_get_str(key=f"{APP_PREFIX}_JUSBR_URL_A
|
|
|
59
55
|
_jusbr_registry: dict[str, Any] | None = None
|
|
60
56
|
|
|
61
57
|
# dafault logger
|
|
62
|
-
|
|
58
|
+
_jusbr_logger: Logger | None = None
|
|
63
59
|
|
|
64
60
|
|
|
65
61
|
def jusbr_setup(flask_app: Flask,
|
|
@@ -92,12 +88,13 @@ def jusbr_setup(flask_app: Flask,
|
|
|
92
88
|
:param callback_url: URL for JusBR to callback on login
|
|
93
89
|
:param logger: optional logger
|
|
94
90
|
"""
|
|
91
|
+
from .iam_pomes import service_login, service_logout, service_callback, service_token
|
|
92
|
+
global _jusbr_logger, _jusbr_registry
|
|
93
|
+
|
|
95
94
|
# establish the logger
|
|
96
|
-
global _logger
|
|
97
95
|
_logger = logger
|
|
98
96
|
|
|
99
97
|
# configure the JusBR registry
|
|
100
|
-
global _jusbr_registry
|
|
101
98
|
_jusbr_registry = {
|
|
102
99
|
"client-id": client_id,
|
|
103
100
|
"client-secret": client_secret,
|
|
@@ -110,11 +107,6 @@ def jusbr_setup(flask_app: Flask,
|
|
|
110
107
|
}
|
|
111
108
|
|
|
112
109
|
# establish the endpoints
|
|
113
|
-
if token_endpoint:
|
|
114
|
-
flask_app.add_url_rule(rule=token_endpoint,
|
|
115
|
-
endpoint="jusbr-token",
|
|
116
|
-
view_func=service_token,
|
|
117
|
-
methods=["GET"])
|
|
118
110
|
if login_endpoint:
|
|
119
111
|
flask_app.add_url_rule(rule=login_endpoint,
|
|
120
112
|
endpoint="jusbr-login",
|
|
@@ -130,136 +122,11 @@ def jusbr_setup(flask_app: Flask,
|
|
|
130
122
|
endpoint="jusbr-callback",
|
|
131
123
|
view_func=service_callback,
|
|
132
124
|
methods=["GET", "POST"])
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
"""
|
|
139
|
-
Entry point for the JusBR login service.
|
|
140
|
-
|
|
141
|
-
Redirect the request to the JusBR authentication page, with the appropriate parameters.
|
|
142
|
-
|
|
143
|
-
:return: the response from the redirect operation
|
|
144
|
-
"""
|
|
145
|
-
global _jusbr_registry
|
|
146
|
-
|
|
147
|
-
# log the request
|
|
148
|
-
if _logger:
|
|
149
|
-
_logger.debug(msg=_log_init(request=request))
|
|
150
|
-
|
|
151
|
-
# obtain the redirect URL
|
|
152
|
-
auth_url: str = _service_login(registry=_jusbr_registry,
|
|
153
|
-
args=request.args,
|
|
154
|
-
logger=_logger)
|
|
155
|
-
# redirect the request
|
|
156
|
-
result: Response = redirect(location=auth_url)
|
|
157
|
-
|
|
158
|
-
# log the response
|
|
159
|
-
if _logger:
|
|
160
|
-
_logger.debug(msg=f"Response {result}")
|
|
161
|
-
|
|
162
|
-
return result
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
# @flask_app.route(rule=<login_endpoint>, # JUSBR_LOGIN_ENDPOINT: /iam/jusbr:logout
|
|
166
|
-
# methods=["GET"])
|
|
167
|
-
def service_logout() -> Response:
|
|
168
|
-
"""
|
|
169
|
-
Entry point for the JusBR logout service.
|
|
170
|
-
|
|
171
|
-
Remove all data associating the user with JusBR from the registry.
|
|
172
|
-
|
|
173
|
-
:return: response *OK*
|
|
174
|
-
"""
|
|
175
|
-
global _jusbr_registry
|
|
176
|
-
|
|
177
|
-
# log the request
|
|
178
|
-
if _logger:
|
|
179
|
-
_logger.debug(msg=_log_init(request=request))
|
|
180
|
-
|
|
181
|
-
# logout the user
|
|
182
|
-
_service_logout(registry=_jusbr_registry,
|
|
183
|
-
args=request.args,
|
|
184
|
-
logger=_logger)
|
|
185
|
-
|
|
186
|
-
result: Response = Response(status=200)
|
|
187
|
-
|
|
188
|
-
# log the response
|
|
189
|
-
if _logger:
|
|
190
|
-
_logger.debug(msg=f"Response {result}")
|
|
191
|
-
|
|
192
|
-
return result
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
# @flask_app.route(rule=<callback_endpoint>, # JUSBR_CALLBACK_ENDPOINT: /iam/jusbr:callback
|
|
196
|
-
# methods=["GET", "POST"])
|
|
197
|
-
def service_callback() -> Response:
|
|
198
|
-
"""
|
|
199
|
-
Entry point for the callback from JusBR on authentication operation.
|
|
200
|
-
|
|
201
|
-
:return: the response containing the token, or *BAD REQUEST*
|
|
202
|
-
"""
|
|
203
|
-
global _jusbr_registry
|
|
204
|
-
|
|
205
|
-
# log the request
|
|
206
|
-
if _logger:
|
|
207
|
-
_logger.debug(msg=_log_init(request=request))
|
|
208
|
-
|
|
209
|
-
# process the callback operation
|
|
210
|
-
errors: list[str] = []
|
|
211
|
-
token_data: tuple[str, str] = _service_callback(registry=_jusbr_registry,
|
|
212
|
-
args=request.args,
|
|
213
|
-
errors=errors,
|
|
214
|
-
logger=_logger)
|
|
215
|
-
result: Response
|
|
216
|
-
if errors:
|
|
217
|
-
result = jsonify({"errors": "; ".join(errors)})
|
|
218
|
-
result.status_code = 400
|
|
219
|
-
else:
|
|
220
|
-
result = jsonify({
|
|
221
|
-
"user_id": token_data[0],
|
|
222
|
-
"access_token": token_data[1]})
|
|
223
|
-
|
|
224
|
-
# log the response
|
|
225
|
-
if _logger:
|
|
226
|
-
_logger.debug(msg=f"Response {result}")
|
|
227
|
-
|
|
228
|
-
return result
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
# @flask_app.route(rule=<token_endpoint>, # JUSBR_TOKEN_ENDPOINT: /iam/jusbr:get-token
|
|
232
|
-
# methods=["GET"])
|
|
233
|
-
def service_token() -> Response:
|
|
234
|
-
"""
|
|
235
|
-
Entry point for retrieving the JusBR token.
|
|
236
|
-
|
|
237
|
-
:return: the response containing the token, or *UNAUTHORIZED*
|
|
238
|
-
"""
|
|
239
|
-
global _jusbr_registry
|
|
240
|
-
|
|
241
|
-
# log the request
|
|
242
|
-
if _logger:
|
|
243
|
-
_logger.debug(msg=_log_init(request=request))
|
|
244
|
-
|
|
245
|
-
# retrieve the token
|
|
246
|
-
errors: list[str] = []
|
|
247
|
-
token: str = _service_token(registry=_jusbr_registry,
|
|
248
|
-
args=request.args,
|
|
249
|
-
errors=errors,
|
|
250
|
-
logger=_logger)
|
|
251
|
-
result: Response
|
|
252
|
-
if token:
|
|
253
|
-
result = jsonify({"token": token})
|
|
254
|
-
else:
|
|
255
|
-
result = Response("; ".join(errors))
|
|
256
|
-
result.status_code = 401
|
|
257
|
-
|
|
258
|
-
# log the response
|
|
259
|
-
if _logger:
|
|
260
|
-
_logger.debug(msg=f"Response {result}")
|
|
261
|
-
|
|
262
|
-
return result
|
|
125
|
+
if token_endpoint:
|
|
126
|
+
flask_app.add_url_rule(rule=token_endpoint,
|
|
127
|
+
endpoint="jusbr-token",
|
|
128
|
+
view_func=service_token,
|
|
129
|
+
methods=["GET"])
|
|
263
130
|
|
|
264
131
|
|
|
265
132
|
def jusbr_get_token(user_id: str,
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
from cachetools import FIFOCache
|
|
2
2
|
from datetime import datetime
|
|
3
|
-
from flask import Flask
|
|
3
|
+
from flask import Flask
|
|
4
4
|
from logging import Logger
|
|
5
5
|
from pypomes_core import (
|
|
6
6
|
APP_PREFIX, TZ_LOCAL, env_get_int, env_get_str
|
|
7
7
|
)
|
|
8
8
|
from typing import Any, Final
|
|
9
9
|
|
|
10
|
-
from .common_pomes import
|
|
11
|
-
_service_login, _service_logout,
|
|
12
|
-
_service_callback, _service_token,
|
|
13
|
-
_get_user_data, _log_init
|
|
14
|
-
)
|
|
10
|
+
from .common_pomes import _service_token, _get_user_data
|
|
15
11
|
|
|
16
12
|
KEYCLOAK_CLIENT_ID: Final[str] = env_get_str(key=f"{APP_PREFIX}_KEYCLOAK_CLIENT_ID")
|
|
17
13
|
KEYCLOAK_CLIENT_SECRET: Final[str] = env_get_str(key=f"{APP_PREFIX}_KEYCLOAK_CLIENT_SECRET")
|
|
@@ -60,7 +56,7 @@ KEYCLOAK_URL_AUTH_CALLBACK: Final[str] = env_get_str(key=f"{APP_PREFIX}_KEYCLOAK
|
|
|
60
56
|
_keycloak_registry: dict[str, Any] = {}
|
|
61
57
|
|
|
62
58
|
# dafault logger
|
|
63
|
-
|
|
59
|
+
_keycloak_logger: Logger | None = None
|
|
64
60
|
|
|
65
61
|
|
|
66
62
|
def keycloak_setup(flask_app: Flask,
|
|
@@ -95,11 +91,11 @@ def keycloak_setup(flask_app: Flask,
|
|
|
95
91
|
:param callback_url: URL for Keycloak to callback on login
|
|
96
92
|
:param logger: optional logger
|
|
97
93
|
"""
|
|
98
|
-
|
|
94
|
+
from .iam_pomes import service_login, service_logout, service_callback, service_token
|
|
95
|
+
global _keycloak_logger, _keycloak_registry
|
|
99
96
|
|
|
100
97
|
# establish the logger
|
|
101
|
-
|
|
102
|
-
_logger = logger
|
|
98
|
+
_keycloak_logger = logger
|
|
103
99
|
|
|
104
100
|
# configure the JusBR registry
|
|
105
101
|
_keycloak_registry = {
|
|
@@ -136,136 +132,6 @@ def keycloak_setup(flask_app: Flask,
|
|
|
136
132
|
methods=["POST"])
|
|
137
133
|
|
|
138
134
|
|
|
139
|
-
# @flask_app.route(rule=<login_endpoint>, # KEYCLOAK_LOGIN_ENDPOINT: /iam/keycloak:login
|
|
140
|
-
# methods=["GET"])
|
|
141
|
-
def service_login() -> Response:
|
|
142
|
-
"""
|
|
143
|
-
Entry point for the Keycloak login service.
|
|
144
|
-
|
|
145
|
-
Redirect the request to the Keycloak authentication page, with the appropriate parameters.
|
|
146
|
-
|
|
147
|
-
:return: the response from the redirect operation
|
|
148
|
-
"""
|
|
149
|
-
global _keycloak_registry
|
|
150
|
-
|
|
151
|
-
# log the request
|
|
152
|
-
if _logger:
|
|
153
|
-
_logger.debug(msg=_log_init(request=request))
|
|
154
|
-
|
|
155
|
-
# obtain the redirect URL
|
|
156
|
-
auth_url: str = _service_login(registry=_keycloak_registry,
|
|
157
|
-
args=request.args,
|
|
158
|
-
logger=_logger)
|
|
159
|
-
# redirect the request
|
|
160
|
-
result: Response = redirect(location=auth_url)
|
|
161
|
-
|
|
162
|
-
# log the response
|
|
163
|
-
if _logger:
|
|
164
|
-
_logger.debug(msg=f"Response {result}")
|
|
165
|
-
|
|
166
|
-
return result
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
# @flask_app.route(rule=<login_endpoint>, # KEYCLOAK_LOGIN_ENDPOINT: /iam/keycloak:logout
|
|
170
|
-
# methods=["GET"])
|
|
171
|
-
def service_logout() -> Response:
|
|
172
|
-
"""
|
|
173
|
-
Entry point for the Keycloak logout service.
|
|
174
|
-
|
|
175
|
-
Remove all data associating the user with Keycloak from the registry.
|
|
176
|
-
|
|
177
|
-
:return: response *OK*
|
|
178
|
-
"""
|
|
179
|
-
global _keycloak_registry
|
|
180
|
-
|
|
181
|
-
# log the request
|
|
182
|
-
if _logger:
|
|
183
|
-
_logger.debug(msg=_log_init(request=request))
|
|
184
|
-
|
|
185
|
-
# logout the user
|
|
186
|
-
_service_logout(registry=_keycloak_registry,
|
|
187
|
-
args=request.args,
|
|
188
|
-
logger=_logger)
|
|
189
|
-
|
|
190
|
-
result: Response = Response(status=200)
|
|
191
|
-
|
|
192
|
-
# log the response
|
|
193
|
-
if _logger:
|
|
194
|
-
_logger.debug(msg=f"Response {result}")
|
|
195
|
-
|
|
196
|
-
return result
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
# @flask_app.route(rule=<callback_endpoint>, # KEYCLOAK_CALLBACK_ENDPOINT: /iam/keycloak:callback
|
|
200
|
-
# methods=["POST"])
|
|
201
|
-
def service_callback() -> Response:
|
|
202
|
-
"""
|
|
203
|
-
Entry point for the callback from Keycloak on authentication operation.
|
|
204
|
-
|
|
205
|
-
:return: the response containing the token, or *NOT AUTHORIZED*
|
|
206
|
-
"""
|
|
207
|
-
global _keycloak_registry
|
|
208
|
-
|
|
209
|
-
# log the request
|
|
210
|
-
if _logger:
|
|
211
|
-
_logger.debug(msg=_log_init(request=request))
|
|
212
|
-
|
|
213
|
-
# process the callback operation
|
|
214
|
-
errors: list[str] = []
|
|
215
|
-
token_data: tuple[str, str] = _service_callback(registry=_keycloak_registry,
|
|
216
|
-
args=request.args,
|
|
217
|
-
errors=errors,
|
|
218
|
-
logger=_logger)
|
|
219
|
-
result: Response
|
|
220
|
-
if errors:
|
|
221
|
-
result = jsonify({"errors": "; ".join(errors)})
|
|
222
|
-
result.status_code = 400
|
|
223
|
-
else:
|
|
224
|
-
result = jsonify({
|
|
225
|
-
"user_id": token_data[0],
|
|
226
|
-
"access_token": token_data[1]})
|
|
227
|
-
|
|
228
|
-
# log the response
|
|
229
|
-
if _logger:
|
|
230
|
-
_logger.debug(msg=f"Response {result}")
|
|
231
|
-
|
|
232
|
-
return result
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
# @flask_app.route(rule=<token_endpoint>, # JUSBR_TOKEN_ENDPOINT: /iam/jusbr:get-token
|
|
236
|
-
# methods=["GET"])
|
|
237
|
-
def service_token() -> Response:
|
|
238
|
-
"""
|
|
239
|
-
Entry point for retrieving the Keycloak token.
|
|
240
|
-
|
|
241
|
-
:return: the response containing the token, or *UNAUTHORIZED*
|
|
242
|
-
"""
|
|
243
|
-
global _keycloak_registry
|
|
244
|
-
|
|
245
|
-
# log the request
|
|
246
|
-
if _logger:
|
|
247
|
-
_logger.debug(msg=_log_init(request=request))
|
|
248
|
-
|
|
249
|
-
# retrieve the token
|
|
250
|
-
errors: list[str] = []
|
|
251
|
-
token: str = _service_token(registry=_keycloak_registry,
|
|
252
|
-
args=request.args,
|
|
253
|
-
errors=errors,
|
|
254
|
-
logger=_logger)
|
|
255
|
-
result: Response
|
|
256
|
-
if token:
|
|
257
|
-
result = jsonify({"token": token})
|
|
258
|
-
else:
|
|
259
|
-
result = Response("; ".join(errors))
|
|
260
|
-
result.status_code = 401
|
|
261
|
-
|
|
262
|
-
# log the response
|
|
263
|
-
if _logger:
|
|
264
|
-
_logger.debug(msg=f"Response {result}")
|
|
265
|
-
|
|
266
|
-
return result
|
|
267
|
-
|
|
268
|
-
|
|
269
135
|
def keycloak_get_token(user_id: str,
|
|
270
136
|
errors: list[str] = None,
|
|
271
137
|
logger: Logger = None) -> str:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|