-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path__init__.py
More file actions
40 lines (30 loc) · 1.32 KB
/
__init__.py
File metadata and controls
40 lines (30 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from enum import Enum
from typing import Union
from fastapi import FastAPI
from fastapi_keycloak import FastAPIKeycloak
from app.common.infra.keycloak import KeycloakSettings, get_keycloak_settings, configure_keycloak_api
class IDPType(Enum):
KEYCLOAK = 0
def get_idp(keycloak_settings: Union[KeycloakSettings, None]):
# Check if configuration is defined to use Keycloak IDP
if keycloak_settings is None or keycloak_settings.auth_server is None or keycloak_settings.realm is None:
return None, None
else:
try:
# Configure Keycloak Authentication
idp_local = FastAPIKeycloak(
server_url=keycloak_settings.auth_server,
client_id=keycloak_settings.client_id,
client_secret=keycloak_settings.client_secret,
admin_client_secret=keycloak_settings.admin_client_secret,
realm=keycloak_settings.realm,
callback_uri=keycloak_settings.callback_uri
)
return idp_local, IDPType.KEYCLOAK
except Exception:
# If Keycloak not available return None to disable
return None, None
idp, idp_type = get_idp(keycloak_settings=get_keycloak_settings())
def configure_api(api: FastAPI):
if idp_type == IDPType.KEYCLOAK:
configure_keycloak_api(api)