aboutsummaryrefslogtreecommitdiff
path: root/modules/fediverse/ap_actor.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-09-15 10:43:46 +0100
committerGravatar jesopo2019-09-15 10:43:46 +0100
commit54ee1b35946b587e85c8995ed10b9d5eecab802d (patch)
tree9a28d65fd909bd74f848567b695c5fbb50b7658e /modules/fediverse/ap_actor.py
parentremove unneeded "`"s (diff)
re-merge fediverse an fediverse_server, so they can share utils
Diffstat (limited to 'modules/fediverse/ap_actor.py')
-rw-r--r--modules/fediverse/ap_actor.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/modules/fediverse/ap_actor.py b/modules/fediverse/ap_actor.py
new file mode 100644
index 00000000..3f12de0d
--- /dev/null
+++ b/modules/fediverse/ap_actor.py
@@ -0,0 +1,55 @@
+import email.utils
+from src import utils
+from . import ap_utils
+
+class Actor(object):
+ def __init__(self, url):
+ self.url = url
+
+ self.username = None
+ self.inbox = None
+ self.outbox = None
+
+ def load(self):
+ data = ap_utils.activity_request(self.url)
+ self.username = data["preferredUsername"]
+ self.inbox = Inbox(data["inbox"])
+ self.outbox = Outbox(data["outbox"])
+
+class Outbox(object):
+ def __init__(self, url):
+ self._url = url
+
+ def load(self):
+ outbox = ap_utils.activity_request(self._url)
+
+ items = None
+ if "first" in outbox:
+ if type(outbox["first"]) == dict:
+ # pleroma
+ items = outbox["first"]["orderedItems"]
+ else:
+ # mastodon
+ first = ap_utils.activity_request(outbox["first"])
+ items = first["orderedItems"]
+ else:
+ items = outbox["orderedItems"]
+ return items
+
+class Inbox(object):
+ def __init__(self, url):
+ self._url = url
+ def send(activity, private_key):
+ now = email.utils.formatdate(timeval=None, localtime=False, usegmt=True)
+ parts = urllib.parse.urlparse(self._url)
+ headers = [
+ ["host", parts.netloc],
+ ["date", now]
+ ]
+ sign_headers = headers[:]
+ sign_headers.insert(0, ["(request-target)", "post %s" % parts.path])
+ signature = security.signature(private_key.key, sign_headers)
+
+ return ap_utils.request(self._url, activity.format(self),
+ method="POST", private_key=private_key)
+