mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-02-25 23:21:21 +01:00
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
|
"""Keycloak SSO Login Helper
|
||
|
"""
|
||
|
|
||
|
from typing import Optional
|
||
|
|
||
|
import httpx
|
||
|
from fastapi_sso.sso.base import DiscoveryDocument, OpenID, SSOBase
|
||
|
|
||
|
|
||
|
class KeycloakSSO(SSOBase):
|
||
|
"""Class providing login via Keycloak OAuth"""
|
||
|
|
||
|
provider = "keycloak"
|
||
|
scope = ["openid", "email", "profile"]
|
||
|
discovery_url = ""
|
||
|
|
||
|
async def openid_from_response(
|
||
|
self, response: dict, session: Optional["httpx.AsyncClient"] = None
|
||
|
) -> OpenID:
|
||
|
"""Return OpenID from user information provided by Keycloak"""
|
||
|
return OpenID(
|
||
|
email=response.get("email", ""),
|
||
|
provider=self.provider,
|
||
|
id=response.get("sub"),
|
||
|
first_name=response.get("given_name"),
|
||
|
last_name=response.get("family_name"),
|
||
|
display_name=response.get("name"),
|
||
|
picture=response.get("picture"),
|
||
|
)
|
||
|
|
||
|
async def get_discovery_document(self) -> DiscoveryDocument:
|
||
|
"""Get document containing handy urls"""
|
||
|
async with httpx.AsyncClient() as session:
|
||
|
response = await session.get(self.discovery_url)
|
||
|
content = response.json()
|
||
|
|
||
|
return content
|