Commit graph libervia-backend/sat/plugins
Author SHA1 Message Date
Goffi
adea3770de component AP gateway: events:
- XMPP Events <=> AP Events conversion
- `Join`/`Leave` activities are converted to RSVP attachments and vice versa
- fix caching/notification on item published on a virtual pubsub node
- add Ad-Hoc command to convert XMPP Jid/Node to virtual AP Account
- handle `Update` activity
- on `convertAndPostItems`, `Update` activity is used instead of `Create` if a version of
  the item is already present in cache
- `events` field is added to actor data (and to `endpoints`), it links the `outbox` of the
  actor mapping the same JID with the Events node (i.e. it links to the Events node of the
  entity)
- fix subscription to nodes which are not the microblog one

rel 372
2022-09-22 00:01:41 +02:00
Goffi
7793a482a2 plugin events: update following Events protoXEP submission:
update the plugin to follow the specification proposed at
https://github.com/xsf/xeps/pull/1206

Events are internally converted to a dict following a format described in
`event_data_2_event_elt` docstring.

RSVP mechanism now uses Pubsub Attachments (XEP-0470), with a user extensible data form.

Bridge methods signatures have changed.

rel 372
2022-09-21 22:41:49 +02:00
Goffi
cfbbe66358 plugin XEP-0470: add create_attachments_node method:
this method create the attachments node if it doesn't already exists, and use same access
model as target item, and an `open` publish model.

rel 372
2022-09-21 22:36:30 +02:00
Goffi
2389f235f1 plugin XEP-0050: use coroutine + minor code readability improvments:
rel 372
2022-09-21 22:33:59 +02:00
Goffi
2502e5062a plugin XEP-0060: raise an NotFound exception instead of StanzaError in subscribe:
`exceptions.NotFound` is now raised in stead of `item-not-found` `StanzaError` for
consistency with `getItems` and because it's easier to catch (condition has to be checked
when `StanzaError` is received).

rel 372
2022-09-21 22:32:36 +02:00
Goffi
e80df24bb1 plugin XEP-0447: Stateless File Sharing implementation:
rel 379
2022-09-21 22:28:20 +02:00
Goffi
a884331ed2 plugin XEP-0446: File Metadata implementation:
rel 379
2022-09-21 22:27:28 +02:00
Goffi
d30b63b617 plugin XEP-0103: URL Address Information implementation:
rel 379
2022-09-21 22:26:48 +02:00
Goffi
fe1deb10cd plugin XEP-0080: User Location implementation:
rel 372
2022-09-21 22:23:57 +02:00
Goffi
5e3d4ca581 component AP gateway: AP <=> XMPP reactions conversions:
- Pubsub Attachments plugin has been renamed to XEP-0470 following publication
- XEP-0470 has been updated to follow 0.2 changes
- AP reactions (as implemented in Pleroma) are converted to XEP-0470
- XEP-0470 events are converted to AP reactions (again, using "EmojiReact" from Pleroma)
- AP activities related to attachments (like/reactions) are cached in Libervia because
  it's not possible to retrieve them from Pleroma instances once they have been emitted
  (doing an HTTP get on their ID returns a 404). For now those cache are not flushed, this
  should be improved in the future.
- `sharedInbox` is used when available. Pleroma returns a 500 HTTP error when ``to`` or
  ``cc`` are used in a direct inbox.
- reactions and like are not currently used for direct messages, because they can't be
  emitted from Pleroma in this case, thus there is no point in implementing them for the
  moment.

rel 371
2022-08-31 17:07:03 +02:00
Goffi
7ddf0241c6 plugin XEP-0424: rename bridge method:
``messRetract`` is renamed to ``messageRetract`` for consistency with other message bridge
methods.
2022-08-31 17:07:03 +02:00
Goffi
943ef29e90 plugin XEP-0444: Message Reactions implementation:
rel 371
2022-08-31 17:07:03 +02:00
Goffi
1f03f3ee14 component AP gateway: work around encoding bug in Mastodon:
Mastodon in wrongly unquoting URL path in `(request-target)`, and thus Libervia was doing
the same to check signature. However that doesn't work with Pleroma which is using the
path value used in the request (percent-encoded), and thus Pleroma signature were
rejected.

To work around that, signature is first checked without unquoting, and if this fails a new
check is done with unquoting.

Bug has been reported at https://github.com/mastodon/mastodon/issues/18871

rel 371
2022-08-31 17:07:03 +02:00
Goffi
30774ae9ad component AP gateway: fix headers case in signature:
headers where not lower-cased in `headers` field of signature data, resulting in signature
being rejected by Pleroma (but it was working with Mastodon).

Also add `Content-Type` header.


rel 371
2022-08-31 17:07:03 +02:00
Goffi
d8a55dbcba component AP gateway: add aliases to webfinger data 2022-08-31 17:07:03 +02:00
Goffi
eb797103e6 component AP gateway: better verbose logging:
gather data to show according to verbosity and log it all at once with a small `<<<` or
`>>>` indicating the direction. With a verbosity of 3, headers are also shown.
2022-08-31 17:07:03 +02:00
Goffi
c437424053 component AP gateway: raise exceptions on apGet + fix exceptions catching in apGetLocalObject:
new `exceptions.ExternalRequestError` is raised when request done `apGet` has a return
code >= 300.

Fix wrong exception catched in `apGetLocalObject`.
2022-08-31 17:07:01 +02:00
Goffi
672174fb23 tools: renamed module sat.tools.datetime to date.tools.xmpp_datetime to avoid conflict with Python's standard lib 2022-08-31 13:18:56 +02:00
Syndace
d1b5ff0c41 plugin XEP-0420: Implementation of Stanza Content Encryption:
Includes implementation of XEP-0082 (XMPP date and time profiles) and tests for both new plugins.
Everything is type checked, linted, format checked and unit tested.
Adds new dependency xmlschema.

fix 377
2022-08-23 12:04:11 +02:00
Goffi
b79a06e488 plugin mr mercurial: limit export to ancestors of working directory parent 2022-08-23 23:37:22 +02:00
Goffi
b6d57c0495 plugin merge-requests: fix await use on blocking method 2022-08-23 13:00:07 +02:00
Goffi
2cee9c9519 component AP gateway: fix item ID for XMPP items on Announce:
if an Announced item is from XMPP, the AP id must be parsed to retrieve the XMPP original
ID.

rel 370
2022-07-22 15:42:59 +02:00
Goffi
9089a6494e component AP gateway: handle Like and Undo/Like activities:
rel 370
2022-07-21 18:07:35 +02:00
Goffi
a945d3cb67 component AP gateway (pubsub): only emit a Follow activity for microblog subscription:
this avoid to emit Follow subscription when an entity wants to subscribe to attachments
or other special nodes.

rel 370
2022-07-21 18:05:20 +02:00
Goffi
c20e09fb22 plugin XEP-0060: sender can now be specified in sendItems and publish:
if not sended is set, `client.jid` is used.
2022-07-21 18:02:33 +02:00
Goffi
d841a51a1a component AP gateway: handle XMPP attachments -> AP likes conversion:
convert `noticed` attachments coming from XMPP to suitable `Like` activities. Virtual node
is created in cache when necessary, and virtual items published to virtual JID mapping AP
accounts are cached too.

rel 370
2022-07-20 17:53:12 +02:00
Goffi
89f67ee50d plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
This is an implementation of the "Basic Usage" of
https://xmpp.org/extensions/inbox/pubsub-attachments.html.

rel 370
2022-07-20 17:49:51 +02:00
Goffi
60a747b6f8 plugin pubsub cache: replace empty list by None in getItemsFromCache:
if an empty list is used, no item can be retrieved, this patch replace empty list by None
to avoid this case.
2022-07-20 17:46:58 +02:00
Goffi
38c5cc2fba plugin XEP-0277: add a trigger to send method:
rel 370
2022-07-20 17:19:53 +02:00
Goffi
6c170ef8cc plugin XEP-0060, tools (utils): doc/type hints 2022-07-20 17:18:17 +02:00
Goffi
8d64157d88 core: fix calls to domish.Element.elements:
domish.Element.elements should be called with namespace and element name as 2 arguments,
but it has been confused in several places with the call to `domish.Element.addElement`
which is often done with a `(namespace, name)` tuple. Unfortunately calling with a tuple
is accepted and doesn't raise any error in `elements`, but this result in a wrong element
returned.

This patch fixes the erroneous calls.
2022-07-20 17:12:29 +02:00
Goffi
51f786bc21 component AP gateway: when a repeated blog post is retracted, it converted to suitable Activity:
when a retract item is received, the former item is now retrieve from cache, and if it was
a "repeat" blog post, it is converted to the suitable `Undo` of `Announce` activity
(instead of the default `Delete` activity).

rel 370
2022-07-14 12:55:30 +02:00
Goffi
ee898b120d component AP gateway: "repeat" to "Announce" conversion:
when an XMPP blog post is marked as repeated, it is converted to an AP Announce activity

rel 370
2022-07-14 12:55:30 +02:00
Goffi
5ceb75a137 plugin XEP-0060: fix bad naming of return variable 2022-07-14 12:55:30 +02:00
Goffi
e73d4ebeff component AP gateway: fix wrong exception + use of mb_data["xml"] when it may be absent 2022-07-14 12:55:30 +02:00
Goffi
eb5b89d113 component AP gateway: we need to use actor and not attributedTo for activities:
`attributedTo` may not be filled, notably when the object is a string URL
2022-07-14 12:55:30 +02:00
Goffi
9a5801fedd component AP gateway: get items when not found in cache in apGetLocalObject:
rel 370
2022-07-14 12:55:30 +02:00
Goffi
9f6d69c75d component AP gateway: use the new priority argument of addManagedNode:
priority is needed because we'll need to inspect former items on retract to check the
Acitivy to use (it may be an `Undo` activity is some cases), and this must be done before
the cache is updated by pubsub cache plugin.

rel 370
2022-07-14 12:55:30 +02:00
Goffi
c2ee7cbbbc plugin XEP-0060: handle priority in addManagedNode:
Priority lets order the callback list when an event is received. This is important in some
use case, notably when a plugin needs to check the former item before it is deleted from
cache or updated.

rel 370
2022-07-14 12:55:30 +02:00
Goffi
c7945a0ed6 plugin XEP-0277: return ID of published item in send and bridge's mbSend 2022-07-14 12:55:30 +02:00
Goffi
cd9d1d27e3 component AP gateway: new verbose attribute in AP gateway to activate debug logs:
when verbose is not null, object posted or returned on GET request are logged. Check
comments for vebosity level
2022-07-14 12:55:30 +02:00
Goffi
f4af47a929 component AP gateway: return item when item URL is used:
a request on an `item` type URL will return the suitable cached item.

rel 370
2022-07-14 12:55:30 +02:00
Goffi
7bd01dd06c component AP gateway: use createActivity in mbdata2APitem 2022-07-14 12:55:30 +02:00
Goffi
6e74e19c73 component AP gateway: Announce activity implementation:
`Announce` and `Undo` of `Announce` are now implemented and converted to suitable XEP-0277
"repeat" items, or retract.

rel 370
2022-07-14 12:55:30 +02:00
Goffi
575c3fe768 component AP gateway: getAPAccountFromId now works with local IDs:
rel 370
2022-07-14 12:55:30 +02:00
Goffi
fe4dc35f5c component AP gateway: apGetObject and apGetList now work with local object:
When a local item is linked, it is found from database instead of doing an HTTP request.

rel 370
2022-07-14 12:55:30 +02:00
Goffi
2550264eda plugin XEP-0277: post repeating implementation:
Repeating a post as specified at https://xmpp.org/extensions/xep-0277.html#repeat is now
implemented. On sending, one can either use the new `repeat` method (or the bridge
`mbRepeat` one from frontends) to repeat any XEP-0277 item, or use the field `repeated` in
microblog data's `extra`. This field must mainly contains the `by` field with JID of
repeater (the "author*" field being filled with original author metadata), and the `uri`
field with link (usually `xmpp:` one) to repeated item.

When receiving a repeated item, the same `repeated` field is filled.

rel 370
2022-07-13 12:15:04 +02:00
Goffi
9e2f4571f6 component AP gateway: convert XMPP mentions to AP:
When a XEP-0372 mention is received, the linked pubsub item is looked after in cache, and
if found, it is send to mentioned entity with `mention` tag added.

However, this doesn't work in some cases (see incoming doc for details). To work around
that, `@user@server.tld` type mention are also scanned in body, and mentions are added
when found (this can be disabled with `auto_mentions` setting).

Mention are only scanned in "public" messages, i.e. for pubsub items, and not direct
messages.

rel 369
2022-07-10 16:15:06 +02:00
Goffi
2c654e017d component AP gateway: convert AP mention to XEP-0372 mentions:
when a mentions are found in AP items (either with people specified directly as target, of
with `mention` tags as in
https://www.w3.org/TR/activitystreams-vocabulary/#microsyntaxes), they are converted to
XEP-0372 `mention` references.

This is only done for Pubsub items (i.e. not for private messages).

rel 369
2022-07-10 15:16:15 +02:00
Goffi
a626b8b888 plugin pubsub cache: resync in synchronise when node's sync_state is not set:
synchronisation used to be skipped when the node was existing and `resync` was not set,
however the case happens when a node is subscribed but not synchronised, thus this patch
update the behaviour to be sure to have the node synchronised.

rel 369
2022-07-10 15:16:15 +02:00