oidc-fastapi-test/src/oidc_test/database.py

35 lines
1.1 KiB
Python
Raw Normal View History

# 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
class Database:
users: dict[str, User] = {}
2025-01-09 23:41:32 +01:00
tokens: dict[str, OAuth2Token] = {}
# 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:
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)
db = Database()