Commit graph libervia-backend/libervia/backend/plugins
Author SHA1 Message Date
Goffi
7696afb3d8 core: uid is now set in extra in client.sendMessage:
By setting `uid` in extra, it can now be specified by frontends.
2026-07-09 17:13:37 +02:00
Goffi
5ed83ae9e3 plugin XEP-0085: Modernisation:
- Async coroutines, type hints
- Use client plugin data instead of per-profile dict
- Detect chat state availability with disco queries
- Better spec compliance
2026-07-02 15:35:23 +02:00
Goffi
7d2d97fa75 plugin XEP-0045: Notification on mention:
If a mention is detected in a MUC (`groupchat`, not DM), a notification is sent.
2026-06-26 23:03:24 +02:00
Goffi
b65325c1d6 plugin XEP-0084: Support multiple images format:
XEP-0084 implementation was only supporting PNG, but some client (notably Conversations)
don't publish PNG, so we have to handle a few other formats.
2026-06-21 12:52:57 +02:00
Goffi
a909d99fa9 plugin XEP-0374, XEP-0384: use debug instead of warning logs:
Those cases are expected on semi-anonymous rooms, thus a warning is inappropriate.
2026-06-20 15:06:55 +02:00
Goffi
09848498cd plugin XEP-0373: Fix local exceptions shadowing core.exceptions 2026-06-20 10:48:16 +02:00
Goffi
de13f16791 plugin XEP-0045: fix early return in availableReceived blocking room join:
On room join, the room object is created before the server's self-presence arrives.
`_getRoomUser()` thus returns `user=None` for the initial presence, which led to
`super().availableReceived(presence)` not being called, resulting in wrong typing of the
room and the room not really being joined.
2026-06-19 14:12:42 +02:00
Goffi
34ecf8b22e plugin XEP-0084: refactor get_avatar:
`get_avatar()` was checking the cache directly, bypassing `plugin_misc_identity`'s
`use_cache` flag. As a result, cache disabling was ineffective. It now fetches from the
PEP node and doesn't handle the cache anymore.

`_parse_metadata_info()` has been added to factorize the metadata parsing.
2026-06-09 16:12:39 +02:00
Syndace
5d9f2d2da9 plugin XEP-0384: code cleanup and failure tracking 2026-06-08 14:26:15 +02:00
Goffi
0f9bfc38ac plugin XEP-0115: minor reformatting 2026-06-08 14:26:15 +02:00
Goffi
67eea35d4e plugin XEP-0115: use the new raw_values from Tx-XMPP:
Libervia calls Tx-XMPP `typeCheck` on disco info reception to check and normalize values.
In the case of XEP-0115 this cause trouve as the normalization is lossy, and change the
type of some fields (booleans, JIDs). The new `raw_values` property has been added in
Tx-XMPP v0.15 to retrieve original `str` value, so this now used to build the hash.

fix 486
2026-06-08 10:44:53 +02:00
Goffi
29a39b771b plugin XEP-0115: Fix race condition on disco creation:
This patch chains disco query to `conn_deferred` to be sure that `client.disco` is set.

fix #484
2026-06-07 21:20:05 +02:00
Goffi
9d4c2bace9 plugin misc XID: XMPP Decentralized ID implementation:
XMPP Decentralized ID (XID) implementation. All the spec but private key synchronisation
is implemented, and private key can be synchronised with import/export method which
through a URI usable with QR Code as explained in the spec.

rel 477
2026-06-06 12:23:39 +02:00
Goffi
6aba4c6686 plugin XEP-0045: Fix variable used in logs. 2026-06-06 12:23:06 +02:00
Goffi
ed462a661b core (memory): Modernize methods signature/docstrings of encrypt_value and decrypt_value:
- Use `client` instead of `profile`
- Add `decrypt_value_by_profile` which is notably useful on client startup, when the
  encrypted password needs to be retrieved, and the `SatXMPPEntity` instance is not yet
  created.
- Add type hints/update docstrings

rel 477
2026-06-06 12:23:06 +02:00
Goffi
e0064e0372 component pubsub: Set default access model for PEP to presence 2026-05-27 15:28:11 +02:00
Goffi
ac315a4300 plugin XEP-0402: log a warning instead of an exception on TimeoutError. 2026-05-25 17:41:53 +02:00
Goffi
00c7f1b1a3 plugin XEP-402: log a warning instead of an exception on NotFound error. 2026-05-21 21:10:30 +02:00
Goffi
f5e065b56a plugin XEP-0465: Remove duplicate ps_public_subscriptions_get bridge method. 2026-05-21 21:10:30 +02:00
Goffi
15ad700b22 plugin XEP-0402: Fetch bookmarks on startup and handle autojoin. 2026-05-14 11:49:02 +02:00
Goffi
dce577bf3a plugin XEP-0163: type hints 2026-05-14 11:49:02 +02:00
Goffi
502d9aad19 plugin XEP-0313: Fix elements dump in the warning:
The use of `pp_elt` was printing the element instead of showing them in the warning
message.
2026-05-14 11:49:02 +02:00
Goffi
d8b083cdb0 plugin XEP-0384: Regenerate key on corrupted data. 2026-05-14 11:49:02 +02:00
Goffi
2b0f4bd192 plugin XEP-0033: Fix validation error when only metadata address are used:
XEP-0033 may be used as a simple metadata marker when sending messages (e.g. to indicate a
`replyto`). The validation was failing on that due to missing `to`, `cc` and `bcc`.
2026-05-14 11:49:02 +02:00
Goffi
709366fe13 plugin XEP-0084: fix avatar retrieval and disabling:
- Avatar disabling was not correctly handled for all cases, this should now be fixed.
- Avatar retrieval is now down only on PEP events, no directly anymore. `get_avatar` only
  returns cached version.
2026-05-04 16:49:07 +02:00
Goffi
89c23c8a4c plugin XEP-0084: Fix double feature advertising:
`NS_AVATAR_METADATA` is already advertised by `add_pep_event`, adding it to `getDiscoInfo`
too was resulting in double advertising, making the disco infos invalid for caching
(resulting in other devices repeatedly requesting disco#info).
2026-05-04 16:47:42 +02:00
Goffi
1c6ca838b5 plugin XEP-0473: Don't try do load secrets if there is not encrypted elements:
The plugin was trying to decrypt all pubsub events, without checking if there is
"encrypted" element first, resulting in warning for all clear events.

This patch fixes it by detecting <encrypted> element and exiting early if none is found.
2026-05-04 16:44:39 +02:00
Goffi
351b7e2140 plugin XEP-0356: Fix incorrect _on_presence definition 2026-05-04 16:44:39 +02:00
Goffi
18d3f0167f plugin XEP-0115: Fix disco duplicate on caps node query + check own generation:
When caps node was requested, disco infos was returned from cache + infos from normal
disco gathering, resulting in doubled items and other entities rejecting the disco info.

This is fixed by subclassing the disco handler to add a trigger. This trigger is used by
XEP-0115 to short circuit the disco gathering and returned its cached data instead.

Our own hash is re-generated on each connection, and validated, so if there is a bug, this
helps see and catch it.
2026-05-04 16:44:39 +02:00
Goffi
d2fd11df13 plugin XEP-215: Use bare JID instead of raising an exception on full jid. 2026-05-04 15:04:04 +02:00
Goffi
4a66addc34 plugin XEP-0402: Use cast for correct type hints. 2026-05-04 15:04:04 +02:00
Goffi
2d86208e98 plugin XEP-0048: Don't use legacy bookmarks anymore on profile connection:
Legacy bookmarks are not used anymore for autoconnect, it will be done from XEP-0402 now.
2026-05-04 15:03:22 +02:00
Goffi
e0a8bfeb85 plugin XEP-0198: match new init sequence on full init:
Match the new init sequence in normal startup: `<presence>` is now send before MAM sync,
and MAM is now run in background.
2026-05-03 11:45:17 +02:00
Goffi
ee4c80e4d1 plugin XEP-0384: Fix reentrancy loop:
When `prepare_for_profile` is called during connection init, an infinite loop could happen
with 'get_session_manager` calling `prepare_for_profile`. A check is added to early exit
if the profile is already being prepared, avoiding this issue.
2026-05-03 11:32:11 +02:00
Goffi
b4f41fe4a5 plugin XEP-0115: Implement "Stream Feature":
Server features are now checked to find capabilities data and use it for disco caching.
This is §6.3 of the XEP.
2026-05-03 11:20:33 +02:00
Goffi
2aee31732b plugin XEP-0084: Fix entity updated:
`on_metadata_update` was wrongly using our own JID instead of the PEP sender's one.
2026-05-03 11:07:36 +02:00
Goffi
df28f1a4b4 plugin XEP-0308:
Fix call to `client.messageProt.parse_message`
2026-05-02 15:55:18 +02:00
Goffi
766d49fb38 plugin XEP-0313: Sync status tracking + resume workflow:
- Add sync status tracking with bridge signals (`mam_sync_started`, `mam_sync_completed`,
  `mam_sync_error`), `mam_sync_statuses_get` method and helper methods that are called
  from `plugin_xep_0045`.
- Update "resume" workflow:
    - fix settings of last stanza ID, so it's always set (was not set for our own messages)
    - own message now use `onMessage` full workflow instead of just store and signal.
    - add `flush_archive_batch` at the end of the process.
    - Sync status are sent during resumt
- Modernisation (type hints, use of `get_plugin_data`)
2026-05-02 15:55:18 +02:00
Goffi
95b24ec319 plugin XEP-0045: MAM archive batching:
Message archives (MAM) are sent by batches to avoid flooding the bridge when the client is
retrieving big ones.
2026-05-02 15:55:18 +02:00
Goffi
a55ef47b0a plugin XEP-0045: MUC joining refactoring:
- Join method is completely refactored so a room is now joined immediately, and MAM
  synchronisation happens in background.
- Legacy history is not used anymore to simplify code.
- Global simplification of the plugin, not more complicated states handling or message
  caching.
2026-05-02 15:55:18 +02:00
Goffi
610eac0718 Formatting + type hints 2026-05-02 15:55:18 +02:00
Goffi
8d42a09208 core (disco), plugins identidy, XEP-0115:
- Fix data types, and use quotes data type to avoid immediate evaluation on Python < 3.14
- Better error catching folling change in `get_infos` in `memory.disco`.
- Some code modernisation (async coroutine).
2026-05-02 15:55:18 +02:00
Goffi
80e5a9e6ac memory (disco): Fix error handling for find_service_entity/find_service_entities:
- Error raised by `disco_info` where not properly handler, resulting in an exception
  instead of appropriate logging and return value.
- `async` coroutines, type hints
2026-04-24 17:38:54 +02:00
Goffi
fd58b78762 core, dependencies: update Tx-XMPP to v0.13.0:
`DiscoFeature.identities` format has evolved so `(category, map)` can be checked directly
again. The code using identities has been updated.
2026-04-21 12:49:30 +02:00
Goffi
dd79a42931 plugin XEP-0115: refactoring and complete implementation:
- the XEP-0115 implementation has been completed with validation, caps node handling in
  disco requests, hash generation fixes, and real support for xml:lang.
- the `generate_hash` method has been moved from disco where it's not used anymore to
  XEP-0115.
- Disco doesn't hash systematically, it nos use a per-jid cache for non XEP-0115
  supporting client.
- code modernisation, with use of `get_plugin_data` for Client data in XEP-0115, type
  hints, etc.
- More comments have been added to link algorithms steps to the relevant part in
  specification.
2026-04-18 01:08:01 +02:00
Goffi
f6db575ee4 core, dependencies: Update Tx-XMPP to 0.12:
Tx-XMPP 0.12 has beaking change in `discoFeature.identities` because it now supports
`xml:lang` attribute, so this update implies updating the code everywhere were this is
used.
2026-04-17 17:26:54 +02:00
Goffi
da1a5b691a plugin XEP-0473: Fix early exit when checking items:
The secrets were loaded for all items in `_items_trigger` instead of exiting early when
there is nothing to decrypt, this was inefficient, and showing annoying warnings.
2026-04-16 12:19:35 +02:00
Goffi
42c2f88b30 component pubsub: PEP presence access model and auto-subscription
- Implement `presence` access model for PEP nodes.
- Add PEP auto-subscription (`+notify` handling)
- New `get_pep_last_items` storage method to retrieve in a single query items to send to
  auto-subscribers.
- Online resource tracking.

This completes the PEP support.

rel 476
2026-04-15 20:51:51 +02:00
Goffi
81bd3dcf01 component pubsub: PEP implementation:
New implementations of XEP-0355 and XEP-0356 are integrated to handle PEP. The
implementation is not complete yet, as auto-subscribe and presence permissions are not
implemented yet.

rel 476
2026-04-14 23:16:18 +02:00
Goffi
6605e523d0 plugin XEP-0356: Privileged Entity implementation:
This is the second XEP needed to implement PEP in Pubsub Component. This implementation
should be more or less complete.

rel 476
2026-04-14 23:08:21 +02:00