def parse(self, signature, payload):
     if isinstance(payload, text_type):
         payload = payload.encode('ascii')
     if re.search(b"[^A-Za-z0-9+=/\n]", payload):
         raise InvalidSignatureError("payload contains illegal characters")
     self.__validate_signature(signature, payload)
     attributes = XmlUtil.dict_from_xml(base64.decodestring(payload))
     return WebhookNotification(self.gateway, attributes['notification'])
Example #2
0
def parse(request):
    form = WebhookParseForm(request.DATA)
    if not form.is_valid():
        raise FormError(form.errors)

    # Parse the gateway without doing a validation on this server.
    # The validation has happened on the solitude-auth server.
    gateway = get_client().Configuration.instantiate().gateway()
    payload = base64.decodestring(form.cleaned_data['bt_payload'])
    attributes = XmlUtil.dict_from_xml(payload)
    parsed = WebhookNotification(gateway, attributes['notification'])

    log.info('Received webhook: {p.kind}.'.format(p=parsed))
    debug_log.debug(parsed)

    processor = Processor(parsed)
    processor.process()
    data = processor.data
    return Response(data, status=200 if data else 204)
Example #3
0
def notification(**kwargs):
    data = {'kind': 'test', 'subject': {}}
    data.update(kwargs)
    return WebhookNotification(None, data)
Example #4
0
 def parse(self, signature, payload):
     self.__validate_signature(signature, payload)
     attributes = XmlUtil.dict_from_xml(base64.decodestring(payload))
     return WebhookNotification(self.gateway, attributes['notification'])