|
@@ -1,10 +1,30 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+#
|
|
|
+# Copyright 2015, 2016 OpenMarket Ltd
|
|
|
+# Copyright 2017 New Vector Ltd
|
|
|
+#
|
|
|
+# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
+# you may not use this file except in compliance with the License.
|
|
|
+# You may obtain a copy of the License at
|
|
|
+#
|
|
|
+# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
+#
|
|
|
+# Unless required by applicable law or agreed to in writing, software
|
|
|
+# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
+# See the License for the specific language governing permissions and
|
|
|
+# limitations under the License.
|
|
|
+
|
|
|
+from __future__ import print_function
|
|
|
+
|
|
|
+import argparse
|
|
|
import nacl.signing
|
|
|
import json
|
|
|
import base64
|
|
|
import requests
|
|
|
import sys
|
|
|
import srvlookup
|
|
|
-
|
|
|
+import yaml
|
|
|
|
|
|
def encode_base64(input_bytes):
|
|
|
"""Encode bytes as a base64 string without any padding."""
|
|
@@ -120,11 +140,13 @@ def get_json(origin_name, origin_key, destination, path):
|
|
|
origin_name, key, sig,
|
|
|
)
|
|
|
authorization_headers.append(bytes(header))
|
|
|
- sys.stderr.write(header)
|
|
|
- sys.stderr.write("\n")
|
|
|
+ print ("Authorization: %s" % header, file=sys.stderr)
|
|
|
+
|
|
|
+ dest = lookup(destination, path)
|
|
|
+ print ("Requesting %s" % dest, file=sys.stderr)
|
|
|
|
|
|
result = requests.get(
|
|
|
- lookup(destination, path),
|
|
|
+ dest,
|
|
|
headers={"Authorization": authorization_headers[0]},
|
|
|
verify=False,
|
|
|
)
|
|
@@ -133,17 +155,46 @@ def get_json(origin_name, origin_key, destination, path):
|
|
|
|
|
|
|
|
|
def main():
|
|
|
- origin_name, keyfile, destination, path = sys.argv[1:]
|
|
|
+ parser = argparse.ArgumentParser(
|
|
|
+ description=
|
|
|
+ "Signs and sends a federation request to a matrix homeserver",
|
|
|
+ )
|
|
|
+
|
|
|
+ parser.add_argument(
|
|
|
+ "-c", "--config",
|
|
|
+ type=argparse.FileType('r'),
|
|
|
+ default="homeserver.yaml",
|
|
|
+ help="Path to server config file. Used to read in server name and key "
|
|
|
+ "file",
|
|
|
+ )
|
|
|
+
|
|
|
+ parser.add_argument(
|
|
|
+ "-d", "--destination",
|
|
|
+ default="matrix.org",
|
|
|
+ help="name of the remote homeserver. We will do SRV lookups and "
|
|
|
+ "connect appropriately.",
|
|
|
+ )
|
|
|
+
|
|
|
+ parser.add_argument(
|
|
|
+ "path",
|
|
|
+ help="request path. We will add '/_matrix/federation/v1/' to this."
|
|
|
+ )
|
|
|
+
|
|
|
+ args = parser.parse_args()
|
|
|
+
|
|
|
+ config = yaml.safe_load(args.config)
|
|
|
+ origin_name = config['server_name']
|
|
|
+ keyfile = config['signing_key_path']
|
|
|
|
|
|
with open(keyfile) as f:
|
|
|
key = read_signing_keys(f)[0]
|
|
|
|
|
|
result = get_json(
|
|
|
- origin_name, key, destination, "/_matrix/federation/v1/" + path
|
|
|
+ origin_name, key, args.destination, "/_matrix/federation/v1/" + args.path
|
|
|
)
|
|
|
|
|
|
json.dump(result, sys.stdout)
|
|
|
- print ""
|
|
|
+ print ("")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
main()
|