mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-10 21:47:01 +02:00
Compare commits
22 Commits
73bcabd2fa
...
5c6a399f5b
Author | SHA1 | Date | |
---|---|---|---|
|
5c6a399f5b | ||
|
e744665171 | ||
|
0b16cbddde | ||
|
7ea2c6eabf | ||
|
45ca11ecd0 | ||
|
d8cdd82bf8 | ||
|
345af5a535 | ||
|
6e5895ce45 | ||
|
b70a2fe4cf | ||
|
da01d932ea | ||
|
7cd5808766 | ||
|
c98302b3c0 | ||
|
cd7eedf589 | ||
|
27bd8852a1 | ||
|
effcf0b7cf | ||
|
71b9db688a | ||
|
8be6dc7758 | ||
|
569f0b303b | ||
|
15e3add909 | ||
|
68c0c4d94f | ||
|
a550a1c55c | ||
|
832588f861 |
262
CHANGELOG.md
262
CHANGELOG.md
|
@ -1,6 +1,7 @@
|
||||||
## Version 24.02
|
## Version 24.02
|
||||||
|
|
||||||
Core:
|
#### Core:
|
||||||
|
|
||||||
- Added Matrix gateway in `mod_matrix_gw`
|
- Added Matrix gateway in `mod_matrix_gw`
|
||||||
- Support SASL2 and Bind2
|
- Support SASL2 and Bind2
|
||||||
- Support tls-server-end-point channel binding and sasl2 codec
|
- Support tls-server-end-point channel binding and sasl2 codec
|
||||||
|
@ -11,7 +12,8 @@ Core:
|
||||||
- [`negotiation_timeout`](https://docs.ejabberd.im/admin/configuration/toplevel/#negotiation-timeout): Increase default value from 30s to 2m
|
- [`negotiation_timeout`](https://docs.ejabberd.im/admin/configuration/toplevel/#negotiation-timeout): Increase default value from 30s to 2m
|
||||||
- mod_carboncopy: Teach how to interact with bind2 inline requests
|
- mod_carboncopy: Teach how to interact with bind2 inline requests
|
||||||
|
|
||||||
Other:
|
#### Other:
|
||||||
|
|
||||||
- ejabberdctl: Fix startup problem when having set `EJABBERD_OPTS` and logger options
|
- ejabberdctl: Fix startup problem when having set `EJABBERD_OPTS` and logger options
|
||||||
- ejabberdctl: Set EJABBERD_OPTS back to `""`, and use previous flags as example
|
- ejabberdctl: Set EJABBERD_OPTS back to `""`, and use previous flags as example
|
||||||
- eldap: Change logic for `eldap tls_verify=soft` and `false`
|
- eldap: Change logic for `eldap tls_verify=soft` and `false`
|
||||||
|
@ -24,20 +26,23 @@ Other:
|
||||||
- mod_pubsub: PEP nodetree: Fix reversed logic in node fixup function
|
- mod_pubsub: PEP nodetree: Fix reversed logic in node fixup function
|
||||||
- mod_pubsub: Only care about PEP bookmarks options when creating node from scratch
|
- mod_pubsub: Only care about PEP bookmarks options when creating node from scratch
|
||||||
|
|
||||||
SQL:
|
#### SQL:
|
||||||
|
|
||||||
- MySQL: Support `sha256_password` auth plugin
|
- MySQL: Support `sha256_password` auth plugin
|
||||||
- ejabberd_sql_schema: Use the first unique index as a primary key
|
- ejabberd_sql_schema: Use the first unique index as a primary key
|
||||||
- Update SQL schema files for MAM's XEP-0424
|
- Update SQL schema files for MAM's XEP-0424
|
||||||
- New option [`sql_flags`](https://docs.ejabberd.im/admin/configuration/toplevel/#sql-flags): right now only useful to enable `mysql_alternative_upsert`
|
- New option [`sql_flags`](https://docs.ejabberd.im/admin/configuration/toplevel/#sql-flags): right now only useful to enable `mysql_alternative_upsert`
|
||||||
|
|
||||||
Installers and Container:
|
#### Installers and Container:
|
||||||
|
|
||||||
- Container: Add ability to ignore failures in execution of `CTL_ON_*` commands
|
- Container: Add ability to ignore failures in execution of `CTL_ON_*` commands
|
||||||
- Container: Update to Erlang/OTP 26.2, Elixir 1.16.1 and Alpine 3.19
|
- Container: Update to Erlang/OTP 26.2, Elixir 1.16.1 and Alpine 3.19
|
||||||
- Container: Update this custom ejabberdctl to match the main one
|
- Container: Update this custom ejabberdctl to match the main one
|
||||||
- make-binaries: Bump OpenSSL 3.2.1, Erlang/OTP 26.2.2, Elixir 1.16.1
|
- make-binaries: Bump OpenSSL 3.2.1, Erlang/OTP 26.2.2, Elixir 1.16.1
|
||||||
- make-binaries: Bump many dependency versions
|
- make-binaries: Bump many dependency versions
|
||||||
|
|
||||||
Commands API:
|
#### Commands API:
|
||||||
|
|
||||||
- `print_sql_schema`: New command available in ejabberdctl command-line script
|
- `print_sql_schema`: New command available in ejabberdctl command-line script
|
||||||
- ejabberdctl: Rework temporary node name generation
|
- ejabberdctl: Rework temporary node name generation
|
||||||
- ejabberdctl: Print argument description, examples and note in help
|
- ejabberdctl: Print argument description, examples and note in help
|
||||||
|
@ -51,7 +56,7 @@ Commands API:
|
||||||
- ejabberd_xmlrpc: Fix support for restuple error response
|
- ejabberd_xmlrpc: Fix support for restuple error response
|
||||||
- mod_http_api: When no specific API version is requested, use the latest
|
- mod_http_api: When no specific API version is requested, use the latest
|
||||||
|
|
||||||
Compilation with Rebar3/Elixir/Mix:
|
#### Compilation with Rebar3/Elixir/Mix:
|
||||||
- Fix compilation with Erlang/OTP 27: don't use the reserved word 'maybe'
|
- Fix compilation with Erlang/OTP 27: don't use the reserved word 'maybe'
|
||||||
- configure: Fix explanation of `--enable-group` option ([#4135](https://github.com/processone/ejabberd/issues/4135))
|
- configure: Fix explanation of `--enable-group` option ([#4135](https://github.com/processone/ejabberd/issues/4135))
|
||||||
- Add observer and runtime_tools in releases when `--enable-tools`
|
- Add observer and runtime_tools in releases when `--enable-tools`
|
||||||
|
@ -82,7 +87,8 @@ Compilation with Rebar3/Elixir/Mix:
|
||||||
|
|
||||||
## Version 23.10
|
## Version 23.10
|
||||||
|
|
||||||
Compilation:
|
#### Compilation:
|
||||||
|
|
||||||
- Erlang/OTP: Raise the requirement to Erlang/OTP 20.0 as a minimum
|
- Erlang/OTP: Raise the requirement to Erlang/OTP 20.0 as a minimum
|
||||||
- CI: Update tests to Erlang/OTP 26 and recent Elixir
|
- CI: Update tests to Erlang/OTP 26 and recent Elixir
|
||||||
- Move Xref and Dialyzer options from workflows to `rebar.config`
|
- Move Xref and Dialyzer options from workflows to `rebar.config`
|
||||||
|
@ -95,7 +101,8 @@ Compilation:
|
||||||
- Elixir: When building OTP release with mix, keep `ERLANG_NODE=ejabberd@localhost`
|
- Elixir: When building OTP release with mix, keep `ERLANG_NODE=ejabberd@localhost`
|
||||||
- `ejabberdctl`: Pass `ERLANG_OPTS` when calling `erl` to parse the `INET_DIST_INTERFACE` ([#4066](https://github.com/processone/ejabberd/issues/#4066)
|
- `ejabberdctl`: Pass `ERLANG_OPTS` when calling `erl` to parse the `INET_DIST_INTERFACE` ([#4066](https://github.com/processone/ejabberd/issues/#4066)
|
||||||
|
|
||||||
Commands:
|
#### Commands:
|
||||||
|
|
||||||
- `create_room_with_opts`: Fix typo and move examples to `args_example` ([#4080](https://github.com/processone/ejabberd/issues/#4080))
|
- `create_room_with_opts`: Fix typo and move examples to `args_example` ([#4080](https://github.com/processone/ejabberd/issues/#4080))
|
||||||
- `etop`: Let `ejabberdctl etop` work in a release (if `observer` application is available)
|
- `etop`: Let `ejabberdctl etop` work in a release (if `observer` application is available)
|
||||||
- `get_roster`: Command now returns groups in a list instead of newlines ([#4088](https://github.com/processone/ejabberd/issues/#4088))
|
- `get_roster`: Command now returns groups in a list instead of newlines ([#4088](https://github.com/processone/ejabberd/issues/#4088))
|
||||||
|
@ -105,7 +112,8 @@ Commands:
|
||||||
- `ejabberdctl`: Support `policy=user` in the help and return proper arguments
|
- `ejabberdctl`: Support `policy=user` in the help and return proper arguments
|
||||||
- `ejabberdctl`: Document how to stop a debug shell: control+g
|
- `ejabberdctl`: Document how to stop a debug shell: control+g
|
||||||
|
|
||||||
Container:
|
#### Container:
|
||||||
|
|
||||||
- Dockerfile: Add missing dependency for mssql databases
|
- Dockerfile: Add missing dependency for mssql databases
|
||||||
- Dockerfile: Reorder stages and steps for consistency
|
- Dockerfile: Reorder stages and steps for consistency
|
||||||
- Dockerfile: Use Alpine as base for `METHOD=package`
|
- Dockerfile: Use Alpine as base for `METHOD=package`
|
||||||
|
@ -113,7 +121,8 @@ Container:
|
||||||
- Dockerfile: Provide specific OTP and elixir vsn for direct compilation
|
- Dockerfile: Provide specific OTP and elixir vsn for direct compilation
|
||||||
- Halt ejabberd if a command in `CTL_ON_` fails during ejabberd startup
|
- Halt ejabberd if a command in `CTL_ON_` fails during ejabberd startup
|
||||||
|
|
||||||
Core:
|
#### Core:
|
||||||
|
|
||||||
- `auth_external_user_exists_check`: New option ([#3377](https://github.com/processone/ejabberd/issues/#3377))
|
- `auth_external_user_exists_check`: New option ([#3377](https://github.com/processone/ejabberd/issues/#3377))
|
||||||
- `gen_mod`: Extend `gen_mod` API to simplify hooks and IQ handlers registration
|
- `gen_mod`: Extend `gen_mod` API to simplify hooks and IQ handlers registration
|
||||||
- `gen_mod`: Add shorter forms for `gen_mod` hook/`iq_handler` API
|
- `gen_mod`: Add shorter forms for `gen_mod` hook/`iq_handler` API
|
||||||
|
@ -128,14 +137,15 @@ Core:
|
||||||
- Web Admin: In roster page move the `AddJID` textbox to top ([#4067](https://github.com/processone/ejabberd/issues/#4067))
|
- Web Admin: In roster page move the `AddJID` textbox to top ([#4067](https://github.com/processone/ejabberd/issues/#4067))
|
||||||
- Web Admin: Show a warning when visiting webadmin with non-privileged account ([#4089](https://github.com/processone/ejabberd/issues/#4089))
|
- Web Admin: Show a warning when visiting webadmin with non-privileged account ([#4089](https://github.com/processone/ejabberd/issues/#4089))
|
||||||
|
|
||||||
Docs:
|
#### Docs:
|
||||||
|
|
||||||
- Example configuration: clarify 5223 tls options; specify s2s shaper
|
- Example configuration: clarify 5223 tls options; specify s2s shaper
|
||||||
- Make sure that `policy=user` commands have `host` instead of `server` arg in docs
|
- Make sure that `policy=user` commands have `host` instead of `server` arg in docs
|
||||||
- Improve syntax of many command descriptions for the Docs site
|
- Improve syntax of many command descriptions for the Docs site
|
||||||
- Move example Perl extauth script from ejabberd git to Docs site
|
- Move example Perl extauth script from ejabberd git to Docs site
|
||||||
- Remove obsolete example files, and add link in Docs to the archived copies
|
- Remove obsolete example files, and add link in Docs to the archived copies
|
||||||
|
|
||||||
Installers (`make-binaries`):
|
#### Installers (`make-binaries`):
|
||||||
- Bump Erlang/OTP version to 26.1.1, and other dependencies
|
- Bump Erlang/OTP version to 26.1.1, and other dependencies
|
||||||
- Remove outdated workaround
|
- Remove outdated workaround
|
||||||
- Don't build Linux-PAM examples
|
- Don't build Linux-PAM examples
|
||||||
|
@ -147,7 +157,8 @@ Installers (`make-binaries`):
|
||||||
- Set kernel version for all builds
|
- Set kernel version for all builds
|
||||||
- Let curl fail on HTTP errors
|
- Let curl fail on HTTP errors
|
||||||
|
|
||||||
Modules:
|
#### Modules:
|
||||||
|
|
||||||
- `mod_muc_log`: Add trailing backslash to URLs shown in disco info
|
- `mod_muc_log`: Add trailing backslash to URLs shown in disco info
|
||||||
- `mod_muc_occupantid`: New module with support for XEP-0421 Occupant Id ([#3397](https://github.com/processone/ejabberd/issues/#3397))
|
- `mod_muc_occupantid`: New module with support for XEP-0421 Occupant Id ([#3397](https://github.com/processone/ejabberd/issues/#3397))
|
||||||
- `mod_muc_rtbl`: Better error handling in ([#4050](https://github.com/processone/ejabberd/issues/#4050))
|
- `mod_muc_rtbl`: Better error handling in ([#4050](https://github.com/processone/ejabberd/issues/#4050))
|
||||||
|
@ -165,7 +176,8 @@ Modules:
|
||||||
- `mod_register_web`: Make redirect to page that end with `/` ([#3177](https://github.com/processone/ejabberd/issues/#3177))
|
- `mod_register_web`: Make redirect to page that end with `/` ([#3177](https://github.com/processone/ejabberd/issues/#3177))
|
||||||
- `mod_shared_roster_ldap`: Don't crash in `get_member_jid` on empty output ([#3614](https://github.com/processone/ejabberd/issues/#3614))
|
- `mod_shared_roster_ldap`: Don't crash in `get_member_jid` on empty output ([#3614](https://github.com/processone/ejabberd/issues/#3614))
|
||||||
|
|
||||||
MUC:
|
#### MUC:
|
||||||
|
|
||||||
- Add support to register nick in a room ([#3455](https://github.com/processone/ejabberd/issues/#3455))
|
- Add support to register nick in a room ([#3455](https://github.com/processone/ejabberd/issues/#3455))
|
||||||
- Convert `allow_private_message` MUC room option to `allowpm` ([#3736](https://github.com/processone/ejabberd/issues/#3736))
|
- Convert `allow_private_message` MUC room option to `allowpm` ([#3736](https://github.com/processone/ejabberd/issues/#3736))
|
||||||
- Update xmpp version to send `roomconfig_changesubject` in disco#info ([#4085](https://github.com/processone/ejabberd/issues/#4085))
|
- Update xmpp version to send `roomconfig_changesubject` in disco#info ([#4085](https://github.com/processone/ejabberd/issues/#4085))
|
||||||
|
@ -178,7 +190,8 @@ MUC:
|
||||||
- Remove existing role information for users that are kicked from room ([#4035](https://github.com/processone/ejabberd/issues/#4035))
|
- Remove existing role information for users that are kicked from room ([#4035](https://github.com/processone/ejabberd/issues/#4035))
|
||||||
- Expand rule "mucsub subscribers are members in members only rooms" to more places
|
- Expand rule "mucsub subscribers are members in members only rooms" to more places
|
||||||
|
|
||||||
SQL:
|
#### SQL:
|
||||||
|
|
||||||
- Add ability to force alternative upsert implementation in mysql
|
- Add ability to force alternative upsert implementation in mysql
|
||||||
- Properly parse mysql version even if it doesn't have type tag
|
- Properly parse mysql version even if it doesn't have type tag
|
||||||
- Use prepared statement with mysql
|
- Use prepared statement with mysql
|
||||||
|
@ -190,7 +203,8 @@ SQL:
|
||||||
|
|
||||||
## Version 23.04
|
## Version 23.04
|
||||||
|
|
||||||
General:
|
#### General:
|
||||||
|
|
||||||
- New `s2s_out_bounce_packet` hook
|
- New `s2s_out_bounce_packet` hook
|
||||||
- Re-allow anonymous connection for connection without client certificates ([#3985](https://github.com/processone/ejabberd/issues/3985))
|
- Re-allow anonymous connection for connection without client certificates ([#3985](https://github.com/processone/ejabberd/issues/3985))
|
||||||
- Stop `ejabberd_system_monitor` before stopping node
|
- Stop `ejabberd_system_monitor` before stopping node
|
||||||
|
@ -203,13 +217,15 @@ General:
|
||||||
- `mod_pubsub`: Pubsub xdata fields `max_item/item_expira/children_max` use `max` not `infinity`
|
- `mod_pubsub`: Pubsub xdata fields `max_item/item_expira/children_max` use `max` not `infinity`
|
||||||
- `mod_vcard_xupdate`: Invalidate `vcard_xupdate` cache on all nodes when vcard is updated
|
- `mod_vcard_xupdate`: Invalidate `vcard_xupdate` cache on all nodes when vcard is updated
|
||||||
|
|
||||||
Admin:
|
#### Admin:
|
||||||
|
|
||||||
- `ext_mod`: Improve support for loading `*.so` files from `ext_mod` dependencies
|
- `ext_mod`: Improve support for loading `*.so` files from `ext_mod` dependencies
|
||||||
- Improve output in `gen_html_doc_for_commands` command
|
- Improve output in `gen_html_doc_for_commands` command
|
||||||
- Fix ejabberdctl output formatting ([#3979](https://github.com/processone/ejabberd/issues/3979))
|
- Fix ejabberdctl output formatting ([#3979](https://github.com/processone/ejabberd/issues/3979))
|
||||||
- Log HTTP handler exceptions
|
- Log HTTP handler exceptions
|
||||||
|
|
||||||
MUC:
|
#### MUC:
|
||||||
|
|
||||||
- New command `get_room_history`
|
- New command `get_room_history`
|
||||||
- Persist `none` role for outcasts
|
- Persist `none` role for outcasts
|
||||||
- Try to populate room history from mam when unhibernating
|
- Try to populate room history from mam when unhibernating
|
||||||
|
@ -218,7 +234,8 @@ MUC:
|
||||||
- Store state in db in `mod_muc:create_room()`
|
- Store state in db in `mod_muc:create_room()`
|
||||||
- Make subscribers members by default
|
- Make subscribers members by default
|
||||||
|
|
||||||
SQL schemas:
|
#### SQL schemas:
|
||||||
|
|
||||||
- Fix a long standing bug in new schema migration
|
- Fix a long standing bug in new schema migration
|
||||||
- `update_sql` command: Many improvements in new schema migration
|
- `update_sql` command: Many improvements in new schema migration
|
||||||
- `update_sql` command: Add support to migrate MySQL too
|
- `update_sql` command: Add support to migrate MySQL too
|
||||||
|
@ -227,14 +244,16 @@ SQL schemas:
|
||||||
- Remove unnecessary indexes
|
- Remove unnecessary indexes
|
||||||
- New SQL schema migrate fix
|
- New SQL schema migrate fix
|
||||||
|
|
||||||
MS SQL:
|
#### MS SQL:
|
||||||
|
|
||||||
- MS SQL schema fixes
|
- MS SQL schema fixes
|
||||||
- Add `new` schema for MS SQL
|
- Add `new` schema for MS SQL
|
||||||
- Add MS SQL support for new schema migration
|
- Add MS SQL support for new schema migration
|
||||||
- Minor MS SQL improvements
|
- Minor MS SQL improvements
|
||||||
- Fix MS SQL error caused by `ORDER BY` in subquery
|
- Fix MS SQL error caused by `ORDER BY` in subquery
|
||||||
|
|
||||||
SQL Tests:
|
#### SQL Tests:
|
||||||
|
|
||||||
- Add support for running tests on MS SQL
|
- Add support for running tests on MS SQL
|
||||||
- Add ability to run tests on upgraded DB
|
- Add ability to run tests on upgraded DB
|
||||||
- Un-deprecate `ejabberd_config:set_option/2`
|
- Un-deprecate `ejabberd_config:set_option/2`
|
||||||
|
@ -242,7 +261,8 @@ SQL Tests:
|
||||||
- Correct README for creating test docker MS SQL DB
|
- Correct README for creating test docker MS SQL DB
|
||||||
- Fix TSQLlint warnings in MSSQL test script
|
- Fix TSQLlint warnings in MSSQL test script
|
||||||
|
|
||||||
Testing:
|
#### Testing:
|
||||||
|
|
||||||
- Fix Shellcheck warnings in shell scripts
|
- Fix Shellcheck warnings in shell scripts
|
||||||
- Fix Remark-lint warnings
|
- Fix Remark-lint warnings
|
||||||
- Fix Prospector and Pylint warnings in test `extauth.py`
|
- Fix Prospector and Pylint warnings in test `extauth.py`
|
||||||
|
@ -250,14 +270,14 @@ Testing:
|
||||||
- Test only with oldest OTP supported (20.0), newest stable (25.3) and bleeding edge (26.0-rc2)
|
- Test only with oldest OTP supported (20.0), newest stable (25.3) and bleeding edge (26.0-rc2)
|
||||||
- Upload Common Test logs as artifact in case of failure
|
- Upload Common Test logs as artifact in case of failure
|
||||||
|
|
||||||
`ecs` container image:
|
#### `ecs` container image:
|
||||||
- Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14
|
- Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14
|
||||||
- Add `tini` as runtime init
|
- Add `tini` as runtime init
|
||||||
- Set `ERLANG_NODE` fixed to `ejabberd@localhost`
|
- Set `ERLANG_NODE` fixed to `ejabberd@localhost`
|
||||||
- Upload images as artifacts to Github Actions
|
- Upload images as artifacts to Github Actions
|
||||||
- Publish tag images automatically to ghcr.io
|
- Publish tag images automatically to ghcr.io
|
||||||
|
|
||||||
`ejabberd` container image:
|
#### `ejabberd` container image:
|
||||||
- Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14
|
- Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14
|
||||||
- Add `METHOD` to build container using packages ([#3983](https://github.com/processone/ejabberd/issues/3983))
|
- Add `METHOD` to build container using packages ([#3983](https://github.com/processone/ejabberd/issues/3983))
|
||||||
- Add `tini` as runtime init
|
- Add `tini` as runtime init
|
||||||
|
@ -267,14 +287,16 @@ Testing:
|
||||||
- Expose only `HOME` volume, it contains all the required subdirs
|
- Expose only `HOME` volume, it contains all the required subdirs
|
||||||
- ejabberdctl: Don't use `.../releases/COOKIE`, it's no longer included
|
- ejabberdctl: Don't use `.../releases/COOKIE`, it's no longer included
|
||||||
|
|
||||||
Installers:
|
#### Installers:
|
||||||
|
|
||||||
- make-binaries: Bump versions, e.g. erlang/otp to 25.3
|
- make-binaries: Bump versions, e.g. erlang/otp to 25.3
|
||||||
- make-binaries: Fix building with erlang/otp v25.x
|
- make-binaries: Fix building with erlang/otp v25.x
|
||||||
- make-packages: Fix for installers workflow, which didn't find lynx
|
- make-packages: Fix for installers workflow, which didn't find lynx
|
||||||
|
|
||||||
## Version 23.01
|
## Version 23.01
|
||||||
|
|
||||||
General:
|
#### General:
|
||||||
|
|
||||||
- Add `misc:uri_parse/2` to allow declaring default ports for protocols
|
- Add `misc:uri_parse/2` to allow declaring default ports for protocols
|
||||||
- CAPTCHA: Add support to define module instead of path to script
|
- CAPTCHA: Add support to define module instead of path to script
|
||||||
- Clustering: Handle `mnesia_system_event mnesia_up` when other node joins this ([#3842](https://github.com/processone/ejabberd/issues/3842))
|
- Clustering: Handle `mnesia_system_event mnesia_up` when other node joins this ([#3842](https://github.com/processone/ejabberd/issues/3842))
|
||||||
|
@ -294,7 +316,8 @@ General:
|
||||||
- PubSub: Expose the `pubsub#type` field in `disco#info` query to the node ([#3914](https://github.com/processone/ejabberd/issues/3914))
|
- PubSub: Expose the `pubsub#type` field in `disco#info` query to the node ([#3914](https://github.com/processone/ejabberd/issues/3914))
|
||||||
- Translations: Update German translation
|
- Translations: Update German translation
|
||||||
|
|
||||||
Admin:
|
#### Admin:
|
||||||
|
|
||||||
- `api_permissions`: Fix option crash when doesn't have `who:` section
|
- `api_permissions`: Fix option crash when doesn't have `who:` section
|
||||||
- `log_modules_fully`: New option to list modules that will log everything
|
- `log_modules_fully`: New option to list modules that will log everything
|
||||||
- `outgoing_s2s_families`: Changed option's default to IPv6, and fall back to IPv4
|
- `outgoing_s2s_families`: Changed option's default to IPv6, and fall back to IPv4
|
||||||
|
@ -305,13 +328,15 @@ Admin:
|
||||||
- Silent warning in OTP24 about not specified `cacerts` in SQL connections
|
- Silent warning in OTP24 about not specified `cacerts` in SQL connections
|
||||||
- Fix compilation warnings with Elixir 1.14
|
- Fix compilation warnings with Elixir 1.14
|
||||||
|
|
||||||
DOAP:
|
#### DOAP:
|
||||||
|
|
||||||
- Support extended `-protocol` erlang attribute
|
- Support extended `-protocol` erlang attribute
|
||||||
- Add extended RFCs and XEP details to some protocol attributes
|
- Add extended RFCs and XEP details to some protocol attributes
|
||||||
- `tools/generate-doap.sh`: New script to generate DOAP file, add `make doap` ([#3915](https://github.com/processone/ejabberd/issues/3915))
|
- `tools/generate-doap.sh`: New script to generate DOAP file, add `make doap` ([#3915](https://github.com/processone/ejabberd/issues/3915))
|
||||||
- `ejabberd.doap`: New DOAP file describing ejabberd supported protocols
|
- `ejabberd.doap`: New DOAP file describing ejabberd supported protocols
|
||||||
|
|
||||||
MQTT:
|
#### MQTT:
|
||||||
|
|
||||||
- Add MQTT bridge module
|
- Add MQTT bridge module
|
||||||
- Add support for certificate authentication in MQTT bridge
|
- Add support for certificate authentication in MQTT bridge
|
||||||
- Implement reload in MQTT bridge
|
- Implement reload in MQTT bridge
|
||||||
|
@ -320,7 +345,8 @@ MQTT:
|
||||||
- `mqtt_publish`: New hook for MQTT publish event
|
- `mqtt_publish`: New hook for MQTT publish event
|
||||||
- `mqtt_(un)subscribe`: New hooks for MQTT subscribe & unsubscribe events
|
- `mqtt_(un)subscribe`: New hooks for MQTT subscribe & unsubscribe events
|
||||||
|
|
||||||
VSCode:
|
#### VSCode:
|
||||||
|
|
||||||
- Improve `.devcontainer` to use use devcontainer image and `.vscode`
|
- Improve `.devcontainer` to use use devcontainer image and `.vscode`
|
||||||
- Add `.vscode` files to instruct VSCode how to run ejabberd
|
- Add `.vscode` files to instruct VSCode how to run ejabberd
|
||||||
- Add Erlang LS default configuration
|
- Add Erlang LS default configuration
|
||||||
|
@ -328,7 +354,8 @@ VSCode:
|
||||||
|
|
||||||
## Version 22.10
|
## Version 22.10
|
||||||
|
|
||||||
Core:
|
#### Core:
|
||||||
|
|
||||||
- Add `log_burst_limit_*` options ([#3865](https://github.com/processone/ejabberd/issues/3865))
|
- Add `log_burst_limit_*` options ([#3865](https://github.com/processone/ejabberd/issues/3865))
|
||||||
- Support `ERL_DIST_PORT` option to work without epmd
|
- Support `ERL_DIST_PORT` option to work without epmd
|
||||||
- Auth JWT: Catch all errors from `jose_jwt:verify` and log debugging details ([#3890](https://github.com/processone/ejabberd/issues/3890))
|
- Auth JWT: Catch all errors from `jose_jwt:verify` and log debugging details ([#3890](https://github.com/processone/ejabberd/issues/3890))
|
||||||
|
@ -346,7 +373,8 @@ Core:
|
||||||
- `mod_shared_roster_ldap`: Update roster_get hook to use `#roster_item{}`
|
- `mod_shared_roster_ldap`: Update roster_get hook to use `#roster_item{}`
|
||||||
- `prosody2ejabberd`: Fix parsing of scram password from prosody
|
- `prosody2ejabberd`: Fix parsing of scram password from prosody
|
||||||
|
|
||||||
MIX:
|
#### MIX:
|
||||||
|
|
||||||
- Fix MIX's filter_nodes
|
- Fix MIX's filter_nodes
|
||||||
- Return user jid on join
|
- Return user jid on join
|
||||||
- `mod_mix_pam`: Add new MIX namespaces to disco features
|
- `mod_mix_pam`: Add new MIX namespaces to disco features
|
||||||
|
@ -361,7 +389,8 @@ MIX:
|
||||||
- `mod_roster`: Adapt to change of mix_annotate type to boolean in roster_query
|
- `mod_roster`: Adapt to change of mix_annotate type to boolean in roster_query
|
||||||
- `mod_shared_roster`: Fix wrong hook type `#roster{}` (now `#roster_item{}`)
|
- `mod_shared_roster`: Fix wrong hook type `#roster{}` (now `#roster_item{}`)
|
||||||
|
|
||||||
MUC:
|
#### MUC:
|
||||||
|
|
||||||
- Store role, and use it when joining a moderated room ([#3330](https://github.com/processone/ejabberd/issues/3330))
|
- Store role, and use it when joining a moderated room ([#3330](https://github.com/processone/ejabberd/issues/3330))
|
||||||
- Don't persist `none` role ([#3330](https://github.com/processone/ejabberd/issues/3330))
|
- Don't persist `none` role ([#3330](https://github.com/processone/ejabberd/issues/3330))
|
||||||
- Allow MUC service admins to bypass max_user_conferences limitation
|
- Allow MUC service admins to bypass max_user_conferences limitation
|
||||||
|
@ -374,7 +403,8 @@ MUC:
|
||||||
- Export `mod_muc_admin:get_room_pid/2`
|
- Export `mod_muc_admin:get_room_pid/2`
|
||||||
- Export function for getting room diagnostics
|
- Export function for getting room diagnostics
|
||||||
|
|
||||||
SQL:
|
#### SQL:
|
||||||
|
|
||||||
- Handle errors reported from begin/commit inside transaction
|
- Handle errors reported from begin/commit inside transaction
|
||||||
- Make connection close errors bubble up from inside sql transaction
|
- Make connection close errors bubble up from inside sql transaction
|
||||||
- Make first sql reconnect wait shorter time
|
- Make first sql reconnect wait shorter time
|
||||||
|
@ -386,7 +416,8 @@ SQL:
|
||||||
- Update mysql library
|
- Update mysql library
|
||||||
- Catch mysql connection being close earlier
|
- Catch mysql connection being close earlier
|
||||||
|
|
||||||
Build:
|
#### Build:
|
||||||
|
|
||||||
- `make all`: Generate start scripts here, not in `make install` ([#3821](https://github.com/processone/ejabberd/issues/3821))
|
- `make all`: Generate start scripts here, not in `make install` ([#3821](https://github.com/processone/ejabberd/issues/3821))
|
||||||
- `make clean`: Improve this and "distclean"
|
- `make clean`: Improve this and "distclean"
|
||||||
- `make deps`: Ensure deps configuration is ran when getting deps ([#3823](https://github.com/processone/ejabberd/issues/3823))
|
- `make deps`: Ensure deps configuration is ran when getting deps ([#3823](https://github.com/processone/ejabberd/issues/3823))
|
||||||
|
@ -399,7 +430,8 @@ Build:
|
||||||
- Remove unused macro definitions detected by rebar3_hank
|
- Remove unused macro definitions detected by rebar3_hank
|
||||||
- Remove unused header files which content is already in xmpp library
|
- Remove unused header files which content is already in xmpp library
|
||||||
|
|
||||||
Container:
|
#### Container:
|
||||||
|
|
||||||
- Get ejabberd-contrib sources to include them
|
- Get ejabberd-contrib sources to include them
|
||||||
- Copy `.ejabberd-modules` directory if available
|
- Copy `.ejabberd-modules` directory if available
|
||||||
- Do not clone repo inside container build
|
- Do not clone repo inside container build
|
||||||
|
@ -409,7 +441,8 @@ Container:
|
||||||
- Set a less frequent healthcheck to reduce CPU usage ([#3826](https://github.com/processone/ejabberd/issues/3826))
|
- Set a less frequent healthcheck to reduce CPU usage ([#3826](https://github.com/processone/ejabberd/issues/3826))
|
||||||
- Fix build instructions, add more podman examples
|
- Fix build instructions, add more podman examples
|
||||||
|
|
||||||
Installers:
|
#### Installers:
|
||||||
|
|
||||||
- make-binaries: Include CAPTCHA script with release
|
- make-binaries: Include CAPTCHA script with release
|
||||||
- make-binaries: Edit rebar.config more carefully
|
- make-binaries: Edit rebar.config more carefully
|
||||||
- make-binaries: Fix linking of EIMP dependencies
|
- make-binaries: Fix linking of EIMP dependencies
|
||||||
|
@ -423,14 +456,16 @@ Installers:
|
||||||
- make-installers: Override code on upgrade
|
- make-installers: Override code on upgrade
|
||||||
- make-installers: Apply cosmetic changes
|
- make-installers: Apply cosmetic changes
|
||||||
|
|
||||||
External modules:
|
#### External modules:
|
||||||
|
|
||||||
- ext_mod: Support managing remote nodes in the cluster
|
- ext_mod: Support managing remote nodes in the cluster
|
||||||
- ext_mod: Handle correctly when COMMIT.json not found
|
- ext_mod: Handle correctly when COMMIT.json not found
|
||||||
- Don't bother with COMMIT.json user-friendly feature in automated user case
|
- Don't bother with COMMIT.json user-friendly feature in automated user case
|
||||||
- Handle not found COMMIT.json, for example in GH Actions
|
- Handle not found COMMIT.json, for example in GH Actions
|
||||||
- Add WebAdmin page for managing external modules
|
- Add WebAdmin page for managing external modules
|
||||||
|
|
||||||
Workflows Actions:
|
#### Workflows Actions:
|
||||||
|
|
||||||
- Update workflows to Erlang 25
|
- Update workflows to Erlang 25
|
||||||
- Update workflows: Ubuntu 18 is deprecated and 22 is added
|
- Update workflows: Ubuntu 18 is deprecated and 22 is added
|
||||||
- CI: Remove syntax_tools from applications, as fast_xml fails Dialyzer
|
- CI: Remove syntax_tools from applications, as fast_xml fails Dialyzer
|
||||||
|
@ -438,42 +473,42 @@ Workflows Actions:
|
||||||
|
|
||||||
## Version 22.05
|
## Version 22.05
|
||||||
|
|
||||||
Core
|
#### Core
|
||||||
- C2S: Don't expect that socket will be available in `c2s_terminated` hook
|
- C2S: Don't expect that socket will be available in `c2s_terminated` hook
|
||||||
- Event handling process hook tracing
|
- Event handling process hook tracing
|
||||||
- Guard against `erlang:system_info(logical_processors)` not always returning a number
|
- Guard against `erlang:system_info(logical_processors)` not always returning a number
|
||||||
- `domain_balancing`: Allow for specifying `type` only, without specifying `component_number`
|
- `domain_balancing`: Allow for specifying `type` only, without specifying `component_number`
|
||||||
|
|
||||||
MQTT
|
#### MQTT
|
||||||
- Add TLS certificate authentication for MQTT connections
|
- Add TLS certificate authentication for MQTT connections
|
||||||
- Fix login when generating client id, keep connection record (#3593)
|
- Fix login when generating client id, keep connection record (#3593)
|
||||||
- Pass property name as expected in mqtt_codec (fixes login using MQTT 5)
|
- Pass property name as expected in mqtt_codec (fixes login using MQTT 5)
|
||||||
- Support MQTT subscriptions spread over the cluster (#3750)
|
- Support MQTT subscriptions spread over the cluster (#3750)
|
||||||
|
|
||||||
MUC
|
#### MUC
|
||||||
- Attach meta field with real jid to mucsub subscription events
|
- Attach meta field with real jid to mucsub subscription events
|
||||||
- Handle user removal
|
- Handle user removal
|
||||||
- Stop empty MUC rooms 30 seconds after creation
|
- Stop empty MUC rooms 30 seconds after creation
|
||||||
- `default_room_options`: Update options configurable
|
- `default_room_options`: Update options configurable
|
||||||
- `subscribe_room_many_max_users`: New option in `mod_muc_admin`
|
- `subscribe_room_many_max_users`: New option in `mod_muc_admin`
|
||||||
|
|
||||||
mod_conversejs
|
#### mod_conversejs
|
||||||
- Improved options to support `@HOST@` and `auto` values
|
- Improved options to support `@HOST@` and `auto` values
|
||||||
- Set `auth` and `register` options based on ejabberd configuration
|
- Set `auth` and `register` options based on ejabberd configuration
|
||||||
- `conversejs_options`: New option
|
- `conversejs_options`: New option
|
||||||
- `conversejs_resources`: New option
|
- `conversejs_resources`: New option
|
||||||
|
|
||||||
PubSub
|
#### PubSub
|
||||||
- `mod_pubsub`: Allow for limiting `item_expire` value
|
- `mod_pubsub`: Allow for limiting `item_expire` value
|
||||||
- `mod_pubsub`: Unsubscribe JID on whitelist removal
|
- `mod_pubsub`: Unsubscribe JID on whitelist removal
|
||||||
- `node_pep`: Add config-node and multi-items features (#3714)
|
- `node_pep`: Add config-node and multi-items features (#3714)
|
||||||
|
|
||||||
SQL
|
#### SQL
|
||||||
- Improve compatibility with various db engine versions
|
- Improve compatibility with various db engine versions
|
||||||
- Sync old-to-new schema script with reality (#3790)
|
- Sync old-to-new schema script with reality (#3790)
|
||||||
- Slight improvement in MSSQL testing support, but not yet complete
|
- Slight improvement in MSSQL testing support, but not yet complete
|
||||||
|
|
||||||
Other Modules
|
#### Other Modules
|
||||||
- `auth_jwt`: Checking if an user is active in SM for a JWT authenticated user (#3795)
|
- `auth_jwt`: Checking if an user is active in SM for a JWT authenticated user (#3795)
|
||||||
- `mod_configure`: Implement Get List of Registered/Online Users from XEP-0133
|
- `mod_configure`: Implement Get List of Registered/Online Users from XEP-0133
|
||||||
- `mod_host_meta`: New module to serve host-meta files, see XEP-0156
|
- `mod_host_meta`: New module to serve host-meta files, see XEP-0156
|
||||||
|
@ -486,7 +521,7 @@ Other Modules
|
||||||
- `mod_shared_roster`: Normalize JID on unset_presence (#3752)
|
- `mod_shared_roster`: Normalize JID on unset_presence (#3752)
|
||||||
- `mod_stun_disco`: Fix parsing of IPv6 listeners
|
- `mod_stun_disco`: Fix parsing of IPv6 listeners
|
||||||
|
|
||||||
Dependencies
|
#### Dependencies
|
||||||
- autoconf: Supported from 2.59 to the new 2.71
|
- autoconf: Supported from 2.59 to the new 2.71
|
||||||
- fast_tls: Update to 1.1.14 to support OpenSSL 3
|
- fast_tls: Update to 1.1.14 to support OpenSSL 3
|
||||||
- jiffy: Update to 1.1.1 to support Erlang/OTP 25.0-rc1
|
- jiffy: Update to 1.1.1 to support Erlang/OTP 25.0-rc1
|
||||||
|
@ -496,7 +531,7 @@ Dependencies
|
||||||
- rebar3: Updated binary to work from Erlang/OTP 22 to 25
|
- rebar3: Updated binary to work from Erlang/OTP 22 to 25
|
||||||
- `make update`: Fix when used with rebar 3.18
|
- `make update`: Fix when used with rebar 3.18
|
||||||
|
|
||||||
Compile
|
#### Compile
|
||||||
- `mix release`: Copy `include/` files for ejabberd, deps and otp, in `mix.exs`
|
- `mix release`: Copy `include/` files for ejabberd, deps and otp, in `mix.exs`
|
||||||
- `rebar3 release`: Fix ERTS path in `ejabberdctl`
|
- `rebar3 release`: Fix ERTS path in `ejabberdctl`
|
||||||
- `configure.ac`: Set default ejabberd version number when not using git
|
- `configure.ac`: Set default ejabberd version number when not using git
|
||||||
|
@ -505,7 +540,7 @@ Compile
|
||||||
- `tools/make-binaries`: New script for building Linux binaries
|
- `tools/make-binaries`: New script for building Linux binaries
|
||||||
- `tools/make-installers`: New script for building command line installers
|
- `tools/make-installers`: New script for building command line installers
|
||||||
|
|
||||||
Start
|
#### Start
|
||||||
- New `make relive` similar to `ejabberdctl live` without installing
|
- New `make relive` similar to `ejabberdctl live` without installing
|
||||||
- `ejabberdctl`: Fix some warnings detected by ShellCheck
|
- `ejabberdctl`: Fix some warnings detected by ShellCheck
|
||||||
- `ejabberdctl`: Mention in the help: `etop`, `ping` and `started`/`stopped`
|
- `ejabberdctl`: Mention in the help: `etop`, `ping` and `started`/`stopped`
|
||||||
|
@ -513,7 +548,7 @@ Start
|
||||||
- `mix.exs`: Add `-boot` and `-boot_var` in `ejabberdctl` instead of adding `vm.args`
|
- `mix.exs`: Add `-boot` and `-boot_var` in `ejabberdctl` instead of adding `vm.args`
|
||||||
- `tools/captcha.sh`: Fix some warnings detected by ShellCheck
|
- `tools/captcha.sh`: Fix some warnings detected by ShellCheck
|
||||||
|
|
||||||
Commands
|
#### Commands
|
||||||
- Accept more types of ejabberdctl commands arguments as JSON-encoded
|
- Accept more types of ejabberdctl commands arguments as JSON-encoded
|
||||||
- `delete_old_mam_messages_batch`: New command with rate limit
|
- `delete_old_mam_messages_batch`: New command with rate limit
|
||||||
- `delete_old_messages_batch`: New command with rate limit
|
- `delete_old_messages_batch`: New command with rate limit
|
||||||
|
@ -525,7 +560,7 @@ Commands
|
||||||
- `stop|restart`: Terminate ejabberd_sm before everything else to ensure sessions closing (#3641)
|
- `stop|restart`: Terminate ejabberd_sm before everything else to ensure sessions closing (#3641)
|
||||||
- `subscribe_room_many`: New command
|
- `subscribe_room_many`: New command
|
||||||
|
|
||||||
Translations
|
#### Translations
|
||||||
- Updated Catalan
|
- Updated Catalan
|
||||||
- Updated French
|
- Updated French
|
||||||
- Updated German
|
- Updated German
|
||||||
|
@ -533,7 +568,7 @@ Translations
|
||||||
- Updated Portuguese (Brazil)
|
- Updated Portuguese (Brazil)
|
||||||
- Updated Spanish
|
- Updated Spanish
|
||||||
|
|
||||||
Workflows
|
#### Workflows
|
||||||
- CI: Publish CT logs and Cover on failure to an external GH Pages repo
|
- CI: Publish CT logs and Cover on failure to an external GH Pages repo
|
||||||
- CI: Test shell scripts using ShellCheck (#3738)
|
- CI: Test shell scripts using ShellCheck (#3738)
|
||||||
- Container: New workflow to build and publish containers
|
- Container: New workflow to build and publish containers
|
||||||
|
@ -543,12 +578,12 @@ Workflows
|
||||||
|
|
||||||
## Version 21.12
|
## Version 21.12
|
||||||
|
|
||||||
Commands
|
#### Commands
|
||||||
- `create_room_with_opts`: Fixed when using SQL storage
|
- `create_room_with_opts`: Fixed when using SQL storage
|
||||||
- `change_room_option`: Add missing fields from config inside `mod_muc_admin:change_options`
|
- `change_room_option`: Add missing fields from config inside `mod_muc_admin:change_options`
|
||||||
- piefxis: Fixed arguments of all commands
|
- piefxis: Fixed arguments of all commands
|
||||||
|
|
||||||
Modules
|
#### Modules
|
||||||
- mod_caps: Don't forget caps on XEP-0198 resumption
|
- mod_caps: Don't forget caps on XEP-0198 resumption
|
||||||
- mod_conversejs: New module to serve a simple page for Converse.js
|
- mod_conversejs: New module to serve a simple page for Converse.js
|
||||||
- mod_http_upload_quota: Avoid `max_days` race
|
- mod_http_upload_quota: Avoid `max_days` race
|
||||||
|
@ -563,7 +598,7 @@ Modules
|
||||||
- mod_register_web: Handle unknown host gracefully
|
- mod_register_web: Handle unknown host gracefully
|
||||||
- mod_register_web: Use mod_register configured restrictions
|
- mod_register_web: Use mod_register configured restrictions
|
||||||
|
|
||||||
PubSub
|
#### PubSub
|
||||||
- Add `delete_expired_pubsub_items` command
|
- Add `delete_expired_pubsub_items` command
|
||||||
- Add `delete_old_pubsub_items` command
|
- Add `delete_old_pubsub_items` command
|
||||||
- Optimize publishing on large nodes (SQL)
|
- Optimize publishing on large nodes (SQL)
|
||||||
|
@ -574,7 +609,7 @@ PubSub
|
||||||
- node_flat: Avoid catch-all clauses for RSM
|
- node_flat: Avoid catch-all clauses for RSM
|
||||||
- node_flat_sql: Avoid catch-all clauses for RSM
|
- node_flat_sql: Avoid catch-all clauses for RSM
|
||||||
|
|
||||||
SQL
|
#### SQL
|
||||||
- Use `INSERT ... ON CONFLICT` in SQL_UPSERT for PostgreSQL >= 9.5
|
- Use `INSERT ... ON CONFLICT` in SQL_UPSERT for PostgreSQL >= 9.5
|
||||||
- mod_mam export: assign MUC entries to the MUC service
|
- mod_mam export: assign MUC entries to the MUC service
|
||||||
- MySQL: Fix typo when creating index
|
- MySQL: Fix typo when creating index
|
||||||
|
@ -582,7 +617,7 @@ SQL
|
||||||
- PgSQL: Add missing SQL migration for table `push_session`
|
- PgSQL: Add missing SQL migration for table `push_session`
|
||||||
- PgSQL: Fix `vcard_search` definition in pgsql new schema
|
- PgSQL: Fix `vcard_search` definition in pgsql new schema
|
||||||
|
|
||||||
Other
|
#### Other
|
||||||
- `captcha-ng.sh`: "sort -R" command not POSIX, added "shuf" and "cat" as fallback
|
- `captcha-ng.sh`: "sort -R" command not POSIX, added "shuf" and "cat" as fallback
|
||||||
- Make s2s connection table cleanup more robust
|
- Make s2s connection table cleanup more robust
|
||||||
- Update export/import of scram password to XEP-0227 1.1
|
- Update export/import of scram password to XEP-0227 1.1
|
||||||
|
@ -590,7 +625,7 @@ Other
|
||||||
|
|
||||||
## Version 21.07
|
## Version 21.07
|
||||||
|
|
||||||
Compilation
|
#### Compilation
|
||||||
- Add rebar3 3.15.2 binary
|
- Add rebar3 3.15.2 binary
|
||||||
- Add support for mix to: `./configure --enable-rebar=mix`
|
- Add support for mix to: `./configure --enable-rebar=mix`
|
||||||
- Improved `make rel` to work with rebar3 and mix
|
- Improved `make rel` to work with rebar3 and mix
|
||||||
|
@ -602,14 +637,16 @@ Compilation
|
||||||
- Added experimental support for GitHub Codespaces
|
- Added experimental support for GitHub Codespaces
|
||||||
- Switch test service from TravisCI to GitHub Actions
|
- Switch test service from TravisCI to GitHub Actions
|
||||||
|
|
||||||
Commands:
|
#### Commands:
|
||||||
|
|
||||||
- Display extended error message in ejabberdctl
|
- Display extended error message in ejabberdctl
|
||||||
- Remove SMP option from ejabberdctl.cfg, `-smp` was removed in OTP 21
|
- Remove SMP option from ejabberdctl.cfg, `-smp` was removed in OTP 21
|
||||||
- `create_room`: After creating room, store in DB if it's persistent
|
- `create_room`: After creating room, store in DB if it's persistent
|
||||||
- `help`: Major changes in its usage and output
|
- `help`: Major changes in its usage and output
|
||||||
- `srg_create`: Update to use `label` parameter instead of `name`
|
- `srg_create`: Update to use `label` parameter instead of `name`
|
||||||
|
|
||||||
Modules:
|
#### Modules:
|
||||||
|
|
||||||
- ejabberd_listener: New `send_timeout` option
|
- ejabberd_listener: New `send_timeout` option
|
||||||
- mod_mix: Improvements to update to 0.14.1
|
- mod_mix: Improvements to update to 0.14.1
|
||||||
- mod_muc_room: Don't leak owner JIDs
|
- mod_muc_room: Don't leak owner JIDs
|
||||||
|
@ -626,7 +663,8 @@ Modules:
|
||||||
- WebAdmin: New simple pages to view mnesia tables information and content
|
- WebAdmin: New simple pages to view mnesia tables information and content
|
||||||
- WebSocket: Fix typos
|
- WebSocket: Fix typos
|
||||||
|
|
||||||
SQL:
|
#### SQL:
|
||||||
|
|
||||||
- MySQL Backend Patch for scram-sha512
|
- MySQL Backend Patch for scram-sha512
|
||||||
- SQLite: When exporting for SQLite, use its specific escape options
|
- SQLite: When exporting for SQLite, use its specific escape options
|
||||||
- SQLite: Minor fixes for new_sql_schema support
|
- SQLite: Minor fixes for new_sql_schema support
|
||||||
|
@ -636,14 +674,16 @@ SQL:
|
||||||
|
|
||||||
## Version 21.04
|
## Version 21.04
|
||||||
|
|
||||||
API Commands:
|
#### API Commands:
|
||||||
|
|
||||||
- `add_rosteritem/...`: Add argument guards to roster commands
|
- `add_rosteritem/...`: Add argument guards to roster commands
|
||||||
- `get_user_subscriptions`: New command for MUC/Sub
|
- `get_user_subscriptions`: New command for MUC/Sub
|
||||||
- `remove_mam_for_user_with_peer`: Fix when removing room archive
|
- `remove_mam_for_user_with_peer`: Fix when removing room archive
|
||||||
- `send_message`: Fix bug introduced in ejabberd 21.01
|
- `send_message`: Fix bug introduced in ejabberd 21.01
|
||||||
- `set_vcard`: Return modules errors
|
- `set_vcard`: Return modules errors
|
||||||
|
|
||||||
Build and setup:
|
#### Build and setup:
|
||||||
|
|
||||||
- Allow ejabberd to be compatible as a dependency for an Erlang project using rebar3
|
- Allow ejabberd to be compatible as a dependency for an Erlang project using rebar3
|
||||||
- CAPTCHA: New question/answer-based CAPTCHA script
|
- CAPTCHA: New question/answer-based CAPTCHA script
|
||||||
- `--enable-lua`: new configure option for luerl instead of --enable-tools
|
- `--enable-lua`: new configure option for luerl instead of --enable-tools
|
||||||
|
@ -651,14 +691,16 @@ Build and setup:
|
||||||
- Update `sql_query` record to handle the Erlang/OTP 24 compiler reports
|
- Update `sql_query` record to handle the Erlang/OTP 24 compiler reports
|
||||||
- Updated dependencies to fix Dialyzer warnings
|
- Updated dependencies to fix Dialyzer warnings
|
||||||
|
|
||||||
Miscellaneous:
|
#### Miscellaneous:
|
||||||
|
|
||||||
- CAPTCHA: Update `FORM_TYPE` from captcha to register
|
- CAPTCHA: Update `FORM_TYPE` from captcha to register
|
||||||
- LDAP: fix eldap certificate verification
|
- LDAP: fix eldap certificate verification
|
||||||
- MySQL: Fix for "specified key was too long"
|
- MySQL: Fix for "specified key was too long"
|
||||||
- Translations: updated the Esperanto, Greek, and Japanese translations
|
- Translations: updated the Esperanto, Greek, and Japanese translations
|
||||||
- Websocket: Fix PONG responses
|
- Websocket: Fix PONG responses
|
||||||
|
|
||||||
Modules:
|
#### Modules:
|
||||||
|
|
||||||
- `mod_block_strangers`: If stanza is type error, allow it passing
|
- `mod_block_strangers`: If stanza is type error, allow it passing
|
||||||
- `mod_caps`: Don't request roster when not needed
|
- `mod_caps`: Don't request roster when not needed
|
||||||
- `mod_caps`: Skip reading roster in one more case
|
- `mod_caps`: Skip reading roster in one more case
|
||||||
|
@ -674,7 +716,8 @@ Modules:
|
||||||
|
|
||||||
## Version 21.01
|
## Version 21.01
|
||||||
|
|
||||||
Miscellaneous changes:
|
#### Miscellaneous changes:
|
||||||
|
|
||||||
- `log_rotate_size` option: Fix handling of ‘infinity’ value
|
- `log_rotate_size` option: Fix handling of ‘infinity’ value
|
||||||
- `mod_time`: Fix invalid timezone
|
- `mod_time`: Fix invalid timezone
|
||||||
- Auth JWT: New `check_decoded_jwt` hook runs the default JWT verifier
|
- Auth JWT: New `check_decoded_jwt` hook runs the default JWT verifier
|
||||||
|
@ -689,7 +732,8 @@ Miscellaneous changes:
|
||||||
- Stun: Block loopback addresses by default
|
- Stun: Block loopback addresses by default
|
||||||
- Several documentation fixes and clarifications
|
- Several documentation fixes and clarifications
|
||||||
|
|
||||||
Commands:
|
#### Commands:
|
||||||
|
|
||||||
- `decide_room`: Use better fallback value for room activity time when skipping room
|
- `decide_room`: Use better fallback value for room activity time when skipping room
|
||||||
- `delete_old_message`: Fix when using sqlite spool table
|
- `delete_old_message`: Fix when using sqlite spool table
|
||||||
- `module_install`: Make ext_mod compile module with debug_info flags
|
- `module_install`: Make ext_mod compile module with debug_info flags
|
||||||
|
@ -697,13 +741,15 @@ Commands:
|
||||||
- `send_message`: Don’t include empty in messages
|
- `send_message`: Don’t include empty in messages
|
||||||
- `set_room_affiliation`: Validate affiliations
|
- `set_room_affiliation`: Validate affiliations
|
||||||
|
|
||||||
Running:
|
#### Running:
|
||||||
|
|
||||||
- Docker: New `Dockerfile` and `devcontainer.json`
|
- Docker: New `Dockerfile` and `devcontainer.json`
|
||||||
- New `ejabberdctl foreground-quiet`
|
- New `ejabberdctl foreground-quiet`
|
||||||
- Systemd: Allow for listening on privileged ports
|
- Systemd: Allow for listening on privileged ports
|
||||||
- Systemd: Integrate nicely with systemd
|
- Systemd: Integrate nicely with systemd
|
||||||
|
|
||||||
Translations:
|
#### Translations:
|
||||||
|
|
||||||
- Moved gettext PO files to a new `ejabberd-po` repository
|
- Moved gettext PO files to a new `ejabberd-po` repository
|
||||||
- Improved several translations: Catalan, Chinese, German, Greek, Indonesian, Norwegian, Portuguese (Brazil), Spanish.
|
- Improved several translations: Catalan, Chinese, German, Greek, Indonesian, Norwegian, Portuguese (Brazil), Spanish.
|
||||||
|
|
||||||
|
@ -716,13 +762,13 @@ Translations:
|
||||||
- start_room: new hook runs when a room process is started
|
- start_room: new hook runs when a room process is started
|
||||||
- check_decoded_jwt: new hook to check decoded JWT after success authentication
|
- check_decoded_jwt: new hook to check decoded JWT after success authentication
|
||||||
|
|
||||||
* Admin
|
#### Admin
|
||||||
- Docker: Fix DB initialization
|
- Docker: Fix DB initialization
|
||||||
- New sql_odbc_driver option: choose the mssql ODBC driver
|
- New sql_odbc_driver option: choose the mssql ODBC driver
|
||||||
- Rebar3: Fully supported. Enable with `./configure --with-rebar=/path/to/rebar3`
|
- Rebar3: Fully supported. Enable with `./configure --with-rebar=/path/to/rebar3`
|
||||||
- systemd: start ejabberd in foreground
|
- systemd: start ejabberd in foreground
|
||||||
|
|
||||||
* Modules:
|
#### Modules:
|
||||||
- MAM: Make sure that jid used as base in mam xml_compress is bare
|
- MAM: Make sure that jid used as base in mam xml_compress is bare
|
||||||
- MAM: Support for MAM Flipped Pages
|
- MAM: Support for MAM Flipped Pages
|
||||||
- MUC: Always show MucSub subscribers nicks
|
- MUC: Always show MucSub subscribers nicks
|
||||||
|
@ -744,7 +790,7 @@ Translations:
|
||||||
|
|
||||||
## Version 20.07
|
## Version 20.07
|
||||||
|
|
||||||
* Changes in this version
|
#### Changes in this version
|
||||||
- Add support for using unix sockets in listeners.
|
- Add support for using unix sockets in listeners.
|
||||||
- Make this version compatible with erlang R23
|
- Make this version compatible with erlang R23
|
||||||
- Make room permissions checks more strict for subscribers
|
- Make room permissions checks more strict for subscribers
|
||||||
|
@ -771,7 +817,7 @@ Translations:
|
||||||
|
|
||||||
## Version 20.03
|
## Version 20.03
|
||||||
|
|
||||||
* Changes in this version
|
#### Changes in this version
|
||||||
- Add support of ssl connection when connection to mysql
|
- Add support of ssl connection when connection to mysql
|
||||||
database (configured with `sql_ssl: true` option)
|
database (configured with `sql_ssl: true` option)
|
||||||
- Experimental support for cockroachdb when configured
|
- Experimental support for cockroachdb when configured
|
||||||
|
@ -791,7 +837,7 @@ Translations:
|
||||||
|
|
||||||
## Version 20.02
|
## Version 20.02
|
||||||
|
|
||||||
* Changes in this version
|
#### Changes in this version
|
||||||
- Fix problems when trying to use string format with unicode
|
- Fix problems when trying to use string format with unicode
|
||||||
values directly in xmpp nodes
|
values directly in xmpp nodes
|
||||||
- Add missing oauth_client table declaration in lite.new.sql
|
- Add missing oauth_client table declaration in lite.new.sql
|
||||||
|
@ -809,7 +855,7 @@ Translations:
|
||||||
|
|
||||||
## Version 20.01
|
## Version 20.01
|
||||||
|
|
||||||
* New features
|
#### New features
|
||||||
- Implement OAUTH authentication in mqtt
|
- Implement OAUTH authentication in mqtt
|
||||||
- Make logging infrastructure use new logger introduced
|
- Make logging infrastructure use new logger introduced
|
||||||
in Erlang (requires OTP22)
|
in Erlang (requires OTP22)
|
||||||
|
@ -824,7 +870,7 @@ Translations:
|
||||||
- Generate man page automatically
|
- Generate man page automatically
|
||||||
- Implement copy feature in mod_carboncopy
|
- Implement copy feature in mod_carboncopy
|
||||||
|
|
||||||
* Fixes
|
#### Fixes
|
||||||
- Make webadmin work with configurable paths
|
- Make webadmin work with configurable paths
|
||||||
- Fix handling of result in xmlrpc module
|
- Fix handling of result in xmlrpc module
|
||||||
- Make webadmin work even when accessed through not declared domain
|
- Make webadmin work even when accessed through not declared domain
|
||||||
|
@ -842,18 +888,18 @@ Translations:
|
||||||
|
|
||||||
## Version 19.09
|
## Version 19.09
|
||||||
|
|
||||||
* Admin
|
#### Admin
|
||||||
- The minimum required Erlang/OTP version is now 19.3
|
- The minimum required Erlang/OTP version is now 19.3
|
||||||
- Fix API call using OAuth (#2982)
|
- Fix API call using OAuth (#2982)
|
||||||
- Rename MUC command arguments from Host to Service (#2976)
|
- Rename MUC command arguments from Host to Service (#2976)
|
||||||
|
|
||||||
* Webadmin
|
#### Webadmin
|
||||||
- Don't treat 'Host' header as a virtual XMPP host (#2989)
|
- Don't treat 'Host' header as a virtual XMPP host (#2989)
|
||||||
- Fix some links to Guide in WebAdmin and add new ones (#3003)
|
- Fix some links to Guide in WebAdmin and add new ones (#3003)
|
||||||
- Use select fields to input host in WebAdmin Backup (#3000)
|
- Use select fields to input host in WebAdmin Backup (#3000)
|
||||||
- Check account auth provided in WebAdmin is a local host (#3000)
|
- Check account auth provided in WebAdmin is a local host (#3000)
|
||||||
|
|
||||||
* ACME
|
#### ACME
|
||||||
- Improve ACME implementation
|
- Improve ACME implementation
|
||||||
- Fix IDA support in ACME requests
|
- Fix IDA support in ACME requests
|
||||||
- Fix unicode formatting in ACME module
|
- Fix unicode formatting in ACME module
|
||||||
|
@ -864,10 +910,10 @@ Translations:
|
||||||
- Don't auto request certificate for localhost and IP-like domains
|
- Don't auto request certificate for localhost and IP-like domains
|
||||||
- Add listener for ACME challenge in example config
|
- Add listener for ACME challenge in example config
|
||||||
|
|
||||||
* Authentication
|
#### Authentication
|
||||||
- JWT-only authentication for some users (#3012)
|
- JWT-only authentication for some users (#3012)
|
||||||
|
|
||||||
* MUC
|
#### MUC
|
||||||
- Apply default role after revoking admin affiliation (#3023)
|
- Apply default role after revoking admin affiliation (#3023)
|
||||||
- Custom exit message is not broadcast (#3004)
|
- Custom exit message is not broadcast (#3004)
|
||||||
- Revert "Affiliations other than admin and owner cannot invite to members_only rooms" (#2987)
|
- Revert "Affiliations other than admin and owner cannot invite to members_only rooms" (#2987)
|
||||||
|
@ -875,11 +921,11 @@ Translations:
|
||||||
- Improve rooms_* commands to accept 'global' as MUC service argument (#2976)
|
- Improve rooms_* commands to accept 'global' as MUC service argument (#2976)
|
||||||
- Rename MUC command arguments from Host to Service (#2976)
|
- Rename MUC command arguments from Host to Service (#2976)
|
||||||
|
|
||||||
* SQL
|
#### SQL
|
||||||
- Fix transactions for Microsoft SQL Server (#2978)
|
- Fix transactions for Microsoft SQL Server (#2978)
|
||||||
- Spawn SQL connections on demand only
|
- Spawn SQL connections on demand only
|
||||||
|
|
||||||
* Misc
|
#### Misc
|
||||||
- Add support for XEP-0328: JID Prep
|
- Add support for XEP-0328: JID Prep
|
||||||
- Added gsfonts for captcha
|
- Added gsfonts for captcha
|
||||||
- Log Mnesia table type on creation
|
- Log Mnesia table type on creation
|
||||||
|
@ -895,12 +941,12 @@ Translations:
|
||||||
|
|
||||||
## Version 19.08
|
## Version 19.08
|
||||||
|
|
||||||
* Administration
|
#### Administration
|
||||||
- Improve ejabberd halting procedure
|
- Improve ejabberd halting procedure
|
||||||
- Process unexpected erlang messages uniformly: logging a warning
|
- Process unexpected erlang messages uniformly: logging a warning
|
||||||
- mod_configure: Remove modules management
|
- mod_configure: Remove modules management
|
||||||
|
|
||||||
* Configuration
|
#### Configuration
|
||||||
- Use new configuration validator
|
- Use new configuration validator
|
||||||
- ejabberd_http: Use correct virtual host when consulting trusted_proxies
|
- ejabberd_http: Use correct virtual host when consulting trusted_proxies
|
||||||
- Fix Elixir modules detection in the configuration file
|
- Fix Elixir modules detection in the configuration file
|
||||||
|
@ -910,7 +956,7 @@ Translations:
|
||||||
- mod_stream_mgmt: Allow flexible timeout format
|
- mod_stream_mgmt: Allow flexible timeout format
|
||||||
- mod_mqtt: Allow flexible timeout format in session_expiry option
|
- mod_mqtt: Allow flexible timeout format in session_expiry option
|
||||||
|
|
||||||
* Misc
|
#### Misc
|
||||||
- Fix SQL connections leakage
|
- Fix SQL connections leakage
|
||||||
- New authentication method using JWT tokens
|
- New authentication method using JWT tokens
|
||||||
- extauth: Add 'certauth' command
|
- extauth: Add 'certauth' command
|
||||||
|
@ -925,14 +971,14 @@ Translations:
|
||||||
- mod_privacy: Don't attempt to query 'undefined' active list
|
- mod_privacy: Don't attempt to query 'undefined' active list
|
||||||
- mod_privacy: Fix race condition
|
- mod_privacy: Fix race condition
|
||||||
|
|
||||||
* MUC
|
#### MUC
|
||||||
- Add code for hibernating inactive muc_room processes
|
- Add code for hibernating inactive muc_room processes
|
||||||
- Improve handling of unexpected iq in mod_muc_room
|
- Improve handling of unexpected iq in mod_muc_room
|
||||||
- Attach mod_muc_room processes to a supervisor
|
- Attach mod_muc_room processes to a supervisor
|
||||||
- Restore room when receiving message or generic iq for not started room
|
- Restore room when receiving message or generic iq for not started room
|
||||||
- Distribute routing of MUC messages across all CPU cores
|
- Distribute routing of MUC messages across all CPU cores
|
||||||
|
|
||||||
* PubSub
|
#### PubSub
|
||||||
- Fix pending nodes retrieval for SQL backend
|
- Fix pending nodes retrieval for SQL backend
|
||||||
- Check access_model when publishing PEP
|
- Check access_model when publishing PEP
|
||||||
- Remove deprecated pubsub plugins
|
- Remove deprecated pubsub plugins
|
||||||
|
@ -940,7 +986,7 @@ Translations:
|
||||||
|
|
||||||
## Version 19.05
|
## Version 19.05
|
||||||
|
|
||||||
* Admin
|
#### Admin
|
||||||
- The minimum required Erlang/OTP version is now 19.1
|
- The minimum required Erlang/OTP version is now 19.1
|
||||||
- Provide a suggestion when unknown command, module, option or request handler is detected
|
- Provide a suggestion when unknown command, module, option or request handler is detected
|
||||||
- Deprecate some listening options: captcha, register, web_admin, http_bind and xmlrpc
|
- Deprecate some listening options: captcha, register, web_admin, http_bind and xmlrpc
|
||||||
|
@ -951,19 +997,19 @@ Translations:
|
||||||
- Improve request_handlers validator
|
- Improve request_handlers validator
|
||||||
- Fix syntax in example Elixir config file
|
- Fix syntax in example Elixir config file
|
||||||
|
|
||||||
* Auth
|
#### Auth
|
||||||
- Correctly support cache tags in ejabberd_auth
|
- Correctly support cache tags in ejabberd_auth
|
||||||
- Don't process failed EXTERNAL authentication by mod_fail2ban
|
- Don't process failed EXTERNAL authentication by mod_fail2ban
|
||||||
- Don't call to mod_register when it's not loaded
|
- Don't call to mod_register when it's not loaded
|
||||||
- Make anonymous auth don't {de}register user when there are other resources
|
- Make anonymous auth don't {de}register user when there are other resources
|
||||||
|
|
||||||
* Developer
|
#### Developer
|
||||||
- Rename listening callback from start/2 to start/3
|
- Rename listening callback from start/2 to start/3
|
||||||
- New hook called when room gets destroyed: room_destroyed
|
- New hook called when room gets destroyed: room_destroyed
|
||||||
- New hooks for tracking mucsub subscriptions changes: muc_subscribed, muc_unsubscribed
|
- New hooks for tracking mucsub subscriptions changes: muc_subscribed, muc_unsubscribed
|
||||||
- Make static hooks analyzer working again
|
- Make static hooks analyzer working again
|
||||||
|
|
||||||
* MUC
|
#### MUC
|
||||||
- Service admins are allowed to recreate room even if archive is nonempty
|
- Service admins are allowed to recreate room even if archive is nonempty
|
||||||
- New option user_mucsub_from_muc_archive
|
- New option user_mucsub_from_muc_archive
|
||||||
- Avoid late arrival of get_disco_item response
|
- Avoid late arrival of get_disco_item response
|
||||||
|
@ -972,7 +1018,7 @@ Translations:
|
||||||
- Make get_subscribed_rooms work even for non-persistant rooms
|
- Make get_subscribed_rooms work even for non-persistant rooms
|
||||||
- Allow non-moderator subscribers to get list of room subscribers
|
- Allow non-moderator subscribers to get list of room subscribers
|
||||||
|
|
||||||
* Offline
|
#### Offline
|
||||||
- New option bounce_groupchat: make it not bounce mucsub/groupchat messages
|
- New option bounce_groupchat: make it not bounce mucsub/groupchat messages
|
||||||
- New option use_mam_for_storage: fetch data from mam instead of spool table
|
- New option use_mam_for_storage: fetch data from mam instead of spool table
|
||||||
- When applying limit of max msgs in spool check only spool size
|
- When applying limit of max msgs in spool check only spool size
|
||||||
|
@ -984,27 +1030,27 @@ Translations:
|
||||||
- Return correct value from count_offline_messages with mam storage option
|
- Return correct value from count_offline_messages with mam storage option
|
||||||
- Make mod_offline put msg ignored by mam in spool when mam storage is on
|
- Make mod_offline put msg ignored by mam in spool when mam storage is on
|
||||||
|
|
||||||
* SQL:
|
#### SQL:
|
||||||
- Add SQL schemas for MQTT tables
|
- Add SQL schemas for MQTT tables
|
||||||
- Report better errors on SQL terms decode failure
|
- Report better errors on SQL terms decode failure
|
||||||
- Fix PostgreSQL compatibility in mod_offline_sql:remove_old_messages
|
- Fix PostgreSQL compatibility in mod_offline_sql:remove_old_messages
|
||||||
- Fix handling of list arguments on pgsql
|
- Fix handling of list arguments on pgsql
|
||||||
- Preliminary support for SQL in process_rosteritems command
|
- Preliminary support for SQL in process_rosteritems command
|
||||||
|
|
||||||
* Tests
|
#### Tests
|
||||||
- Add tests for user mucsub mam from muc mam
|
- Add tests for user mucsub mam from muc mam
|
||||||
- Add tests for offline with mam storage
|
- Add tests for offline with mam storage
|
||||||
- Add tests for offline use_mam_for_storage
|
- Add tests for offline use_mam_for_storage
|
||||||
- Initial Docker environment to run ejabberd test suite
|
- Initial Docker environment to run ejabberd test suite
|
||||||
- Test offline:use_mam_for_storage, mam:user_mucsub_from_muc_archive used together
|
- Test offline:use_mam_for_storage, mam:user_mucsub_from_muc_archive used together
|
||||||
|
|
||||||
* Websocket
|
#### Websocket
|
||||||
- Add WebSockets support to mod_mqtt
|
- Add WebSockets support to mod_mqtt
|
||||||
- Return "Bad request" error when origin in websocket connection doesn't match
|
- Return "Bad request" error when origin in websocket connection doesn't match
|
||||||
- Fix RFC6454 violation on websocket connection when validating Origin header
|
- Fix RFC6454 violation on websocket connection when validating Origin header
|
||||||
- Origin header validation on websocket connection
|
- Origin header validation on websocket connection
|
||||||
|
|
||||||
* Other modules
|
#### Other modules
|
||||||
- mod_adhoc: Use xml:lang from stanza when it's missing in <command/> element
|
- mod_adhoc: Use xml:lang from stanza when it's missing in <command/> element
|
||||||
- mod_announce: Add 'sessionid' attribute when required
|
- mod_announce: Add 'sessionid' attribute when required
|
||||||
- mod_bosh: Don't put duplicate polling attribute in bosh payload
|
- mod_bosh: Don't put duplicate polling attribute in bosh payload
|
||||||
|
@ -1017,14 +1063,14 @@ Translations:
|
||||||
|
|
||||||
## Version 19.02
|
## Version 19.02
|
||||||
|
|
||||||
* Admin
|
#### Admin
|
||||||
- Fix in configure.ac the Erlang/OTP version: from 17.5 to 19.0
|
- Fix in configure.ac the Erlang/OTP version: from 17.5 to 19.0
|
||||||
- reload_config command: Fix crash when sql_pool_size option is used
|
- reload_config command: Fix crash when sql_pool_size option is used
|
||||||
- reload_config command: Fix crash when SQL is not configured
|
- reload_config command: Fix crash when SQL is not configured
|
||||||
- rooms_empty_destroy command: Several fixes to behave more conservative
|
- rooms_empty_destroy command: Several fixes to behave more conservative
|
||||||
- Fix serverhost->host parameter name for muc_(un)register_nick API
|
- Fix serverhost->host parameter name for muc_(un)register_nick API
|
||||||
|
|
||||||
* Configuration
|
#### Configuration
|
||||||
- Allow specifying tag for listener for api_permission purposes
|
- Allow specifying tag for listener for api_permission purposes
|
||||||
- Change default ciphers to intermediate
|
- Change default ciphers to intermediate
|
||||||
- Define default ciphers/protocol_option in example config
|
- Define default ciphers/protocol_option in example config
|
||||||
|
@ -1034,29 +1080,29 @@ Translations:
|
||||||
- mod_muc: New option access_mam to restrict who can modify that room option
|
- mod_muc: New option access_mam to restrict who can modify that room option
|
||||||
- mod_offline: New option store_groupchat to allow storing group chat messages
|
- mod_offline: New option store_groupchat to allow storing group chat messages
|
||||||
|
|
||||||
* Core
|
#### Core
|
||||||
- Add MQTT protocol support
|
- Add MQTT protocol support
|
||||||
- Fix (un)setting of priority
|
- Fix (un)setting of priority
|
||||||
- Use OTP application startup infrastructure for starting dependencies
|
- Use OTP application startup infrastructure for starting dependencies
|
||||||
- Improve starting order of several dependencies
|
- Improve starting order of several dependencies
|
||||||
|
|
||||||
* MAM
|
#### MAM
|
||||||
- mod_mam_mnesia/sql: Improve check for empty archive
|
- mod_mam_mnesia/sql: Improve check for empty archive
|
||||||
- disallow room creation if archive not empty and clear_archive_on_room_destroy is false
|
- disallow room creation if archive not empty and clear_archive_on_room_destroy is false
|
||||||
- allow check if archive is empty for or user or room
|
- allow check if archive is empty for or user or room
|
||||||
- Additional checks for database failures
|
- Additional checks for database failures
|
||||||
|
|
||||||
* MUC
|
#### MUC
|
||||||
- Make sure that room_destroyed is called even when some code throws in terminate
|
- Make sure that room_destroyed is called even when some code throws in terminate
|
||||||
- Update muc room state after adding extra access field to it
|
- Update muc room state after adding extra access field to it
|
||||||
- MUC/Sub: Send mucsub subscriber notification events with from set to room jid
|
- MUC/Sub: Send mucsub subscriber notification events with from set to room jid
|
||||||
|
|
||||||
* Shared Roster
|
#### Shared Roster
|
||||||
- Don't perform roster push for non-local contacts
|
- Don't perform roster push for non-local contacts
|
||||||
- Handle versioning result when shared roster group has remote account
|
- Handle versioning result when shared roster group has remote account
|
||||||
- Fix SQL queries
|
- Fix SQL queries
|
||||||
|
|
||||||
* Miscelanea
|
#### Miscelanea
|
||||||
- CAPTCHA: Add no-store hint to CAPTCHA challenge stanzas
|
- CAPTCHA: Add no-store hint to CAPTCHA challenge stanzas
|
||||||
- HTTP: Reject http_api request with malformed Authentication header
|
- HTTP: Reject http_api request with malformed Authentication header
|
||||||
- mod_carboncopy: Don't lose carbons on presence change or session resumption
|
- mod_carboncopy: Don't lose carbons on presence change or session resumption
|
||||||
|
@ -1071,7 +1117,7 @@ Translations:
|
||||||
|
|
||||||
## Version 18.12
|
## Version 18.12
|
||||||
|
|
||||||
* MAM data store compression
|
- MAM data store compression
|
||||||
* Proxy protocol support
|
- Proxy protocol support
|
||||||
* MUC Self-Ping optimization (XEP-0410)
|
- MUC Self-Ping optimization (XEP-0410)
|
||||||
* Bookmarks conversion (XEP-0411)
|
- Bookmarks conversion (XEP-0411)
|
||||||
|
|
|
@ -7,7 +7,7 @@ from source code.
|
||||||
For a more detailed explanation, please check the
|
For a more detailed explanation, please check the
|
||||||
ejabberd Docs: [Source Code Installation][docs-source].
|
ejabberd Docs: [Source Code Installation][docs-source].
|
||||||
|
|
||||||
[docs-source]: https://docs.ejabberd.im/admin/installation/#source-code
|
[docs-source]: https://docs.ejabberd.im/admin/install/source/
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
|
|
|
@ -29,7 +29,7 @@ repository.
|
||||||
Check the [differences between `ejabberd` and `ecs` images](https://github.com/processone/docker-ejabberd/blob/master/ecs/HUB-README.md#alternative-image-in-github).
|
Check the [differences between `ejabberd` and `ecs` images](https://github.com/processone/docker-ejabberd/blob/master/ecs/HUB-README.md#alternative-image-in-github).
|
||||||
|
|
||||||
If you are using a Windows operating system, check the tutorials mentioned in
|
If you are using a Windows operating system, check the tutorials mentioned in
|
||||||
[ejabberd Docs > Docker Image](https://docs.ejabberd.im/admin/installation/#docker-image).
|
[ejabberd Docs > Docker Image](https://docs.ejabberd.im/admin/install/container/#ejabberd-container-image).
|
||||||
|
|
||||||
|
|
||||||
Start ejabberd
|
Start ejabberd
|
||||||
|
@ -108,7 +108,7 @@ docker exec -it ejabberd ejabberdctl register admin localhost passw0rd
|
||||||
```
|
```
|
||||||
|
|
||||||
Then edit conf/ejabberd.yml and add the ACL as explained in
|
Then edit conf/ejabberd.yml and add the ACL as explained in
|
||||||
[ejabberd Docs: Administration Account](https://docs.ejabberd.im/admin/installation/#administration-account)
|
[ejabberd Docs: Administration Account](https://docs.ejabberd.im/admin/install/next-steps/#administration-account)
|
||||||
|
|
||||||
|
|
||||||
### Check ejabberd log files
|
### Check ejabberd log files
|
||||||
|
@ -249,7 +249,7 @@ For this you can either:
|
||||||
|
|
||||||
Example to connect a local `ejabberdctl` to a containerized ejabberd:
|
Example to connect a local `ejabberdctl` to a containerized ejabberd:
|
||||||
1. When creating the container, export port 5210, and set `ERLANG_COOKIE`:
|
1. When creating the container, export port 5210, and set `ERLANG_COOKIE`:
|
||||||
```
|
```sh
|
||||||
docker run --name ejabberd -it \
|
docker run --name ejabberd -it \
|
||||||
-e ERLANG_COOKIE=`cat $HOME/.erlang.cookie` \
|
-e ERLANG_COOKIE=`cat $HOME/.erlang.cookie` \
|
||||||
-p 5210:5210 -p 5222:5222 \
|
-p 5210:5210 -p 5222:5222 \
|
||||||
|
@ -260,7 +260,7 @@ docker run --name ejabberd -it \
|
||||||
4. Now use `ejabberdctl` in your local ejabberd deployment
|
4. Now use `ejabberdctl` in your local ejabberd deployment
|
||||||
|
|
||||||
To connect using a local `ejabberd` script:
|
To connect using a local `ejabberd` script:
|
||||||
```
|
```sh
|
||||||
ERL_DIST_PORT=5210 _build/dev/rel/ejabberd/bin/ejabberd ping
|
ERL_DIST_PORT=5210 _build/dev/rel/ejabberd/bin/ejabberd ping
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -258,7 +258,7 @@ _build/edoc/docs.md: edoc_compile
|
||||||
> _build/edoc/docs.md
|
> _build/edoc/docs.md
|
||||||
|
|
||||||
_build/edoc/logo.png: edoc_compile
|
_build/edoc/logo.png: edoc_compile
|
||||||
wget https://docs.ejabberd.im/static/shared/images/footer_logo_e.png -O _build/edoc/logo.png
|
wget https://docs.ejabberd.im/assets/img/footer_logo_e.png -O _build/edoc/logo.png
|
||||||
|
|
||||||
#.
|
#.
|
||||||
#' copy-files
|
#' copy-files
|
||||||
|
|
|
@ -109,14 +109,14 @@ and [ejabberd translations](https://github.com/processone/ejabberd-po/) under MI
|
||||||
[erlang]: https://www.erlang.org/
|
[erlang]: https://www.erlang.org/
|
||||||
[features]: https://docs.ejabberd.im/admin/introduction/
|
[features]: https://docs.ejabberd.im/admin/introduction/
|
||||||
[fluux]: https://fluux.io/
|
[fluux]: https://fluux.io/
|
||||||
[homebrew]: https://docs.ejabberd.im/admin/installation/#homebrew
|
[homebrew]: https://docs.ejabberd.im/admin/install/homebrew/
|
||||||
[hubecs]: https://hub.docker.com/r/ejabberd/ecs/
|
[hubecs]: https://hub.docker.com/r/ejabberd/ecs/
|
||||||
[im]: https://ejabberd.im/
|
[im]: https://ejabberd.im/
|
||||||
[issues]: https://github.com/processone/ejabberd/issues
|
[issues]: https://github.com/processone/ejabberd/issues
|
||||||
[localization]: https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
[localization]: https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||||
[mqtt]: https://mqtt.org/
|
[mqtt]: https://mqtt.org/
|
||||||
[muc]: xmpp:ejabberd@conference.process-one.net
|
[muc]: xmpp:ejabberd@conference.process-one.net
|
||||||
[osp]: https://docs.ejabberd.im/admin/installation/#operating-system-packages
|
[osp]: https://docs.ejabberd.im/admin/install/os-package/
|
||||||
[p1contact]: https://www.process-one.net/en/company/contact/
|
[p1contact]: https://www.process-one.net/en/company/contact/
|
||||||
[p1download]: https://www.process-one.net/en/ejabberd/downloads/
|
[p1download]: https://www.process-one.net/en/ejabberd/downloads/
|
||||||
[p1home]: https://www.process-one.net/en/ejabberd/
|
[p1home]: https://www.process-one.net/en/ejabberd/
|
||||||
|
|
6
mix.exs
6
mix.exs
|
@ -206,9 +206,9 @@ defmodule Ejabberd.MixProject do
|
||||||
"mix.exs", "rebar.config", "rebar.config.script", "vars.config"],
|
"mix.exs", "rebar.config", "rebar.config.script", "vars.config"],
|
||||||
maintainers: ["ProcessOne"],
|
maintainers: ["ProcessOne"],
|
||||||
licenses: ["GPL-2.0-or-later"],
|
licenses: ["GPL-2.0-or-later"],
|
||||||
links: %{"Site" => "https://www.ejabberd.im",
|
links: %{"ejabberd.im" => "https://www.ejabberd.im",
|
||||||
"Documentation" => "http://docs.ejabberd.im",
|
"ejabberd Docs" => "http://docs.ejabberd.im",
|
||||||
"Source" => "https://github.com/processone/ejabberd",
|
"GitHub" => "https://github.com/processone/ejabberd",
|
||||||
"ProcessOne" => "http://www.process-one.net/"}]
|
"ProcessOne" => "http://www.process-one.net/"}]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
2
mix.lock
2
mix.lock
|
@ -22,7 +22,7 @@
|
||||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"},
|
"makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"},
|
||||||
"mqtree": {:hex, :mqtree, "1.0.16", "f8f8b4971e4ca94313ba9bcaaa1aa1077daaba5e3fd3468ffb491420a4cc3593", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "c87d1c95575db65af29b795c9daa3bed43f5c1bf84072a74469659bcf53594eb"},
|
"mqtree": {:hex, :mqtree, "1.0.16", "f8f8b4971e4ca94313ba9bcaaa1aa1077daaba5e3fd3468ffb491420a4cc3593", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "c87d1c95575db65af29b795c9daa3bed43f5c1bf84072a74469659bcf53594eb"},
|
||||||
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
|
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
|
||||||
"p1_acme": {:git, "https://github.com/processone/p1_acme", "2d049fa25d66f97a08b58ba8e07a751ed60ff9c4", [branch: "master"]},
|
"p1_acme": {:git, "https://github.com/processone/p1_acme", "b4d0900eabb208c493ae3958bc545151bb19b90e", [branch: "master"]},
|
||||||
"p1_mysql": {:hex, :p1_mysql, "1.0.23", "9b4e98f1f01e2cc4a759f611f0f015365e65c5f61ea453aa4bdfe950d20a5f11", [:rebar3], [], "hexpm", "9cef98265fb287374e7b64bf4022c4df5ec66196ca31cf4bed73c67c45bf824e"},
|
"p1_mysql": {:hex, :p1_mysql, "1.0.23", "9b4e98f1f01e2cc4a759f611f0f015365e65c5f61ea453aa4bdfe950d20a5f11", [:rebar3], [], "hexpm", "9cef98265fb287374e7b64bf4022c4df5ec66196ca31cf4bed73c67c45bf824e"},
|
||||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.14", "1c5f82535574de87e2059695ac4b91f8f9aebacbc1c80287dae6f02552d47aea", [:rebar3], [], "hexpm", "1fd3ac474e43722d9d5a87c6df8d36f698ed87af7bb81cbbb66361451d99ae8f"},
|
"p1_oauth2": {:hex, :p1_oauth2, "0.6.14", "1c5f82535574de87e2059695ac4b91f8f9aebacbc1c80287dae6f02552d47aea", [:rebar3], [], "hexpm", "1fd3ac474e43722d9d5a87c6df8d36f698ed87af7bb81cbbb66361451d99ae8f"},
|
||||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.25", "f59b7faa457fadf0c2713ac335202f41ca1b06b7c4926925b3cb0bc6f0578601", [:rebar3], [{:xmpp, "1.8.1", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "b654c1e07d3e775b626b407e7696cacfd88d17be83e7168b9d89c3832d913de7"},
|
"p1_pgsql": {:hex, :p1_pgsql, "1.1.25", "f59b7faa457fadf0c2713ac335202f41ca1b06b7c4926925b3cb0bc6f0578601", [:rebar3], [{:xmpp, "1.8.1", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "b654c1e07d3e775b626b407e7696cacfd88d17be83e7168b9d89c3832d913de7"},
|
||||||
|
|
|
@ -131,7 +131,7 @@ get_commands_spec() ->
|
||||||
"only on log files generated by some modules.\n"
|
"only on log files generated by some modules.\n"
|
||||||
"This can be useful when an external tool is "
|
"This can be useful when an external tool is "
|
||||||
"used for log rotation. See "
|
"used for log rotation. See "
|
||||||
"[Log Files](https://docs.ejabberd.im/admin/guide/troubleshooting/#log-files).",
|
"_`../../admin/guide/troubleshooting.md#log-files|Log Files`_.",
|
||||||
policy = admin,
|
policy = admin,
|
||||||
module = ?MODULE, function = reopen_log,
|
module = ?MODULE, function = reopen_log,
|
||||||
args = [], result = {res, rescode}},
|
args = [], result = {res, rescode}},
|
||||||
|
|
|
@ -87,7 +87,7 @@ md_tag(h2, V) ->
|
||||||
md_tag(strong, V) ->
|
md_tag(strong, V) ->
|
||||||
[<<"*">>, V, <<"*">>];
|
[<<"*">>, V, <<"*">>];
|
||||||
md_tag('div', V) ->
|
md_tag('div', V) ->
|
||||||
[<<"<div class='note-down'>">>, V, <<"</div>">>];
|
[<<"*Note* about this command: ">>, V, <<".">>];
|
||||||
md_tag(_, V) ->
|
md_tag(_, V) ->
|
||||||
V.
|
V.
|
||||||
|
|
||||||
|
@ -364,7 +364,7 @@ make_tags(HTMLOutput) ->
|
||||||
|
|
||||||
-dialyzer({no_match, gen_tags/2}).
|
-dialyzer({no_match, gen_tags/2}).
|
||||||
gen_tags({TagName, Commands}, HTMLOutput) ->
|
gen_tags({TagName, Commands}, HTMLOutput) ->
|
||||||
[?TAG(h1, TagName) | [?TAG(p, ?RAW("* *`"++C++"`*")) || C <- Commands]].
|
[?TAG(h1, TagName) | [?TAG(p, ?RAW("* _`"++C++"`_")) || C <- Commands]].
|
||||||
|
|
||||||
gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
||||||
args=Args, args_desc=ArgsDesc, note=Note, definer=Definer,
|
args=Args, args_desc=ArgsDesc, note=Note, definer=Definer,
|
||||||
|
@ -395,14 +395,14 @@ gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
||||||
[?TAG(dl, [gen_param(RName, Type, ResultDesc, HTMLOutput)])]
|
[?TAG(dl, [gen_param(RName, Type, ResultDesc, HTMLOutput)])]
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
TagsText = ?RAW(string:join(["*`"++atom_to_list(Tag)++"`*" || Tag <- Tags], ", ")),
|
TagsText = ?RAW(string:join(["_`"++atom_to_list(Tag)++"`_" || Tag <- Tags], ", ")),
|
||||||
IsDefinerMod = case Definer of
|
IsDefinerMod = case Definer of
|
||||||
unknown -> false;
|
unknown -> false;
|
||||||
_ -> lists:member(gen_mod, proplists:get_value(behaviour, Definer:module_info(attributes)))
|
_ -> lists:member(gen_mod, proplists:get_value(behaviour, Definer:module_info(attributes)))
|
||||||
end,
|
end,
|
||||||
ModuleText = case IsDefinerMod of
|
ModuleText = case IsDefinerMod of
|
||||||
true ->
|
true ->
|
||||||
[?TAG(h2, <<"Module:">>), ?TAG(p, ?RAW("*`"++atom_to_list(Definer)++"`*"))];
|
[?TAG(h2, <<"Module:">>), ?TAG(p, ?RAW("_`"++atom_to_list(Definer)++"`_"))];
|
||||||
false ->
|
false ->
|
||||||
[]
|
[]
|
||||||
end,
|
end,
|
||||||
|
@ -415,8 +415,8 @@ gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
||||||
true -> {NoteEl, []}
|
true -> {NoteEl, []}
|
||||||
end,
|
end,
|
||||||
|
|
||||||
[NotePre,
|
[?TAG(h1, make_command_name(Name, Note)),
|
||||||
?TAG(h1, atom_to_list(Name)),
|
NotePre,
|
||||||
?TAG(p, ?RAW(Desc)),
|
?TAG(p, ?RAW(Desc)),
|
||||||
case LongDesc of
|
case LongDesc of
|
||||||
"" -> [];
|
"" -> [];
|
||||||
|
@ -435,6 +435,19 @@ gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
||||||
[Name, Ex])))
|
[Name, Ex])))
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
get_version_mark("") ->
|
||||||
|
"";
|
||||||
|
get_version_mark(Note) ->
|
||||||
|
[XX, YY | _] = string:tokens(binary_to_list(ejabberd_option:version()), "."),
|
||||||
|
XXYY = string:join([XX, YY], "."),
|
||||||
|
case string:find(Note, XXYY) of
|
||||||
|
nomatch -> "";
|
||||||
|
_ -> " 🟤"
|
||||||
|
end.
|
||||||
|
|
||||||
|
make_command_name(Name, Note) ->
|
||||||
|
atom_to_list(Name) ++ get_version_mark(Note).
|
||||||
|
|
||||||
find_commands_definitions() ->
|
find_commands_definitions() ->
|
||||||
lists:flatmap(
|
lists:flatmap(
|
||||||
fun(Mod) ->
|
fun(Mod) ->
|
||||||
|
@ -492,21 +505,22 @@ generate_md_output(File, RegExp, Languages, Cmds) ->
|
||||||
end, Cmds2),
|
end, Cmds2),
|
||||||
Cmds4 = [maybe_add_policy_arguments(Cmd) || Cmd <- Cmds3],
|
Cmds4 = [maybe_add_policy_arguments(Cmd) || Cmd <- Cmds3],
|
||||||
Langs = binary:split(Languages, <<",">>, [global]),
|
Langs = binary:split(Languages, <<",">>, [global]),
|
||||||
Header = <<"---\ntitle: Administration API reference\ntoc: true\nmenu: API Reference\norder: 1\n"
|
Version = binary_to_list(ejabberd_config:version()),
|
||||||
"// Autogenerated with 'ejabberdctl gen_markdown_doc_for_commands'\n---\n\n"
|
Header = ["# API Reference\n\n"
|
||||||
"This section describes API of ejabberd.\n">>,
|
"This section describes API commands of ejabberd ", Version, ". "
|
||||||
|
"The commands that changed in this version are marked with 🟤.\n\n"],
|
||||||
Out = lists:map(fun(C) -> gen_doc(C, false, Langs) end, Cmds4),
|
Out = lists:map(fun(C) -> gen_doc(C, false, Langs) end, Cmds4),
|
||||||
{ok, Fh} = file:open(File, [write]),
|
{ok, Fh} = file:open(File, [write, {encoding, utf8}]),
|
||||||
io:format(Fh, "~ts~ts", [Header, Out]),
|
io:format(Fh, "~ts~ts", [Header, Out]),
|
||||||
file:close(Fh),
|
file:close(Fh),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
generate_tags_md(File) ->
|
generate_tags_md(File) ->
|
||||||
Header = <<"---\ntitle: API Tags\ntoc: true\nmenu: API Tags\norder: 2\n"
|
Version = binary_to_list(ejabberd_config:version()),
|
||||||
"// Autogenerated with 'ejabberdctl gen_markdown_doc_for_tags'\n---\n\n"
|
Header = ["# API Tags\n\n"
|
||||||
"This section enumerates the tags and their associated API.\n">>,
|
"This section enumerates the API tags of ejabberd ", Version, ". \n\n"],
|
||||||
Tags = make_tags(false),
|
Tags = make_tags(false),
|
||||||
{ok, Fh} = file:open(File, [write]),
|
{ok, Fh} = file:open(File, [write, {encoding, utf8}]),
|
||||||
io:format(Fh, "~ts~ts", [Header, Tags]),
|
io:format(Fh, "~ts~ts", [Header, Tags]),
|
||||||
file:close(Fh),
|
file:close(Fh),
|
||||||
ok.
|
ok.
|
||||||
|
|
|
@ -45,7 +45,8 @@ man(Lang) ->
|
||||||
#{desc := Descr} = Map ->
|
#{desc := Descr} = Map ->
|
||||||
DocOpts = maps:get(opts, Map, []),
|
DocOpts = maps:get(opts, Map, []),
|
||||||
Example = maps:get(example, Map, []),
|
Example = maps:get(example, Map, []),
|
||||||
{[{M, Descr, DocOpts, #{example => Example}}|Mods], SubMods};
|
Note = maps:get(note, Map, []),
|
||||||
|
{[{M, Descr, DocOpts, #{example => Example, note => Note}}|Mods], SubMods};
|
||||||
#{opts := DocOpts} ->
|
#{opts := DocOpts} ->
|
||||||
{ParentMod, Backend} = strip_backend_suffix(M),
|
{ParentMod, Backend} = strip_backend_suffix(M),
|
||||||
{Mods, dict:append(ParentMod, {M, Backend, DocOpts}, SubMods)};
|
{Mods, dict:append(ParentMod, {M, Backend, DocOpts}, SubMods)};
|
||||||
|
@ -72,10 +73,12 @@ man(Lang) ->
|
||||||
catch _:undef -> []
|
catch _:undef -> []
|
||||||
end
|
end
|
||||||
end, ejabberd_config:callback_modules(all)),
|
end, ejabberd_config:callback_modules(all)),
|
||||||
|
Version = binary_to_list(ejabberd_config:version()),
|
||||||
Options =
|
Options =
|
||||||
["TOP LEVEL OPTIONS",
|
["TOP LEVEL OPTIONS",
|
||||||
"-----------------",
|
"-----------------",
|
||||||
tr(Lang, ?T("This section describes top level options of ejabberd.")),
|
"This section describes top level options of ejabberd " ++ Version ++ ".",
|
||||||
|
"The options that changed in this version are marked with 🟤.",
|
||||||
io_lib:nl()] ++
|
io_lib:nl()] ++
|
||||||
lists:flatmap(
|
lists:flatmap(
|
||||||
fun(Opt) ->
|
fun(Opt) ->
|
||||||
|
@ -95,16 +98,19 @@ man(Lang) ->
|
||||||
"MODULES",
|
"MODULES",
|
||||||
"-------",
|
"-------",
|
||||||
"[[modules]]",
|
"[[modules]]",
|
||||||
tr(Lang, ?T("This section describes options of all ejabberd modules.")),
|
"This section describes modules options of ejabberd " ++ Version ++ ".",
|
||||||
|
"The modules that changed in this version are marked with 🟤.",
|
||||||
io_lib:nl()] ++
|
io_lib:nl()] ++
|
||||||
lists:flatmap(
|
lists:flatmap(
|
||||||
fun({M, Descr, DocOpts, Backends, Example}) ->
|
fun({M, Descr, DocOpts, Backends, Example}) ->
|
||||||
ModName = atom_to_list(M),
|
ModName = atom_to_list(M),
|
||||||
|
VersionMark = get_version_mark(Example),
|
||||||
[io_lib:nl(),
|
[io_lib:nl(),
|
||||||
ModName,
|
lists:flatten([ModName, VersionMark]),
|
||||||
lists:duplicate(length(atom_to_list(M)), $~),
|
lists:duplicate(length(atom_to_list(M)), $~),
|
||||||
"[[" ++ ModName ++ "]]",
|
"[[" ++ ModName ++ "]]",
|
||||||
io_lib:nl()] ++
|
io_lib:nl()] ++
|
||||||
|
format_versions(Lang, Example) ++ [io_lib:nl()] ++
|
||||||
tr_multi(Lang, Descr) ++ [io_lib:nl()] ++
|
tr_multi(Lang, Descr) ++ [io_lib:nl()] ++
|
||||||
opts_to_man(Lang, [{M, '', DocOpts}|Backends]) ++
|
opts_to_man(Lang, [{M, '', DocOpts}|Backends]) ++
|
||||||
format_example(0, Lang, Example)
|
format_example(0, Lang, Example)
|
||||||
|
@ -114,7 +120,7 @@ man(Lang) ->
|
||||||
"LISTENERS",
|
"LISTENERS",
|
||||||
"-------",
|
"-------",
|
||||||
"[[listeners]]",
|
"[[listeners]]",
|
||||||
tr(Lang, ?T("This section describes options of all ejabberd listeners.")),
|
"This section describes listeners options of ejabberd " ++ Version ++ ".",
|
||||||
io_lib:nl(),
|
io_lib:nl(),
|
||||||
"TODO"],
|
"TODO"],
|
||||||
AsciiData =
|
AsciiData =
|
||||||
|
@ -151,7 +157,7 @@ opts_to_man(Lang, Backends) ->
|
||||||
end, Backends).
|
end, Backends).
|
||||||
|
|
||||||
opt_to_man(Lang, {Option, Options}, Level) ->
|
opt_to_man(Lang, {Option, Options}, Level) ->
|
||||||
[format_option(Lang, Option, Options)|format_desc(Lang, Options)] ++
|
[format_option(Lang, Option, Options)|format_versions(Lang, Options)++format_desc(Lang, Options)] ++
|
||||||
format_example(Level, Lang, Options);
|
format_example(Level, Lang, Options);
|
||||||
opt_to_man(Lang, {Option, Options, Children}, Level) ->
|
opt_to_man(Lang, {Option, Options, Children}, Level) ->
|
||||||
[format_option(Lang, Option, Options)|format_desc(Lang, Options)] ++
|
[format_option(Lang, Option, Options)|format_desc(Lang, Options)] ++
|
||||||
|
@ -162,16 +168,28 @@ opt_to_man(Lang, {Option, Options, Children}, Level) ->
|
||||||
lists:keysort(1, Children))]) ++
|
lists:keysort(1, Children))]) ++
|
||||||
[io_lib:nl()|format_example(Level, Lang, Options)].
|
[io_lib:nl()|format_example(Level, Lang, Options)].
|
||||||
|
|
||||||
format_option(Lang, Option, #{note := Note, value := Val}) ->
|
get_version_mark(#{note := Note}) ->
|
||||||
"\n\n_Note_ about the next option: " ++ Note ++ ":\n\n"++
|
[XX, YY | _] = string:tokens(binary_to_list(ejabberd_option:version()), "."),
|
||||||
"*" ++ atom_to_list(Option) ++ "*: 'pass:[" ++
|
XXYY = string:join([XX, YY], "."),
|
||||||
tr(Lang, Val) ++ "]'::";
|
case string:find(Note, XXYY) of
|
||||||
format_option(Lang, Option, #{value := Val}) ->
|
nomatch -> "";
|
||||||
"*" ++ atom_to_list(Option) ++ "*: 'pass:[" ++
|
_ -> " 🟤"
|
||||||
|
end;
|
||||||
|
get_version_mark(_) ->
|
||||||
|
"".
|
||||||
|
|
||||||
|
format_option(Lang, Option, #{value := Val} = Options) ->
|
||||||
|
VersionMark = get_version_mark(Options),
|
||||||
|
"*" ++ atom_to_list(Option) ++ VersionMark ++ "*: 'pass:[" ++
|
||||||
tr(Lang, Val) ++ "]'::";
|
tr(Lang, Val) ++ "]'::";
|
||||||
format_option(_Lang, Option, #{}) ->
|
format_option(_Lang, Option, #{}) ->
|
||||||
"*" ++ atom_to_list(Option) ++ "*::".
|
"*" ++ atom_to_list(Option) ++ "*::".
|
||||||
|
|
||||||
|
format_versions(_Lang, #{note := Note}) when Note /= [] ->
|
||||||
|
["_Note_ about this option: " ++ Note ++ ". "];
|
||||||
|
format_versions(_, _) ->
|
||||||
|
[].
|
||||||
|
|
||||||
format_desc(Lang, #{desc := Desc}) ->
|
format_desc(Lang, #{desc := Desc}) ->
|
||||||
tr_multi(Lang, Desc).
|
tr_multi(Lang, Desc).
|
||||||
|
|
||||||
|
@ -194,7 +212,7 @@ format_example(Level, Lang, #{example := [_|_] = Example}) ->
|
||||||
false ->
|
false ->
|
||||||
lists:flatmap(
|
lists:flatmap(
|
||||||
fun(Block) ->
|
fun(Block) ->
|
||||||
["+", "''''", "+"|Block]
|
["+", "*Examples*:", "+"|Block]
|
||||||
end,
|
end,
|
||||||
lists:map(
|
lists:map(
|
||||||
fun({Text, Lines}) ->
|
fun({Text, Lines}) ->
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
get_commands_spec() ->
|
get_commands_spec() ->
|
||||||
[
|
[
|
||||||
#ejabberd_commands{name = oauth_issue_token, tags = [oauth],
|
#ejabberd_commands{name = oauth_issue_token, tags = [oauth],
|
||||||
desc = "Issue an [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) token for the given jid",
|
desc = "Issue an _`oauth.md|OAuth`_ token for the given jid",
|
||||||
module = ?MODULE, function = oauth_issue_token,
|
module = ?MODULE, function = oauth_issue_token,
|
||||||
args = [{jid, string},{ttl, integer}, {scopes, string}],
|
args = [{jid, string},{ttl, integer}, {scopes, string}],
|
||||||
policy = restricted,
|
policy = restricted,
|
||||||
|
@ -92,7 +92,7 @@ get_commands_spec() ->
|
||||||
result = {result, {tuple, [{token, string}, {scopes, string}, {expires_in, string}]}}
|
result = {result, {tuple, [{token, string}, {scopes, string}, {expires_in, string}]}}
|
||||||
},
|
},
|
||||||
#ejabberd_commands{name = oauth_issue_token, tags = [oauth],
|
#ejabberd_commands{name = oauth_issue_token, tags = [oauth],
|
||||||
desc = "Issue an [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) token for the given jid",
|
desc = "Issue an _`oauth.md|OAuth`_ optionredir token for the given jid",
|
||||||
module = ?MODULE, function = oauth_issue_token,
|
module = ?MODULE, function = oauth_issue_token,
|
||||||
version = 1,
|
version = 1,
|
||||||
note = "updated in 24.02",
|
note = "updated in 24.02",
|
||||||
|
@ -105,7 +105,7 @@ get_commands_spec() ->
|
||||||
result = {result, {tuple, [{token, string}, {scopes, {list, {scope, string}}}, {expires_in, string}]}}
|
result = {result, {tuple, [{token, string}, {scopes, {list, {scope, string}}}, {expires_in, string}]}}
|
||||||
},
|
},
|
||||||
#ejabberd_commands{name = oauth_list_tokens, tags = [oauth],
|
#ejabberd_commands{name = oauth_list_tokens, tags = [oauth],
|
||||||
desc = "List [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) tokens, user, scope, and seconds to expire (only Mnesia)",
|
desc = "List _`oauth.md|OAuth`_ tokens, user, scope, and seconds to expire (only Mnesia)",
|
||||||
longdesc = "List OAuth tokens, their user and scope, and how many seconds remain until expirity",
|
longdesc = "List OAuth tokens, their user and scope, and how many seconds remain until expirity",
|
||||||
module = ?MODULE, function = oauth_list_tokens,
|
module = ?MODULE, function = oauth_list_tokens,
|
||||||
args = [],
|
args = [],
|
||||||
|
@ -113,7 +113,7 @@ get_commands_spec() ->
|
||||||
result = {tokens, {list, {token, {tuple, [{token, string}, {user, string}, {scope, string}, {expires_in, string}]}}}}
|
result = {tokens, {list, {token, {tuple, [{token, string}, {user, string}, {scope, string}, {expires_in, string}]}}}}
|
||||||
},
|
},
|
||||||
#ejabberd_commands{name = oauth_revoke_token, tags = [oauth],
|
#ejabberd_commands{name = oauth_revoke_token, tags = [oauth],
|
||||||
desc = "Revoke authorization for an [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) token",
|
desc = "Revoke authorization for an _`oauth.md|OAuth`_ token",
|
||||||
note = "changed in 22.05",
|
note = "changed in 22.05",
|
||||||
module = ?MODULE, function = oauth_revoke_token,
|
module = ?MODULE, function = oauth_revoke_token,
|
||||||
args = [{token, binary}],
|
args = [{token, binary}],
|
||||||
|
@ -122,7 +122,7 @@ get_commands_spec() ->
|
||||||
result_desc = "Result code"
|
result_desc = "Result code"
|
||||||
},
|
},
|
||||||
#ejabberd_commands{name = oauth_add_client_password, tags = [oauth],
|
#ejabberd_commands{name = oauth_add_client_password, tags = [oauth],
|
||||||
desc = "Add [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) client_id with password grant type",
|
desc = "Add _`oauth.md|OAuth`_ client_id with password grant type",
|
||||||
module = ?MODULE, function = oauth_add_client_password,
|
module = ?MODULE, function = oauth_add_client_password,
|
||||||
args = [{client_id, binary},
|
args = [{client_id, binary},
|
||||||
{client_name, binary},
|
{client_name, binary},
|
||||||
|
@ -131,7 +131,7 @@ get_commands_spec() ->
|
||||||
result = {res, restuple}
|
result = {res, restuple}
|
||||||
},
|
},
|
||||||
#ejabberd_commands{name = oauth_add_client_implicit, tags = [oauth],
|
#ejabberd_commands{name = oauth_add_client_implicit, tags = [oauth],
|
||||||
desc = "Add [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) client_id with implicit grant type",
|
desc = "Add _`oauth.md|OAuth`_ client_id with implicit grant type",
|
||||||
module = ?MODULE, function = oauth_add_client_implicit,
|
module = ?MODULE, function = oauth_add_client_implicit,
|
||||||
args = [{client_id, binary},
|
args = [{client_id, binary},
|
||||||
{client_name, binary},
|
{client_name, binary},
|
||||||
|
@ -140,7 +140,7 @@ get_commands_spec() ->
|
||||||
result = {res, restuple}
|
result = {res, restuple}
|
||||||
},
|
},
|
||||||
#ejabberd_commands{name = oauth_remove_client, tags = [oauth],
|
#ejabberd_commands{name = oauth_remove_client, tags = [oauth],
|
||||||
desc = "Remove [OAuth](https://docs.ejabberd.im/developer/ejabberd-api/oauth/) client_id",
|
desc = "Remove _`oauth.md|OAuth`_ client_id",
|
||||||
module = ?MODULE, function = oauth_remove_client,
|
module = ?MODULE, function = oauth_remove_client,
|
||||||
args = [{client_id, binary}],
|
args = [{client_id, binary}],
|
||||||
policy = restricted,
|
policy = restricted,
|
||||||
|
|
|
@ -37,13 +37,13 @@ doc() ->
|
||||||
#{value => "[Options, ...]",
|
#{value => "[Options, ...]",
|
||||||
desc =>
|
desc =>
|
||||||
?T("The option for listeners configuration. See the "
|
?T("The option for listeners configuration. See the "
|
||||||
"http://../listen/[Listen Modules] section "
|
"_`listen.md|Listen Modules`_ section "
|
||||||
"for details.")}},
|
"for details.")}},
|
||||||
{modules,
|
{modules,
|
||||||
#{value => "{Module: Options}",
|
#{value => "{Module: Options}",
|
||||||
desc =>
|
desc =>
|
||||||
?T("The option for modules configuration. See "
|
?T("The option for modules configuration. See "
|
||||||
"http://../modules/[Modules] section "
|
"_`modules.md|Modules`_ section "
|
||||||
"for details.")}},
|
"for details.")}},
|
||||||
{loglevel,
|
{loglevel,
|
||||||
#{value =>
|
#{value =>
|
||||||
|
@ -221,7 +221,7 @@ doc() ->
|
||||||
#{value => "{AccessName: {allow|deny: ACLRules|ACLName}}",
|
#{value => "{AccessName: {allow|deny: ACLRules|ACLName}}",
|
||||||
desc =>
|
desc =>
|
||||||
?T("This option defines "
|
?T("This option defines "
|
||||||
"http://../basic/#access-rules[Access Rules]. "
|
"_`basic.md#access-rules|Access Rules`_. "
|
||||||
"Each access rule is "
|
"Each access rule is "
|
||||||
"assigned a name that can be referenced from other parts "
|
"assigned a name that can be referenced from other parts "
|
||||||
"of the configuration file (mostly from 'access' options of "
|
"of the configuration file (mostly from 'access' options of "
|
||||||
|
@ -255,7 +255,7 @@ doc() ->
|
||||||
{acme,
|
{acme,
|
||||||
#{value => ?T("Options"),
|
#{value => ?T("Options"),
|
||||||
desc =>
|
desc =>
|
||||||
?T("http://../basic/#acme[ACME] configuration, to automatically "
|
?T("_`basic.md#acme|ACME`_ configuration, to automatically "
|
||||||
"obtain SSL certificates for the domains served by ejabberd, "
|
"obtain SSL certificates for the domains served by ejabberd, "
|
||||||
"which means that certificate requests and renewals are "
|
"which means that certificate requests and renewals are "
|
||||||
"performed to some CA server (aka \"ACME server\") in a fully "
|
"performed to some CA server (aka \"ACME server\") in a fully "
|
||||||
|
@ -303,8 +303,8 @@ doc() ->
|
||||||
#{value => "true | false",
|
#{value => "true | false",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Whether to allow installation of third-party modules or not. "
|
?T("Whether to allow installation of third-party modules or not. "
|
||||||
"See https://docs.ejabberd.im/developer/extending-ejabberd/modules/#ejabberd-contrib"
|
"See _`../../developer/extending-ejabberd/modules.md#ejabberd-contrib|ejabberd-contrib`_ "
|
||||||
"[ejabberd-contrib] documentation section. "
|
"documentation section. "
|
||||||
"The default value is 'true'.")}},
|
"The default value is 'true'.")}},
|
||||||
{allow_multiple_connections,
|
{allow_multiple_connections,
|
||||||
#{value => "true | false",
|
#{value => "true | false",
|
||||||
|
@ -328,8 +328,7 @@ doc() ->
|
||||||
desc =>
|
desc =>
|
||||||
?T("Define the permissions for API access. Please consult the "
|
?T("Define the permissions for API access. Please consult the "
|
||||||
"ejabberd Docs web -> For Developers -> ejabberd ReST API -> "
|
"ejabberd Docs web -> For Developers -> ejabberd ReST API -> "
|
||||||
"https://docs.ejabberd.im/developer/ejabberd-api/permissions/"
|
"_`../../developer/ejabberd-api/permissions.md|API Permissions`_.")}},
|
||||||
"[API Permissions].")}},
|
|
||||||
{append_host_config,
|
{append_host_config,
|
||||||
#{value => "{Host: Options}",
|
#{value => "{Host: Options}",
|
||||||
desc =>
|
desc =>
|
||||||
|
@ -373,7 +372,7 @@ doc() ->
|
||||||
note => "improved in 20.01",
|
note => "improved in 20.01",
|
||||||
desc =>
|
desc =>
|
||||||
[?T("The option defines in what format the users passwords "
|
[?T("The option defines in what format the users passwords "
|
||||||
"are stored, plain text or in http://../authentication/#scram[SCRAM] format:"), "",
|
"are stored, plain text or in _`authentication.md#scram|SCRAM`_ format:"), "",
|
||||||
?T("* 'plain': The password is stored as plain text "
|
?T("* 'plain': The password is stored as plain text "
|
||||||
"in the database. This is risky because the passwords "
|
"in the database. This is risky because the passwords "
|
||||||
"can be read if your database gets compromised. "
|
"can be read if your database gets compromised. "
|
||||||
|
@ -392,7 +391,7 @@ doc() ->
|
||||||
{auth_scram_hash,
|
{auth_scram_hash,
|
||||||
#{value => "sha | sha256 | sha512",
|
#{value => "sha | sha256 | sha512",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Hash algorithm that should be used to store password in http://../authentication/#scram[SCRAM] format. "
|
?T("Hash algorithm that should be used to store password in _`authentication.md#scram|SCRAM`_ format. "
|
||||||
"You shouldn't change this if you already have passwords generated with "
|
"You shouldn't change this if you already have passwords generated with "
|
||||||
"a different algorithm - users that have such passwords will not be able "
|
"a different algorithm - users that have such passwords will not be able "
|
||||||
"to authenticate. The default value is 'sha'.")}},
|
"to authenticate. The default value is 'sha'.")}},
|
||||||
|
@ -418,7 +417,7 @@ doc() ->
|
||||||
"corresponding JID(s) in 'subjectAltName' field. "
|
"corresponding JID(s) in 'subjectAltName' field. "
|
||||||
"There is no default value."), "",
|
"There is no default value."), "",
|
||||||
?T("You can use _`host_config`_ to specify this option per-vhost."), "",
|
?T("You can use _`host_config`_ to specify this option per-vhost."), "",
|
||||||
?T("To set a specific file per listener, use the listener's http://../listen-options/#cafile[cafile] option. Please notice that 'c2s_cafile' overrides the listener's 'cafile' option."), ""
|
?T("To set a specific file per listener, use the listener's _`listen-options.md#cafile|cafile`_ option. Please notice that 'c2s_cafile' overrides the listener's 'cafile' option."), ""
|
||||||
]}},
|
]}},
|
||||||
{c2s_ciphers,
|
{c2s_ciphers,
|
||||||
#{value => "[Cipher, ...]",
|
#{value => "[Cipher, ...]",
|
||||||
|
@ -468,7 +467,7 @@ doc() ->
|
||||||
#{value => ?T("Path | ModuleName"),
|
#{value => ?T("Path | ModuleName"),
|
||||||
note => "improved in 23.01",
|
note => "improved in 23.01",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Full path to a script that generates http://../basic/#captcha[CAPTCHA] images. "
|
?T("Full path to a script that generates _`basic.md#captcha|CAPTCHA`_ images. "
|
||||||
"'@VERSION@' is replaced with ejabberd version number in 'XX.YY' format. "
|
"'@VERSION@' is replaced with ejabberd version number in 'XX.YY' format. "
|
||||||
"'@SEMVER@' is replaced with ejabberd version number in semver format "
|
"'@SEMVER@' is replaced with ejabberd version number in semver format "
|
||||||
"when compiled with Elixir's mix, or XX.YY format otherwise. "
|
"when compiled with Elixir's mix, or XX.YY format otherwise. "
|
||||||
|
@ -481,7 +480,7 @@ doc() ->
|
||||||
{captcha_limit,
|
{captcha_limit,
|
||||||
#{value => "pos_integer() | infinity",
|
#{value => "pos_integer() | infinity",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Maximum number of http://../basic/#captcha[CAPTCHA] generated images per minute for "
|
?T("Maximum number of _`basic.md#captcha|CAPTCHA`_ generated images per minute for "
|
||||||
"any given JID. The option is intended to protect the server "
|
"any given JID. The option is intended to protect the server "
|
||||||
"from CAPTCHA DoS. The default value is 'infinity'.")}},
|
"from CAPTCHA DoS. The default value is 'infinity'.")}},
|
||||||
{captcha_host,
|
{captcha_host,
|
||||||
|
@ -491,7 +490,7 @@ doc() ->
|
||||||
#{value => ?T("URL | auto | undefined"),
|
#{value => ?T("URL | auto | undefined"),
|
||||||
note => "improved in 23.04",
|
note => "improved in 23.04",
|
||||||
desc =>
|
desc =>
|
||||||
?T("An URL where http://../basic/#captcha[CAPTCHA] requests should be sent. NOTE: you need "
|
?T("An URL where _`basic.md#captcha|CAPTCHA`_ requests should be sent. NOTE: you need "
|
||||||
"to configure 'request_handlers' for 'ejabberd_http' listener "
|
"to configure 'request_handlers' for 'ejabberd_http' listener "
|
||||||
"as well. "
|
"as well. "
|
||||||
"If set to 'auto', it builds the URL using a 'request_handler' "
|
"If set to 'auto', it builds the URL using a 'request_handler' "
|
||||||
|
@ -696,8 +695,8 @@ doc() ->
|
||||||
note => "added in 23.10",
|
note => "added in 23.10",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Modules to install from "
|
?T("Modules to install from "
|
||||||
"https://docs.ejabberd.im/developer/extending-ejabberd/modules/#ejabberd-contrib"
|
"_`../../developer/extending-ejabberd/modules.md#ejabberd-contrib|ejabberd-contrib`_ "
|
||||||
"[ejabberd-contrib] at start time. "
|
"at start time. "
|
||||||
"The default value is an empty list of modules: '[]'.")}},
|
"The default value is an empty list of modules: '[]'.")}},
|
||||||
{jwt_auth_only_rule,
|
{jwt_auth_only_rule,
|
||||||
#{value => ?T("AccessName"),
|
#{value => ?T("AccessName"),
|
||||||
|
@ -1156,7 +1155,7 @@ doc() ->
|
||||||
{s2s_access,
|
{s2s_access,
|
||||||
#{value => ?T("Access"),
|
#{value => ?T("Access"),
|
||||||
desc =>
|
desc =>
|
||||||
?T("This http://../basic/#access-rules[Access Rule] defines to "
|
?T("This _`basic.md#access-rules|Access Rule`_ defines to "
|
||||||
"what remote servers can s2s connections be established. "
|
"what remote servers can s2s connections be established. "
|
||||||
"The default value is 'all'; no restrictions are applied, it is"
|
"The default value is 'all'; no restrictions are applied, it is"
|
||||||
" allowed to connect s2s to/from all remote servers.")}},
|
" allowed to connect s2s to/from all remote servers.")}},
|
||||||
|
|
|
@ -625,7 +625,7 @@ maybe_disclaimer_not_admin(MenuItems, AJID, Lang) ->
|
||||||
{[_], []} ->
|
{[_], []} ->
|
||||||
[?XREST(?T("Apparently your account has no administration rights in this server. "
|
[?XREST(?T("Apparently your account has no administration rights in this server. "
|
||||||
"Please check how to grant admin rights in: "
|
"Please check how to grant admin rights in: "
|
||||||
"https://docs.ejabberd.im/admin/installation/#administration-account"))
|
"https://docs.ejabberd.im/admin/install/next-steps/#administration-account"))
|
||||||
];
|
];
|
||||||
_ ->
|
_ ->
|
||||||
[]
|
[]
|
||||||
|
|
|
@ -410,6 +410,5 @@ listen_options() ->
|
||||||
" method may be removed in a future ejabberd release. You are "
|
" method may be removed in a future ejabberd release. You are "
|
||||||
"encouraged to define ejabberd_xmlrpc inside request_handlers "
|
"encouraged to define ejabberd_xmlrpc inside request_handlers "
|
||||||
"option of ejabberd_http listen module. See the ejabberd "
|
"option of ejabberd_http listen module. See the ejabberd "
|
||||||
"documentation for details: https://docs.ejabberd.im/admin/"
|
"documentation for details: _`/admin/configuration/listen/#ejabberd-xmlrpc|ejabberd_xmlrpc listener`_.", []),
|
||||||
"configuration/listen/#ejabberd-xmlrpc", []),
|
|
||||||
[].
|
[].
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
-callback mod_opt_type(atom()) -> econf:validator().
|
-callback mod_opt_type(atom()) -> econf:validator().
|
||||||
-callback mod_options(binary()) -> [{atom(), term()} | atom()].
|
-callback mod_options(binary()) -> [{atom(), term()} | atom()].
|
||||||
-callback mod_doc() -> #{desc => binary() | [binary()],
|
-callback mod_doc() -> #{desc => binary() | [binary()],
|
||||||
|
note => string(),
|
||||||
opts => [opt_doc()],
|
opts => [opt_doc()],
|
||||||
example => [string()] | [{binary(), [string()]}]}.
|
example => [string()] | [{binary(), [string()]}]}.
|
||||||
-callback depends(binary(), opts()) -> [{module(), hard | soft}].
|
-callback depends(binary(), opts()) -> [{module(), hard | soft}].
|
||||||
|
|
|
@ -170,7 +170,7 @@ get_commands_spec() ->
|
||||||
#ejabberd_commands{name = delete_old_users, tags = [accounts, purge],
|
#ejabberd_commands{name = delete_old_users, tags = [accounts, purge],
|
||||||
desc = "Delete users that didn't log in last days, or that never logged",
|
desc = "Delete users that didn't log in last days, or that never logged",
|
||||||
longdesc = "To protect admin accounts, configure this for example:\n"
|
longdesc = "To protect admin accounts, configure this for example:\n"
|
||||||
"```\n"
|
"``` yaml\n"
|
||||||
"access_rules:\n"
|
"access_rules:\n"
|
||||||
" protect_old_users:\n"
|
" protect_old_users:\n"
|
||||||
" - allow: admin\n"
|
" - allow: admin\n"
|
||||||
|
@ -186,7 +186,7 @@ get_commands_spec() ->
|
||||||
#ejabberd_commands{name = delete_old_users_vhost, tags = [accounts, purge],
|
#ejabberd_commands{name = delete_old_users_vhost, tags = [accounts, purge],
|
||||||
desc = "Delete users that didn't log in last days in vhost, or that never logged",
|
desc = "Delete users that didn't log in last days in vhost, or that never logged",
|
||||||
longdesc = "To protect admin accounts, configure this for example:\n"
|
longdesc = "To protect admin accounts, configure this for example:\n"
|
||||||
"```\n"
|
"``` yaml\n"
|
||||||
"access_rules:\n"
|
"access_rules:\n"
|
||||||
" delete_old_users:\n"
|
" delete_old_users:\n"
|
||||||
" - deny: admin\n"
|
" - deny: admin\n"
|
||||||
|
|
|
@ -632,6 +632,6 @@ mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
?T("This module can be used to update existing SQL database "
|
?T("This module can be used to update existing SQL database "
|
||||||
"from the default to the new schema. Check the section "
|
"from the default to the new schema. Check the section "
|
||||||
"http://../database/#default-and-new-schemas[Default and New Schemas] for details. "
|
"_`database.md#default-and-new-schemas|Default and New Schemas`_ for details. "
|
||||||
"Please note that only MS SQL, MySQL, and PostgreSQL are supported. "
|
"Please note that only MS SQL, MySQL, and PostgreSQL are supported. "
|
||||||
"When the module is loaded use _`update_sql`_ API.")}.
|
"When the module is loaded use _`update_sql`_ API.")}.
|
||||||
|
|
|
@ -301,6 +301,6 @@ mod_doc() ->
|
||||||
desc =>
|
desc =>
|
||||||
?T("Whether to generate CAPTCHA or not in response to "
|
?T("Whether to generate CAPTCHA or not in response to "
|
||||||
"messages from strangers. See also section "
|
"messages from strangers. See also section "
|
||||||
"http://../#captcha"
|
"_`basic.md#captcha|CAPTCHA`_"
|
||||||
"[CAPTCHA] of the Configuration Guide. "
|
" of the Configuration Guide. "
|
||||||
"The default value is 'false'.")}}]}.
|
"The default value is 'false'.")}}]}.
|
||||||
|
|
|
@ -252,17 +252,16 @@ mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
[?T("This module serves a simple page for the "
|
[?T("This module serves a simple page for the "
|
||||||
"https://conversejs.org/[Converse] XMPP web browser client."), "",
|
"https://conversejs.org/[Converse] XMPP web browser client."), "",
|
||||||
?T("This module is available since ejabberd 21.12."),
|
|
||||||
?T("Several options were improved in ejabberd 22.05."), "",
|
|
||||||
?T("To use this module, in addition to adding it to the 'modules' "
|
?T("To use this module, in addition to adding it to the 'modules' "
|
||||||
"section, you must also enable it in 'listen' -> 'ejabberd_http' -> "
|
"section, you must also enable it in 'listen' -> 'ejabberd_http' -> "
|
||||||
"http://../listen-options/#request-handlers[request_handlers]."), "",
|
"_`listen-options.md#request_handlers|request_handlers`_."), "",
|
||||||
?T("Make sure either 'mod_bosh' or 'ejabberd_http_ws' "
|
?T("Make sure either 'mod_bosh' or 'ejabberd_http_ws' "
|
||||||
"http://../listen-options/#request-handlers[request_handlers] "
|
"_`listen-options.md#request_handlers|request_handlers`_ "
|
||||||
"are enabled."), "",
|
"are enabled."), "",
|
||||||
?T("When 'conversejs_css' and 'conversejs_script' are 'auto', "
|
?T("When 'conversejs_css' and 'conversejs_script' are 'auto', "
|
||||||
"by default they point to the public Converse client.")
|
"by default they point to the public Converse client.")
|
||||||
],
|
],
|
||||||
|
note => "added in 21.12 and improved in 22.05",
|
||||||
example =>
|
example =>
|
||||||
[{?T("Manually setup WebSocket url, and use the public Converse client:"),
|
[{?T("Manually setup WebSocket url, and use the public Converse client:"),
|
||||||
["listen:",
|
["listen:",
|
||||||
|
|
|
@ -129,7 +129,6 @@ mod_doc() ->
|
||||||
" server: sat-pubsub.example.org",
|
" server: sat-pubsub.example.org",
|
||||||
"",
|
"",
|
||||||
"modules:",
|
"modules:",
|
||||||
" ...",
|
|
||||||
" mod_delegation:",
|
" mod_delegation:",
|
||||||
" namespaces:",
|
" namespaces:",
|
||||||
" urn:xmpp:mam:1:",
|
" urn:xmpp:mam:1:",
|
||||||
|
|
|
@ -211,11 +211,11 @@ mod_doc() ->
|
||||||
[?T("This module serves small 'host-meta' files as described in "
|
[?T("This module serves small 'host-meta' files as described in "
|
||||||
"https://xmpp.org/extensions/xep-0156.html[XEP-0156: Discovering "
|
"https://xmpp.org/extensions/xep-0156.html[XEP-0156: Discovering "
|
||||||
"Alternative XMPP Connection Methods]."), "",
|
"Alternative XMPP Connection Methods]."), "",
|
||||||
?T("This module is available since ejabberd 22.05."), "",
|
|
||||||
?T("To use this module, in addition to adding it to the 'modules' "
|
?T("To use this module, in addition to adding it to the 'modules' "
|
||||||
"section, you must also enable it in 'listen' -> 'ejabberd_http' -> "
|
"section, you must also enable it in 'listen' -> 'ejabberd_http' -> "
|
||||||
"http://../listen-options/#request-handlers[request_handlers]."), "",
|
"_`listen-options.md#request_handlers|request_handlers`_."), "",
|
||||||
?T("Notice it only works if ejabberd_http has tls enabled.")],
|
?T("Notice it only works if ejabberd_http has tls enabled.")],
|
||||||
|
note => "added in 22.05",
|
||||||
example =>
|
example =>
|
||||||
["listen:",
|
["listen:",
|
||||||
" -",
|
" -",
|
||||||
|
|
|
@ -534,11 +534,11 @@ mod_options(_) ->
|
||||||
mod_doc() ->
|
mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
[?T("This module provides a ReST interface to call "
|
[?T("This module provides a ReST interface to call "
|
||||||
"https://docs.ejabberd.im/developer/ejabberd-api[ejabberd API] "
|
"_`../../developer/ejabberd-api/index.md|ejabberd API`_ "
|
||||||
"commands using JSON data."), "",
|
"commands using JSON data."), "",
|
||||||
?T("To use this module, in addition to adding it to the 'modules' "
|
?T("To use this module, in addition to adding it to the 'modules' "
|
||||||
"section, you must also enable it in 'listen' -> 'ejabberd_http' -> "
|
"section, you must also enable it in 'listen' -> 'ejabberd_http' -> "
|
||||||
"http://../listen-options/#request-handlers[request_handlers]."), "",
|
"_`listen-options.md#request_handlers|request_handlers`_."), "",
|
||||||
?T("To use a specific API version N, when defining the URL path "
|
?T("To use a specific API version N, when defining the URL path "
|
||||||
"in the request_handlers, add a 'vN'. "
|
"in the request_handlers, add a 'vN'. "
|
||||||
"For example: '/api/v2: mod_http_api'"), "",
|
"For example: '/api/v2: mod_http_api'"), "",
|
||||||
|
|
|
@ -561,18 +561,13 @@ mod_doc() ->
|
||||||
"content type 'ogg' is defined, 'png' is redefined, and 'jpg' "
|
"content type 'ogg' is defined, 'png' is redefined, and 'jpg' "
|
||||||
"definition is deleted:"),
|
"definition is deleted:"),
|
||||||
["listen:",
|
["listen:",
|
||||||
" ...",
|
|
||||||
" -",
|
" -",
|
||||||
" port: 5280",
|
" port: 5280",
|
||||||
" module: ejabberd_http",
|
" module: ejabberd_http",
|
||||||
" request_handlers:",
|
" request_handlers:",
|
||||||
" ...",
|
|
||||||
" /pub/content: mod_http_fileserver",
|
" /pub/content: mod_http_fileserver",
|
||||||
" ...",
|
|
||||||
" ...",
|
|
||||||
"",
|
"",
|
||||||
"modules:",
|
"modules:",
|
||||||
" ...",
|
|
||||||
" mod_http_fileserver:",
|
" mod_http_fileserver:",
|
||||||
" docroot: /var/www",
|
" docroot: /var/www",
|
||||||
" accesslog: /var/log/ejabberd/access.log",
|
" accesslog: /var/log/ejabberd/access.log",
|
||||||
|
@ -585,5 +580,4 @@ mod_doc() ->
|
||||||
" content_types:",
|
" content_types:",
|
||||||
" .ogg: audio/ogg",
|
" .ogg: audio/ogg",
|
||||||
" .png: image/png",
|
" .png: image/png",
|
||||||
" default_content_type: text/html",
|
" default_content_type: text/html"]}]}.
|
||||||
" ..."]}]}.
|
|
||||||
|
|
|
@ -234,7 +234,7 @@ mod_doc() ->
|
||||||
"another URL from which that file can later be downloaded."), "",
|
"another URL from which that file can later be downloaded."), "",
|
||||||
?T("In order to use this module, it must be enabled "
|
?T("In order to use this module, it must be enabled "
|
||||||
"in 'listen' -> 'ejabberd_http' -> "
|
"in 'listen' -> 'ejabberd_http' -> "
|
||||||
"http://../listen-options/#request-handlers[request_handlers].")],
|
"_`listen-options.md#request_handlers|request_handlers`_.")],
|
||||||
opts =>
|
opts =>
|
||||||
[{host,
|
[{host,
|
||||||
#{desc => ?T("Deprecated. Use 'hosts' instead.")}},
|
#{desc => ?T("Deprecated. Use 'hosts' instead.")}},
|
||||||
|
@ -367,40 +367,35 @@ mod_doc() ->
|
||||||
"of vCard. Since the representation has no attributes, "
|
"of vCard. Since the representation has no attributes, "
|
||||||
"the mapping is straightforward."),
|
"the mapping is straightforward."),
|
||||||
example =>
|
example =>
|
||||||
[{?T("For example, the following XML representation of vCard:"),
|
["# This XML representation of vCard:",
|
||||||
["<vCard xmlns='vcard-temp'>",
|
"# <vCard xmlns='vcard-temp'>",
|
||||||
" <FN>Conferences</FN>",
|
"# <FN>Conferences</FN>",
|
||||||
" <ADR>",
|
"# <ADR>",
|
||||||
" <WORK/>",
|
"# <WORK/>",
|
||||||
" <STREET>Elm Street</STREET>",
|
"# <STREET>Elm Street</STREET>",
|
||||||
" </ADR>",
|
"# </ADR>",
|
||||||
"</vCard>"]},
|
"# </vCard>",
|
||||||
{?T("will be translated to:"),
|
"# ",
|
||||||
["vcard:",
|
"# is translated to:",
|
||||||
|
"vcard:",
|
||||||
" fn: Conferences",
|
" fn: Conferences",
|
||||||
" adr:",
|
" adr:",
|
||||||
" -",
|
" -",
|
||||||
" work: true",
|
" work: true",
|
||||||
" street: Elm Street"]}]}}],
|
" street: Elm Street"]}}],
|
||||||
example =>
|
example =>
|
||||||
["listen:",
|
["listen:",
|
||||||
" ...",
|
|
||||||
" -",
|
" -",
|
||||||
" port: 5443",
|
" port: 5443",
|
||||||
" module: ejabberd_http",
|
" module: ejabberd_http",
|
||||||
" tls: true",
|
" tls: true",
|
||||||
" request_handlers:",
|
" request_handlers:",
|
||||||
" ...",
|
|
||||||
" /upload: mod_http_upload",
|
" /upload: mod_http_upload",
|
||||||
" ...",
|
|
||||||
" ...",
|
|
||||||
"",
|
"",
|
||||||
"modules:",
|
"modules:",
|
||||||
" ...",
|
|
||||||
" mod_http_upload:",
|
" mod_http_upload:",
|
||||||
" docroot: /ejabberd/upload",
|
" docroot: /ejabberd/upload",
|
||||||
" put_url: \"https://@HOST@:5443/upload\"",
|
" put_url: \"https://@HOST@:5443/upload\""]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
||||||
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
||||||
depends(_Host, _Opts) ->
|
depends(_Host, _Opts) ->
|
||||||
|
|
|
@ -134,19 +134,15 @@ mod_doc() ->
|
||||||
"to use the quota feature. You can stick to the default names "
|
"to use the quota feature. You can stick to the default names "
|
||||||
"and just specify access rules such as those in this example:"),
|
"and just specify access rules such as those in this example:"),
|
||||||
["shaper_rules:",
|
["shaper_rules:",
|
||||||
" ...",
|
|
||||||
" soft_upload_quota:",
|
" soft_upload_quota:",
|
||||||
" 1000: all # MiB",
|
" 1000: all # MiB",
|
||||||
" hard_upload_quota:",
|
" hard_upload_quota:",
|
||||||
" 1100: all # MiB",
|
" 1100: all # MiB",
|
||||||
" ...",
|
|
||||||
"",
|
"",
|
||||||
"modules:",
|
"modules:",
|
||||||
" ...",
|
|
||||||
" mod_http_upload: {}",
|
" mod_http_upload: {}",
|
||||||
" mod_http_upload_quota:",
|
" mod_http_upload_quota:",
|
||||||
" max_days: 100",
|
" max_days: 100"]}]}.
|
||||||
" ..."]}]}.
|
|
||||||
|
|
||||||
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
||||||
depends(_Host, _Opts) ->
|
depends(_Host, _Opts) ->
|
||||||
|
|
|
@ -884,8 +884,8 @@ mod_options(Host) ->
|
||||||
|
|
||||||
mod_doc() ->
|
mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
[?T("https://matrix.org/[Matrix] gateway."), "",
|
[?T("https://matrix.org/[Matrix] gateway.")],
|
||||||
?T("This module is available since ejabberd 24.02.")],
|
note => "added in 24.02",
|
||||||
example =>
|
example =>
|
||||||
["listen:",
|
["listen:",
|
||||||
" -",
|
" -",
|
||||||
|
|
|
@ -102,16 +102,13 @@ mod_doc() ->
|
||||||
[?T("This module is an experimental implementation of "
|
[?T("This module is an experimental implementation of "
|
||||||
"https://xmpp.org/extensions/xep-0369.html"
|
"https://xmpp.org/extensions/xep-0369.html"
|
||||||
"[XEP-0369: Mediated Information eXchange (MIX)]. "
|
"[XEP-0369: Mediated Information eXchange (MIX)]. "
|
||||||
"MIX support was added in ejabberd 16.03 as an "
|
"It's asserted that "
|
||||||
"experimental feature, updated in 19.02, and is not "
|
|
||||||
"yet ready to use in production. It's asserted that "
|
|
||||||
"the MIX protocol is going to replace the MUC protocol "
|
"the MIX protocol is going to replace the MUC protocol "
|
||||||
"in the future (see _`mod_muc`_)."), "",
|
"in the future (see _`mod_muc`_)."), "",
|
||||||
?T("To learn more about how to use that feature, you can refer to "
|
?T("To learn more about how to use that feature, you can refer to "
|
||||||
"our tutorial: https://docs.ejabberd.im/tutorials/mix-010/"
|
"our tutorial: _`../../tutorials/mix-010.md|Getting started with MIX`_"), "",
|
||||||
"[Getting started with XEP-0369: Mediated Information "
|
|
||||||
"eXchange (MIX) v0.1]."), "",
|
|
||||||
?T("The module depends on _`mod_mam`_.")],
|
?T("The module depends on _`mod_mam`_.")],
|
||||||
|
note => "added in 16.03 and improved in 19.02",
|
||||||
opts =>
|
opts =>
|
||||||
[{access_create,
|
[{access_create,
|
||||||
#{value => ?T("AccessName"),
|
#{value => ?T("AccessName"),
|
||||||
|
|
|
@ -282,7 +282,7 @@ listen_options() ->
|
||||||
mod_doc() ->
|
mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
?T("This module adds "
|
?T("This module adds "
|
||||||
"https://docs.ejabberd.im/admin/guide/mqtt/[support for the MQTT] "
|
"_`../guide/mqtt/index.md|support for the MQTT`_ "
|
||||||
"protocol version '3.1.1' and '5.0'. Remember to configure "
|
"protocol version '3.1.1' and '5.0'. Remember to configure "
|
||||||
"'mod_mqtt' in 'modules' and 'listen' sections."),
|
"'mod_mqtt' in 'modules' and 'listen' sections."),
|
||||||
opts =>
|
opts =>
|
||||||
|
|
|
@ -178,7 +178,6 @@ mod_doc() ->
|
||||||
?T("It is available since ejabberd 23.01.")],
|
?T("It is available since ejabberd 23.01.")],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_mqtt_bridge:",
|
" mod_mqtt_bridge:",
|
||||||
" servers:",
|
" servers:",
|
||||||
" \"mqtt://server.com\":",
|
" \"mqtt://server.com\":",
|
||||||
|
@ -189,8 +188,7 @@ mod_doc() ->
|
||||||
" \"remoteB\": \"localB\" # changes to 'remoteB' on remote server will be stored as 'localB' on local server",
|
" \"remoteB\": \"localB\" # changes to 'remoteB' on remote server will be stored as 'localB' on local server",
|
||||||
" authentication:",
|
" authentication:",
|
||||||
" certfile: \"/etc/ejabberd/mqtt_server.pem\"",
|
" certfile: \"/etc/ejabberd/mqtt_server.pem\"",
|
||||||
" replication_user: \"mqtt@xmpp.server.com\"",
|
" replication_user: \"mqtt@xmpp.server.com\""],
|
||||||
" ..."],
|
|
||||||
opts =>
|
opts =>
|
||||||
[{servers,
|
[{servers,
|
||||||
#{value => "{ServerUrl: {publish: [TopicPairs], subscribe: [TopicPairs], authentication: [AuthInfo]}}",
|
#{value => "{ServerUrl: {publish: [TopicPairs], subscribe: [TopicPairs], authentication: [AuthInfo]}}",
|
||||||
|
|
|
@ -1654,21 +1654,22 @@ mod_doc() ->
|
||||||
"of vCard. Since the representation has no attributes, "
|
"of vCard. Since the representation has no attributes, "
|
||||||
"the mapping is straightforward."),
|
"the mapping is straightforward."),
|
||||||
example =>
|
example =>
|
||||||
[{?T("For example, the following XML representation of vCard:"),
|
["# This XML representation of vCard:",
|
||||||
["<vCard xmlns='vcard-temp'>",
|
"# <vCard xmlns='vcard-temp'>",
|
||||||
" <FN>Conferences</FN>",
|
"# <FN>Conferences</FN>",
|
||||||
" <ADR>",
|
"# <ADR>",
|
||||||
" <WORK/>",
|
"# <WORK/>",
|
||||||
" <STREET>Elm Street</STREET>",
|
"# <STREET>Elm Street</STREET>",
|
||||||
" </ADR>",
|
"# </ADR>",
|
||||||
"</vCard>"]},
|
"# </vCard>",
|
||||||
{?T("will be translated to:"),
|
"# ",
|
||||||
["vcard:",
|
"# is translated to:",
|
||||||
|
"vcard:",
|
||||||
" fn: Conferences",
|
" fn: Conferences",
|
||||||
" adr:",
|
" adr:",
|
||||||
" -",
|
" -",
|
||||||
" work: true",
|
" work: true",
|
||||||
" street: Elm Street"]}]}},
|
" street: Elm Street"]}},
|
||||||
{cleanup_affiliations_on_start,
|
{cleanup_affiliations_on_start,
|
||||||
#{value => "true | false",
|
#{value => "true | false",
|
||||||
note => "added in 22.05",
|
note => "added in 22.05",
|
||||||
|
@ -1732,7 +1733,7 @@ mod_doc() ->
|
||||||
?T("When a user tries to join a room where they have no "
|
?T("When a user tries to join a room where they have no "
|
||||||
"affiliation (not owner, admin or member), the room "
|
"affiliation (not owner, admin or member), the room "
|
||||||
"requires them to fill a CAPTCHA challenge (see section "
|
"requires them to fill a CAPTCHA challenge (see section "
|
||||||
"http://../#captcha[CAPTCHA] "
|
"_`basic.md#captcha|CAPTCHA`_ "
|
||||||
"in order to accept their join in the room. "
|
"in order to accept their join in the room. "
|
||||||
"The default value is 'false'.")}},
|
"The default value is 'false'.")}},
|
||||||
{description,
|
{description,
|
||||||
|
@ -1824,8 +1825,7 @@ mod_doc() ->
|
||||||
#{value => "true | false",
|
#{value => "true | false",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Allow users to subscribe to room events as described in "
|
?T("Allow users to subscribe to room events as described in "
|
||||||
"https://docs.ejabberd.im/developer/xmpp-clients-bots/extensions/muc-sub/"
|
"_`../../developer/xmpp-clients-bots/extensions/muc-sub.md|Multi-User Chat Subscriptions`_. "
|
||||||
"[Multi-User Chat Subscriptions]. "
|
|
||||||
"The default value is 'false'.")}},
|
"The default value is 'false'.")}},
|
||||||
{title,
|
{title,
|
||||||
#{value => ?T("Room Title"),
|
#{value => ?T("Room Title"),
|
||||||
|
|
|
@ -380,7 +380,7 @@ get_commands_spec() ->
|
||||||
desc = "Subscribe several users to a MUC conference",
|
desc = "Subscribe several users to a MUC conference",
|
||||||
note = "added in 22.05",
|
note = "added in 22.05",
|
||||||
longdesc = "This command accepts up to 50 users at once "
|
longdesc = "This command accepts up to 50 users at once "
|
||||||
"(this is configurable with the *`mod_muc_admin`* option "
|
"(this is configurable with the _`mod_muc_admin`_ option "
|
||||||
"`subscribe_room_many_max_users`)",
|
"`subscribe_room_many_max_users`)",
|
||||||
module = ?MODULE, function = subscribe_room_many,
|
module = ?MODULE, function = subscribe_room_many,
|
||||||
args_desc = ["Users JIDs and nicks",
|
args_desc = ["Users JIDs and nicks",
|
||||||
|
@ -402,7 +402,7 @@ get_commands_spec() ->
|
||||||
#ejabberd_commands{name = subscribe_room_many, tags = [muc_room, muc_sub],
|
#ejabberd_commands{name = subscribe_room_many, tags = [muc_room, muc_sub],
|
||||||
desc = "Subscribe several users to a MUC conference",
|
desc = "Subscribe several users to a MUC conference",
|
||||||
longdesc = "This command accepts up to 50 users at once "
|
longdesc = "This command accepts up to 50 users at once "
|
||||||
"(this is configurable with the *`mod_muc_admin`* option "
|
"(this is configurable with the _`mod_muc_admin`_ option "
|
||||||
"`subscribe_room_many_max_users`)",
|
"`subscribe_room_many_max_users`)",
|
||||||
module = ?MODULE, function = subscribe_room_many,
|
module = ?MODULE, function = subscribe_room_many,
|
||||||
version = 1,
|
version = 1,
|
||||||
|
|
|
@ -120,8 +120,8 @@ mod_doc() ->
|
||||||
"https://xmpp.org/extensions/xep-0421.html"
|
"https://xmpp.org/extensions/xep-0421.html"
|
||||||
"[XEP-0421: Anonymous unique occupant identifiers for MUCs]."), "",
|
"[XEP-0421: Anonymous unique occupant identifiers for MUCs]."), "",
|
||||||
?T("When the module is enabled, the feature is enabled "
|
?T("When the module is enabled, the feature is enabled "
|
||||||
"in all semi-anonymous rooms."), "",
|
"in all semi-anonymous rooms.")],
|
||||||
?T("This module is available since ejabberd 23.10.")]
|
note => "added in 23.10"
|
||||||
}.
|
}.
|
||||||
|
|
||||||
depends(_, _) ->
|
depends(_, _) ->
|
||||||
|
|
|
@ -264,8 +264,8 @@ mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
[?T("This module implement Real-time blocklists for MUC rooms."), "",
|
[?T("This module implement Real-time blocklists for MUC rooms."), "",
|
||||||
?T("It works by observing remote pubsub node conforming with "
|
?T("It works by observing remote pubsub node conforming with "
|
||||||
"specification described in https://xmppbl.org/."), "",
|
"specification described in https://xmppbl.org/.")],
|
||||||
?T("This module is available since ejabberd 23.04.")],
|
note => "added in 23.04",
|
||||||
opts =>
|
opts =>
|
||||||
[{rtbl_server,
|
[{rtbl_server,
|
||||||
#{value => ?T("Domain"),
|
#{value => ?T("Domain"),
|
||||||
|
|
|
@ -1247,8 +1247,8 @@ mod_doc() ->
|
||||||
"are currently open."), "",
|
"are currently open."), "",
|
||||||
?T("NOTE: 'ejabberdctl' has a command to "
|
?T("NOTE: 'ejabberdctl' has a command to "
|
||||||
"delete expired messages (see chapter "
|
"delete expired messages (see chapter "
|
||||||
"https://docs.ejabberd.im/admin/guide/managing"
|
"_`../guide/managing.md|Managing an ejabberd server`_ "
|
||||||
"[Managing an ejabberd server] in online documentation.")],
|
"in online documentation.")],
|
||||||
opts =>
|
opts =>
|
||||||
[{access_max_user_messages,
|
[{access_max_user_messages,
|
||||||
#{value => ?T("AccessName"),
|
#{value => ?T("AccessName"),
|
||||||
|
|
|
@ -352,9 +352,7 @@ mod_doc() ->
|
||||||
"The default value is 'none'.")}}],
|
"The default value is 'none'.")}}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_ping:",
|
" mod_ping:",
|
||||||
" send_pings: true",
|
" send_pings: true",
|
||||||
" ping_interval: 4 min",
|
" ping_interval: 4 min",
|
||||||
" timeout_action: kill",
|
" timeout_action: kill"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
|
@ -150,8 +150,6 @@ mod_doc() ->
|
||||||
?T("The time interval. The default value is '1' minute.")}}],
|
?T("The time interval. The default value is '1' minute.")}}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_pres_counter:",
|
" mod_pres_counter:",
|
||||||
" count: 5",
|
" count: 5",
|
||||||
" interval: 30 secs",
|
" interval: 30 secs"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
|
@ -163,15 +163,13 @@ mod_doc() ->
|
||||||
"The default value is 'none'.")}}]}],
|
"The default value is 'none'.")}}]}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_privilege:",
|
" mod_privilege:",
|
||||||
" roster:",
|
" roster:",
|
||||||
" get: all",
|
" get: all",
|
||||||
" presence:",
|
" presence:",
|
||||||
" managed_entity: all",
|
" managed_entity: all",
|
||||||
" message:",
|
" message:",
|
||||||
" outgoing: all",
|
" outgoing: all"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
||||||
depends(_, _) ->
|
depends(_, _) ->
|
||||||
[].
|
[].
|
||||||
|
|
|
@ -237,23 +237,7 @@ mod_doc() ->
|
||||||
"by some XMPP clients in Service Discovery. The value of "
|
"by some XMPP clients in Service Discovery. The value of "
|
||||||
"'vCard' is a YAML map constructed from an XML representation "
|
"'vCard' is a YAML map constructed from an XML representation "
|
||||||
"of vCard. Since the representation has no attributes, "
|
"of vCard. Since the representation has no attributes, "
|
||||||
"the mapping is straightforward."),
|
"the mapping is straightforward.")}}],
|
||||||
example =>
|
|
||||||
[{?T("For example, the following XML representation of vCard:"),
|
|
||||||
["<vCard xmlns='vcard-temp'>",
|
|
||||||
" <FN>Conferences</FN>",
|
|
||||||
" <ADR>",
|
|
||||||
" <WORK/>",
|
|
||||||
" <STREET>Elm Street</STREET>",
|
|
||||||
" </ADR>",
|
|
||||||
"</vCard>"]},
|
|
||||||
{?T("will be translated to:"),
|
|
||||||
["vcard:",
|
|
||||||
" fn: Conferences",
|
|
||||||
" adr:",
|
|
||||||
" -",
|
|
||||||
" work: true",
|
|
||||||
" street: Elm Street"]}]}}],
|
|
||||||
example =>
|
example =>
|
||||||
["acl:",
|
["acl:",
|
||||||
" admin:",
|
" admin:",
|
||||||
|
@ -274,7 +258,6 @@ mod_doc() ->
|
||||||
" proxyrate: 10240",
|
" proxyrate: 10240",
|
||||||
"",
|
"",
|
||||||
"modules:",
|
"modules:",
|
||||||
" ...",
|
|
||||||
" mod_proxy65:",
|
" mod_proxy65:",
|
||||||
" host: proxy1.example.org",
|
" host: proxy1.example.org",
|
||||||
" name: \"File Transfer Proxy\"",
|
" name: \"File Transfer Proxy\"",
|
||||||
|
@ -284,5 +267,4 @@ mod_doc() ->
|
||||||
" access: proxy65_access",
|
" access: proxy65_access",
|
||||||
" shaper: proxy65_shaper",
|
" shaper: proxy65_shaper",
|
||||||
" recbuf: 10240",
|
" recbuf: 10240",
|
||||||
" sndbuf: 10240",
|
" sndbuf: 10240"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
|
@ -4504,27 +4504,27 @@ mod_doc() ->
|
||||||
"representation of vCard. Since the representation has "
|
"representation of vCard. Since the representation has "
|
||||||
"no attributes, the mapping is straightforward."),
|
"no attributes, the mapping is straightforward."),
|
||||||
example =>
|
example =>
|
||||||
[{?T("The following XML representation of vCard:"),
|
["# This XML representation of vCard:",
|
||||||
["<vCard xmlns='vcard-temp'>",
|
"# <vCard xmlns='vcard-temp'>",
|
||||||
" <FN>PubSub Service</FN>",
|
"# <FN>Conferences</FN>",
|
||||||
" <ADR>",
|
"# <ADR>",
|
||||||
" <WORK/>",
|
"# <WORK/>",
|
||||||
" <STREET>Elm Street</STREET>",
|
"# <STREET>Elm Street</STREET>",
|
||||||
" </ADR>",
|
"# </ADR>",
|
||||||
"</vCard>"]},
|
"# </vCard>",
|
||||||
{?T("will be translated to:"),
|
"# ",
|
||||||
["vcard:",
|
"# is translated to:",
|
||||||
" fn: PubSub Service",
|
"vcard:",
|
||||||
|
" fn: Conferences",
|
||||||
" adr:",
|
" adr:",
|
||||||
" -",
|
" -",
|
||||||
" work: true",
|
" work: true",
|
||||||
" street: Elm Street"]}]}}
|
" street: Elm Street"]}}
|
||||||
],
|
],
|
||||||
example =>
|
example =>
|
||||||
[{?T("Example of configuration that uses flat nodes as default, "
|
[{?T("Example of configuration that uses flat nodes as default, "
|
||||||
"and allows use of flat, hometree and pep nodes:"),
|
"and allows use of flat, hometree and pep nodes:"),
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_pubsub:",
|
" mod_pubsub:",
|
||||||
" access_createnode: pubsub_createnode",
|
" access_createnode: pubsub_createnode",
|
||||||
" max_subscriptions_node: 100",
|
" max_subscriptions_node: 100",
|
||||||
|
@ -4534,14 +4534,12 @@ mod_doc() ->
|
||||||
" max_items: 4",
|
" max_items: 4",
|
||||||
" plugins:",
|
" plugins:",
|
||||||
" - flat",
|
" - flat",
|
||||||
" - pep",
|
" - pep"]},
|
||||||
" ..."]},
|
|
||||||
{?T("Using relational database requires using mod_pubsub with "
|
{?T("Using relational database requires using mod_pubsub with "
|
||||||
"db_type 'sql'. Only flat, hometree and pep plugins supports "
|
"db_type 'sql'. Only flat, hometree and pep plugins supports "
|
||||||
"SQL. The following example shows previous configuration "
|
"SQL. The following example shows previous configuration "
|
||||||
"with SQL usage:"),
|
"with SQL usage:"),
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_pubsub:",
|
" mod_pubsub:",
|
||||||
" db_type: sql",
|
" db_type: sql",
|
||||||
" access_createnode: pubsub_createnode",
|
" access_createnode: pubsub_createnode",
|
||||||
|
@ -4549,6 +4547,5 @@ mod_doc() ->
|
||||||
" last_item_cache: false",
|
" last_item_cache: false",
|
||||||
" plugins:",
|
" plugins:",
|
||||||
" - flat",
|
" - flat",
|
||||||
" - pep",
|
" - pep"]}
|
||||||
" ..."]}
|
|
||||||
]}.
|
]}.
|
||||||
|
|
|
@ -671,7 +671,7 @@ mod_doc() ->
|
||||||
{captcha_protected,
|
{captcha_protected,
|
||||||
#{value => "true | false",
|
#{value => "true | false",
|
||||||
desc =>
|
desc =>
|
||||||
?T("Protect registrations with http://../basic/#captcha[CAPTCHA]. "
|
?T("Protect registrations with _`basic.md#captcha|CAPTCHA`_. "
|
||||||
"The default is 'false'.")}},
|
"The default is 'false'.")}},
|
||||||
{ip_access,
|
{ip_access,
|
||||||
#{value => ?T("AccessName"),
|
#{value => ?T("AccessName"),
|
||||||
|
|
|
@ -615,7 +615,7 @@ mod_doc() ->
|
||||||
?T("- Register a new account on the server."), "",
|
?T("- Register a new account on the server."), "",
|
||||||
?T("- Change the password from an existing account on the server."), "",
|
?T("- Change the password from an existing account on the server."), "",
|
||||||
?T("- Unregister an existing account on the server."), "",
|
?T("- Unregister an existing account on the server."), "",
|
||||||
?T("This module supports http://../basic/#captcha[CAPTCHA] "
|
?T("This module supports _`basic.md#captcha|CAPTCHA`_ "
|
||||||
"to register a new account. "
|
"to register a new account. "
|
||||||
"To enable this feature, configure the "
|
"To enable this feature, configure the "
|
||||||
"top-level _`captcha_cmd`_ and "
|
"top-level _`captcha_cmd`_ and "
|
||||||
|
@ -625,7 +625,7 @@ mod_doc() ->
|
||||||
"important to include the last / character in the URL, "
|
"important to include the last / character in the URL, "
|
||||||
"otherwise the subpages URL will be incorrect."), "",
|
"otherwise the subpages URL will be incorrect."), "",
|
||||||
?T("This module is enabled in 'listen' -> 'ejabberd_http' -> "
|
?T("This module is enabled in 'listen' -> 'ejabberd_http' -> "
|
||||||
"http://../listen-options/#request-handlers[request_handlers], "
|
"_`listen-options.md#request_handlers|request_handlers`_, "
|
||||||
"no need to enable in 'modules'."),
|
"no need to enable in 'modules'."),
|
||||||
?T("The module depends on _`mod_register`_ where all the "
|
?T("The module depends on _`mod_register`_ where all the "
|
||||||
"configuration is performed.")],
|
"configuration is performed.")],
|
||||||
|
|
|
@ -1410,8 +1410,6 @@ mod_doc() ->
|
||||||
?T("Same as top-level _`cache_life_time`_ option, but applied to this module only.")}}],
|
?T("Same as top-level _`cache_life_time`_ option, but applied to this module only.")}}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_roster:",
|
" mod_roster:",
|
||||||
" versioning: true",
|
" versioning: true",
|
||||||
" store_current_id: false",
|
" store_current_id: false"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
|
@ -93,14 +93,12 @@ mod_doc() ->
|
||||||
"is 'all'.")}}],
|
"is 'all'.")}}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_s2s_dialback:",
|
" mod_s2s_dialback:",
|
||||||
" access:",
|
" access:",
|
||||||
" allow:",
|
" allow:",
|
||||||
" server: legacy.domain.tld",
|
" server: legacy.domain.tld",
|
||||||
" server: invalid-cert.example.org",
|
" server: invalid-cert.example.org",
|
||||||
" deny: all",
|
" deny: all"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
||||||
s2s_in_features(Acc, _) ->
|
s2s_in_features(Acc, _) ->
|
||||||
[#db_feature{errors = true}|Acc].
|
[#db_feature{errors = true}|Acc].
|
||||||
|
|
|
@ -92,9 +92,7 @@ mod_doc() ->
|
||||||
"to which stanzas will be forwarded.")}}],
|
"to which stanzas will be forwarded.")}}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_service_log:",
|
" mod_service_log:",
|
||||||
" loggers:",
|
" loggers:",
|
||||||
" - xmpp-server.tld",
|
" - xmpp-server.tld",
|
||||||
" - component.domain.tld",
|
" - component.domain.tld"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
|
@ -678,10 +678,10 @@ mod_doc() ->
|
||||||
?T("- Connection parameters: The module also accepts the "
|
?T("- Connection parameters: The module also accepts the "
|
||||||
"connection parameters, all of which default to the top-level "
|
"connection parameters, all of which default to the top-level "
|
||||||
"parameter of the same name, if unspecified. "
|
"parameter of the same name, if unspecified. "
|
||||||
"See http://../ldap/#ldap-connection[LDAP Connection] "
|
"See _`ldap.md#ldap-connection|LDAP Connection`_ "
|
||||||
"section for more information about them."), "",
|
"section for more information about them."), "",
|
||||||
?T("Check also the http://../ldap/#ldap-examples"
|
?T("Check also the _`ldap.md#ldap-examples|Configuration examples`_ "
|
||||||
"[Configuration examples] section to get details about "
|
"section to get details about "
|
||||||
"retrieving the roster, "
|
"retrieving the roster, "
|
||||||
"and configuration examples including Flat DIT and Deep DIT.")],
|
"and configuration examples including Flat DIT and Deep DIT.")],
|
||||||
opts =>
|
opts =>
|
||||||
|
@ -710,13 +710,13 @@ mod_doc() ->
|
||||||
"name of roster entries (usually full names of people in "
|
"name of roster entries (usually full names of people in "
|
||||||
"the roster). See also the parameters 'ldap_userdesc' and "
|
"the roster). See also the parameters 'ldap_userdesc' and "
|
||||||
"'ldap_useruid'. For more information check the LDAP "
|
"'ldap_useruid'. For more information check the LDAP "
|
||||||
"http://../ldap/#filters[Filters] section.")}},
|
"_`ldap.md#filters|Filters`_ section.")}},
|
||||||
{ldap_filter,
|
{ldap_filter,
|
||||||
#{desc =>
|
#{desc =>
|
||||||
?T("Additional filter which is AND-ed together "
|
?T("Additional filter which is AND-ed together "
|
||||||
"with \"User Filter\" and \"Group Filter\". "
|
"with \"User Filter\" and \"Group Filter\". "
|
||||||
"For more information check the LDAP "
|
"For more information check the LDAP "
|
||||||
"http://../ldap/#filters[Filters] section.")}},
|
"_`ldap.md#filters|Filters`_ section.")}},
|
||||||
%% Attributes:
|
%% Attributes:
|
||||||
{ldap_groupattr,
|
{ldap_groupattr,
|
||||||
#{desc =>
|
#{desc =>
|
||||||
|
@ -774,8 +774,7 @@ mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
?T("A regex for extracting user ID from the value of the "
|
?T("A regex for extracting user ID from the value of the "
|
||||||
"attribute named by 'ldap_memberattr'. Check the LDAP "
|
"attribute named by 'ldap_memberattr'. Check the LDAP "
|
||||||
"http://../ldap/#control-parameters"
|
"_`ldap.md#control-parameters|Control Parameters`_ section.")}},
|
||||||
"[Control Parameters] section.")}},
|
|
||||||
{ldap_auth_check,
|
{ldap_auth_check,
|
||||||
#{value => "true | false",
|
#{value => "true | false",
|
||||||
desc =>
|
desc =>
|
||||||
|
|
|
@ -383,7 +383,7 @@ mod_doc() ->
|
||||||
?T("NOTE: It is not enough to just load this module. "
|
?T("NOTE: It is not enough to just load this module. "
|
||||||
"You should also configure listeners and DNS records "
|
"You should also configure listeners and DNS records "
|
||||||
"properly. For details see the section about the "
|
"properly. For details see the section about the "
|
||||||
"http://../listen/#ejabberd-sip[ejabberd_sip] listen module "
|
"_`listen.md#ejabberd_sip|ejabberd_sip`_ listen module "
|
||||||
"in the ejabberd Documentation.")],
|
"in the ejabberd Documentation.")],
|
||||||
opts =>
|
opts =>
|
||||||
[{always_record_route,
|
[{always_record_route,
|
||||||
|
@ -437,7 +437,6 @@ mod_doc() ->
|
||||||
"cannot omit \"port\" or \"scheme\").")}}],
|
"cannot omit \"port\" or \"scheme\").")}}],
|
||||||
example =>
|
example =>
|
||||||
["modules:",
|
["modules:",
|
||||||
" ...",
|
|
||||||
" mod_sip:",
|
" mod_sip:",
|
||||||
" always_record_route: false",
|
" always_record_route: false",
|
||||||
" record_route: \"sip:example.com;lr\"",
|
" record_route: \"sip:example.com;lr\"",
|
||||||
|
@ -449,7 +448,6 @@ mod_doc() ->
|
||||||
" via:",
|
" via:",
|
||||||
" - tls://sip-tls.example.com:5061",
|
" - tls://sip-tls.example.com:5061",
|
||||||
" - tcp://sip-tcp.example.com:5060",
|
" - tcp://sip-tcp.example.com:5060",
|
||||||
" - udp://sip-udp.example.com:5060",
|
" - udp://sip-udp.example.com:5060"]}.
|
||||||
" ..."]}.
|
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
|
|
@ -159,8 +159,8 @@ mod_doc() ->
|
||||||
?T("This module allows XMPP clients to discover STUN/TURN services "
|
?T("This module allows XMPP clients to discover STUN/TURN services "
|
||||||
"and to obtain temporary credentials for using them as per "
|
"and to obtain temporary credentials for using them as per "
|
||||||
"https://xmpp.org/extensions/xep-0215.html"
|
"https://xmpp.org/extensions/xep-0215.html"
|
||||||
"[XEP-0215: External Service Discovery]. "
|
"[XEP-0215: External Service Discovery]."),
|
||||||
"This module is included in ejabberd since version 20.04."),
|
note => "added in 20.04",
|
||||||
opts =>
|
opts =>
|
||||||
[{access,
|
[{access,
|
||||||
#{value => ?T("AccessName"),
|
#{value => ?T("AccessName"),
|
||||||
|
|
|
@ -667,18 +667,21 @@ mod_doc() ->
|
||||||
"of vCard. Since the representation has no attributes, "
|
"of vCard. Since the representation has no attributes, "
|
||||||
"the mapping is straightforward."),
|
"the mapping is straightforward."),
|
||||||
example =>
|
example =>
|
||||||
[{?T("For example, the following XML representation of vCard:"),
|
["# This XML representation of vCard:",
|
||||||
["<vCard xmlns='vcard-temp'>",
|
"# ",
|
||||||
" <FN>Conferences</FN>",
|
"# <vCard xmlns='vcard-temp'>",
|
||||||
" <ADR>",
|
"# <FN>Conferences</FN>",
|
||||||
" <WORK/>",
|
"# <ADR>",
|
||||||
" <STREET>Elm Street</STREET>",
|
"# <WORK/>",
|
||||||
" </ADR>",
|
"# <STREET>Elm Street</STREET>",
|
||||||
"</vCard>"]},
|
"# </ADR>",
|
||||||
{?T("will be translated to:"),
|
"# </vCard>",
|
||||||
["vcard:",
|
"# ",
|
||||||
|
"# is translated to:",
|
||||||
|
"# ",
|
||||||
|
"vcard:",
|
||||||
" fn: Conferences",
|
" fn: Conferences",
|
||||||
" adr:",
|
" adr:",
|
||||||
" -",
|
" -",
|
||||||
" work: true",
|
" work: true",
|
||||||
" street: Elm Street"]}]}}]}.
|
" street: Elm Street"]}}]}.
|
||||||
|
|
|
@ -48,7 +48,7 @@ write_doap_head()
|
||||||
<download-page rdf:resource="https://www.process-one.net/en/ejabberd/downloads/"/>
|
<download-page rdf:resource="https://www.process-one.net/en/ejabberd/downloads/"/>
|
||||||
<download-mirror rdf:resource="https://github.com/processone/ejabberd/tags"/>
|
<download-mirror rdf:resource="https://github.com/processone/ejabberd/tags"/>
|
||||||
<license rdf:resource="https://raw.githubusercontent.com/processone/ejabberd/master/COPYING"/>
|
<license rdf:resource="https://raw.githubusercontent.com/processone/ejabberd/master/COPYING"/>
|
||||||
<schema:logo rdf:resource="https://docs.ejabberd.im/static/shared/images/footer_logo_e@2x.png"/>
|
<schema:logo rdf:resource="https://docs.ejabberd.im/assets/img/footer_logo_e@2x.png"/>
|
||||||
<bug-database rdf:resource="https://github.com/processone/ejabberd/issues"/>
|
<bug-database rdf:resource="https://github.com/processone/ejabberd/issues"/>
|
||||||
<support-forum rdf:resource="xmpp:ejabberd@conference.process-one.net?join"/>
|
<support-forum rdf:resource="xmpp:ejabberd@conference.process-one.net?join"/>
|
||||||
<repository>
|
<repository>
|
||||||
|
|
|
@ -67,7 +67,7 @@ rel_vsn=$(git describe --tags | sed -e 's/-g.*//' -e 's/-/./' | tr -d '[:space:]
|
||||||
home_url='https://www.ejabberd.im'
|
home_url='https://www.ejabberd.im'
|
||||||
doc_url='https://docs.ejabberd.im'
|
doc_url='https://docs.ejabberd.im'
|
||||||
upgrade_url="$doc_url/admin/upgrade/#specific-version-upgrade-notes"
|
upgrade_url="$doc_url/admin/upgrade/#specific-version-upgrade-notes"
|
||||||
admin_url="$doc_url/admin/installation/#administration-account"
|
admin_url="$doc_url/admin/install/next-steps/#administration-account"
|
||||||
default_code_dir="/opt/$rel_name-$rel_vsn"
|
default_code_dir="/opt/$rel_name-$rel_vsn"
|
||||||
default_data_dir="/opt/$rel_name"
|
default_data_dir="/opt/$rel_name"
|
||||||
tmp_dir=$(mktemp -d "/tmp/.$rel_name.XXXXXX")
|
tmp_dir=$(mktemp -d "/tmp/.$rel_name.XXXXXX")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user