import json from typing import Optional, Literal, Any from httpx_oauth.clients.openid import OpenID from httpx_oauth.oauth2 import T class MojeIDOAuth(OpenID): def __init__(self, client_id: str, client_secret: str): super().__init__( client_id, client_secret, "https://mojeid.regtest.nic.cz/.well-known/openid-configuration/", "MojeID", base_scopes=["openid", "email", "profile"], ) async def get_user_info(self, token: str) -> Optional[Any]: info = await self.get_profile(token) return { "first_name": info.get("given_name"), "last_name": info.get("family_name"), } async def get_authorization_url( self, redirect_uri: str, state: Optional[str] = None, scope: Optional[list[str]] = None, code_challenge: Optional[str] = None, code_challenge_method: Optional[Literal["plain", "S256"]] = None, extras_params: Optional[T] = None, ) -> str: required_fields = { 'id_token': { 'name': {'essential': True}, 'given_name': {'essential': True}, 'family_name': {'essential': True}, 'email': {'essential': True}, 'mojeid_valid': {'essential': True}, }} if extras_params is None: extras_params = {} extras_params["claims"] = json.dumps(required_fields) return await super().get_authorization_url( redirect_uri, state, scope, code_challenge, code_challenge_method, extras_params, )