- `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.
This patch implements Pubsub Contacts (currently named "End-to-End Encrypted Contacts
Metadata" but it will be most probably renamed soon as following council discussion, e2e
encryption won't be mandatory anymore).
It adds 2 bridge method `ps_contacts_get` and `ps_contact_set`, and handles retrieving
large contacts or groups lists using RSM.
rel 475
The items events need to be decrypted too for plugin to handle correctly items updated or
retracted. When an event is decrypted, and `encrypted` attribute is added to the decrypted
<item> elements.
rel 475
`add_managed_node` now match node when they are exactly the same by default, but if the
new `strict_match` argument is set to `False`, the old behaviour of matching all node
which start with the given `node` argument is used.
rel 475
Plugin for pubsub encryption and signing were named using prototype name as the
specifications where not yet published at the time. Since, those specifications have been
accepted, so we can rename those plugins using the corresponding XEP numbers.
Doc has been updated to remove old mention saying that the XEP was still being evaluated.
rel 475
- split the plugin in several classes, with models, exceptions, and backends separated.
- add a backend for `python-gnupg`, as it can be pip installed without having to use
`--system-site-packages` in the virtual environment.
- use modern syntax for type hints.
rel 475
This plugin implements the base for the forge feature in Libervia.
The "forge" plugin introduces configuration to set repositories to expose with the forge
(per profile), and the default repository to show.
In the future, this may be done dynamically from frontends, so users can create/import
repositories themselves.
The "forge_git" plugin implements methods to handle Git repositories. In the future, other
types of repositories may be managed (e.g.; Mercurial), but for now the focus is on Git.
Libervia Media is now a Python package instead of files to put in a directory to specify
in settings. The discovery is now automatic, removing the need for settings and enabling
easier installation. Furthermore, it should now work even if the package is zipped.
`libervia_media` can now be specified as a dependency for frontends requiring it.
- Restore plugin_misc_static_blog and rename it to plugin_misc_render_blog_params as it is
still in use in web frontend.
- Only the `Background` param is actually used, all other params have been removed.
- Add the `txtorcon` optional dependency, used with `tor` extra.
- Add settings for Tor.
- Use Tor endpoint when an `.onion` XMPP domain is used, of when Tor is explicitely
enabled in conf.
- Disable WebRTC, for now it's the safer option as WebRTC can leak IP. It should be
possible to use it over Tor by forcing the use of a .onion relay, but this is to be
explored later (A/V should be to slow to be usable, but that stay relevant for file
transfer or other WebRTC powered things).
- A new `treq` instance using Tor WebAgent is used when Tor is enabled. Properties has
been added to SatXMPPEntity to conveniently get the right instance.
- Another `tor_mode` property has been added with corresponding bridge methods, to see if
Tor is activated and in which mode for a given profile. For now there are only two modes
(disabled, and enabled with WebRTC disabled), but in the future it may be possible to
activate WebRTC over Tor, or to use Tor only to connect to XMPP server, while using
clearnet for other connections.
- Tor dedicated models have been added, and bridge methods have been added to build and
get them.
- Fix tests.
rel 473
This is a huge configuration refactoring.
The configuration system now uses Pydantic settings, with better validation, better
support for environment variables and other goodies.
The main config files now use TOML instead of INI, this allow for better handling of
complex types, notably dict.
Plugins, components and frontends can declare their config settings in a class which will
be imported dynamically.
- Arguments are now grouped in a new `PageData` NamedTuple, making it simpler to use, and
easier to extend.
- Page index is automatically calculated, and can be checked in callback to know which
page to show.
- Form send by calling entity is automatically parsed, using original form to instantiate
the right field types.
- A new `DataForm.get_field` method use Generic type as second argument to retrieve the
right field when getting a `submit` form.
- Updated all classes registering Ad-Hoc commands to use the new system and simplify the
code.
- Ad-Hoc callbacks now receive only a `client` and a `page_data`.
- `page_data` keep all important data useful to process current page in a namedtuple.
- Submitted form is automatically parsed, so callback just has to check the data from there.
- Page index is automatically handled, so the handling by callback is no longed needed.
- Session data is now splitted in 2 dict: private for `AdHocCommandHandler`, and public
for the callback.