def client_config(self, local_part: str, domain_part: str, display_name: str) -> str: root_element = Element('plist', attrib={'version': '1.0'}) domain: Domain = Domain.query.filter_by(name=domain_part).first() if not domain: raise DomainNotFound(f'Domain "{domain_part}" not found') provider: Provider = domain.provider if not provider: raise NoProviderForDomain( f'No provider for domain "{domain_part}"') if not domain.servers: raise NoServersForDomain(f'No servers for domain "{domain_part}"') if domain.ldapserver: lookup_result: LookupResult = self.ldap_lookup( f'{local_part}@{domain_part}', domain.ldapserver) else: lookup_result = LookupResult(STATUS_SUCCESS, display_name, None) inner, outer = _payload(local_part, domain_part) for server in domain.servers: if server.type not in TYPE_DIRECTION_MAP: raise InvalidServerType(f'Invalid server type "{server.type}"') direction = TYPE_DIRECTION_MAP[server.type] inner[f'{direction}MailServerHostName'] = server.name inner[f'{direction}MailServerPortNumber'] = server.port inner[f'{direction}MailServerUsername'] = self.pick_one( server.user_name, lookup_result.uid) inner[ f'{direction}MailServerAuthentication'] = _map_authentication( server) inner[f'{direction}MailServerUseSSL'] = _map_socket_type(server) inner['EmailAccountName'] = lookup_result.cn _sanitise(outer, local_part, domain_part) _subtree(root_element, '', outer) return xml_to_string(root_element)
def client_config(self, local_part, domain_part: str, display_name: str) -> str: domain: Domain = Domain.query.filter_by(name=domain_part).first() root_element = Element('Autodiscover', attrib={'xmlns': NS_AUTODISCOVER_RESPONSE}) response = SubElement(root_element, 'Response', attrib={'xmlns': NS_RESPONSE}) if not domain: raise DomainNotFound(f'Domain "{domain_part}" not found') if domain.ldapserver: lookup_result: LookupResult = self.ldap_lookup( f'{local_part}@{domain_part}', domain.ldapserver) else: lookup_result = LookupResult(STATUS_SUCCESS, display_name, None) if lookup_result.cn: self.user_element(response, lookup_result.cn) account = SubElement(response, 'Account') SubElement(account, 'AccountType').text = 'email' SubElement(account, 'Action').text = 'settings' for server in domain.servers: if server.type not in TYPE_MAP: raise InvalidServerType(f'Invalid server type "{server.type}"') self.protocol_element(account, server, lookup_result.uid) self._sanitise(root_element, local_part, domain_part) return xml_to_string(root_element)
def client_config(self, local_part, domain_part: str, display_name: str) -> str: root_element = Element('clientConfig', attrib={'version': '1.1'}) domain: Domain = Domain.query.filter_by(name=domain_part).first() if not domain: raise DomainNotFound(f'Domain "{domain_part}" not found') if domain.ldapserver: lookup_result: LookupResult = self.ldap_lookup( f'{local_part}@{domain_part}', domain.ldapserver) else: lookup_result = LookupResult(STATUS_SUCCESS, display_name, None) provider: Provider = domain.provider if not provider: raise NoProviderForDomain( f'No provider for domain "{domain_part}"') provider_element = SubElement(root_element, 'emailProvider', attrib={'id': branded_id(provider.id)}) SubElement(provider_element, 'identity') # Deliberately left empty for provider_domain in provider.domains: SubElement(provider_element, 'domain').text = provider_domain.name SubElement(provider_element, 'displayName').text = provider.name SubElement(provider_element, 'displayShortName').text = provider.short_name for server in domain.servers: if server.type not in TYPE_DIRECTION_MAP: raise InvalidServerType(f'Invalid server type "{server.type}"') self.server_element(provider_element, server, lookup_result.uid) return xml_to_string(root_element)