2025-01-05 05:06:58 +01:00
|
|
|
# Implement a fake in-memory database interface for demo purpose
|
|
|
|
|
|
|
|
from authlib.integrations.starlette_client.apps import StarletteOAuth2App
|
|
|
|
|
2025-01-09 23:41:32 +01:00
|
|
|
from .models import User, OAuth2Token
|
2025-01-05 05:06:58 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Database:
|
|
|
|
users: dict[str, User] = {}
|
2025-01-09 23:41:32 +01:00
|
|
|
tokens: dict[str, OAuth2Token] = {}
|
2025-01-05 05:06:58 +01:00
|
|
|
|
|
|
|
# Last sessions for the user (key: users's subject id (sub))
|
|
|
|
|
|
|
|
async def add_user(
|
|
|
|
self, sub: str, user_info: dict, oidc_provider: StarletteOAuth2App
|
|
|
|
) -> User:
|
|
|
|
user = User.from_auth(userinfo=user_info, oidc_provider=oidc_provider)
|
|
|
|
self.users[sub] = user
|
|
|
|
return user
|
|
|
|
|
2025-01-09 23:41:32 +01:00
|
|
|
async def get_user(self, sub: str) -> User:
|
2025-01-05 05:06:58 +01:00
|
|
|
return self.users[sub]
|
|
|
|
|
2025-01-09 23:41:32 +01:00
|
|
|
async def add_token(self, token_dict: dict, user: User) -> None:
|
|
|
|
# FIXME: The tokens are stored with the user.sub key, meaning that
|
|
|
|
# sessions logged in with different clients simultanously will
|
|
|
|
# interfer with ezach others.
|
|
|
|
self.tokens[user.sub] = OAuth2Token.from_dict(token_dict=token_dict, user=user)
|
|
|
|
|
|
|
|
async def get_token(self, name) -> OAuth2Token | None:
|
|
|
|
return self.tokens.get(name)
|
|
|
|
|
2025-01-05 05:06:58 +01:00
|
|
|
|
|
|
|
db = Database()
|