示例#1
0
文件: apple.py 项目: gratuxri/automx2
 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)
示例#2
0
 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)
示例#3
0
 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)