Add system actor and shared inbox
This commit is contained in:
parent
fd52500591
commit
602e5a3780
|
@ -13,4 +13,5 @@
|
||||||
/media/
|
/media/
|
||||||
/static-collected
|
/static-collected
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
api-test.*
|
||||||
notes.md
|
notes.md
|
||||||
|
|
|
@ -199,6 +199,8 @@ urlpatterns = [
|
||||||
path(".well-known/nodeinfo", activitypub.NodeInfo.as_view()),
|
path(".well-known/nodeinfo", activitypub.NodeInfo.as_view()),
|
||||||
path("nodeinfo/2.0/", activitypub.NodeInfo2.as_view()),
|
path("nodeinfo/2.0/", activitypub.NodeInfo2.as_view()),
|
||||||
path("actor/", activitypub.SystemActorView.as_view()),
|
path("actor/", activitypub.SystemActorView.as_view()),
|
||||||
|
path("actor/inbox/", activitypub.Inbox.as_view()),
|
||||||
|
path("inbox/", activitypub.Inbox.as_view(), name="shared_inbox"),
|
||||||
# Stator
|
# Stator
|
||||||
path(".stator/", stator.RequestRunner.as_view()),
|
path(".stator/", stator.RequestRunner.as_view()),
|
||||||
# Django admin
|
# Django admin
|
||||||
|
|
|
@ -14,6 +14,7 @@ def test_webfinger_actor(client, identity):
|
||||||
# Fetch their actor
|
# Fetch their actor
|
||||||
data = client.get("/@test@example.com/", HTTP_ACCEPT="application/ld+json").json()
|
data = client.get("/@test@example.com/", HTTP_ACCEPT="application/ld+json").json()
|
||||||
assert data["id"] == "https://example.com/@test@example.com/"
|
assert data["id"] == "https://example.com/@test@example.com/"
|
||||||
|
assert data["endpoints"]["sharedInbox"] == "https://example.com/inbox/"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
@ -31,6 +32,7 @@ def test_webfinger_system_actor(client):
|
||||||
data = client.get("/actor/", HTTP_ACCEPT="application/ld+json").json()
|
data = client.get("/actor/", HTTP_ACCEPT="application/ld+json").json()
|
||||||
assert data["id"] == "https://example.com/actor/"
|
assert data["id"] == "https://example.com/actor/"
|
||||||
assert data["inbox"] == "https://example.com/actor/inbox/"
|
assert data["inbox"] == "https://example.com/actor/inbox/"
|
||||||
|
assert data["endpoints"]["sharedInbox"] == "https://example.com/inbox/"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
|
|
@ -296,6 +296,10 @@ class Identity(StatorModel):
|
||||||
"mediaType": media_type_from_filename(self.image.name),
|
"mediaType": media_type_from_filename(self.image.name),
|
||||||
"url": self.image.url,
|
"url": self.image.url,
|
||||||
}
|
}
|
||||||
|
if self.local:
|
||||||
|
response["endpoints"] = {
|
||||||
|
"sharedInbox": f"https://{self.domain.uri_domain}/inbox/",
|
||||||
|
}
|
||||||
return response
|
return response
|
||||||
|
|
||||||
### ActivityPub (inbound) ###
|
### ActivityPub (inbound) ###
|
||||||
|
|
|
@ -43,6 +43,9 @@ class SystemActor:
|
||||||
"id": self.actor_uri,
|
"id": self.actor_uri,
|
||||||
"type": "Application",
|
"type": "Application",
|
||||||
"inbox": self.actor_uri + "inbox/",
|
"inbox": self.actor_uri + "inbox/",
|
||||||
|
"endpoints": {
|
||||||
|
"sharedInbox": f"https://{settings.MAIN_DOMAIN}/inbox/",
|
||||||
|
},
|
||||||
"preferredUsername": self.username,
|
"preferredUsername": self.username,
|
||||||
"url": self.profile_uri,
|
"url": self.profile_uri,
|
||||||
"as:manuallyApprovesFollowers": True,
|
"as:manuallyApprovesFollowers": True,
|
||||||
|
|
|
@ -138,7 +138,7 @@ class Inbox(View):
|
||||||
AP Inbox endpoint
|
AP Inbox endpoint
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def post(self, request, handle):
|
def post(self, request, handle=None):
|
||||||
# Load the LD
|
# Load the LD
|
||||||
document = canonicalise(json.loads(request.body), include_security=True)
|
document = canonicalise(json.loads(request.body), include_security=True)
|
||||||
# Find the Identity by the actor on the incoming item
|
# Find the Identity by the actor on the incoming item
|
||||||
|
|
Loading…
Reference in New Issue