Files
dify/api/services/account_activation_adapters.py
T
Byron.wangandautofix-ci[bot] ba61ab4f9f refactor(api): extract account activation application service (#40421)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-08-18 05:27:40 +00:00

69 lines
2.2 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 is_frozen(self, email: str) -> bool:
return self._enabled and BillingService.is_email_in_freeze(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)