Esempio n. 1
0
 def doRewriteDomainContacts(self, *args, **kwargs):
     """
     Action method.
     """
     dcs = domain_contacts_synchronizer.DomainContactsSynchronizer(
         update_domain=False,
         skip_roles=[
             'registrant',
         ],
         skip_contact_details=False,
         merge_duplicated_contacts=False,
         raise_errors=True,
         accept_code_2304=False,
     )
     try:
         dcs.event(
             'run',
             target_domain=self.target_domain,
         )
     except Exception as exc:
         self.log(self.debug_level,
                  'Exception in DomainContactsSynchronizer: %s' % exc)
         del dcs
         self.event('contacts-rewrite-error', exc)
         return
     outputs = list(dcs.outputs)
     del dcs
     if not outputs:
         logger.error('empty result from DomainContactsSynchronizer: %s',
                      exc)
         self.event(
             'contacts-rewrite-error',
             Exception('Empty result from DomainContactsSynchronizer'))
         return
     if isinstance(outputs[-1], Exception):
         logger.error(
             'found exception in DomainContactsSynchronizer outputs: %s',
             outputs[-1])
         self.event('contacts-rewrite-error', outputs[-1])
         return
     for out in outputs:
         if not isinstance(out, tuple):
             continue
         if not out[0] in [
                 'admin',
                 'billing',
                 'tech',
                 'registrant',
         ]:
             logger.warn(
                 'unexpected output from DomainContactsSynchronizer: %r',
                 out[0])
             continue
     self.outputs.extend(outputs)
     self.event('contacts-replaced', self.latest_registrant_response)
Esempio n. 2
0
 def doRunDomainContactsSync(self, *args, **kwargs):
     """
     Action method.
     """
     if not self.sync_contacts:
         self.event('contacts-ok')
         return
     dcs = domain_contacts_synchronizer.DomainContactsSynchronizer(
         update_domain=False,
         skip_roles=[],
         skip_contact_details=(not self.DomainToBeCreated),
         raise_errors=True,
     )
     try:
         dcs.event(
             'run',
             target_domain=self.target_domain,
         )
     except Exception as exc:
         self.log(self.debug_level,
                  'Exception in DomainContactsSynchronizer: %s' % exc)
         del dcs
         self.event('error', exc)
         return
     outputs = list(dcs.outputs)
     del dcs
     if not outputs:
         logger.error('empty result from DomainContactsSynchronizer: %s' %
                      exc)
         self.event(
             'error',
             Exception('Empty result from DomainContactsSynchronizer'))
         return
     if isinstance(outputs[-1], Exception):
         logger.error(
             'found exception in DomainContactsSynchronizer outputs: %s' %
             outputs[-1])
         self.event('error', outputs[-1])
         return
     for out in outputs:
         if not isinstance(out, tuple):
             continue
         if not out[0] in [
                 'admin',
                 'billing',
                 'tech',
                 'registrant',
         ]:
             logger.warn(
                 'unexpected output from DomainContactsSynchronizer: %r' %
                 out[0])
             continue
     self.outputs.extend(outputs)
     self.event('contacts-ok')
Esempio n. 3
0
def domain_synchronize_contacts(domain_object,
                                skip_roles=[],
                                skip_contact_details=False,
                                merge_duplicated_contacts=False,
                                rewrite_registrant=False,
                                new_registrant=None,
                                raise_errors=False,
                                log_events=True,
                                log_transitions=True):
    """
    Write domain contacts to the back-end including contacts details info.
    Must pass `rewrite_registrant=True` if need to write registrant info also.
    Also de-duplicates contacts if `merge_duplicated_contacts=True`.
    """
    if rewrite_registrant:
        from zen import zcontacts
        new_registrant = new_registrant or zcontacts.get_oldest_registrant(
            domain_object.owner)
    dcs = domain_contacts_synchronizer.DomainContactsSynchronizer(
        update_domain=True,
        skip_roles=skip_roles,
        skip_contact_details=skip_contact_details,
        merge_duplicated_contacts=merge_duplicated_contacts,
        new_registrant=new_registrant,
        log_events=log_events,
        log_transitions=log_transitions,
        raise_errors=raise_errors,
    )
    dcs.event(
        'run',
        target_domain=domain_object,
    )
    outputs = list(dcs.outputs)
    del dcs

    if not outputs or not outputs[-1] or isinstance(outputs[-1], Exception):
        if outputs and isinstance(outputs[-1], Exception):
            logger.error('domain_synchronize_contacts(%r) failed with: %r',
                         domain_object.name, outputs[-1])
        else:
            logger.error(
                'domain_synchronize_contacts(%r) unexpectedly failed with: %r',
                domain_object.name, outputs)
        return outputs or []

    logger.info('domain_synchronize_contacts(%r) finished with %d outputs',
                domain_object.name, len(outputs))
    return outputs
Esempio n. 4
0
def test_domain_update():
    if os.environ.get('E2E', '0') != '1':
        return pytest.skip('skip E2E')  # @UndefinedVariable
    tester = testsupport.prepare_tester_account()
    tester_domain = testsupport.prepare_tester_domain(
        domain_name='test.%s' % settings.ZENAIDA_SUPPORTED_ZONES[0],
        domain_epp_id=rpc_client.make_epp_id(tester.email),
        tester=tester,
    )
    scenario = []
    cs = domain_contacts_synchronizer.DomainContactsSynchronizer(
        update_domain=True,
        log_events=True,
        log_transitions=True,
        raise_errors=True,
    )
    cs.add_state_changed_callback(
        cb=lambda oldstate, newstate, event, *args, **kwargs: scenario.append((
            oldstate,
            newstate,
            event,
        )),
    )
    cs.event('run', target_domain=tester_domain)
    outputs = list(cs.outputs)
    del cs
    assert scenario == [
        ('AT_STARTUP', 'SYNC_CONTACTS', 'run'),
        ('SYNC_CONTACTS', 'DOMAIN_INFO?', 'all-contacts-in-sync'),
        ('DOMAIN_INFO?', 'DOMAIN_UPDATE', 'response'),
        ('DOMAIN_UPDATE', 'DONE', 'response'),
    ]
    assert len(outputs) == 5
    assert outputs[0][0] == 'admin'
    assert outputs[0][1]['epp']['response']['resData']['creData'][
        'id'] == tester_domain.contact_admin.epp_id
    assert outputs[1][0] == 'billing'
    assert outputs[1][1]['epp']['response']['resData']['creData'][
        'id'] == tester_domain.contact_billing.epp_id
    assert outputs[2][0] == 'registrant'
    assert outputs[2][1]['epp']['response']['resData']['creData'][
        'id'] == tester_domain.registrant.epp_id
    assert outputs[3][0] == 'tech'
    assert outputs[3][1]['epp']['response']['resData']['creData'][
        'id'] == tester_domain.contact_tech.epp_id