Compare commits
22 Commits
73bcabd2fa
...
5c6a399f5b
Author | SHA1 | Date |
---|---|---|
Badlop | 5c6a399f5b | |
Badlop | e744665171 | |
Badlop | 0b16cbddde | |
Badlop | 7ea2c6eabf | |
Badlop | 45ca11ecd0 | |
Badlop | d8cdd82bf8 | |
Badlop | 345af5a535 | |
Badlop | 6e5895ce45 | |
Badlop | b70a2fe4cf | |
Badlop | da01d932ea | |
Badlop | 7cd5808766 | |
Badlop | c98302b3c0 | |
Badlop | cd7eedf589 | |
Badlop | 27bd8852a1 | |
Badlop | effcf0b7cf | |
Badlop | 71b9db688a | |
Badlop | 8be6dc7758 | |
Badlop | 569f0b303b | |
Badlop | 15e3add909 | |
Badlop | 68c0c4d94f | |
Badlop | a550a1c55c | |
Badlop | 832588f861 |
262
CHANGELOG.md
262
CHANGELOG.md
|
@ -1,6 +1,7 @@
|
|||
## Version 24.02
|
||||
|
||||
Core:
|
||||
#### Core:
|
||||
|
||||
- Added Matrix gateway in `mod_matrix_gw`
|
||||
- Support SASL2 and Bind2
|
||||
- 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
|
||||
- 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: Set EJABBERD_OPTS back to `""`, and use previous flags as example
|
||||
- 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: Only care about PEP bookmarks options when creating node from scratch
|
||||
|
||||
SQL:
|
||||
#### SQL:
|
||||
|
||||
- MySQL: Support `sha256_password` auth plugin
|
||||
- ejabberd_sql_schema: Use the first unique index as a primary key
|
||||
- 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`
|
||||
|
||||
Installers and Container:
|
||||
#### Installers and Container:
|
||||
|
||||
- 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 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 many dependency versions
|
||||
|
||||
Commands API:
|
||||
#### Commands API:
|
||||
|
||||
- `print_sql_schema`: New command available in ejabberdctl command-line script
|
||||
- ejabberdctl: Rework temporary node name generation
|
||||
- ejabberdctl: Print argument description, examples and note in help
|
||||
|
@ -51,7 +56,7 @@ Commands API:
|
|||
- ejabberd_xmlrpc: Fix support for restuple error response
|
||||
- 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'
|
||||
- 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`
|
||||
|
@ -82,7 +87,8 @@ Compilation with Rebar3/Elixir/Mix:
|
|||
|
||||
## Version 23.10
|
||||
|
||||
Compilation:
|
||||
#### Compilation:
|
||||
|
||||
- Erlang/OTP: Raise the requirement to Erlang/OTP 20.0 as a minimum
|
||||
- CI: Update tests to Erlang/OTP 26 and recent Elixir
|
||||
- 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`
|
||||
- `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))
|
||||
- `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))
|
||||
|
@ -105,7 +112,8 @@ Commands:
|
|||
- `ejabberdctl`: Support `policy=user` in the help and return proper arguments
|
||||
- `ejabberdctl`: Document how to stop a debug shell: control+g
|
||||
|
||||
Container:
|
||||
#### Container:
|
||||
|
||||
- Dockerfile: Add missing dependency for mssql databases
|
||||
- Dockerfile: Reorder stages and steps for consistency
|
||||
- Dockerfile: Use Alpine as base for `METHOD=package`
|
||||
|
@ -113,7 +121,8 @@ Container:
|
|||
- Dockerfile: Provide specific OTP and elixir vsn for direct compilation
|
||||
- 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))
|
||||
- `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
|
||||
|
@ -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: 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
|
||||
- Make sure that `policy=user` commands have `host` instead of `server` arg in docs
|
||||
- Improve syntax of many command descriptions for the 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
|
||||
|
||||
Installers (`make-binaries`):
|
||||
#### Installers (`make-binaries`):
|
||||
- Bump Erlang/OTP version to 26.1.1, and other dependencies
|
||||
- Remove outdated workaround
|
||||
- Don't build Linux-PAM examples
|
||||
|
@ -147,7 +157,8 @@ Installers (`make-binaries`):
|
|||
- Set kernel version for all builds
|
||||
- Let curl fail on HTTP errors
|
||||
|
||||
Modules:
|
||||
#### Modules:
|
||||
|
||||
- `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_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_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))
|
||||
- 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))
|
||||
|
@ -178,7 +190,8 @@ MUC:
|
|||
- 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
|
||||
|
||||
SQL:
|
||||
#### SQL:
|
||||
|
||||
- Add ability to force alternative upsert implementation in mysql
|
||||
- Properly parse mysql version even if it doesn't have type tag
|
||||
- Use prepared statement with mysql
|
||||
|
@ -190,7 +203,8 @@ SQL:
|
|||
|
||||
## Version 23.04
|
||||
|
||||
General:
|
||||
#### General:
|
||||
|
||||
- New `s2s_out_bounce_packet` hook
|
||||
- Re-allow anonymous connection for connection without client certificates ([#3985](https://github.com/processone/ejabberd/issues/3985))
|
||||
- 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_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
|
||||
- Improve output in `gen_html_doc_for_commands` command
|
||||
- Fix ejabberdctl output formatting ([#3979](https://github.com/processone/ejabberd/issues/3979))
|
||||
- Log HTTP handler exceptions
|
||||
|
||||
MUC:
|
||||
#### MUC:
|
||||
|
||||
- New command `get_room_history`
|
||||
- Persist `none` role for outcasts
|
||||
- Try to populate room history from mam when unhibernating
|
||||
|
@ -218,7 +234,8 @@ MUC:
|
|||
- Store state in db in `mod_muc:create_room()`
|
||||
- Make subscribers members by default
|
||||
|
||||
SQL schemas:
|
||||
#### SQL schemas:
|
||||
|
||||
- Fix a long standing bug in new schema migration
|
||||
- `update_sql` command: Many improvements in new schema migration
|
||||
- `update_sql` command: Add support to migrate MySQL too
|
||||
|
@ -227,14 +244,16 @@ SQL schemas:
|
|||
- Remove unnecessary indexes
|
||||
- New SQL schema migrate fix
|
||||
|
||||
MS SQL:
|
||||
#### MS SQL:
|
||||
|
||||
- MS SQL schema fixes
|
||||
- Add `new` schema for MS SQL
|
||||
- Add MS SQL support for new schema migration
|
||||
- Minor MS SQL improvements
|
||||
- Fix MS SQL error caused by `ORDER BY` in subquery
|
||||
|
||||
SQL Tests:
|
||||
#### SQL Tests:
|
||||
|
||||
- Add support for running tests on MS SQL
|
||||
- Add ability to run tests on upgraded DB
|
||||
- Un-deprecate `ejabberd_config:set_option/2`
|
||||
|
@ -242,7 +261,8 @@ SQL Tests:
|
|||
- Correct README for creating test docker MS SQL DB
|
||||
- Fix TSQLlint warnings in MSSQL test script
|
||||
|
||||
Testing:
|
||||
#### Testing:
|
||||
|
||||
- Fix Shellcheck warnings in shell scripts
|
||||
- Fix Remark-lint warnings
|
||||
- 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)
|
||||
- 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
|
||||
- Add `tini` as runtime init
|
||||
- Set `ERLANG_NODE` fixed to `ejabberd@localhost`
|
||||
- Upload images as artifacts to Github Actions
|
||||
- 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
|
||||
- Add `METHOD` to build container using packages ([#3983](https://github.com/processone/ejabberd/issues/3983))
|
||||
- Add `tini` as runtime init
|
||||
|
@ -267,14 +287,16 @@ Testing:
|
|||
- Expose only `HOME` volume, it contains all the required subdirs
|
||||
- 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: Fix building with erlang/otp v25.x
|
||||
- make-packages: Fix for installers workflow, which didn't find lynx
|
||||
|
||||
## Version 23.01
|
||||
|
||||
General:
|
||||
#### General:
|
||||
|
||||
- Add `misc:uri_parse/2` to allow declaring default ports for protocols
|
||||
- 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))
|
||||
|
@ -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))
|
||||
- Translations: Update German translation
|
||||
|
||||
Admin:
|
||||
#### Admin:
|
||||
|
||||
- `api_permissions`: Fix option crash when doesn't have `who:` section
|
||||
- `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
|
||||
|
@ -305,13 +328,15 @@ Admin:
|
|||
- Silent warning in OTP24 about not specified `cacerts` in SQL connections
|
||||
- Fix compilation warnings with Elixir 1.14
|
||||
|
||||
DOAP:
|
||||
#### DOAP:
|
||||
|
||||
- Support extended `-protocol` erlang attribute
|
||||
- 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))
|
||||
- `ejabberd.doap`: New DOAP file describing ejabberd supported protocols
|
||||
|
||||
MQTT:
|
||||
#### MQTT:
|
||||
|
||||
- Add MQTT bridge module
|
||||
- Add support for certificate authentication in MQTT bridge
|
||||
- Implement reload in MQTT bridge
|
||||
|
@ -320,7 +345,8 @@ MQTT:
|
|||
- `mqtt_publish`: New hook for MQTT publish event
|
||||
- `mqtt_(un)subscribe`: New hooks for MQTT subscribe & unsubscribe events
|
||||
|
||||
VSCode:
|
||||
#### VSCode:
|
||||
|
||||
- Improve `.devcontainer` to use use devcontainer image and `.vscode`
|
||||
- Add `.vscode` files to instruct VSCode how to run ejabberd
|
||||
- Add Erlang LS default configuration
|
||||
|
@ -328,7 +354,8 @@ VSCode:
|
|||
|
||||
## Version 22.10
|
||||
|
||||
Core:
|
||||
#### Core:
|
||||
|
||||
- Add `log_burst_limit_*` options ([#3865](https://github.com/processone/ejabberd/issues/3865))
|
||||
- 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))
|
||||
|
@ -346,7 +373,8 @@ Core:
|
|||
- `mod_shared_roster_ldap`: Update roster_get hook to use `#roster_item{}`
|
||||
- `prosody2ejabberd`: Fix parsing of scram password from prosody
|
||||
|
||||
MIX:
|
||||
#### MIX:
|
||||
|
||||
- Fix MIX's filter_nodes
|
||||
- Return user jid on join
|
||||
- `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_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))
|
||||
- Don't persist `none` role ([#3330](https://github.com/processone/ejabberd/issues/3330))
|
||||
- Allow MUC service admins to bypass max_user_conferences limitation
|
||||
|
@ -374,7 +403,8 @@ MUC:
|
|||
- Export `mod_muc_admin:get_room_pid/2`
|
||||
- Export function for getting room diagnostics
|
||||
|
||||
SQL:
|
||||
#### SQL:
|
||||
|
||||
- Handle errors reported from begin/commit inside transaction
|
||||
- Make connection close errors bubble up from inside sql transaction
|
||||
- Make first sql reconnect wait shorter time
|
||||
|
@ -386,7 +416,8 @@ SQL:
|
|||
- Update mysql library
|
||||
- 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 clean`: Improve this and "distclean"
|
||||
- `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 header files which content is already in xmpp library
|
||||
|
||||
Container:
|
||||
#### Container:
|
||||
|
||||
- Get ejabberd-contrib sources to include them
|
||||
- Copy `.ejabberd-modules` directory if available
|
||||
- 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))
|
||||
- Fix build instructions, add more podman examples
|
||||
|
||||
Installers:
|
||||
#### Installers:
|
||||
|
||||
- make-binaries: Include CAPTCHA script with release
|
||||
- make-binaries: Edit rebar.config more carefully
|
||||
- make-binaries: Fix linking of EIMP dependencies
|
||||
|
@ -423,14 +456,16 @@ Installers:
|
|||
- make-installers: Override code on upgrade
|
||||
- make-installers: Apply cosmetic changes
|
||||
|
||||
External modules:
|
||||
#### External modules:
|
||||
|
||||
- ext_mod: Support managing remote nodes in the cluster
|
||||
- ext_mod: Handle correctly when COMMIT.json not found
|
||||
- Don't bother with COMMIT.json user-friendly feature in automated user case
|
||||
- Handle not found COMMIT.json, for example in GH Actions
|
||||
- Add WebAdmin page for managing external modules
|
||||
|
||||
Workflows Actions:
|
||||
#### Workflows Actions:
|
||||
|
||||
- Update workflows to Erlang 25
|
||||
- Update workflows: Ubuntu 18 is deprecated and 22 is added
|
||||
- CI: Remove syntax_tools from applications, as fast_xml fails Dialyzer
|
||||
|
@ -438,42 +473,42 @@ Workflows Actions:
|
|||
|
||||
## Version 22.05
|
||||
|
||||
Core
|
||||
#### Core
|
||||
- C2S: Don't expect that socket will be available in `c2s_terminated` hook
|
||||
- Event handling process hook tracing
|
||||
- Guard against `erlang:system_info(logical_processors)` not always returning a number
|
||||
- `domain_balancing`: Allow for specifying `type` only, without specifying `component_number`
|
||||
|
||||
MQTT
|
||||
#### MQTT
|
||||
- Add TLS certificate authentication for MQTT connections
|
||||
- Fix login when generating client id, keep connection record (#3593)
|
||||
- Pass property name as expected in mqtt_codec (fixes login using MQTT 5)
|
||||
- Support MQTT subscriptions spread over the cluster (#3750)
|
||||
|
||||
MUC
|
||||
#### MUC
|
||||
- Attach meta field with real jid to mucsub subscription events
|
||||
- Handle user removal
|
||||
- Stop empty MUC rooms 30 seconds after creation
|
||||
- `default_room_options`: Update options configurable
|
||||
- `subscribe_room_many_max_users`: New option in `mod_muc_admin`
|
||||
|
||||
mod_conversejs
|
||||
#### mod_conversejs
|
||||
- Improved options to support `@HOST@` and `auto` values
|
||||
- Set `auth` and `register` options based on ejabberd configuration
|
||||
- `conversejs_options`: New option
|
||||
- `conversejs_resources`: New option
|
||||
|
||||
PubSub
|
||||
#### PubSub
|
||||
- `mod_pubsub`: Allow for limiting `item_expire` value
|
||||
- `mod_pubsub`: Unsubscribe JID on whitelist removal
|
||||
- `node_pep`: Add config-node and multi-items features (#3714)
|
||||
|
||||
SQL
|
||||
#### SQL
|
||||
- Improve compatibility with various db engine versions
|
||||
- Sync old-to-new schema script with reality (#3790)
|
||||
- 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)
|
||||
- `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
|
||||
|
@ -486,7 +521,7 @@ Other Modules
|
|||
- `mod_shared_roster`: Normalize JID on unset_presence (#3752)
|
||||
- `mod_stun_disco`: Fix parsing of IPv6 listeners
|
||||
|
||||
Dependencies
|
||||
#### Dependencies
|
||||
- autoconf: Supported from 2.59 to the new 2.71
|
||||
- fast_tls: Update to 1.1.14 to support OpenSSL 3
|
||||
- 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
|
||||
- `make update`: Fix when used with rebar 3.18
|
||||
|
||||
Compile
|
||||
#### Compile
|
||||
- `mix release`: Copy `include/` files for ejabberd, deps and otp, in `mix.exs`
|
||||
- `rebar3 release`: Fix ERTS path in `ejabberdctl`
|
||||
- `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-installers`: New script for building command line installers
|
||||
|
||||
Start
|
||||
#### Start
|
||||
- New `make relive` similar to `ejabberdctl live` without installing
|
||||
- `ejabberdctl`: Fix some warnings detected by ShellCheck
|
||||
- `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`
|
||||
- `tools/captcha.sh`: Fix some warnings detected by ShellCheck
|
||||
|
||||
Commands
|
||||
#### Commands
|
||||
- Accept more types of ejabberdctl commands arguments as JSON-encoded
|
||||
- `delete_old_mam_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)
|
||||
- `subscribe_room_many`: New command
|
||||
|
||||
Translations
|
||||
#### Translations
|
||||
- Updated Catalan
|
||||
- Updated French
|
||||
- Updated German
|
||||
|
@ -533,7 +568,7 @@ Translations
|
|||
- Updated Portuguese (Brazil)
|
||||
- Updated Spanish
|
||||
|
||||
Workflows
|
||||
#### Workflows
|
||||
- CI: Publish CT logs and Cover on failure to an external GH Pages repo
|
||||
- CI: Test shell scripts using ShellCheck (#3738)
|
||||
- Container: New workflow to build and publish containers
|
||||
|
@ -543,12 +578,12 @@ Workflows
|
|||
|
||||
## Version 21.12
|
||||
|
||||
Commands
|
||||
#### Commands
|
||||
- `create_room_with_opts`: Fixed when using SQL storage
|
||||
- `change_room_option`: Add missing fields from config inside `mod_muc_admin:change_options`
|
||||
- piefxis: Fixed arguments of all commands
|
||||
|
||||
Modules
|
||||
#### Modules
|
||||
- mod_caps: Don't forget caps on XEP-0198 resumption
|
||||
- mod_conversejs: New module to serve a simple page for Converse.js
|
||||
- mod_http_upload_quota: Avoid `max_days` race
|
||||
|
@ -563,7 +598,7 @@ Modules
|
|||
- mod_register_web: Handle unknown host gracefully
|
||||
- mod_register_web: Use mod_register configured restrictions
|
||||
|
||||
PubSub
|
||||
#### PubSub
|
||||
- Add `delete_expired_pubsub_items` command
|
||||
- Add `delete_old_pubsub_items` command
|
||||
- Optimize publishing on large nodes (SQL)
|
||||
|
@ -574,7 +609,7 @@ PubSub
|
|||
- node_flat: 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
|
||||
- mod_mam export: assign MUC entries to the MUC service
|
||||
- MySQL: Fix typo when creating index
|
||||
|
@ -582,7 +617,7 @@ SQL
|
|||
- PgSQL: Add missing SQL migration for table `push_session`
|
||||
- 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
|
||||
- Make s2s connection table cleanup more robust
|
||||
- Update export/import of scram password to XEP-0227 1.1
|
||||
|
@ -590,7 +625,7 @@ Other
|
|||
|
||||
## Version 21.07
|
||||
|
||||
Compilation
|
||||
#### Compilation
|
||||
- Add rebar3 3.15.2 binary
|
||||
- Add support for mix to: `./configure --enable-rebar=mix`
|
||||
- Improved `make rel` to work with rebar3 and mix
|
||||
|
@ -602,14 +637,16 @@ Compilation
|
|||
- Added experimental support for GitHub Codespaces
|
||||
- Switch test service from TravisCI to GitHub Actions
|
||||
|
||||
Commands:
|
||||
#### Commands:
|
||||
|
||||
- Display extended error message in ejabberdctl
|
||||
- Remove SMP option from ejabberdctl.cfg, `-smp` was removed in OTP 21
|
||||
- `create_room`: After creating room, store in DB if it's persistent
|
||||
- `help`: Major changes in its usage and output
|
||||
- `srg_create`: Update to use `label` parameter instead of `name`
|
||||
|
||||
Modules:
|
||||
#### Modules:
|
||||
|
||||
- ejabberd_listener: New `send_timeout` option
|
||||
- mod_mix: Improvements to update to 0.14.1
|
||||
- mod_muc_room: Don't leak owner JIDs
|
||||
|
@ -626,7 +663,8 @@ Modules:
|
|||
- WebAdmin: New simple pages to view mnesia tables information and content
|
||||
- WebSocket: Fix typos
|
||||
|
||||
SQL:
|
||||
#### SQL:
|
||||
|
||||
- MySQL Backend Patch for scram-sha512
|
||||
- SQLite: When exporting for SQLite, use its specific escape options
|
||||
- SQLite: Minor fixes for new_sql_schema support
|
||||
|
@ -636,14 +674,16 @@ SQL:
|
|||
|
||||
## Version 21.04
|
||||
|
||||
API Commands:
|
||||
#### API Commands:
|
||||
|
||||
- `add_rosteritem/...`: Add argument guards to roster commands
|
||||
- `get_user_subscriptions`: New command for MUC/Sub
|
||||
- `remove_mam_for_user_with_peer`: Fix when removing room archive
|
||||
- `send_message`: Fix bug introduced in ejabberd 21.01
|
||||
- `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
|
||||
- CAPTCHA: New question/answer-based CAPTCHA script
|
||||
- `--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
|
||||
- Updated dependencies to fix Dialyzer warnings
|
||||
|
||||
Miscellaneous:
|
||||
#### Miscellaneous:
|
||||
|
||||
- CAPTCHA: Update `FORM_TYPE` from captcha to register
|
||||
- LDAP: fix eldap certificate verification
|
||||
- MySQL: Fix for "specified key was too long"
|
||||
- Translations: updated the Esperanto, Greek, and Japanese translations
|
||||
- Websocket: Fix PONG responses
|
||||
|
||||
Modules:
|
||||
#### Modules:
|
||||
|
||||
- `mod_block_strangers`: If stanza is type error, allow it passing
|
||||
- `mod_caps`: Don't request roster when not needed
|
||||
- `mod_caps`: Skip reading roster in one more case
|
||||
|
@ -674,7 +716,8 @@ Modules:
|
|||
|
||||
## Version 21.01
|
||||
|
||||
Miscellaneous changes:
|
||||
#### Miscellaneous changes:
|
||||
|
||||
- `log_rotate_size` option: Fix handling of ‘infinity’ value
|
||||
- `mod_time`: Fix invalid timezone
|
||||
- Auth JWT: New `check_decoded_jwt` hook runs the default JWT verifier
|
||||
|
@ -689,7 +732,8 @@ Miscellaneous changes:
|
|||
- Stun: Block loopback addresses by default
|
||||
- Several documentation fixes and clarifications
|
||||
|
||||
Commands:
|
||||
#### Commands:
|
||||
|
||||
- `decide_room`: Use better fallback value for room activity time when skipping room
|
||||
- `delete_old_message`: Fix when using sqlite spool table
|
||||
- `module_install`: Make ext_mod compile module with debug_info flags
|
||||
|
@ -697,13 +741,15 @@ Commands:
|
|||
- `send_message`: Don’t include empty in messages
|
||||
- `set_room_affiliation`: Validate affiliations
|
||||
|
||||
Running:
|
||||
#### Running:
|
||||
|
||||
- Docker: New `Dockerfile` and `devcontainer.json`
|
||||
- New `ejabberdctl foreground-quiet`
|
||||
- Systemd: Allow for listening on privileged ports
|
||||
- Systemd: Integrate nicely with systemd
|
||||
|
||||
Translations:
|
||||
#### Translations:
|
||||
|
||||
- Moved gettext PO files to a new `ejabberd-po` repository
|
||||
- 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
|
||||
- check_decoded_jwt: new hook to check decoded JWT after success authentication
|
||||
|
||||
* Admin
|
||||
#### Admin
|
||||
- Docker: Fix DB initialization
|
||||
- New sql_odbc_driver option: choose the mssql ODBC driver
|
||||
- Rebar3: Fully supported. Enable with `./configure --with-rebar=/path/to/rebar3`
|
||||
- systemd: start ejabberd in foreground
|
||||
|
||||
* Modules:
|
||||
#### Modules:
|
||||
- MAM: Make sure that jid used as base in mam xml_compress is bare
|
||||
- MAM: Support for MAM Flipped Pages
|
||||
- MUC: Always show MucSub subscribers nicks
|
||||
|
@ -744,7 +790,7 @@ Translations:
|
|||
|
||||
## Version 20.07
|
||||
|
||||
* Changes in this version
|
||||
#### Changes in this version
|
||||
- Add support for using unix sockets in listeners.
|
||||
- Make this version compatible with erlang R23
|
||||
- Make room permissions checks more strict for subscribers
|
||||
|
@ -771,7 +817,7 @@ Translations:
|
|||
|
||||
## Version 20.03
|
||||
|
||||
* Changes in this version
|
||||
#### Changes in this version
|
||||
- Add support of ssl connection when connection to mysql
|
||||
database (configured with `sql_ssl: true` option)
|
||||
- Experimental support for cockroachdb when configured
|
||||
|
@ -791,7 +837,7 @@ Translations:
|
|||
|
||||
## Version 20.02
|
||||
|
||||
* Changes in this version
|
||||
#### Changes in this version
|
||||
- Fix problems when trying to use string format with unicode
|
||||
values directly in xmpp nodes
|
||||
- Add missing oauth_client table declaration in lite.new.sql
|
||||
|
@ -809,7 +855,7 @@ Translations:
|
|||
|
||||
## Version 20.01
|
||||
|
||||
* New features
|
||||
#### New features
|
||||
- Implement OAUTH authentication in mqtt
|
||||
- Make logging infrastructure use new logger introduced
|
||||
in Erlang (requires OTP22)
|
||||
|
@ -824,7 +870,7 @@ Translations:
|
|||
- Generate man page automatically
|
||||
- Implement copy feature in mod_carboncopy
|
||||
|
||||
* Fixes
|
||||
#### Fixes
|
||||
- Make webadmin work with configurable paths
|
||||
- Fix handling of result in xmlrpc module
|
||||
- Make webadmin work even when accessed through not declared domain
|
||||
|
@ -842,18 +888,18 @@ Translations:
|
|||
|
||||
## Version 19.09
|
||||
|
||||
* Admin
|
||||
#### Admin
|
||||
- The minimum required Erlang/OTP version is now 19.3
|
||||
- Fix API call using OAuth (#2982)
|
||||
- Rename MUC command arguments from Host to Service (#2976)
|
||||
|
||||
* Webadmin
|
||||
#### Webadmin
|
||||
- Don't treat 'Host' header as a virtual XMPP host (#2989)
|
||||
- Fix some links to Guide in WebAdmin and add new ones (#3003)
|
||||
- Use select fields to input host in WebAdmin Backup (#3000)
|
||||
- Check account auth provided in WebAdmin is a local host (#3000)
|
||||
|
||||
* ACME
|
||||
#### ACME
|
||||
- Improve ACME implementation
|
||||
- Fix IDA support in ACME requests
|
||||
- Fix unicode formatting in ACME module
|
||||
|
@ -864,10 +910,10 @@ Translations:
|
|||
- Don't auto request certificate for localhost and IP-like domains
|
||||
- Add listener for ACME challenge in example config
|
||||
|
||||
* Authentication
|
||||
#### Authentication
|
||||
- JWT-only authentication for some users (#3012)
|
||||
|
||||
* MUC
|
||||
#### MUC
|
||||
- Apply default role after revoking admin affiliation (#3023)
|
||||
- Custom exit message is not broadcast (#3004)
|
||||
- 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)
|
||||
- Rename MUC command arguments from Host to Service (#2976)
|
||||
|
||||
* SQL
|
||||
#### SQL
|
||||
- Fix transactions for Microsoft SQL Server (#2978)
|
||||
- Spawn SQL connections on demand only
|
||||
|
||||
* Misc
|
||||
#### Misc
|
||||
- Add support for XEP-0328: JID Prep
|
||||
- Added gsfonts for captcha
|
||||
- Log Mnesia table type on creation
|
||||
|
@ -895,12 +941,12 @@ Translations:
|
|||
|
||||
## Version 19.08
|
||||
|
||||
* Administration
|
||||
#### Administration
|
||||
- Improve ejabberd halting procedure
|
||||
- Process unexpected erlang messages uniformly: logging a warning
|
||||
- mod_configure: Remove modules management
|
||||
|
||||
* Configuration
|
||||
#### Configuration
|
||||
- Use new configuration validator
|
||||
- ejabberd_http: Use correct virtual host when consulting trusted_proxies
|
||||
- Fix Elixir modules detection in the configuration file
|
||||
|
@ -910,7 +956,7 @@ Translations:
|
|||
- mod_stream_mgmt: Allow flexible timeout format
|
||||
- mod_mqtt: Allow flexible timeout format in session_expiry option
|
||||
|
||||
* Misc
|
||||
#### Misc
|
||||
- Fix SQL connections leakage
|
||||
- New authentication method using JWT tokens
|
||||
- extauth: Add 'certauth' command
|
||||
|
@ -925,14 +971,14 @@ Translations:
|
|||
- mod_privacy: Don't attempt to query 'undefined' active list
|
||||
- mod_privacy: Fix race condition
|
||||
|
||||
* MUC
|
||||
#### MUC
|
||||
- Add code for hibernating inactive muc_room processes
|
||||
- Improve handling of unexpected iq in mod_muc_room
|
||||
- Attach mod_muc_room processes to a supervisor
|
||||
- Restore room when receiving message or generic iq for not started room
|
||||
- Distribute routing of MUC messages across all CPU cores
|
||||
|
||||
* PubSub
|
||||
#### PubSub
|
||||
- Fix pending nodes retrieval for SQL backend
|
||||
- Check access_model when publishing PEP
|
||||
- Remove deprecated pubsub plugins
|
||||
|
@ -940,7 +986,7 @@ Translations:
|
|||
|
||||
## Version 19.05
|
||||
|
||||
* Admin
|
||||
#### Admin
|
||||
- The minimum required Erlang/OTP version is now 19.1
|
||||
- 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
|
||||
|
@ -951,19 +997,19 @@ Translations:
|
|||
- Improve request_handlers validator
|
||||
- Fix syntax in example Elixir config file
|
||||
|
||||
* Auth
|
||||
#### Auth
|
||||
- Correctly support cache tags in ejabberd_auth
|
||||
- Don't process failed EXTERNAL authentication by mod_fail2ban
|
||||
- Don't call to mod_register when it's not loaded
|
||||
- Make anonymous auth don't {de}register user when there are other resources
|
||||
|
||||
* Developer
|
||||
#### Developer
|
||||
- Rename listening callback from start/2 to start/3
|
||||
- New hook called when room gets destroyed: room_destroyed
|
||||
- New hooks for tracking mucsub subscriptions changes: muc_subscribed, muc_unsubscribed
|
||||
- Make static hooks analyzer working again
|
||||
|
||||
* MUC
|
||||
#### MUC
|
||||
- Service admins are allowed to recreate room even if archive is nonempty
|
||||
- New option user_mucsub_from_muc_archive
|
||||
- Avoid late arrival of get_disco_item response
|
||||
|
@ -972,7 +1018,7 @@ Translations:
|
|||
- Make get_subscribed_rooms work even for non-persistant rooms
|
||||
- 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 use_mam_for_storage: fetch data from mam instead of spool table
|
||||
- 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
|
||||
- Make mod_offline put msg ignored by mam in spool when mam storage is on
|
||||
|
||||
* SQL:
|
||||
#### SQL:
|
||||
- Add SQL schemas for MQTT tables
|
||||
- Report better errors on SQL terms decode failure
|
||||
- Fix PostgreSQL compatibility in mod_offline_sql:remove_old_messages
|
||||
- Fix handling of list arguments on pgsql
|
||||
- Preliminary support for SQL in process_rosteritems command
|
||||
|
||||
* Tests
|
||||
#### Tests
|
||||
- Add tests for user mucsub mam from muc mam
|
||||
- Add tests for offline with mam storage
|
||||
- Add tests for offline use_mam_for_storage
|
||||
- Initial Docker environment to run ejabberd test suite
|
||||
- Test offline:use_mam_for_storage, mam:user_mucsub_from_muc_archive used together
|
||||
|
||||
* Websocket
|
||||
#### Websocket
|
||||
- Add WebSockets support to mod_mqtt
|
||||
- Return "Bad request" error when origin in websocket connection doesn't match
|
||||
- Fix RFC6454 violation on websocket connection when validating Origin header
|
||||
- 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_announce: Add 'sessionid' attribute when required
|
||||
- mod_bosh: Don't put duplicate polling attribute in bosh payload
|
||||
|
@ -1017,14 +1063,14 @@ Translations:
|
|||
|
||||
## Version 19.02
|
||||
|
||||
* Admin
|
||||
#### Admin
|
||||
- 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 is not configured
|
||||
- rooms_empty_destroy command: Several fixes to behave more conservative
|
||||
- Fix serverhost->host parameter name for muc_(un)register_nick API
|
||||
|
||||
* Configuration
|
||||
#### Configuration
|
||||
- Allow specifying tag for listener for api_permission purposes
|
||||
- Change default ciphers to intermediate
|
||||
- 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_offline: New option store_groupchat to allow storing group chat messages
|
||||
|
||||
* Core
|
||||
#### Core
|
||||
- Add MQTT protocol support
|
||||
- Fix (un)setting of priority
|
||||
- Use OTP application startup infrastructure for starting dependencies
|
||||
- Improve starting order of several dependencies
|
||||
|
||||
* MAM
|
||||
#### MAM
|
||||
- mod_mam_mnesia/sql: Improve check for empty archive
|
||||
- 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
|
||||
- Additional checks for database failures
|
||||
|
||||
* MUC
|
||||
#### MUC
|
||||
- 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
|
||||
- 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
|
||||
- Handle versioning result when shared roster group has remote account
|
||||
- Fix SQL queries
|
||||
|
||||
* Miscelanea
|
||||
#### Miscelanea
|
||||
- CAPTCHA: Add no-store hint to CAPTCHA challenge stanzas
|
||||
- HTTP: Reject http_api request with malformed Authentication header
|
||||
- mod_carboncopy: Don't lose carbons on presence change or session resumption
|
||||
|
@ -1071,7 +1117,7 @@ Translations:
|
|||
|
||||
## Version 18.12
|
||||
|
||||
* MAM data store compression
|
||||
* Proxy protocol support
|
||||
* MUC Self-Ping optimization (XEP-0410)
|
||||
* Bookmarks conversion (XEP-0411)
|
||||
- MAM data store compression
|
||||
- Proxy protocol support
|
||||
- MUC Self-Ping optimization (XEP-0410)
|
||||
- Bookmarks conversion (XEP-0411)
|
||||
|
|
|
@ -7,7 +7,7 @@ from source code.
|
|||
For a more detailed explanation, please check the
|
||||
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
|
||||
|
|
|
@ -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).
|
||||
|
||||
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
|
||||
|
@ -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
|
||||
[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
|
||||
|
@ -249,7 +249,7 @@ For this you can either:
|
|||
|
||||
Example to connect a local `ejabberdctl` to a containerized ejabberd:
|
||||
1. When creating the container, export port 5210, and set `ERLANG_COOKIE`:
|
||||
```
|
||||
```sh
|
||||
docker run --name ejabberd -it \
|
||||
-e ERLANG_COOKIE=`cat $HOME/.erlang.cookie` \
|
||||
-p 5210:5210 -p 5222:5222 \
|
||||
|
@ -260,7 +260,7 @@ docker run --name ejabberd -it \
|
|||
4. Now use `ejabberdctl` in your local ejabberd deployment
|
||||
|
||||
To connect using a local `ejabberd` script:
|
||||
```
|
||||
```sh
|
||||
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/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
|
||||
|
|
|
@ -109,14 +109,14 @@ and [ejabberd translations](https://github.com/processone/ejabberd-po/) under MI
|
|||
[erlang]: https://www.erlang.org/
|
||||
[features]: https://docs.ejabberd.im/admin/introduction/
|
||||
[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/
|
||||
[im]: https://ejabberd.im/
|
||||
[issues]: https://github.com/processone/ejabberd/issues
|
||||
[localization]: https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
[mqtt]: https://mqtt.org/
|
||||
[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/
|
||||
[p1download]: https://www.process-one.net/en/ejabberd/downloads/
|
||||
[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"],
|
||||
maintainers: ["ProcessOne"],
|
||||
licenses: ["GPL-2.0-or-later"],
|
||||
links: %{"Site" => "https://www.ejabberd.im",
|
||||
"Documentation" => "http://docs.ejabberd.im",
|
||||
"Source" => "https://github.com/processone/ejabberd",
|
||||
links: %{"ejabberd.im" => "https://www.ejabberd.im",
|
||||
"ejabberd Docs" => "http://docs.ejabberd.im",
|
||||
"GitHub" => "https://github.com/processone/ejabberd",
|
||||
"ProcessOne" => "http://www.process-one.net/"}]
|
||||
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"},
|
||||
"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"},
|
||||
"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_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"},
|
||||
|
|
|
@ -131,7 +131,7 @@ get_commands_spec() ->
|
|||
"only on log files generated by some modules.\n"
|
||||
"This can be useful when an external tool is "
|
||||
"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,
|
||||
module = ?MODULE, function = reopen_log,
|
||||
args = [], result = {res, rescode}},
|
||||
|
|
|
@ -87,7 +87,7 @@ md_tag(h2, V) ->
|
|||
md_tag(strong, V) ->
|
||||
[<<"*">>, V, <<"*">>];
|
||||
md_tag('div', V) ->
|
||||
[<<"<div class='note-down'>">>, V, <<"</div>">>];
|
||||
[<<"*Note* about this command: ">>, V, <<".">>];
|
||||
md_tag(_, V) ->
|
||||
V.
|
||||
|
||||
|
@ -237,7 +237,7 @@ json_gen({_Name, {list, ElDesc}}, List, Indent, HTMLOutput) ->
|
|||
[?OP_L("["), ?BR, Indent2, list_join_with(Res, [?OP_L(","), ?BR, Indent2]), ?BR, Indent, ?OP_L("]")].
|
||||
|
||||
json_call(Name, ArgsDesc, Values, ResultDesc, Result, HTMLOutput) ->
|
||||
{Indent, Preamble} = if HTMLOutput -> {<<"">>, []}; true -> {<<" ">>, <<"~~~ json\n">>} end,
|
||||
{Indent, Preamble} = if HTMLOutput -> {<<"">>, []}; true -> {<<"">>, <<"~~~ json\n">>} end,
|
||||
{Code, ResultStr} = case {ResultDesc, Result} of
|
||||
{{_, rescode}, V} when V == true; V == ok ->
|
||||
{200, [?STR_L("")]};
|
||||
|
@ -364,7 +364,7 @@ make_tags(HTMLOutput) ->
|
|||
|
||||
-dialyzer({no_match, gen_tags/2}).
|
||||
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,
|
||||
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)])]
|
||||
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
|
||||
unknown -> false;
|
||||
_ -> lists:member(gen_mod, proplists:get_value(behaviour, Definer:module_info(attributes)))
|
||||
end,
|
||||
ModuleText = case IsDefinerMod of
|
||||
true ->
|
||||
[?TAG(h2, <<"Module:">>), ?TAG(p, ?RAW("*`"++atom_to_list(Definer)++"`*"))];
|
||||
[?TAG(h2, <<"Module:">>), ?TAG(p, ?RAW("_`"++atom_to_list(Definer)++"`_"))];
|
||||
false ->
|
||||
[]
|
||||
end,
|
||||
|
@ -415,8 +415,8 @@ gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
|||
true -> {NoteEl, []}
|
||||
end,
|
||||
|
||||
[NotePre,
|
||||
?TAG(h1, atom_to_list(Name)),
|
||||
[?TAG(h1, make_command_name(Name, Note)),
|
||||
NotePre,
|
||||
?TAG(p, ?RAW(Desc)),
|
||||
case LongDesc of
|
||||
"" -> [];
|
||||
|
@ -435,6 +435,19 @@ gen_doc(#ejabberd_commands{name=Name, tags=Tags, desc=Desc, longdesc=LongDesc,
|
|||
[Name, Ex])))
|
||||
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() ->
|
||||
lists:flatmap(
|
||||
fun(Mod) ->
|
||||
|
@ -492,21 +505,22 @@ generate_md_output(File, RegExp, Languages, Cmds) ->
|
|||
end, Cmds2),
|
||||
Cmds4 = [maybe_add_policy_arguments(Cmd) || Cmd <- Cmds3],
|
||||
Langs = binary:split(Languages, <<",">>, [global]),
|
||||
Header = <<"---\ntitle: Administration API reference\ntoc: true\nmenu: API Reference\norder: 1\n"
|
||||
"// Autogenerated with 'ejabberdctl gen_markdown_doc_for_commands'\n---\n\n"
|
||||
"This section describes API of ejabberd.\n">>,
|
||||
Version = binary_to_list(ejabberd_config:version()),
|
||||
Header = ["# API Reference\n\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),
|
||||
{ok, Fh} = file:open(File, [write]),
|
||||
{ok, Fh} = file:open(File, [write, {encoding, utf8}]),
|
||||
io:format(Fh, "~ts~ts", [Header, Out]),
|
||||
file:close(Fh),
|
||||
ok.
|
||||
|
||||
generate_tags_md(File) ->
|
||||
Header = <<"---\ntitle: API Tags\ntoc: true\nmenu: API Tags\norder: 2\n"
|
||||
"// Autogenerated with 'ejabberdctl gen_markdown_doc_for_tags'\n---\n\n"
|
||||
"This section enumerates the tags and their associated API.\n">>,
|
||||
Version = binary_to_list(ejabberd_config:version()),
|
||||
Header = ["# API Tags\n\n"
|
||||
"This section enumerates the API tags of ejabberd ", Version, ". \n\n"],
|
||||
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]),
|
||||
file:close(Fh),
|
||||
ok.
|
||||
|
|
|
@ -45,7 +45,8 @@ man(Lang) ->
|
|||
#{desc := Descr} = Map ->
|
||||
DocOpts = maps:get(opts, 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} ->
|
||||
{ParentMod, Backend} = strip_backend_suffix(M),
|
||||
{Mods, dict:append(ParentMod, {M, Backend, DocOpts}, SubMods)};
|
||||
|
@ -72,10 +73,12 @@ man(Lang) ->
|
|||
catch _:undef -> []
|
||||
end
|
||||
end, ejabberd_config:callback_modules(all)),
|
||||
Version = binary_to_list(ejabberd_config:version()),
|
||||
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()] ++
|
||||
lists:flatmap(
|
||||
fun(Opt) ->
|
||||
|
@ -95,16 +98,19 @@ man(Lang) ->
|
|||
"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()] ++
|
||||
lists:flatmap(
|
||||
fun({M, Descr, DocOpts, Backends, Example}) ->
|
||||
ModName = atom_to_list(M),
|
||||
VersionMark = get_version_mark(Example),
|
||||
[io_lib:nl(),
|
||||
ModName,
|
||||
lists:flatten([ModName, VersionMark]),
|
||||
lists:duplicate(length(atom_to_list(M)), $~),
|
||||
"[[" ++ ModName ++ "]]",
|
||||
io_lib:nl()] ++
|
||||
format_versions(Lang, Example) ++ [io_lib:nl()] ++
|
||||
tr_multi(Lang, Descr) ++ [io_lib:nl()] ++
|
||||
opts_to_man(Lang, [{M, '', DocOpts}|Backends]) ++
|
||||
format_example(0, Lang, Example)
|
||||
|
@ -114,7 +120,7 @@ man(Lang) ->
|
|||
"LISTENERS",
|
||||
"-------",
|
||||
"[[listeners]]",
|
||||
tr(Lang, ?T("This section describes options of all ejabberd listeners.")),
|
||||
"This section describes listeners options of ejabberd " ++ Version ++ ".",
|
||||
io_lib:nl(),
|
||||
"TODO"],
|
||||
AsciiData =
|
||||
|
@ -151,7 +157,7 @@ opts_to_man(Lang, Backends) ->
|
|||
end, Backends).
|
||||
|
||||
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);
|
||||
opt_to_man(Lang, {Option, Options, Children}, Level) ->
|
||||
[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))]) ++
|
||||
[io_lib:nl()|format_example(Level, Lang, Options)].
|
||||
|
||||
format_option(Lang, Option, #{note := Note, value := Val}) ->
|
||||
"\n\n_Note_ about the next option: " ++ Note ++ ":\n\n"++
|
||||
"*" ++ atom_to_list(Option) ++ "*: 'pass:[" ++
|
||||
tr(Lang, Val) ++ "]'::";
|
||||
format_option(Lang, Option, #{value := Val}) ->
|
||||
"*" ++ atom_to_list(Option) ++ "*: 'pass:[" ++
|
||||
get_version_mark(#{note := Note}) ->
|
||||
[XX, YY | _] = string:tokens(binary_to_list(ejabberd_option:version()), "."),
|
||||
XXYY = string:join([XX, YY], "."),
|
||||
case string:find(Note, XXYY) of
|
||||
nomatch -> "";
|
||||
_ -> " 🟤"
|
||||
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) ++ "]'::";
|
||||
format_option(_Lang, Option, #{}) ->
|
||||
"*" ++ atom_to_list(Option) ++ "*::".
|
||||
|
||||
format_versions(_Lang, #{note := Note}) when Note /= [] ->
|
||||
["_Note_ about this option: " ++ Note ++ ". "];
|
||||
format_versions(_, _) ->
|
||||
[].
|
||||
|
||||
format_desc(Lang, #{desc := Desc}) ->
|
||||
tr_multi(Lang, Desc).
|
||||
|
||||
|
@ -194,7 +212,7 @@ format_example(Level, Lang, #{example := [_|_] = Example}) ->
|
|||
false ->
|
||||
lists:flatmap(
|
||||
fun(Block) ->
|
||||
["+", "''''", "+"|Block]
|
||||
["+", "*Examples*:", "+"|Block]
|
||||
end,
|
||||
lists:map(
|
||||
fun({Text, Lines}) ->
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
get_commands_spec() ->
|
||||
[
|
||||
#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,
|
||||
args = [{jid, string},{ttl, integer}, {scopes, string}],
|
||||
policy = restricted,
|
||||
|
@ -92,7 +92,7 @@ get_commands_spec() ->
|
|||
result = {result, {tuple, [{token, string}, {scopes, string}, {expires_in, string}]}}
|
||||
},
|
||||
#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,
|
||||
version = 1,
|
||||
note = "updated in 24.02",
|
||||
|
@ -105,7 +105,7 @@ get_commands_spec() ->
|
|||
result = {result, {tuple, [{token, string}, {scopes, {list, {scope, string}}}, {expires_in, string}]}}
|
||||
},
|
||||
#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",
|
||||
module = ?MODULE, function = oauth_list_tokens,
|
||||
args = [],
|
||||
|
@ -113,7 +113,7 @@ get_commands_spec() ->
|
|||
result = {tokens, {list, {token, {tuple, [{token, string}, {user, string}, {scope, string}, {expires_in, string}]}}}}
|
||||
},
|
||||
#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",
|
||||
module = ?MODULE, function = oauth_revoke_token,
|
||||
args = [{token, binary}],
|
||||
|
@ -122,7 +122,7 @@ get_commands_spec() ->
|
|||
result_desc = "Result code"
|
||||
},
|
||||
#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,
|
||||
args = [{client_id, binary},
|
||||
{client_name, binary},
|
||||
|
@ -131,7 +131,7 @@ get_commands_spec() ->
|
|||
result = {res, restuple}
|
||||
},
|
||||
#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,
|
||||
args = [{client_id, binary},
|
||||
{client_name, binary},
|
||||
|
@ -140,7 +140,7 @@ get_commands_spec() ->
|
|||
result = {res, restuple}
|
||||
},
|
||||
#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,
|
||||
args = [{client_id, binary}],
|
||||
policy = restricted,
|
||||
|
|
|
@ -37,13 +37,13 @@ doc() ->
|
|||
#{value => "[Options, ...]",
|
||||
desc =>
|
||||
?T("The option for listeners configuration. See the "
|
||||
"http://../listen/[Listen Modules] section "
|
||||
"_`listen.md|Listen Modules`_ section "
|
||||
"for details.")}},
|
||||
{modules,
|
||||
#{value => "{Module: Options}",
|
||||
desc =>
|
||||
?T("The option for modules configuration. See "
|
||||
"http://../modules/[Modules] section "
|
||||
"_`modules.md|Modules`_ section "
|
||||
"for details.")}},
|
||||
{loglevel,
|
||||
#{value =>
|
||||
|
@ -221,7 +221,7 @@ doc() ->
|
|||
#{value => "{AccessName: {allow|deny: ACLRules|ACLName}}",
|
||||
desc =>
|
||||
?T("This option defines "
|
||||
"http://../basic/#access-rules[Access Rules]. "
|
||||
"_`basic.md#access-rules|Access Rules`_. "
|
||||
"Each access rule is "
|
||||
"assigned a name that can be referenced from other parts "
|
||||
"of the configuration file (mostly from 'access' options of "
|
||||
|
@ -255,7 +255,7 @@ doc() ->
|
|||
{acme,
|
||||
#{value => ?T("Options"),
|
||||
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, "
|
||||
"which means that certificate requests and renewals are "
|
||||
"performed to some CA server (aka \"ACME server\") in a fully "
|
||||
|
@ -303,8 +303,8 @@ doc() ->
|
|||
#{value => "true | false",
|
||||
desc =>
|
||||
?T("Whether to allow installation of third-party modules or not. "
|
||||
"See https://docs.ejabberd.im/developer/extending-ejabberd/modules/#ejabberd-contrib"
|
||||
"[ejabberd-contrib] documentation section. "
|
||||
"See _`../../developer/extending-ejabberd/modules.md#ejabberd-contrib|ejabberd-contrib`_ "
|
||||
"documentation section. "
|
||||
"The default value is 'true'.")}},
|
||||
{allow_multiple_connections,
|
||||
#{value => "true | false",
|
||||
|
@ -328,8 +328,7 @@ doc() ->
|
|||
desc =>
|
||||
?T("Define the permissions for API access. Please consult the "
|
||||
"ejabberd Docs web -> For Developers -> ejabberd ReST API -> "
|
||||
"https://docs.ejabberd.im/developer/ejabberd-api/permissions/"
|
||||
"[API Permissions].")}},
|
||||
"_`../../developer/ejabberd-api/permissions.md|API Permissions`_.")}},
|
||||
{append_host_config,
|
||||
#{value => "{Host: Options}",
|
||||
desc =>
|
||||
|
@ -373,7 +372,7 @@ doc() ->
|
|||
note => "improved in 20.01",
|
||||
desc =>
|
||||
[?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 "
|
||||
"in the database. This is risky because the passwords "
|
||||
"can be read if your database gets compromised. "
|
||||
|
@ -392,7 +391,7 @@ doc() ->
|
|||
{auth_scram_hash,
|
||||
#{value => "sha | sha256 | sha512",
|
||||
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 "
|
||||
"a different algorithm - users that have such passwords will not be able "
|
||||
"to authenticate. The default value is 'sha'.")}},
|
||||
|
@ -418,7 +417,7 @@ doc() ->
|
|||
"corresponding JID(s) in 'subjectAltName' field. "
|
||||
"There is no default value."), "",
|
||||
?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,
|
||||
#{value => "[Cipher, ...]",
|
||||
|
@ -468,7 +467,7 @@ doc() ->
|
|||
#{value => ?T("Path | ModuleName"),
|
||||
note => "improved in 23.01",
|
||||
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. "
|
||||
"'@SEMVER@' is replaced with ejabberd version number in semver format "
|
||||
"when compiled with Elixir's mix, or XX.YY format otherwise. "
|
||||
|
@ -481,7 +480,7 @@ doc() ->
|
|||
{captcha_limit,
|
||||
#{value => "pos_integer() | infinity",
|
||||
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 "
|
||||
"from CAPTCHA DoS. The default value is 'infinity'.")}},
|
||||
{captcha_host,
|
||||
|
@ -491,7 +490,7 @@ doc() ->
|
|||
#{value => ?T("URL | auto | undefined"),
|
||||
note => "improved in 23.04",
|
||||
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 "
|
||||
"as well. "
|
||||
"If set to 'auto', it builds the URL using a 'request_handler' "
|
||||
|
@ -696,8 +695,8 @@ doc() ->
|
|||
note => "added in 23.10",
|
||||
desc =>
|
||||
?T("Modules to install from "
|
||||
"https://docs.ejabberd.im/developer/extending-ejabberd/modules/#ejabberd-contrib"
|
||||
"[ejabberd-contrib] at start time. "
|
||||
"_`../../developer/extending-ejabberd/modules.md#ejabberd-contrib|ejabberd-contrib`_ "
|
||||
"at start time. "
|
||||
"The default value is an empty list of modules: '[]'.")}},
|
||||
{jwt_auth_only_rule,
|
||||
#{value => ?T("AccessName"),
|
||||
|
@ -1156,7 +1155,7 @@ doc() ->
|
|||
{s2s_access,
|
||||
#{value => ?T("Access"),
|
||||
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. "
|
||||
"The default value is 'all'; no restrictions are applied, it is"
|
||||
" 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. "
|
||||
"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 "
|
||||
"encouraged to define ejabberd_xmlrpc inside request_handlers "
|
||||
"option of ejabberd_http listen module. See the ejabberd "
|
||||
"documentation for details: https://docs.ejabberd.im/admin/"
|
||||
"configuration/listen/#ejabberd-xmlrpc", []),
|
||||
"documentation for details: _`/admin/configuration/listen/#ejabberd-xmlrpc|ejabberd_xmlrpc listener`_.", []),
|
||||
[].
|
||||
|
|
|
@ -74,6 +74,7 @@
|
|||
-callback mod_opt_type(atom()) -> econf:validator().
|
||||
-callback mod_options(binary()) -> [{atom(), term()} | atom()].
|
||||
-callback mod_doc() -> #{desc => binary() | [binary()],
|
||||
note => string(),
|
||||
opts => [opt_doc()],
|
||||
example => [string()] | [{binary(), [string()]}]}.
|
||||
-callback depends(binary(), opts()) -> [{module(), hard | soft}].
|
||||
|
|
|
@ -170,7 +170,7 @@ get_commands_spec() ->
|
|||
#ejabberd_commands{name = delete_old_users, tags = [accounts, purge],
|
||||
desc = "Delete users that didn't log in last days, or that never logged",
|
||||
longdesc = "To protect admin accounts, configure this for example:\n"
|
||||
"```\n"
|
||||
"``` yaml\n"
|
||||
"access_rules:\n"
|
||||
" protect_old_users:\n"
|
||||
" - allow: admin\n"
|
||||
|
@ -186,7 +186,7 @@ get_commands_spec() ->
|
|||
#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",
|
||||
longdesc = "To protect admin accounts, configure this for example:\n"
|
||||
"```\n"
|
||||
"``` yaml\n"
|
||||
"access_rules:\n"
|
||||
" delete_old_users:\n"
|
||||
" - deny: admin\n"
|
||||
|
|
|
@ -632,6 +632,6 @@ mod_doc() ->
|
|||
#{desc =>
|
||||
?T("This module can be used to update existing SQL database "
|
||||
"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. "
|
||||
"When the module is loaded use _`update_sql`_ API.")}.
|
||||
|
|
|
@ -301,6 +301,6 @@ mod_doc() ->
|
|||
desc =>
|
||||
?T("Whether to generate CAPTCHA or not in response to "
|
||||
"messages from strangers. See also section "
|
||||
"http://../#captcha"
|
||||
"[CAPTCHA] of the Configuration Guide. "
|
||||
"_`basic.md#captcha|CAPTCHA`_"
|
||||
" of the Configuration Guide. "
|
||||
"The default value is 'false'.")}}]}.
|
||||
|
|
|
@ -252,17 +252,16 @@ mod_doc() ->
|
|||
#{desc =>
|
||||
[?T("This module serves a simple page for the "
|
||||
"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' "
|
||||
"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' "
|
||||
"http://../listen-options/#request-handlers[request_handlers] "
|
||||
"_`listen-options.md#request_handlers|request_handlers`_ "
|
||||
"are enabled."), "",
|
||||
?T("When 'conversejs_css' and 'conversejs_script' are 'auto', "
|
||||
"by default they point to the public Converse client.")
|
||||
],
|
||||
note => "added in 21.12 and improved in 22.05",
|
||||
example =>
|
||||
[{?T("Manually setup WebSocket url, and use the public Converse client:"),
|
||||
["listen:",
|
||||
|
|
|
@ -129,7 +129,6 @@ mod_doc() ->
|
|||
" server: sat-pubsub.example.org",
|
||||
"",
|
||||
"modules:",
|
||||
" ...",
|
||||
" mod_delegation:",
|
||||
" namespaces:",
|
||||
" urn:xmpp:mam:1:",
|
||||
|
|
|
@ -211,11 +211,11 @@ mod_doc() ->
|
|||
[?T("This module serves small 'host-meta' files as described in "
|
||||
"https://xmpp.org/extensions/xep-0156.html[XEP-0156: Discovering "
|
||||
"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' "
|
||||
"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.")],
|
||||
note => "added in 22.05",
|
||||
example =>
|
||||
["listen:",
|
||||
" -",
|
||||
|
|
|
@ -534,11 +534,11 @@ mod_options(_) ->
|
|||
mod_doc() ->
|
||||
#{desc =>
|
||||
[?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."), "",
|
||||
?T("To use this module, in addition to adding it to the 'modules' "
|
||||
"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 "
|
||||
"in the request_handlers, add a 'vN'. "
|
||||
"For example: '/api/v2: mod_http_api'"), "",
|
||||
|
|
|
@ -561,18 +561,13 @@ mod_doc() ->
|
|||
"content type 'ogg' is defined, 'png' is redefined, and 'jpg' "
|
||||
"definition is deleted:"),
|
||||
["listen:",
|
||||
" ...",
|
||||
" -",
|
||||
" port: 5280",
|
||||
" module: ejabberd_http",
|
||||
" request_handlers:",
|
||||
" ...",
|
||||
" /pub/content: mod_http_fileserver",
|
||||
" ...",
|
||||
" ...",
|
||||
"",
|
||||
"modules:",
|
||||
" ...",
|
||||
" mod_http_fileserver:",
|
||||
" docroot: /var/www",
|
||||
" accesslog: /var/log/ejabberd/access.log",
|
||||
|
@ -585,5 +580,4 @@ mod_doc() ->
|
|||
" content_types:",
|
||||
" .ogg: audio/ogg",
|
||||
" .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."), "",
|
||||
?T("In order to use this module, it must be enabled "
|
||||
"in 'listen' -> 'ejabberd_http' -> "
|
||||
"http://../listen-options/#request-handlers[request_handlers].")],
|
||||
"_`listen-options.md#request_handlers|request_handlers`_.")],
|
||||
opts =>
|
||||
[{host,
|
||||
#{desc => ?T("Deprecated. Use 'hosts' instead.")}},
|
||||
|
@ -367,40 +367,35 @@ mod_doc() ->
|
|||
"of vCard. Since the representation has no attributes, "
|
||||
"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"]}]}}],
|
||||
["# This XML representation of vCard:",
|
||||
"# <vCard xmlns='vcard-temp'>",
|
||||
"# <FN>Conferences</FN>",
|
||||
"# <ADR>",
|
||||
"# <WORK/>",
|
||||
"# <STREET>Elm Street</STREET>",
|
||||
"# </ADR>",
|
||||
"# </vCard>",
|
||||
"# ",
|
||||
"# is translated to:",
|
||||
"vcard:",
|
||||
" fn: Conferences",
|
||||
" adr:",
|
||||
" -",
|
||||
" work: true",
|
||||
" street: Elm Street"]}}],
|
||||
example =>
|
||||
["listen:",
|
||||
" ...",
|
||||
" -",
|
||||
" port: 5443",
|
||||
" module: ejabberd_http",
|
||||
" tls: true",
|
||||
" request_handlers:",
|
||||
" ...",
|
||||
" /upload: mod_http_upload",
|
||||
" ...",
|
||||
" ...",
|
||||
"",
|
||||
"modules:",
|
||||
" ...",
|
||||
" mod_http_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}].
|
||||
depends(_Host, _Opts) ->
|
||||
|
|
|
@ -134,19 +134,15 @@ mod_doc() ->
|
|||
"to use the quota feature. You can stick to the default names "
|
||||
"and just specify access rules such as those in this example:"),
|
||||
["shaper_rules:",
|
||||
" ...",
|
||||
" soft_upload_quota:",
|
||||
" 1000: all # MiB",
|
||||
" hard_upload_quota:",
|
||||
" 1100: all # MiB",
|
||||
" ...",
|
||||
"",
|
||||
"modules:",
|
||||
" ...",
|
||||
" mod_http_upload: {}",
|
||||
" mod_http_upload_quota:",
|
||||
" max_days: 100",
|
||||
" ..."]}]}.
|
||||
" max_days: 100"]}]}.
|
||||
|
||||
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
||||
depends(_Host, _Opts) ->
|
||||
|
|
|
@ -884,8 +884,8 @@ mod_options(Host) ->
|
|||
|
||||
mod_doc() ->
|
||||
#{desc =>
|
||||
[?T("https://matrix.org/[Matrix] gateway."), "",
|
||||
?T("This module is available since ejabberd 24.02.")],
|
||||
[?T("https://matrix.org/[Matrix] gateway.")],
|
||||
note => "added in 24.02",
|
||||
example =>
|
||||
["listen:",
|
||||
" -",
|
||||
|
|
|
@ -102,16 +102,13 @@ mod_doc() ->
|
|||
[?T("This module is an experimental implementation of "
|
||||
"https://xmpp.org/extensions/xep-0369.html"
|
||||
"[XEP-0369: Mediated Information eXchange (MIX)]. "
|
||||
"MIX support was added in ejabberd 16.03 as an "
|
||||
"experimental feature, updated in 19.02, and is not "
|
||||
"yet ready to use in production. It's asserted that "
|
||||
"It's asserted that "
|
||||
"the MIX protocol is going to replace the MUC protocol "
|
||||
"in the future (see _`mod_muc`_)."), "",
|
||||
?T("To learn more about how to use that feature, you can refer to "
|
||||
"our tutorial: https://docs.ejabberd.im/tutorials/mix-010/"
|
||||
"[Getting started with XEP-0369: Mediated Information "
|
||||
"eXchange (MIX) v0.1]."), "",
|
||||
"our tutorial: _`../../tutorials/mix-010.md|Getting started with MIX`_"), "",
|
||||
?T("The module depends on _`mod_mam`_.")],
|
||||
note => "added in 16.03 and improved in 19.02",
|
||||
opts =>
|
||||
[{access_create,
|
||||
#{value => ?T("AccessName"),
|
||||
|
|
|
@ -282,7 +282,7 @@ listen_options() ->
|
|||
mod_doc() ->
|
||||
#{desc =>
|
||||
?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 "
|
||||
"'mod_mqtt' in 'modules' and 'listen' sections."),
|
||||
opts =>
|
||||
|
|
|
@ -178,7 +178,6 @@ mod_doc() ->
|
|||
?T("It is available since ejabberd 23.01.")],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_mqtt_bridge:",
|
||||
" servers:",
|
||||
" \"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",
|
||||
" authentication:",
|
||||
" certfile: \"/etc/ejabberd/mqtt_server.pem\"",
|
||||
" replication_user: \"mqtt@xmpp.server.com\"",
|
||||
" ..."],
|
||||
" replication_user: \"mqtt@xmpp.server.com\""],
|
||||
opts =>
|
||||
[{servers,
|
||||
#{value => "{ServerUrl: {publish: [TopicPairs], subscribe: [TopicPairs], authentication: [AuthInfo]}}",
|
||||
|
|
|
@ -1654,21 +1654,22 @@ mod_doc() ->
|
|||
"of vCard. Since the representation has no attributes, "
|
||||
"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"]}]}},
|
||||
["# This XML representation of vCard:",
|
||||
"# <vCard xmlns='vcard-temp'>",
|
||||
"# <FN>Conferences</FN>",
|
||||
"# <ADR>",
|
||||
"# <WORK/>",
|
||||
"# <STREET>Elm Street</STREET>",
|
||||
"# </ADR>",
|
||||
"# </vCard>",
|
||||
"# ",
|
||||
"# is translated to:",
|
||||
"vcard:",
|
||||
" fn: Conferences",
|
||||
" adr:",
|
||||
" -",
|
||||
" work: true",
|
||||
" street: Elm Street"]}},
|
||||
{cleanup_affiliations_on_start,
|
||||
#{value => "true | false",
|
||||
note => "added in 22.05",
|
||||
|
@ -1732,7 +1733,7 @@ mod_doc() ->
|
|||
?T("When a user tries to join a room where they have no "
|
||||
"affiliation (not owner, admin or member), the room "
|
||||
"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. "
|
||||
"The default value is 'false'.")}},
|
||||
{description,
|
||||
|
@ -1824,8 +1825,7 @@ mod_doc() ->
|
|||
#{value => "true | false",
|
||||
desc =>
|
||||
?T("Allow users to subscribe to room events as described in "
|
||||
"https://docs.ejabberd.im/developer/xmpp-clients-bots/extensions/muc-sub/"
|
||||
"[Multi-User Chat Subscriptions]. "
|
||||
"_`../../developer/xmpp-clients-bots/extensions/muc-sub.md|Multi-User Chat Subscriptions`_. "
|
||||
"The default value is 'false'.")}},
|
||||
{title,
|
||||
#{value => ?T("Room Title"),
|
||||
|
|
|
@ -380,7 +380,7 @@ get_commands_spec() ->
|
|||
desc = "Subscribe several users to a MUC conference",
|
||||
note = "added in 22.05",
|
||||
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`)",
|
||||
module = ?MODULE, function = subscribe_room_many,
|
||||
args_desc = ["Users JIDs and nicks",
|
||||
|
@ -402,7 +402,7 @@ get_commands_spec() ->
|
|||
#ejabberd_commands{name = subscribe_room_many, tags = [muc_room, muc_sub],
|
||||
desc = "Subscribe several users to a MUC conference",
|
||||
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`)",
|
||||
module = ?MODULE, function = subscribe_room_many,
|
||||
version = 1,
|
||||
|
|
|
@ -120,8 +120,8 @@ mod_doc() ->
|
|||
"https://xmpp.org/extensions/xep-0421.html"
|
||||
"[XEP-0421: Anonymous unique occupant identifiers for MUCs]."), "",
|
||||
?T("When the module is enabled, the feature is enabled "
|
||||
"in all semi-anonymous rooms."), "",
|
||||
?T("This module is available since ejabberd 23.10.")]
|
||||
"in all semi-anonymous rooms.")],
|
||||
note => "added in 23.10"
|
||||
}.
|
||||
|
||||
depends(_, _) ->
|
||||
|
|
|
@ -264,8 +264,8 @@ mod_doc() ->
|
|||
#{desc =>
|
||||
[?T("This module implement Real-time blocklists for MUC rooms."), "",
|
||||
?T("It works by observing remote pubsub node conforming with "
|
||||
"specification described in https://xmppbl.org/."), "",
|
||||
?T("This module is available since ejabberd 23.04.")],
|
||||
"specification described in https://xmppbl.org/.")],
|
||||
note => "added in 23.04",
|
||||
opts =>
|
||||
[{rtbl_server,
|
||||
#{value => ?T("Domain"),
|
||||
|
|
|
@ -1247,8 +1247,8 @@ mod_doc() ->
|
|||
"are currently open."), "",
|
||||
?T("NOTE: 'ejabberdctl' has a command to "
|
||||
"delete expired messages (see chapter "
|
||||
"https://docs.ejabberd.im/admin/guide/managing"
|
||||
"[Managing an ejabberd server] in online documentation.")],
|
||||
"_`../guide/managing.md|Managing an ejabberd server`_ "
|
||||
"in online documentation.")],
|
||||
opts =>
|
||||
[{access_max_user_messages,
|
||||
#{value => ?T("AccessName"),
|
||||
|
|
|
@ -352,9 +352,7 @@ mod_doc() ->
|
|||
"The default value is 'none'.")}}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_ping:",
|
||||
" send_pings: true",
|
||||
" 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.")}}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_pres_counter:",
|
||||
" count: 5",
|
||||
" interval: 30 secs",
|
||||
" ..."]}.
|
||||
" interval: 30 secs"]}.
|
||||
|
|
|
@ -163,15 +163,13 @@ mod_doc() ->
|
|||
"The default value is 'none'.")}}]}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_privilege:",
|
||||
" roster:",
|
||||
" get: all",
|
||||
" presence:",
|
||||
" managed_entity: all",
|
||||
" message:",
|
||||
" outgoing: all",
|
||||
" ..."]}.
|
||||
" outgoing: all"]}.
|
||||
|
||||
depends(_, _) ->
|
||||
[].
|
||||
|
|
|
@ -237,23 +237,7 @@ mod_doc() ->
|
|||
"by some XMPP clients in Service Discovery. The value of "
|
||||
"'vCard' is a YAML map constructed from an XML representation "
|
||||
"of vCard. Since the representation has no attributes, "
|
||||
"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"]}]}}],
|
||||
"the mapping is straightforward.")}}],
|
||||
example =>
|
||||
["acl:",
|
||||
" admin:",
|
||||
|
@ -274,7 +258,6 @@ mod_doc() ->
|
|||
" proxyrate: 10240",
|
||||
"",
|
||||
"modules:",
|
||||
" ...",
|
||||
" mod_proxy65:",
|
||||
" host: proxy1.example.org",
|
||||
" name: \"File Transfer Proxy\"",
|
||||
|
@ -284,5 +267,4 @@ mod_doc() ->
|
|||
" access: proxy65_access",
|
||||
" shaper: proxy65_shaper",
|
||||
" recbuf: 10240",
|
||||
" sndbuf: 10240",
|
||||
" ..."]}.
|
||||
" sndbuf: 10240"]}.
|
||||
|
|
|
@ -4504,27 +4504,27 @@ mod_doc() ->
|
|||
"representation of vCard. Since the representation has "
|
||||
"no attributes, the mapping is straightforward."),
|
||||
example =>
|
||||
[{?T("The following XML representation of vCard:"),
|
||||
["<vCard xmlns='vcard-temp'>",
|
||||
" <FN>PubSub Service</FN>",
|
||||
" <ADR>",
|
||||
" <WORK/>",
|
||||
" <STREET>Elm Street</STREET>",
|
||||
" </ADR>",
|
||||
"</vCard>"]},
|
||||
{?T("will be translated to:"),
|
||||
["vcard:",
|
||||
" fn: PubSub Service",
|
||||
" adr:",
|
||||
" -",
|
||||
" work: true",
|
||||
" street: Elm Street"]}]}}
|
||||
["# This XML representation of vCard:",
|
||||
"# <vCard xmlns='vcard-temp'>",
|
||||
"# <FN>Conferences</FN>",
|
||||
"# <ADR>",
|
||||
"# <WORK/>",
|
||||
"# <STREET>Elm Street</STREET>",
|
||||
"# </ADR>",
|
||||
"# </vCard>",
|
||||
"# ",
|
||||
"# is translated to:",
|
||||
"vcard:",
|
||||
" fn: Conferences",
|
||||
" adr:",
|
||||
" -",
|
||||
" work: true",
|
||||
" street: Elm Street"]}}
|
||||
],
|
||||
example =>
|
||||
[{?T("Example of configuration that uses flat nodes as default, "
|
||||
"and allows use of flat, hometree and pep nodes:"),
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_pubsub:",
|
||||
" access_createnode: pubsub_createnode",
|
||||
" max_subscriptions_node: 100",
|
||||
|
@ -4534,14 +4534,12 @@ mod_doc() ->
|
|||
" max_items: 4",
|
||||
" plugins:",
|
||||
" - flat",
|
||||
" - pep",
|
||||
" ..."]},
|
||||
" - pep"]},
|
||||
{?T("Using relational database requires using mod_pubsub with "
|
||||
"db_type 'sql'. Only flat, hometree and pep plugins supports "
|
||||
"SQL. The following example shows previous configuration "
|
||||
"with SQL usage:"),
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_pubsub:",
|
||||
" db_type: sql",
|
||||
" access_createnode: pubsub_createnode",
|
||||
|
@ -4549,6 +4547,5 @@ mod_doc() ->
|
|||
" last_item_cache: false",
|
||||
" plugins:",
|
||||
" - flat",
|
||||
" - pep",
|
||||
" ..."]}
|
||||
" - pep"]}
|
||||
]}.
|
||||
|
|
|
@ -671,7 +671,7 @@ mod_doc() ->
|
|||
{captcha_protected,
|
||||
#{value => "true | false",
|
||||
desc =>
|
||||
?T("Protect registrations with http://../basic/#captcha[CAPTCHA]. "
|
||||
?T("Protect registrations with _`basic.md#captcha|CAPTCHA`_. "
|
||||
"The default is 'false'.")}},
|
||||
{ip_access,
|
||||
#{value => ?T("AccessName"),
|
||||
|
|
|
@ -615,7 +615,7 @@ mod_doc() ->
|
|||
?T("- Register a new account on the server."), "",
|
||||
?T("- Change the password from 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 enable this feature, configure the "
|
||||
"top-level _`captcha_cmd`_ and "
|
||||
|
@ -625,7 +625,7 @@ mod_doc() ->
|
|||
"important to include the last / character in the URL, "
|
||||
"otherwise the subpages URL will be incorrect."), "",
|
||||
?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'."),
|
||||
?T("The module depends on _`mod_register`_ where all the "
|
||||
"configuration is performed.")],
|
||||
|
|
|
@ -1410,8 +1410,6 @@ mod_doc() ->
|
|||
?T("Same as top-level _`cache_life_time`_ option, but applied to this module only.")}}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_roster:",
|
||||
" versioning: true",
|
||||
" store_current_id: false",
|
||||
" ..."]}.
|
||||
" store_current_id: false"]}.
|
||||
|
|
|
@ -93,14 +93,12 @@ mod_doc() ->
|
|||
"is 'all'.")}}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_s2s_dialback:",
|
||||
" access:",
|
||||
" allow:",
|
||||
" server: legacy.domain.tld",
|
||||
" server: invalid-cert.example.org",
|
||||
" deny: all",
|
||||
" ..."]}.
|
||||
" deny: all"]}.
|
||||
|
||||
s2s_in_features(Acc, _) ->
|
||||
[#db_feature{errors = true}|Acc].
|
||||
|
|
|
@ -92,9 +92,7 @@ mod_doc() ->
|
|||
"to which stanzas will be forwarded.")}}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_service_log:",
|
||||
" loggers:",
|
||||
" - xmpp-server.tld",
|
||||
" - component.domain.tld",
|
||||
" ..."]}.
|
||||
" - component.domain.tld"]}.
|
||||
|
|
|
@ -678,10 +678,10 @@ mod_doc() ->
|
|||
?T("- Connection parameters: The module also accepts the "
|
||||
"connection parameters, all of which default to the top-level "
|
||||
"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."), "",
|
||||
?T("Check also the http://../ldap/#ldap-examples"
|
||||
"[Configuration examples] section to get details about "
|
||||
?T("Check also the _`ldap.md#ldap-examples|Configuration examples`_ "
|
||||
"section to get details about "
|
||||
"retrieving the roster, "
|
||||
"and configuration examples including Flat DIT and Deep DIT.")],
|
||||
opts =>
|
||||
|
@ -710,13 +710,13 @@ mod_doc() ->
|
|||
"name of roster entries (usually full names of people in "
|
||||
"the roster). See also the parameters 'ldap_userdesc' and "
|
||||
"'ldap_useruid'. For more information check the LDAP "
|
||||
"http://../ldap/#filters[Filters] section.")}},
|
||||
"_`ldap.md#filters|Filters`_ section.")}},
|
||||
{ldap_filter,
|
||||
#{desc =>
|
||||
?T("Additional filter which is AND-ed together "
|
||||
"with \"User Filter\" and \"Group Filter\". "
|
||||
"For more information check the LDAP "
|
||||
"http://../ldap/#filters[Filters] section.")}},
|
||||
"_`ldap.md#filters|Filters`_ section.")}},
|
||||
%% Attributes:
|
||||
{ldap_groupattr,
|
||||
#{desc =>
|
||||
|
@ -774,8 +774,7 @@ mod_doc() ->
|
|||
#{desc =>
|
||||
?T("A regex for extracting user ID from the value of the "
|
||||
"attribute named by 'ldap_memberattr'. Check the LDAP "
|
||||
"http://../ldap/#control-parameters"
|
||||
"[Control Parameters] section.")}},
|
||||
"_`ldap.md#control-parameters|Control Parameters`_ section.")}},
|
||||
{ldap_auth_check,
|
||||
#{value => "true | false",
|
||||
desc =>
|
||||
|
|
|
@ -383,7 +383,7 @@ mod_doc() ->
|
|||
?T("NOTE: It is not enough to just load this module. "
|
||||
"You should also configure listeners and DNS records "
|
||||
"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.")],
|
||||
opts =>
|
||||
[{always_record_route,
|
||||
|
@ -437,7 +437,6 @@ mod_doc() ->
|
|||
"cannot omit \"port\" or \"scheme\").")}}],
|
||||
example =>
|
||||
["modules:",
|
||||
" ...",
|
||||
" mod_sip:",
|
||||
" always_record_route: false",
|
||||
" record_route: \"sip:example.com;lr\"",
|
||||
|
@ -449,7 +448,6 @@ mod_doc() ->
|
|||
" via:",
|
||||
" - tls://sip-tls.example.com:5061",
|
||||
" - tcp://sip-tcp.example.com:5060",
|
||||
" - udp://sip-udp.example.com:5060",
|
||||
" ..."]}.
|
||||
" - udp://sip-udp.example.com:5060"]}.
|
||||
|
||||
-endif.
|
||||
|
|
|
@ -159,8 +159,8 @@ mod_doc() ->
|
|||
?T("This module allows XMPP clients to discover STUN/TURN services "
|
||||
"and to obtain temporary credentials for using them as per "
|
||||
"https://xmpp.org/extensions/xep-0215.html"
|
||||
"[XEP-0215: External Service Discovery]. "
|
||||
"This module is included in ejabberd since version 20.04."),
|
||||
"[XEP-0215: External Service Discovery]."),
|
||||
note => "added in 20.04",
|
||||
opts =>
|
||||
[{access,
|
||||
#{value => ?T("AccessName"),
|
||||
|
|
|
@ -667,18 +667,21 @@ mod_doc() ->
|
|||
"of vCard. Since the representation has no attributes, "
|
||||
"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"]}]}}]}.
|
||||
["# This XML representation of vCard:",
|
||||
"# ",
|
||||
"# <vCard xmlns='vcard-temp'>",
|
||||
"# <FN>Conferences</FN>",
|
||||
"# <ADR>",
|
||||
"# <WORK/>",
|
||||
"# <STREET>Elm Street</STREET>",
|
||||
"# </ADR>",
|
||||
"# </vCard>",
|
||||
"# ",
|
||||
"# is translated to:",
|
||||
"# ",
|
||||
"vcard:",
|
||||
" fn: Conferences",
|
||||
" adr:",
|
||||
" -",
|
||||
" work: true",
|
||||
" street: Elm Street"]}}]}.
|
||||
|
|
|
@ -48,7 +48,7 @@ write_doap_head()
|
|||
<download-page rdf:resource="https://www.process-one.net/en/ejabberd/downloads/"/>
|
||||
<download-mirror rdf:resource="https://github.com/processone/ejabberd/tags"/>
|
||||
<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"/>
|
||||
<support-forum rdf:resource="xmpp:ejabberd@conference.process-one.net?join"/>
|
||||
<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'
|
||||
doc_url='https://docs.ejabberd.im'
|
||||
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_data_dir="/opt/$rel_name"
|
||||
tmp_dir=$(mktemp -d "/tmp/.$rel_name.XXXXXX")
|
||||
|
|
Loading…
Reference in New Issue