Пример #1
0
 def doReportExisting(self, event, *args, **kwargs):
     """
     Action method.
     """
     if event == 'skip-check':
         return
     existing_domains = []
     results = args[0]['epp']['response']['resData']['chkData']['cd']
     if not results:
         self.outputs.append(rpc_error.EPPResponseEmpty())
         return
     if not isinstance(results, list):
         results = [results, ]
     for result in results:
         name = result.get('name', {}).get('#text')
         if not name:
             logger.error('unexpected EPP response, unknown domain name: %s', args[0])
             continue
         if result.get('name', {}).get('@avail') == '0':
             if result.get('reason').lower().count('the domain exists'):
                 existing_domains.append(name)
                 self.check_results[name] = True
             else:
                 self.check_results[name] = rpc_error.exception_from_response(response=args[0])
         else:
             self.check_results[name] = False
     self.outputs.append(existing_domains)
     self.outputs.append(args[0])
Пример #2
0
 def doReportFailed(self, event, *args, **kwargs):
     """
     Action method.
     """
     if event == 'error':
         self.outputs.append(args[0])
     else:
         self.outputs.append(rpc_error.exception_from_response(response=args[0]))
Пример #3
0
 def _do_find_errors_in_response(self, response):
     results = None
     resData = response['epp']['response'].get('resData')
     if resData:
         results = resData['chkData']['cd']
     if not results:
         logger.error('unexpected EPP response, no results')
         return [rpc_error.EPPResponseEmpty(), ]
     if not isinstance(results, list):
         results = [results, ]
     for result in results:
         if not result.get('name', {}).get('#text'):
             logger.error('unexpected EPP response, unknown domain name: %s', response)
             return [rpc_error.EPPResponseEmpty(), ]
         if result.get('name', {}).get('@avail') == '0':
             reason = result.get('reason').lower()
             if reason.count('non-supported zone'):
                 return [zerrors.NonSupportedZone(), ]
             if not reason.count('the domain exists'):
                 return [rpc_error.exception_from_response(response=response), ]
     return []
Пример #4
0
def run(json_request, raise_for_result=True, logs=True, **args):
    try:
        json.dumps(json_request)
    except Exception as exc:
        logger.error('epp request failed, invalid json input')
        raise rpc_error.EPPBadResponse('epp request failed, invalid json input')

    if logs:
        if DEBUG:
            logger.debug('        >>> EPP: %s', json_request)
        else:
            logger.info('        >>> EPP: %s', json_request.get('cmd', 'unknown'))

    try:
        rpc_response = do_rpc_request(json_request, **args)
    except rpc_error.EPPError as exc:
        logger.error('epp request failed with known error: %s', exc)
        raise exc
    except Exception as exc:
        logger.error('epp request failed, unexpected error: %s', traceback.format_exc())
        raise rpc_error.EPPBadResponse(exc)

    if not rpc_response:
        logger.error('empty response from epp_gate, connection error')
        raise rpc_error.EPPBadResponse('empty response, connection error')

    try:
        json_output = json.loads(rpc_response)
    except Exception as exc:
        logger.exception('epp request failed, response is not readable')
        raise rpc_error.EPPBadResponse(exc)

    output_error = json_output.get('error')
    if output_error:
        raise rpc_error.EPPBadResponse(output_error)

    if raise_for_result:
        try:
            code = json_output['epp']['response']['result']['@code']
            msg = json_output['epp']['response']['result']['msg'].replace('Command failed;', '')
        except:
            if logs:
                logger.error('bad formatted response: %r', rpc_response)
            raise rpc_error.EPPBadResponse('bad formatted response, response code not found')
        good_response_codes = ['1000', ]
        if True:  # just to be able to debug poll script packets
            good_response_codes.extend(['1300', '1301', ])
        if code not in good_response_codes:
            if logs:
                logger.error('response code failed: %r', json.dumps(json_output, indent=2))
            epp_exc = rpc_error.exception_from_response(response=json_output, message=msg, code=code)
            raise epp_exc

    if logs:
        if DEBUG:
            logger.debug('        <<< EPP: %s', json_output)
        else:
            try:
                code = json_output['epp']['response']['result']['@code']
            except:
                code = 'unknown'
            logger.info('        <<< EPP: %s', code)

    return json_output