mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""Infrastructure adapters for Web app access policy queries."""
|
|
|
|
import json
|
|
from typing import Protocol, override
|
|
|
|
import httpx
|
|
from pydantic import ValidationError
|
|
|
|
from enums import WebAppAccessMode
|
|
from services.enterprise.enterprise_service import WebAppSettings
|
|
from services.errors.enterprise import EnterpriseServiceError
|
|
from services.webapp_access_query_service import WebAppAccessPolicyGateway, WebAppAccessUnavailableError
|
|
|
|
|
|
class EnterpriseWebAppAuthService(Protocol):
|
|
def get_app_access_mode_by_id(self, app_id: str) -> WebAppSettings: ...
|
|
|
|
def is_user_allowed_to_access_webapp(self, user_id: str, app_id: str) -> bool: ...
|
|
|
|
|
|
class EnterpriseWebAppAccessPolicyGateway(WebAppAccessPolicyGateway):
|
|
def __init__(self, *, webapp_auth: EnterpriseWebAppAuthService) -> None:
|
|
self._webapp_auth = webapp_auth
|
|
|
|
@override
|
|
def get_access_mode(self, app_id: str) -> WebAppAccessMode:
|
|
try:
|
|
settings = self._webapp_auth.get_app_access_mode_by_id(app_id)
|
|
except (
|
|
EnterpriseServiceError,
|
|
httpx.RequestError,
|
|
json.JSONDecodeError,
|
|
UnicodeDecodeError,
|
|
ValidationError,
|
|
) as error:
|
|
raise WebAppAccessUnavailableError from error
|
|
|
|
try:
|
|
return WebAppAccessMode(settings.access_mode)
|
|
except ValueError as error:
|
|
raise WebAppAccessUnavailableError from error
|
|
|
|
@override
|
|
def is_user_allowed(self, *, user_id: str, app_id: str) -> bool:
|
|
try:
|
|
return self._webapp_auth.is_user_allowed_to_access_webapp(user_id, app_id)
|
|
except (EnterpriseServiceError, httpx.RequestError, json.JSONDecodeError, UnicodeDecodeError) as error:
|
|
raise WebAppAccessUnavailableError from error
|