2026-01-01 23:17:19 -03:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from typing import Any
|
|
|
|
|
from urllib.parse import quote
|
|
|
|
|
|
|
|
|
|
from flask import jsonify, request
|
|
|
|
|
|
|
|
|
|
from .. import settings
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def register(app) -> None:
|
|
|
|
|
@app.route("/api/auth/config", methods=["GET"])
|
|
|
|
|
def auth_config() -> Any:
|
|
|
|
|
if not settings.KEYCLOAK_ENABLED:
|
|
|
|
|
return jsonify({"enabled": False})
|
|
|
|
|
|
|
|
|
|
issuer = settings.KEYCLOAK_ISSUER
|
|
|
|
|
public_origin = request.host_url.rstrip("/")
|
|
|
|
|
redirect_uri = quote(f"{public_origin}/", safe="")
|
|
|
|
|
login_url = (
|
|
|
|
|
f"{issuer}/protocol/openid-connect/auth"
|
|
|
|
|
f"?client_id={quote(settings.KEYCLOAK_CLIENT_ID, safe='')}"
|
|
|
|
|
f"&redirect_uri={redirect_uri}"
|
|
|
|
|
f"&response_type=code"
|
|
|
|
|
f"&scope=openid"
|
|
|
|
|
)
|
2026-01-01 23:40:21 -03:00
|
|
|
reset_url = (
|
|
|
|
|
f"{issuer}/login-actions/reset-credentials"
|
|
|
|
|
f"?client_id={quote(settings.KEYCLOAK_CLIENT_ID, safe='')}"
|
|
|
|
|
f"&redirect_uri={redirect_uri}"
|
|
|
|
|
)
|
2026-01-02 13:06:52 -03:00
|
|
|
account_url = f"{issuer}/account"
|
|
|
|
|
account_password_url = f"{account_url}/#/security/signingin"
|
2026-01-01 23:17:19 -03:00
|
|
|
|
|
|
|
|
return jsonify(
|
|
|
|
|
{
|
|
|
|
|
"enabled": True,
|
|
|
|
|
"url": settings.KEYCLOAK_URL,
|
|
|
|
|
"realm": settings.KEYCLOAK_REALM,
|
|
|
|
|
"client_id": settings.KEYCLOAK_CLIENT_ID,
|
|
|
|
|
"login_url": login_url,
|
2026-01-01 23:40:21 -03:00
|
|
|
"reset_url": reset_url,
|
2026-01-02 13:06:52 -03:00
|
|
|
"account_url": account_url,
|
|
|
|
|
"account_password_url": account_password_url,
|
2026-01-01 23:17:19 -03:00
|
|
|
}
|
|
|
|
|
)
|