`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).
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.
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.
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.
- 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`)
- 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.
- 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).
- Error raised by `disco_info` where not properly handler, resulting in an exception
instead of appropriate logging and return value.
- `async` coroutines, type hints
- 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.
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.
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.
- 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
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
A new `max_items` field has been added to `PubsubNode`. `0` means `max`. If any >0 value
is used, items will be automatically deleted by `cache_pubsub_items`. Items are currently
discarded (i.e. no notification is sent), this is the same behaviour as in legacy Libervia
Pubsub (formerly "SàT Pubsub").
rel 476
- Added `on_extended_disco()` handler.
- Added `with_parent=True` to all `get_pubsub_node()` calls to prevent lazy load errors in
access checks.
rel 476
Registered XEP-0499 handler in `profile_connecting()` and added it to
plugin dependencies.
- Added `full_metadata` handling to return only relationship fields when requested.
- Implemented `filter_node_hierarchy_by_access` for access control filtering
rel 476
Pubsub relationships from XEP-0496 are now handled. They can be set in config as explained
in the specification, and access are checked with parents when they are set.
Deletion cascade as specified in the XEP.
rel 476
Add methods to handles the relationships which were already present in storage.
This plugins add methods to handle validation and rules from the specs.
`get_pubsub_node_children` helper method has been added to storage.
XEP-0420 bounds starts at 0 but 0-length rpad defeats its purpose (the XEP actually says
"TODO: sane boundaries?"). Furthermore, some tests where failing randomly due to 0-lenght
rpad sometimes happening. This patch makes rpad minimum size at 50.
- `retract`, `purge` and `delete` are now implemented
- `features` list has been added
- `publish` now returns the Item ID when it is generated
- `subscribers` publish model is handled.
rel 476
- update queries to handle correctly the `before=""` case and RSM order (older to newer)
while having correct order when `max_items` without RSM is used (then order it newer to
older).
- put RSM code path in a separated method for better readability.
- check values of `max_items` and `from_index` and raise exception is they are not
positive
- when using `before` or `after`, check that the item ID used as reference exists, and
raise an exception otherwise.
- updated docstring to reflect the new behaviour.
- update pubsub cache use of `get_items` with RSM, to adapt to new behaviour.
rel 476
- There is not need to use stream management with component, so we set mode to `client`
only.
- `_disconnecting_trigger` was causing an exception when disconnecting a component, it is
now disabled in this case.
After 11 years of "temporary" monkey patches, I've finally made a friendly fork of Wokkel
at https://www.goffi.org/forge/goffi/tx-xmpp with all needed PRs merged and changes from
`sat_tmp`, using the same license as Wokkel (with agreement from contributors). No more
monkey patching, and it will also stop the deprecation warning due to outdated packages
used in Wokkel. Last but not least, it should unblock the move to the latest Twisted and
Python versions.