Spaces:
Build error
Build error
File size: 3,302 Bytes
51ff9e5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
from dataclasses import dataclass
from fastapi import Request
from pydantic import SecretStr
from openhands.integrations.provider import PROVIDER_TOKEN_TYPE
from openhands.server import shared
from openhands.server.settings import Settings
from openhands.server.user_auth.user_auth import UserAuth
from openhands.storage.data_models.user_secrets import UserSecrets
from openhands.storage.secrets.secrets_store import SecretsStore
from openhands.storage.settings.settings_store import SettingsStore
@dataclass
class DefaultUserAuth(UserAuth):
"""Default user authentication mechanism"""
_settings: Settings | None = None
_settings_store: SettingsStore | None = None
_secrets_store: SecretsStore | None = None
_user_secrets: UserSecrets | None = None
async def get_user_id(self) -> str | None:
"""The default implementation does not support multi tenancy, so user_id is always None"""
return None
async def get_user_email(self) -> str | None:
"""The default implementation does not support multi tenancy, so email is always None"""
return None
async def get_access_token(self) -> SecretStr | None:
"""The default implementation does not support multi tenancy, so access_token is always None"""
return None
async def get_user_settings_store(self) -> SettingsStore:
settings_store = self._settings_store
if settings_store:
return settings_store
user_id = await self.get_user_id()
settings_store = await shared.SettingsStoreImpl.get_instance(
shared.config, user_id
)
if settings_store is None:
raise ValueError('Failed to get settings store instance')
self._settings_store = settings_store
return settings_store
async def get_user_settings(self) -> Settings | None:
settings = self._settings
if settings:
return settings
settings_store = await self.get_user_settings_store()
settings = await settings_store.load()
self._settings = settings
return settings
async def get_secrets_store(self) -> SecretsStore:
secrets_store = self._secrets_store
if secrets_store:
return secrets_store
user_id = await self.get_user_id()
secret_store = await shared.SecretsStoreImpl.get_instance(
shared.config, user_id
)
if secret_store is None:
raise ValueError('Failed to get secrets store instance')
self._secrets_store = secret_store
return secret_store
async def get_user_secrets(self) -> UserSecrets | None:
user_secrets = self._user_secrets
if user_secrets:
return user_secrets
secrets_store = await self.get_secrets_store()
user_secrets = await secrets_store.load()
self._user_secrets = user_secrets
return user_secrets
async def get_provider_tokens(self) -> PROVIDER_TOKEN_TYPE | None:
user_secrets = await self.get_user_secrets()
if user_secrets is None:
return None
return user_secrets.provider_tokens
@classmethod
async def get_instance(cls, request: Request) -> UserAuth:
user_auth = DefaultUserAuth()
return user_auth
|