|
|
|
@ -298,9 +298,9 @@ class MatrixFederationHttpClient(object): |
|
|
|
|
json = request.get_json() |
|
|
|
|
if json: |
|
|
|
|
headers_dict[b"Content-Type"] = [b"application/json"] |
|
|
|
|
self.sign_request( |
|
|
|
|
auth_headers = self.build_auth_headers( |
|
|
|
|
destination_bytes, method_bytes, url_to_sign_bytes, |
|
|
|
|
headers_dict, json, |
|
|
|
|
json, |
|
|
|
|
) |
|
|
|
|
data = encode_canonical_json(json) |
|
|
|
|
producer = FileBodyProducer( |
|
|
|
@ -309,11 +309,12 @@ class MatrixFederationHttpClient(object): |
|
|
|
|
) |
|
|
|
|
else: |
|
|
|
|
producer = None |
|
|
|
|
self.sign_request( |
|
|
|
|
auth_headers = self.build_auth_headers( |
|
|
|
|
destination_bytes, method_bytes, url_to_sign_bytes, |
|
|
|
|
headers_dict, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
headers_dict[b"Authorization"] = auth_headers |
|
|
|
|
|
|
|
|
|
logger.info( |
|
|
|
|
"{%s} [%s] Sending request: %s %s", |
|
|
|
|
request.txn_id, request.destination, request.method, |
|
|
|
@ -440,24 +441,23 @@ class MatrixFederationHttpClient(object): |
|
|
|
|
|
|
|
|
|
defer.returnValue(response) |
|
|
|
|
|
|
|
|
|
def sign_request(self, destination, method, url_bytes, headers_dict, |
|
|
|
|
content=None, destination_is=None): |
|
|
|
|
def build_auth_headers( |
|
|
|
|
self, destination, method, url_bytes, content=None, destination_is=None, |
|
|
|
|
): |
|
|
|
|
""" |
|
|
|
|
Signs a request by adding an Authorization header to headers_dict |
|
|
|
|
Builds the Authorization headers for a federation request |
|
|
|
|
Args: |
|
|
|
|
destination (bytes|None): The desination home server of the request. |
|
|
|
|
May be None if the destination is an identity server, in which case |
|
|
|
|
destination_is must be non-None. |
|
|
|
|
method (bytes): The HTTP method of the request |
|
|
|
|
url_bytes (bytes): The URI path of the request |
|
|
|
|
headers_dict (dict[bytes, list[bytes]]): Dictionary of request headers to |
|
|
|
|
append to |
|
|
|
|
content (object): The body of the request |
|
|
|
|
destination_is (bytes): As 'destination', but if the destination is an |
|
|
|
|
identity server |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
None |
|
|
|
|
list[bytes]: a list of headers to be added as "Authorization:" headers |
|
|
|
|
""" |
|
|
|
|
request = { |
|
|
|
|
"method": method, |
|
|
|
@ -484,8 +484,7 @@ class MatrixFederationHttpClient(object): |
|
|
|
|
self.server_name, key, sig, |
|
|
|
|
)).encode('ascii') |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
headers_dict[b"Authorization"] = auth_headers |
|
|
|
|
return auth_headers |
|
|
|
|
|
|
|
|
|
@defer.inlineCallbacks |
|
|
|
|
def put_json(self, destination, path, args={}, data={}, |
|
|
|
|