Skip to content
Snippets Groups Projects
signing.py 1012 B
Newer Older
  • Learn to ignore specific revisions
  • import requests
    import requests_http_signature
    
    
    def verify(request, public_key):
        return requests_http_signature.HTTPSignatureAuth.verify(
            request,
    
            key_resolver=lambda **kwargs: public_key,
            use_auth_header=False,
    
        )
    
    
    def verify_django(django_request, public_key):
        """
        Given a django WSGI request, create an underlying requests.PreparedRequest
        instance we can verify
        """
        headers = django_request.META.get('headers', {}).copy()
        for h, v in list(headers.items()):
            # we include lower-cased version of the headers for compatibility
            # with requests_http_signature
            headers[h.lower()] = v
        try:
    
            signature = headers['signature']
    
        except KeyError:
            raise exceptions.MissingSignature
    
        request = requests.Request(
            method=django_request.method,
            url='http://noop',
            data=django_request.body,
            headers=headers)
    
        prepared_request = request.prepare()
        return verify(request, public_key)