2018-09-16 20:42:27 +00:00
import requests
from requests_http_signature import HTTPSignatureAuth
2018-09-13 15:35:58 +00:00
2018-09-16 20:42:27 +00:00
saved_headers = { ' HTTP_SIGNATURE ' : ' keyId= " https://queer.party/users/marnanel#main-key " ,algorithm= " rsa-sha256 " ,headers= " (request-target) user-agent host date accept-encoding digest content-type " ,signature= " XGp7GgotKiWOjAZnCscq4/8ZtmjDP1oGM5Ud9Xt3wFsvyE/XuZvq+MfInEGu1PN6PkxWaE6BYEr4L3Id/kBOL5JFpJvXT9A5nkGx0vyACHw876QQerswq0HfHGt3bDqbPlzsVPDReFSxfYSyAh0VRFR7wDBveDV7xjw66KqxqF5tcwFS9jARwuSU2Cu5nsQ/xlkY8tIZ+9JsdX/rZoV7ZMzK+2kU3HH6Qmuy4TN2f0d8ko34B7nWwKZEzCArhakbep2ajpbyYbqQd0g/Ew12HRk3ZSl+CX2K9ZJnKQw3eKG2ivAaizK5C5uG0uzfGcMmI/KgzbV2USjeguVI+o+jFg== " ' , ' mod_wsgi.listener_host ' : ' ' , ' mod_wsgi.request_handler ' : ' wsgi-script ' , ' mod_wsgi.path_info ' : ' /users/fred/inbox ' , ' HTTP_HOST ' : ' unchapeau-dev.marnanel.org ' , ' HTTP_CONNECTION ' : ' close ' , ' mod_wsgi.application_group ' : ' unchapeau-dev.marnanel.org| ' , ' mod_wsgi.script_reloading ' : ' 1 ' , ' mod_wsgi.callable_object ' : ' application ' , ' wsgi.multithread ' : True , ' wsgi.url_scheme ' : ' https ' , ' mod_wsgi.daemon_restarts ' : ' 0 ' , ' SSL_TLS_SNI ' : ' unchapeau-dev.marnanel.org ' , ' SERVER_ADMIN ' : ' webmaster@localhost ' , ' PATH_INFO ' : ' /users/fred/inbox ' , ' SERVER_SOFTWARE ' : ' Apache/2.4.25 (Debian) ' , ' mod_wsgi.handler_script ' : ' ' , ' SCRIPT_NAME ' : ' ' , ' SERVER_SIGNATURE ' : ' <address>Apache/2.4.25 (Debian) Server at unchapeau-dev.marnanel.org Port 443</address> \n ' , ' wsgi.multiprocess ' : True , ' REQUEST_SCHEME ' : ' https ' , ' mod_wsgi.total_requests ' : 3 , ' SERVER_PROTOCOL ' : ' HTTP/1.1 ' , ' HTTP_DATE ' : ' Mon, 03 Sep 2018 19:26:07 GMT ' , ' wsgi.input_terminated ' : True , ' mod_wsgi.thread_requests ' : 1 , ' SERVER_NAME ' : ' unchapeau-dev.marnanel.org ' , ' mod_wsgi.connection_id ' : ' r4FRg4QcX1E ' , ' HTTP_USER_AGENT ' : ' http.rb/3.2.0 (Mastodon/2.4.5; +https://queer.party/) ' , ' SERVER_PORT ' : ' 443 ' , ' wsgi.version ' : ( 1 , 0 ) , ' HTTP_ACCEPT_ENCODING ' : ' gzip ' , ' PATH_TRANSLATED ' : ' /home/marnanel/proj/un_chapeau/un_chapeau/wsgi.py/users/fred/inbox ' , ' SERVER_ADDR ' : ' 172.20.177.129 ' , ' mod_wsgi.daemon_start ' : ' 1536002767374653 ' , ' REMOTE_PORT ' : ' 12026 ' , ' mod_wsgi.thread_id ' : 2 , ' CONTENT_TYPE ' : ' application/activity+json; charset=utf-8 ' , ' DOCUMENT_ROOT ' : ' /var/www/html/uc-fail/ ' , ' QUERY_STRING ' : ' ' , ' CONTEXT_DOCUMENT_ROOT ' : ' /var/www/html/uc-fail/ ' , ' REQUEST_METHOD ' : ' POST ' , ' mod_wsgi.request_id ' : ' dcVSg4QcX1E ' , ' HTTP_DIGEST ' : ' SHA-256=w6LDahS+63b4VwYoWGdfBW1hO28A5lXwC0cNZLRd4hg= ' , ' mod_wsgi.script_start ' : ' 1536002767375121 ' , ' mod_wsgi.daemon_connects ' : ' 1 ' , ' SCRIPT_FILENAME ' : ' /home/marnanel/proj/un_chapeau/un_chapeau/wsgi.py ' , ' mod_wsgi.queue_start ' : ' 1536002767374150 ' , ' CONTENT_LENGTH ' : ' 1280 ' , ' mod_wsgi.ignore_activity ' : ' 0 ' , ' REMOTE_ADDR ' : ' 51.15.146.0 ' , ' GATEWAY_INTERFACE ' : ' CGI/1.1 ' , ' mod_wsgi.script_name ' : ' ' , ' mod_wsgi.listener_port ' : ' 443 ' , ' mod_wsgi.version ' : ( 4 , 6 , 4 ) , ' mod_wsgi.process_group ' : ' un_chapeau_test ' , ' CONTEXT_PREFIX ' : ' ' , ' apache.version ' : ( 2 , 4 , 25 ) , ' REQUEST_URI ' : ' /users/fred/inbox ' , ' wsgi.run_once ' : False , ' mod_wsgi.enable_sendfile ' : ' 0 ' }
2018-09-13 15:35:58 +00:00
saved_body = { " @context " : [ " https://www.w3.org/ns/activitystreams " , " https://w3id.org/security/v1 " , { " manuallyApprovesFollowers " : " as:manuallyApprovesFollowers " , " sensitive " : " as:sensitive " , " movedTo " : " as:movedTo " , " Hashtag " : " as:Hashtag " , " ostatus " : " http://ostatus.org# " , " atomUri " : " ostatus:atomUri " , " inReplyToAtomUri " : " ostatus:inReplyToAtomUri " , " conversation " : " ostatus:conversation " , " toot " : " http://joinmastodon.org/ns# " , " Emoji " : " toot:Emoji " , " focalPoint " : { " @container " : " @list " , " @id " : " toot:focalPoint " } , " featured " : " toot:featured " , " schema " : " http://schema.org# " , " PropertyValue " : " schema:PropertyValue " , " value " : " schema:value " } ] , " id " : " https://queer.party/49ebb121-e105-492f-9140-6ea0dcfcfb8a " , " type " : " Follow " , " actor " : " https://queer.party/users/marnanel " , " object " : " https://unchapeau-dev.marnanel.org/users/fred/user " , " signature " : { " type " : " RsaSignature2017 " , " creator " : " https://queer.party/users/marnanel#main-key " , " created " : " 2018-09-03T19:26:03Z " , " signatureValue " : " eJepWWsHmd4qgtIvRq6bp0KcJZoi1UukyvrrxyrMKNkMOzy1MiwpKA1Se0KaswI9VeHtHpLsv0ueiAkUKrIu652iPBC8BVfeSUa4JGhqoYp/fNuSZM9X8Y9TnC9vT1Pl68kVpfqOBXxFqf7FRro8KUl8591DLJ93eXhtF9t2qoSh2m+vw3jrG/SnLKBsoboqNF02xs59ABVlF3Gy7fNXFBbjnupA5y3vrb6kDT8FAHTlccCfGASGiIPYjQ0AlvG6/vPQB65jZrL8km1EAAfX15G+ilInunMPEh9/D0DQ/OItb4mQL4inC1cUzIa4GZl8hv1BDDv49AgK+pW5SShZzw== " } }
def key_resolver ( key_id , algorithm ) :
2018-09-16 20:42:27 +00:00
return b " -----BEGIN PUBLIC KEY----- \n MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr0urC5s1NwqMoArz5/Ln \n zS6/ICKNUkYlE8OxlVDJXIpfjNDFQtln/Qc2JM4yw8IKOyBwV6JFl78InKUHP6Dd \n 55I8QcrsLa1BIUgu1yu7oJBMkDUXmsOKwvIkAJI5x0a/L/yHsD1jgqtSkrrD7SDt \n VSvYwiKnusi9oUNLHiaufhXv8/qpdkmcjjZrM4VbhYSgiobvzH5nR2JTBcM69uaG \n FUCrbhx5aHmZUf0vIxeKoJtfwNibFQ+OWil47bXjLcWJbw1X9SBRkjvwWm+1Ihpw \n 0c8FeuViBSS15dXFSCxATaOLiFUYMl810ctcIhNn799F59ymgNVNS76Af3xJNWiM \n OQIDAQAB \n -----END PUBLIC KEY----- \n "
def process_header_name ( s ) :
if s . upper ( ) . startswith ( ' HTTP_ ' ) :
s = s [ 5 : ]
return s . replace ( ' _ ' , ' - ' ) . lower ( )
class CaseInsensitiveDict ( dict ) :
def __setitem__ ( self , key , value ) :
super ( ) . __setitem__ ( key . lower ( ) , value )
def __getitem__ ( self , key ) :
return super ( ) . __getitem__ ( key . lower ( ) )
def __contains__ ( self , key ) :
return super ( ) . __contains__ ( key . lower ( ) )
headers = CaseInsensitiveDict ( [ ( process_header_name ( f ) , v ) for ( f , v ) in saved_headers . items ( ) ] )
headers [ ' Authorization ' ] = ' Signature ' + headers [ ' Signature ' ]
request = requests . Request (
method = " POST " ,
url = " https://unchapeau-dev.marnanel.org/users/fred/inbox " ,
headers = headers ,
json = saved_body ,
)
HTTPSignatureAuth . verify ( request , key_resolver = key_resolver )
2018-09-13 15:35:58 +00:00