import httpx from anydi import singleton from fansifter_common.adapters.ows_account import OwsAccountClient from fansifter_common.auth.account import Account from fansifter_common.auth.services import AuthService from fansifter_common.auth.types import Permission from ows_text_campaigns.campaigns.models import UrlDomain from ows_text_campaigns.campaigns.repositories import UrlDomainRepository @singleton class UrlDomainService: permission = Permission("email_domain", "view") # TODO: replace to url_domain def __init__( self, auth_service: AuthService, ows_account_client: OwsAccountClient, url_domain_repository: UrlDomainRepository, ) -> None: self.auth_service = auth_service self.ows_account_client = ows_account_client self.url_domain_repository = url_domain_repository def get_allowed_domains( self, identity_id: str, account: Account ) -> list[UrlDomain]: account_access = self.auth_service.authorize_account( identity_id, permission=self.permission, account=account, ) # Get brand try: vendor = self.ows_account_client.get_vendor(account.vendor_id) except httpx.HTTPStatusError: return [] domains = self.url_domain_repository.find_by_brand(vendor.brand) return [ domain for domain in domains if domain.account and account_access.has_access(domain.account) or domain.account is None ]