implement ActivityPub user endpoint
This commit is contained in:
parent
49527495b8
commit
7dac75e566
1 changed files with 45 additions and 7 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
#--require-config tls-certificate
|
||||||
|
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
from src import ModuleManager, utils
|
from src import ModuleManager, utils
|
||||||
|
|
||||||
|
@ -137,11 +139,17 @@ class Module(ModuleManager.BaseModule):
|
||||||
event["stdout"].write("%s: %s - %s" % (preferred_username,
|
event["stdout"].write("%s: %s - %s" % (preferred_username,
|
||||||
content, shorturl))
|
content, shorturl))
|
||||||
|
|
||||||
|
def _ap_self(self):
|
||||||
|
our_username = self.bot.get_setting("fediverse", None)
|
||||||
|
return _parse_username(our_username)
|
||||||
|
def _ap_self_id(self, for_url, our_username):
|
||||||
|
return "https://%s" % url_for("api", "ap-user", {"u": our_username})
|
||||||
|
|
||||||
|
|
||||||
@utils.hook("api.get.ap-webfinger")
|
@utils.hook("api.get.ap-webfinger")
|
||||||
@utils.kwarg("authenticated", False)
|
@utils.kwarg("authenticated", False)
|
||||||
def webfinger(self, event):
|
def ap_webfinger(self, event):
|
||||||
our_username = self.bot.get_setting("fediverse", None)
|
our_username, our_instance = self._ap_self()
|
||||||
our_username, our_instance = _parse_username(our_username)
|
|
||||||
|
|
||||||
resource = event["params"].get("resource", None)
|
resource = event["params"].get("resource", None)
|
||||||
if resource and resource.startswith("acct:"):
|
if resource and resource.startswith("acct:"):
|
||||||
|
@ -150,11 +158,10 @@ class Module(ModuleManager.BaseModule):
|
||||||
|
|
||||||
if (requested_username == our_username and
|
if (requested_username == our_username and
|
||||||
requested_instance == our_instance):
|
requested_instance == our_instance):
|
||||||
|
|
||||||
|
self_id = self._ap_self_id(event["url_for"], our_username)
|
||||||
|
|
||||||
event["response"].content_type = "application/jrd+json"
|
event["response"].content_type = "application/jrd+json"
|
||||||
|
|
||||||
location = "https://%s" % event["url_for"]("api", "ap-user",
|
|
||||||
{"u": our_username})
|
|
||||||
|
|
||||||
event["response"].write_json({
|
event["response"].write_json({
|
||||||
"aliases": [location],
|
"aliases": [location],
|
||||||
"links": [{
|
"links": [{
|
||||||
|
@ -164,3 +171,34 @@ class Module(ModuleManager.BaseModule):
|
||||||
}],
|
}],
|
||||||
"subject": resource
|
"subject": resource
|
||||||
})
|
})
|
||||||
|
@utils.hook("api.get.ap-user")
|
||||||
|
@utils.kwarg("authenticated", False)
|
||||||
|
def ap_user(self, event):
|
||||||
|
our_username, our_instance = self._ap_self()
|
||||||
|
username = event["params"].get("u", None)
|
||||||
|
if username and username == our_username:
|
||||||
|
self_id = self._ap_self._id(event["url_for"], our_username)
|
||||||
|
inbox = event["url_for"]("api", "ap-inbox", {"u": our_username})
|
||||||
|
|
||||||
|
cert_filename = self.bot.config["tls-certificate"]
|
||||||
|
with open(cert_filename) as cert_file:
|
||||||
|
cert = cert_file.read()
|
||||||
|
|
||||||
|
event["response"].content_type = ("application/ld+json; "
|
||||||
|
"profile=\"https://www.w3.org/ns/activitystreams\"")
|
||||||
|
event["response"].write_json({
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1"
|
||||||
|
],
|
||||||
|
"id": self_id,
|
||||||
|
"type": "Person",
|
||||||
|
"preferredUsername": our_username,
|
||||||
|
"inbox": index,
|
||||||
|
|
||||||
|
"publicKey": {
|
||||||
|
"id": "%s#key" % self_id,
|
||||||
|
"owner": self_id,
|
||||||
|
"publicKeyPem": cert
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in a new issue