Files
dify/api/services/account_activation_adapters.py
林玮 (Jade Lin) a6ace29e1a fix(api): handle suspended email domains (#41004)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-08-20 08:04:05 +00:00

71 lines
2.3 KiB
Python

"""Infrastructure gateways for account invitation activation."""
from typing import override
from libs.workspace_permission import check_workspace_member_invite_permission
from services.account_activation_service import (
AccountActivationEligibility,
InvitationTokenStore,
WorkspaceInvitePolicy,
WorkspaceMembershipCache,
)
from services.account_service import RegisterService
from services.billing_service import BillingService
from services.entities.account_activation_entities import InvitationLookup, InvitationToken
class RegisterServiceInvitationTokenStore(InvitationTokenStore):
"""Compatibility adapter around the existing Redis invitation token owner."""
@override
def find(self, invitation: InvitationLookup) -> InvitationToken | None:
data = RegisterService.get_invitation_by_token(
invitation.token,
invitation.workspace_id,
invitation.email,
)
if data is None:
return None
return InvitationToken(
account_id=data["account_id"],
email=data["email"],
workspace_id=data["workspace_id"],
role=data.get("role"),
requires_setup=data.get("requires_setup"),
)
@override
def revoke(self, invitation: InvitationLookup) -> None:
RegisterService.revoke_token(
invitation.workspace_id,
invitation.email,
invitation.token,
)
class DeploymentWorkspaceInvitePolicy(WorkspaceInvitePolicy):
@override
def ensure_allowed(self, workspace_id: str) -> None:
check_workspace_member_invite_permission(workspace_id)
class BillingAccountActivationEligibility(AccountActivationEligibility):
def __init__(self, *, enabled: bool) -> None:
self._enabled = enabled
@override
def get_freeze_type(self, email: str) -> str | None:
if not self._enabled:
return None
return BillingService.get_email_freeze_type(email)
class BillingWorkspaceMembershipCache(WorkspaceMembershipCache):
def __init__(self, *, enabled: bool) -> None:
self._enabled = enabled
@override
def invalidate(self, workspace_id: str) -> None:
if self._enabled:
BillingService.clean_billing_info_cache(workspace_id)