this patch implements those major features: - `publish` is implemented on virtual pubsub service, thus XMPP entities can now publish to AP using this service - replies to XMPP items are managed - `inReplyTo` is filled when converting XMPP items to AP objects - `follow` and `unfollow` (actually an `undo` activity) are implemented and mapped to XMPP's (un)subscribe. On subscription, AP actor's `outbox` collection is converted to XMPP and put in cache. Subscriptions are always public. - `following` and `followers` collections are mapped to XMPP's Public Pubsub Subscription (which should be XEP-0465, but the XEP is not yet published at the time of commit), in both directions. - new helper methods to check if an URL is local and to get JID from actor ID doc will follow to explain behaviour rel 365
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
|
|
# Libervia ActivityPub Gateway
|
|
# Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
IMPORT_NAME = "ap-gateway"
|
|
CONF_SECTION = f"component {IMPORT_NAME}"
|
|
CONTENT_TYPE_AP = "application/activity+json; charset=utf-8"
|
|
TYPE_ACTOR = "actor"
|
|
TYPE_INBOX = "inbox"
|
|
TYPE_SHARED_INBOX = "shared_inbox"
|
|
TYPE_OUTBOX = "outbox"
|
|
TYPE_FOLLOWERS = "followers"
|
|
TYPE_FOLLOWING = "following"
|
|
TYPE_ITEM = "item"
|
|
MEDIA_TYPE_AP = "application/activity+json"
|
|
NS_AP_PUBLIC = "https://www.w3.org/ns/activitystreams#Public"
|
|
# mapping from AP metadata to microblog data
|
|
AP_MB_MAP = {
|
|
"content": "content_xhtml",
|
|
|
|
}
|
|
AP_REQUEST_TYPES = {
|
|
"GET": {TYPE_ACTOR, TYPE_OUTBOX, TYPE_FOLLOWERS, TYPE_FOLLOWING},
|
|
"POST": {"inbox"},
|
|
}
|
|
# headers to check for signature
|
|
SIGN_HEADERS = {
|
|
# headers needed for all HTTP methods
|
|
None: [
|
|
# tuples are equivalent headers/pseudo headers, one of them must be present
|
|
("date", "(created)"),
|
|
("digest", "(request-target)"),
|
|
],
|
|
b"GET": ["host"],
|
|
b"POST": ["digest"]
|
|
}
|
|
PAGE_SIZE = 10
|
|
HS2019 = "hs2019"
|
|
# delay after which a signed request is not accepted anymore
|
|
SIGN_EXP = 12*60*60 # 12 hours (same value as for Mastodon)
|
|
|
|
LRU_MAX_SIZE = 200
|
|
ACTIVITY_TYPES = (
|
|
"Accept", "Add", "Announce", "Arrive", "Block", "Create", "Delete", "Dislike", "Flag",
|
|
"Follow", "Ignore", "Invite", "Join", "Leave", "Like", "Listen", "Move", "Offer",
|
|
"Question", "Reject", "Read", "Remove", "TentativeReject", "TentativeAccept",
|
|
"Travel", "Undo", "Update", "View"
|
|
)
|
|
ACTIVITY_TYPES_LOWER = [a.lower() for a in ACTIVITY_TYPES]
|
|
ACTIVITY_OBJECT_MANDATORY = (
|
|
"Create", "Update", "Delete", "Follow", "Add", "Remove", "Like", "Block", "Undo"
|
|
)
|
|
ACTIVITY_TARGET_MANDATORY = ("Add", "Remove")
|
|
# activities which can be used with Shared Inbox (i.e. with not account specified)
|
|
ACTIVIY_NO_ACCOUNT_ALLOWED = ("create",)
|
|
# maximum number of parents to retrieve when comments_max_depth option is set
|
|
COMMENTS_MAX_PARENTS = 100
|