diff options
Diffstat (limited to 'modules/fediverse/ap_actor.py')
| -rw-r--r-- | modules/fediverse/ap_actor.py | 55 |
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) + |
