Compare commits
187 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bb28265261 | |||
| 46f33e5051 | |||
| 06669b12e8 | |||
| 1ca126381b | |||
| bf5de81b24 | |||
| d717ffd1a0 | |||
| c271d73dbd | |||
| e1a8980d6c | |||
| ec7ff88dda | |||
| 5b695766ae | |||
| f5b6909cca | |||
| 98d348893b | |||
| c942c31e38 | |||
| 70cbdd1117 | |||
| 1114a35e0a | |||
| d12e5a44b8 | |||
| 34420444db | |||
| 38eb50bf5c | |||
| 6705679cf3 | |||
| 10635bccc9 | |||
| dee0ec50b9 | |||
| 401bdedae8 | |||
| 99e51a2123 | |||
| d43ce53f9a | |||
| f6385fae50 | |||
| 6da1bb5b22 | |||
| 64e1cfcbba | |||
| fbfcebf417 | |||
| d15cf994a2 | |||
| c71887db43 | |||
| 7c634f3615 | |||
| 874b961680 | |||
| 2c1ee698cc | |||
| b0f0dd3227 | |||
| de477f7b6c | |||
| 440ede313b | |||
| 976c6c5e41 | |||
| 7e6d25314d | |||
| cc5c3f7b2c | |||
| 1d62dc4621 | |||
| e2496562f9 | |||
| c4a2f8d64f | |||
| 6c620f6f43 | |||
| af29adb558 | |||
| 3c97775573 | |||
| f953dc3f5e | |||
| 04b431f191 | |||
| 5cd6c524ea | |||
| 37676757e3 | |||
| 1c82daacb2 | |||
| 9f0a5c5ef0 | |||
| 9bb86132c6 | |||
| 2137a4f663 | |||
| c9143dd3d8 | |||
| 66d58504d0 | |||
| 0def333550 | |||
| dea452bdfd | |||
| d504ed8a9b | |||
| 9503beca6c | |||
| dfe4884d16 | |||
| f10f6d176f | |||
| 4e7aa41e3f | |||
| d91812730b | |||
| 54cf37e917 | |||
| 3de803be2f | |||
| 5ca59807d9 | |||
| 5c3b43cd63 | |||
| 1a6baf223c | |||
| 74c9aa8ac0 | |||
| fb16727180 | |||
| 9842b035e3 | |||
| f6b5a52104 | |||
| f650b1e83c | |||
| 03cbc9b004 | |||
| 43cae922f3 | |||
| c5c7e7fc4d | |||
| 0c1cf43519 | |||
| cbbf85c555 | |||
| 56e974ab80 | |||
| 9398052b65 | |||
| 6a8899677d | |||
| 3b34538038 | |||
| 6cf1e05993 | |||
| baf1336761 | |||
| 4f0e426a12 | |||
| d5bf051e79 | |||
| c7c982b67b | |||
| f7f0d3b1fb | |||
| d4ab4d16e8 | |||
| aeed1679d8 | |||
| 6fc67d83f4 | |||
| 06ffe995e1 | |||
| 93bf4d5411 | |||
| 19f2f1fa86 | |||
| 5e94fdcfd5 | |||
| ec6f5c17c8 | |||
| 758c87f564 | |||
| b6dde41000 | |||
| 648c83ea03 | |||
| cc4cacdb5e | |||
| c84cdb6bfb | |||
| a7ea8ecc29 | |||
| 24839ad4be | |||
| e11b89efd2 | |||
| 4566c82a85 | |||
| 024f3be13a | |||
| af2dae2ff3 | |||
| d92372af70 | |||
| a70381e7c1 | |||
| 21c0aaf417 | |||
| ce10bed5d8 | |||
| eb12c1db1b | |||
| 276c11b04a | |||
| 0255562d93 | |||
| 26a7107cd5 | |||
| 89918865b0 | |||
| f2cbe7f3c2 | |||
| 83418c3195 | |||
| 5592f8df1a | |||
| 4311a5646f | |||
| c103182bc7 | |||
| 243697e25a | |||
| dfc6e7833c | |||
| e0b4ea6652 | |||
| 503ad8e905 | |||
| d26a9d583f | |||
| 0b1800fc10 | |||
| 92d7be4338 | |||
| ce89ff07e7 | |||
| 5c1b72853f | |||
| 5d38143c3f | |||
| 353c68cfa6 | |||
| 9087e72f0e | |||
| 4ad4a3bf24 | |||
| 17160e9379 | |||
| ed84fee2bf | |||
| 25ddd7b152 | |||
| 5ad709a2e2 | |||
| 32ace140df | |||
| bc063b8f97 | |||
| 03681cd68d | |||
| fe8b98a1f3 | |||
| a193128543 | |||
| 6a10048339 | |||
| 9087dd9210 | |||
| a08c038c9c | |||
| e191bc253d | |||
| c8d866d01a | |||
| 01d25c5c37 | |||
| 25d6b3d1c8 | |||
| 639183a783 | |||
| 80477f71b3 | |||
| d49b50a055 | |||
| 54592202ef | |||
| be60263d47 | |||
| 441eca75b2 | |||
| 266dd98521 | |||
| b0e74464b1 | |||
| daaaf221cb | |||
| e2779e1155 | |||
| 514bab47a2 | |||
| fbea49dbab | |||
| 5cf9b052dd | |||
| 3b50cd36ba | |||
| ed678f58d3 | |||
| aa8d800577 | |||
| a1cfae8c98 | |||
| c6513fcfc6 | |||
| d3d50b456e | |||
| 196eca2dc4 | |||
| 6fcfe80a65 | |||
| 992d998695 | |||
| e58920b2c6 | |||
| 0804f46095 | |||
| 662d9a0ed0 | |||
| d957404adc | |||
| 779c98e314 | |||
| 8de270cdaf | |||
| b71a481e63 | |||
| 5a5e5bbdc6 | |||
| 3b3d3eaa04 | |||
| 811fea14d8 | |||
| 9794b4f778 | |||
| b73a9234d9 | |||
| c9b3d32031 | |||
| 4542bcb57f | |||
| 1072f593f1 |
@@ -1,4 +1 @@
|
||||
# Update the VARIANT arg to pick an Elixir version: latest, 1.11.4, etc.
|
||||
ARG VARIANT=latest
|
||||
|
||||
FROM ghcr.io/processone/elixir:${VARIANT}
|
||||
FROM ghcr.io/processone/devcontainer:latest
|
||||
|
||||
@@ -1,48 +1,7 @@
|
||||
{
|
||||
"name": "ejabberd",
|
||||
// "dockerComposeFile": "docker-compose.yml",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"args": {
|
||||
"VARIANT": "latest" // 1.11.4
|
||||
}
|
||||
},
|
||||
"workspaceFolder": "/workspace",
|
||||
|
||||
// Set *default* container specific settings.json values on container create.
|
||||
"settings": {
|
||||
"terminal.integrated.defaultProfile.linux": "/bin/zsh",
|
||||
},
|
||||
|
||||
// Add the IDs of extensions you want installed when the container is created.
|
||||
"extensions": ["pgourlain.erlang", "jakebecker.elixir-ls"],
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
"forwardPorts": [5222, 5280, 5269],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
// "postCreateCommand": "sh .devcontainer/post-create.sh",
|
||||
|
||||
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
|
||||
"remoteUser": "vscode",
|
||||
"portsAttributes": {
|
||||
"1883": {
|
||||
"label": "MQTT"
|
||||
},
|
||||
"5222": {
|
||||
"label": "XMPP C2S"
|
||||
},
|
||||
"5223": {
|
||||
"label": "Legacy XMPP C2S"
|
||||
},
|
||||
"5269": {
|
||||
"label": "XMPP S2S"
|
||||
},
|
||||
"5280": {
|
||||
"label": "ejabberd HTTP"
|
||||
},
|
||||
"5443": {
|
||||
"label": "ejabberd HTTPS"
|
||||
}
|
||||
}
|
||||
"build": {"dockerfile": "Dockerfile"},
|
||||
"extensions": ["erlang-ls.erlang-ls"],
|
||||
"postCreateCommand": ".devcontainer/prepare-container.sh",
|
||||
"remoteUser": "vscode"
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
ejabberd:
|
||||
image: ejabberd/ecs
|
||||
ports:
|
||||
- 5222:5222
|
||||
- 5223:5223
|
||||
- 5269:5269
|
||||
- 5280:5280
|
||||
- 1883:1883
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
echo "export PATH=/workspaces/ejabberd/_build/relive:$PATH" >>$HOME/.bashrc
|
||||
echo "COOKIE" >$HOME/.erlang.cookie
|
||||
chmod 400 $HOME/.erlang.cookie
|
||||
@@ -6,8 +6,7 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Before creating a ticket, please consider if this should fit the discussion forum better:
|
||||
https://github.com/processone/ejabberd/discussions
|
||||
Before creating a ticket, please consider if this should fit the [discussion forum](https://github.com/processone/ejabberd/discussions) better.
|
||||
|
||||
## Environment
|
||||
|
||||
|
||||
@@ -7,17 +7,20 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Before creating a ticket, please consider if this should fit the discussion forum better:
|
||||
https://github.com/processone/ejabberd/discussions
|
||||
Before creating a ticket, please consider if this should fit the [discussion forum](https://github.com/processone/ejabberd/discussions) better.
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when...
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
||||
+138
-83
@@ -1,55 +1,103 @@
|
||||
FROM alpine:3.15.4 AS build
|
||||
ARG VERSION=master
|
||||
#' Define default build variables
|
||||
ARG ALPINE_VSN='3.17'
|
||||
ARG UID='9000'
|
||||
ARG USER='ejabberd'
|
||||
ARG HOME="opt/$USER"
|
||||
ARG METHOD='direct'
|
||||
ARG BUILD_DIR="/$USER"
|
||||
ARG VERSION='master'
|
||||
|
||||
RUN apk upgrade --update musl \
|
||||
&& apk add \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
build-base \
|
||||
curl \
|
||||
elixir \
|
||||
erlang-odbc \
|
||||
erlang-reltool \
|
||||
expat-dev \
|
||||
file \
|
||||
gd-dev \
|
||||
git \
|
||||
jpeg-dev \
|
||||
libpng-dev \
|
||||
libwebp-dev \
|
||||
linux-pam-dev \
|
||||
openssl \
|
||||
openssl-dev \
|
||||
sqlite-dev \
|
||||
yaml-dev \
|
||||
zlib-dev
|
||||
################################################################################
|
||||
#' METHOD='direct' - build and install ejabberd directly from source
|
||||
FROM alpine:${ALPINE_VSN} AS direct
|
||||
|
||||
RUN apk -U add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
build-base \
|
||||
curl \
|
||||
elixir \
|
||||
erlang-odbc \
|
||||
erlang-reltool \
|
||||
expat-dev \
|
||||
file \
|
||||
gd-dev \
|
||||
git \
|
||||
jpeg-dev \
|
||||
libpng-dev \
|
||||
libwebp-dev \
|
||||
linux-pam-dev \
|
||||
openssl-dev \
|
||||
sqlite-dev \
|
||||
yaml-dev \
|
||||
zlib-dev
|
||||
|
||||
RUN mix local.hex --force \
|
||||
&& mix local.rebar --force
|
||||
|
||||
COPY . ./ejabberd
|
||||
|
||||
WORKDIR ejabberd
|
||||
ARG BUILD_DIR
|
||||
COPY / $BUILD_DIR/
|
||||
|
||||
WORKDIR $BUILD_DIR
|
||||
RUN mv .github/container/ejabberdctl.template . \
|
||||
&& ./autogen.sh \
|
||||
&& ./configure --with-rebar=mix --enable-all \
|
||||
&& make deps \
|
||||
&& make rel
|
||||
|
||||
RUN cp -r _build/prod/rel/ejabberd/ /opt/ejabberd-$VERSION \
|
||||
&& mkdir -p /opt/ejabberd \
|
||||
&& mv /opt/ejabberd-$VERSION/conf /opt/ejabberd/conf
|
||||
WORKDIR /rootfs
|
||||
ARG VERSION
|
||||
ARG HOME
|
||||
RUN mkdir -p $HOME $HOME-$VERSION \
|
||||
&& cp -r $BUILD_DIR/_build/prod/rel/ejabberd/* $HOME-$VERSION \
|
||||
&& mv $HOME-$VERSION/conf $HOME/conf
|
||||
|
||||
RUN BINPATH=$(dirname $(find /opt -name msgs))/bin/ \
|
||||
&& mkdir -p $BINPATH \
|
||||
&& cp tools/captcha*.sh $BINPATH
|
||||
RUN cp -p $BUILD_DIR/tools/captcha*.sh $HOME-$VERSION/lib
|
||||
|
||||
RUN [ ! -d .ejabberd-modules ] || cp -r .ejabberd-modules /opt/ejabberd/
|
||||
RUN find "$HOME-$VERSION/bin" -name 'ejabberd' -delete \
|
||||
&& find "$HOME-$VERSION/releases" -name 'COOKIE' -delete
|
||||
|
||||
RUN export PEM=/opt/ejabberd/conf/server.pem \
|
||||
&& curl -o "/opt/ejabberd/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' \
|
||||
RUN wget -O "$HOME/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' \
|
||||
&& sed -i '/^loglevel:/a \ \
|
||||
\nca_file: /opt/ejabberd/conf/cacert.pem \
|
||||
\ncertfiles: \
|
||||
\n - /opt/ejabberd/conf/server.pem' "$HOME/conf/ejabberd.yml"
|
||||
|
||||
################################################################################
|
||||
#' METHOD='package' - install ejabberd from binary tarball package
|
||||
FROM alpine:${ALPINE_VSN} AS package
|
||||
COPY tarballs/ejabberd-*-linux-musl-*.tar.gz /tmp/
|
||||
WORKDIR /rootfs
|
||||
ARG HOME
|
||||
RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \
|
||||
&& mkdir -p $home_root_dir \
|
||||
&& ARCH=$(uname -m | sed -e 's/x86_64/x64/;s/aarch64/arm64/') \
|
||||
&& tar -xzf /tmp/ejabberd-*-linux-musl-$ARCH.tar.gz -C $home_root_dir
|
||||
|
||||
################################################################################
|
||||
#' Prepare ejabberd for runtime
|
||||
FROM ${METHOD} AS ejabberd
|
||||
RUN apk -U add --no-cache \
|
||||
git \
|
||||
libcap-utils \
|
||||
openssl
|
||||
|
||||
WORKDIR /rootfs
|
||||
ARG HOME
|
||||
RUN mkdir -p usr/local/bin $HOME/conf $HOME/database $HOME/logs $HOME/upload
|
||||
|
||||
ARG BUILD_DIR
|
||||
RUN if [ ! -d $HOME/.ejabberd-modules ]; \
|
||||
then \
|
||||
if [ -d $BUILD_DIR/.ejabberd-modules ]; \
|
||||
then cp -r $BUILD_DIR/.ejabberd-modules $HOME; \
|
||||
else git clone https://github.com/processone/ejabberd-contrib --depth 1 \
|
||||
$HOME/.ejabberd-modules/sources/ejabberd-contrib; \
|
||||
fi \
|
||||
fi
|
||||
|
||||
RUN export PEM=$HOME/conf/server.pem \
|
||||
&& openssl req -x509 \
|
||||
-batch \
|
||||
-nodes \
|
||||
@@ -57,63 +105,70 @@ RUN export PEM=/opt/ejabberd/conf/server.pem \
|
||||
-keyout $PEM \
|
||||
-out $PEM \
|
||||
-days 3650 \
|
||||
-subj "/CN=localhost" \
|
||||
&& sed -i '/^loglevel:/a \ \
|
||||
\nca_file: /opt/ejabberd/conf/cacert.pem \
|
||||
\ncertfiles: \
|
||||
\n - /opt/ejabberd/conf/server.pem' "/opt/ejabberd/conf/ejabberd.yml"
|
||||
-subj "/CN=localhost"
|
||||
|
||||
FROM alpine:3.15.4
|
||||
ENV HOME=/opt/ejabberd
|
||||
ARG VERSION=master
|
||||
RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \
|
||||
&& setcap 'cap_net_bind_service=+ep' $(find $home_root_dir -name beam.smp) \
|
||||
&& echo -e \
|
||||
"#!/bin/sh \
|
||||
\n[ -z \$ERLANG_NODE_ARG ] && export ERLANG_NODE_ARG=ejabberd@localhost \
|
||||
\nexport CONFIG_DIR=/$HOME/conf \
|
||||
\nexport LOGS_DIR=/$HOME/logs \
|
||||
\nexport SPOOL_DIR=/$HOME/database \
|
||||
\nexec /$(find $home_root_dir -name ejabberdctl) \"\$@\"" \
|
||||
> usr/local/bin/ejabberdctl \
|
||||
&& chmod +x usr/local/bin/* \
|
||||
&& scanelf --needed --nobanner --format '%n#p' --recursive $home_root_dir \
|
||||
| tr ',' '\n' | sort -u | awk 'system("[ -e $home_root_dir" $1 " ]") == 0 { next } \
|
||||
{ print "so:" $1 }' > /tmp/runDeps
|
||||
|
||||
RUN apk upgrade --update musl \
|
||||
&& apk add \
|
||||
expat \
|
||||
freetds \
|
||||
gd \
|
||||
jpeg \
|
||||
libgd \
|
||||
libpng \
|
||||
libstdc++ \
|
||||
libwebp \
|
||||
linux-pam \
|
||||
ncurses-libs \
|
||||
openssl \
|
||||
sqlite \
|
||||
sqlite-libs \
|
||||
unixodbc \
|
||||
yaml \
|
||||
zlib \
|
||||
&& ln -fs /usr/lib/libtdsodbc.so.0 /usr/lib/libtdsodbc.so \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
ARG UID
|
||||
RUN chown -R $UID:$UID $HOME
|
||||
|
||||
COPY --from=build /opt /opt
|
||||
RUN echo -e \
|
||||
"#!/bin/sh \
|
||||
\n[ -z \$ERLANG_NODE_ARG ] && export ERLANG_NODE_ARG=ejabberd@localhost \
|
||||
\nexport CONFIG_DIR=/opt/ejabberd/conf \
|
||||
\nexport LOGS_DIR=/opt/ejabberd/logs \
|
||||
\nexport SPOOL_DIR=/opt/ejabberd/database \
|
||||
\nexec /opt/ejabberd-$VERSION/bin/ejabberdctl \"\$@\"" > /usr/local/bin/ejabberdctl \
|
||||
&& chmod +x /usr/local/bin/ejabberdctl
|
||||
################################################################################
|
||||
#' METHOD='package' - install runtime dependencies
|
||||
FROM alpine:${ALPINE_VSN} AS runtime-package
|
||||
RUN apk -U upgrade --available --no-cache \
|
||||
&& apk add --no-cache \
|
||||
libcap2 \
|
||||
tini
|
||||
|
||||
RUN addgroup ejabberd -g 9000 \
|
||||
&& adduser -s /bin/sh -D -G ejabberd ejabberd -u 9000 \
|
||||
&& mkdir -p $HOME/conf $HOME/database $HOME/logs $HOME/upload \
|
||||
&& chown -R ejabberd:ejabberd $HOME
|
||||
################################################################################
|
||||
#' METHOD='direct' - install runtime dependencies
|
||||
FROM runtime-package AS runtime-direct
|
||||
COPY --from=ejabberd /tmp/runDeps /tmp/runDeps
|
||||
RUN apk add --no-cache \
|
||||
$(cat /tmp/runDeps)
|
||||
|
||||
################################################################################
|
||||
#' Finalize runtime environment
|
||||
FROM runtime-${METHOD} AS runtime
|
||||
ARG USER
|
||||
ARG UID
|
||||
ARG HOME
|
||||
RUN addgroup $USER -g $UID \
|
||||
&& adduser -s /sbin/nologin -D -u $UID -h /$HOME -G $USER $USER
|
||||
|
||||
################################################################################
|
||||
#' Build together production image
|
||||
FROM scratch AS prod
|
||||
ARG USER
|
||||
ARG HOME
|
||||
|
||||
COPY --from=runtime / /
|
||||
COPY --from=ejabberd /rootfs /
|
||||
|
||||
HEALTHCHECK \
|
||||
--interval=1m \
|
||||
--timeout=5s \
|
||||
--start-period=5s \
|
||||
--retries=10 \
|
||||
CMD /usr/local/bin/ejabberdctl status
|
||||
CMD ejabberdctl status
|
||||
|
||||
WORKDIR $HOME
|
||||
USER ejabberd
|
||||
VOLUME ["$HOME/conf", "$HOME/database", "$HOME/logs", "$HOME/upload"]
|
||||
WORKDIR /$HOME
|
||||
USER $USER
|
||||
VOLUME ["/$HOME"]
|
||||
EXPOSE 1883 4369-4399 5210 5222 5269 5280 5443
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/ejabberdctl"]
|
||||
ENTRYPOINT ["/sbin/tini","--","/usr/local/bin/ejabberdctl"]
|
||||
CMD ["foreground"]
|
||||
|
||||
@@ -17,8 +17,8 @@ ERTS_VSN="{{erts_vsn}}"
|
||||
ERL="{{erl}}"
|
||||
IEX="{{bindir}}/iex"
|
||||
EPMD="{{epmd}}"
|
||||
[ -z "$ERLANG_COOKIE" ] && ERL_OPTIONS="-setcookie $(cat "${SCRIPT_DIR%/*}/releases/COOKIE")"
|
||||
[ -n "$ERLANG_COOKIE" ] && [ ! -f "$HOME"/.erlang.cookie ] && echo "$ERLANG_COOKIE" > "$HOME"/.erlang.cookie && chmod 400 "$HOME"/.erlang.cookie
|
||||
COOKIE_FILE="$HOME"/.erlang.cookie
|
||||
[ -n "$ERLANG_COOKIE" ] && [ ! -f "$COOKIE_FILE" ] && echo "$ERLANG_COOKIE" > "$COOKIE_FILE" && chmod 400 "$COOKIE_FILE"
|
||||
|
||||
# check the proper system user is used
|
||||
case $(id -un) in
|
||||
|
||||
@@ -1,229 +0,0 @@
|
||||
name: CI (19.3)
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- '**.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- '**.md'
|
||||
|
||||
jobs:
|
||||
|
||||
tests:
|
||||
name: Tests
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['19.3']
|
||||
runs-on: ubuntu-18.04
|
||||
services:
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Get specific Erlang/OTP
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- name: Get a compatible Rebar3
|
||||
run: |
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
|
||||
chmod +x rebar3
|
||||
|
||||
- name: Prepare databases
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo systemctl start postgresql.service
|
||||
mysql -u root -proot -e "CREATE USER 'ejabberd_test'@'localhost'
|
||||
IDENTIFIED BY 'ejabberd_test';"
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
mysql -u root -proot ejabberd_test < sql/mysql.sql
|
||||
pg_isready
|
||||
sudo -u postgres psql -c "CREATE USER ejabberd_test
|
||||
WITH PASSWORD 'ejabberd_test';"
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -f sql/pg.sql
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get -y purge libgd3 nginx
|
||||
sudo apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Prepare rebar
|
||||
run: |
|
||||
echo '{xref_ignores, [{eldap_filter_yecc, return_error, 2}
|
||||
]}.' >>rebar.config
|
||||
echo '{xref_checks, [deprecated_function_calls, deprecated_functions,
|
||||
locals_not_used, undefined_function_calls, undefined_functions]}.
|
||||
% Disabled: exports_not_used,' >>rebar.config
|
||||
echo '{dialyzer, [{get_warnings, true}, {plt_extra_apps, [cache_tab,
|
||||
eimp, epam, esip, ezlib, fast_tls, fast_xml, fast_yaml,
|
||||
mqtree, p1_acme, p1_mysql, p1_oauth2, p1_pgsql, p1_utils, pkix,
|
||||
sqlite3, stringprep, stun, xmpp, yconf]} ]}.' >>rebar.config
|
||||
echo '{ct_extra_params, "-verbosity 20"}.' >>rebar.config
|
||||
echo "{ct_opts, [{verbosity, 20}, {keep_logs, 20}]}." >>rebar.config
|
||||
|
||||
- name: Remove syntax_tools from release
|
||||
run: sed -i 's|, syntax_tools||g' src/ejabberd.app.src.script
|
||||
|
||||
- name: Cache rebar
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=./rebar3 \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all \
|
||||
--disable-elixir \
|
||||
--disable-mssql \
|
||||
--disable-odbc
|
||||
make update
|
||||
make
|
||||
|
||||
- run: make install -s
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
- run: make dialyzer
|
||||
|
||||
- name: Check Production Release
|
||||
run: |
|
||||
make rel
|
||||
RE=_build/prod/rel/ejabberd
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
|
||||
- name: Check Development Release
|
||||
run: |
|
||||
make dev
|
||||
RE=_build/dev/rel/ejabberd
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
|
||||
- name: Run tests
|
||||
id: ct
|
||||
run: |
|
||||
(cd priv && ln -sf ../sql)
|
||||
COMMIT=`echo $GITHUB_SHA | cut -c 1-7`
|
||||
DATE=`date +%s`
|
||||
REF_NAME=`echo $GITHUB_REF_NAME | tr "/" "_"`
|
||||
NODENAME=$DATE@$GITHUB_RUN_NUMBER-$GITHUB_ACTOR-$REF_NAME-$COMMIT
|
||||
LABEL=`git show -s --format=%s | cut -c 1-30`
|
||||
./rebar3 ct --name $NODENAME --label "$LABEL"
|
||||
./rebar3 cover
|
||||
|
||||
- name: Check results
|
||||
if: always() && (steps.ct.outcome != 'skipped' || steps.ct2.outcome != 'skipped')
|
||||
id: ctresults
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
ln `find logs/ -name suite.log` logs/suite.log
|
||||
grep 'TEST COMPLETE' logs/suite.log
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: failure() && steps.ctresults.outcome == 'failure'
|
||||
run: |
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Upload test logs
|
||||
if: always() && steps.ct.outcome == 'failure' && github.repository == 'processone/ejabberd'
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
publish_dir: _build/test
|
||||
exclude_assets: '.github,lib,plugins'
|
||||
external_repository: processone/ecil
|
||||
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
keep_files: true
|
||||
|
||||
- name: View ECIL address
|
||||
if: always() && steps.ct.outcome == 'failure' && github.repository == 'processone/ejabberd'
|
||||
run: |
|
||||
CTRUN=`ls -la _build/test/logs/last | sed 's|.*-> ||'`
|
||||
echo "::notice::View CT results: https://processone.github.io/ecil/logs/$CTRUN/"
|
||||
|
||||
- name: Prepare new schema
|
||||
run: |
|
||||
[[ -d logs ]] && rm -rf logs
|
||||
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
|
||||
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "DROP DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
mysql -u root -proot ejabberd_test < sql/mysql.new.sql
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -f sql/pg.new.sql
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
||||
- run: CT_BACKENDS=mysql,pgsql make test
|
||||
id: ctnewschema
|
||||
- name: Check results
|
||||
if: always() && steps.ctnewschema.outcome != 'skipped'
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
ln `find logs/ -name suite.log` logs/suite.log
|
||||
grep 'TEST COMPLETE' logs/suite.log
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
- name: View logs failures
|
||||
if: failure() && steps.ctnewschema.outcome != 'skipped'
|
||||
run: |
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
+81
-14
@@ -25,7 +25,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['20.0', '21.3', '24.3', '25']
|
||||
otp: ['20.0', '25.3', '26.0-rc3']
|
||||
runs-on: ubuntu-20.04
|
||||
services:
|
||||
redis:
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Test shell scripts
|
||||
if: matrix.otp == 25
|
||||
if: matrix.otp == '25.3'
|
||||
run: |
|
||||
shellcheck test/ejabberd_SUITE_data/gencerts.sh
|
||||
shellcheck tools/captcha.sh
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
shellcheck -x ejabberdctl.template
|
||||
|
||||
- name: Get specific Erlang/OTP
|
||||
if: matrix.otp != 25
|
||||
if: matrix.otp != '25.3'
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
@@ -58,23 +58,34 @@ jobs:
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
|
||||
chmod +x rebar3
|
||||
|
||||
- name: Install MS SQL Server
|
||||
run: |
|
||||
docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=ejabberd_Test1" \
|
||||
-v $(pwd)/test/docker/db/mssql/initdb/initdb_mssql.sql:/initdb_mssql.sql:ro \
|
||||
-v $(pwd)/sql/mssql.sql:/mssql.sql:ro \
|
||||
-v $(pwd)/sql/mssql.new.sql:/mssql.new.sql:ro \
|
||||
-p 1433:1433 --name ejabberd-mssql "mcr.microsoft.com/mssql/server:2019-latest"
|
||||
sleep 10
|
||||
|
||||
- name: Prepare databases
|
||||
run: |
|
||||
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test -i /mssql.sql
|
||||
sudo systemctl start mysql.service
|
||||
sudo systemctl start postgresql.service
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "CREATE USER 'ejabberd_test'@'localhost'
|
||||
IDENTIFIED BY 'ejabberd_test';"
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
mysql -u root -proot ejabberd_test < sql/mysql.sql
|
||||
mysql -u ejabberd_test -pejabberd_test ejabberd_test < sql/mysql.sql
|
||||
pg_isready
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "CREATE USER ejabberd_test
|
||||
WITH PASSWORD 'ejabberd_test';"
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -f sql/pg.sql
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
PGPASSWORD="ejabberd_test" psql -h localhost -U ejabberd_test ejabberd_test -f sql/pg.sql
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
@@ -100,8 +111,7 @@ jobs:
|
||||
eimp, epam, esip, ezlib, fast_tls, fast_xml, fast_yaml,
|
||||
mqtree, p1_acme, p1_mysql, p1_oauth2, p1_pgsql, p1_utils, pkix,
|
||||
sqlite3, stringprep, stun, xmpp, yconf]} ]}.' >>rebar.config
|
||||
echo '{ct_extra_params, "-verbosity 20"}.' >>rebar.config
|
||||
echo "{ct_opts, [{verbosity, 20}, {keep_logs, 20}]}." >>rebar.config
|
||||
echo "{ct_opts, [{keep_logs, 20}]}." >>rebar.config
|
||||
|
||||
- name: Remove syntax_tools from release
|
||||
run: sed -i 's|, syntax_tools||g' src/ejabberd.app.src.script
|
||||
@@ -114,7 +124,7 @@ jobs:
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Download test logs
|
||||
if: matrix.otp == 25 && github.repository == 'processone/ejabberd'
|
||||
if: matrix.otp == '25.3' && github.repository == 'processone/ejabberd'
|
||||
continue-on-error: true
|
||||
run: |
|
||||
mkdir -p _build/test
|
||||
@@ -139,6 +149,7 @@ jobs:
|
||||
- run: make options
|
||||
- run: make xref
|
||||
- run: make dialyzer
|
||||
if: matrix.otp != '26.0-rc3'
|
||||
|
||||
- name: Check Production Release
|
||||
run: |
|
||||
@@ -166,6 +177,7 @@ jobs:
|
||||
id: ct
|
||||
run: |
|
||||
(cd priv && ln -sf ../sql)
|
||||
sed -i -e 's/ct:pal/ct:log/' test/suite.erl
|
||||
COMMIT=`echo $GITHUB_SHA | cut -c 1-7`
|
||||
DATE=`date +%s`
|
||||
REF_NAME=`echo $GITHUB_REF_NAME | tr "/" "_"`
|
||||
@@ -193,7 +205,7 @@ jobs:
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Send to coveralls
|
||||
if: matrix.otp == 25
|
||||
if: matrix.otp == '25.3'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
@@ -221,20 +233,60 @@ jobs:
|
||||
CTRUN=`ls -la _build/test/logs/last | sed 's|.*-> ||'`
|
||||
echo "::notice::View CT results: https://processone.github.io/ecil/logs/$CTRUN/"
|
||||
|
||||
- name: Check for changes to trigger schema upgrade test
|
||||
uses: dorny/paths-filter@v2
|
||||
id: filter
|
||||
with:
|
||||
filters: |
|
||||
sql:
|
||||
- 'sql/**'
|
||||
- 'src/mod_admin_update_sql.erl'
|
||||
|
||||
- name: Prepare for schema upgrade test
|
||||
id: prepupgradetest
|
||||
if: ${{ steps.filter.outputs.sql == 'true' }}
|
||||
run: |
|
||||
[[ -d logs ]] && rm -rf logs
|
||||
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
|
||||
sed -i 's|update_sql, false|update_sql, true|g' test/suite.erl
|
||||
- name: Run DB tests on upgraded schema (mssql, mysql, pgsql)
|
||||
run: CT_BACKENDS=mssql,mysql,pgsql make test
|
||||
if: always() && steps.prepupgradetest.outcome != 'skipped'
|
||||
id: ctupgradedschema
|
||||
- name: Check results
|
||||
if: always() && steps.ctupgradedschema.outcome != 'skipped'
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
ln `find logs/ -name suite.log` logs/suite.log
|
||||
grep 'TEST COMPLETE' logs/suite.log
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
- name: View logs failures
|
||||
if: failure() && steps.ctupgradedschema.outcome != 'skipped'
|
||||
run: |
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Prepare new schema
|
||||
run: |
|
||||
[[ -d logs ]] && rm -rf logs
|
||||
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
|
||||
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -Q "drop database [ejabberd_test];"
|
||||
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -Q "drop login [ejabberd_test];"
|
||||
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "DROP DATABASE ejabberd_test;"
|
||||
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test -i /mssql.new.sql
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
mysql -u root -proot ejabberd_test < sql/mysql.new.sql
|
||||
mysql -u ejabberd_test -pejabberd_test ejabberd_test < sql/mysql.new.sql
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -f sql/pg.new.sql
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
PGPASSWORD="ejabberd_test" psql -h localhost -U ejabberd_test ejabberd_test -f sql/pg.new.sql
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
@@ -242,7 +294,8 @@ jobs:
|
||||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
||||
- run: CT_BACKENDS=mysql,pgsql make test
|
||||
- name: Run DB tests on new schema (mssql, mysql, pgsql)
|
||||
run: CT_BACKENDS=mssql,mysql,pgsql make test
|
||||
id: ctnewschema
|
||||
- name: Check results
|
||||
if: always() && steps.ctnewschema.outcome != 'skipped'
|
||||
@@ -259,3 +312,17 @@ jobs:
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Upload CT logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ejabberd-ct-logs-${{matrix.otp}}
|
||||
#
|
||||
# Appending the wildcard character ("*") is a trick to make
|
||||
# "ejabberd-packages" the root directory of the uploaded ZIP file:
|
||||
#
|
||||
# https://github.com/actions/upload-artifact#upload-using-multiple-paths-and-exclusions
|
||||
#
|
||||
path: _build/test/logs
|
||||
retention-days: 14
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
name: Container
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '22 2 */6 * *' # every 6 days to avoid gha cache being evicted
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
@@ -21,12 +23,57 @@ jobs:
|
||||
permissions:
|
||||
packages: write
|
||||
steps:
|
||||
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Cache build directory
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/build/
|
||||
key: ${{runner.os}}-ctr-ct-ng-1.25.0
|
||||
|
||||
- name: Get erlang/OTP version for bootstrapping
|
||||
run: |
|
||||
echo "OTP_VSN=$(awk '/^otp_vsn=/ {{gsub(/[^0-9.]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV
|
||||
echo "ELIXIR_VSN=$(awk '/^elixir_vsn=/ {{gsub(/[^0-9.]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV
|
||||
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get -qq install makeself
|
||||
# https://github.com/crosstool-ng/crosstool-ng/blob/master/testing/docker/ubuntu21.10/Dockerfile
|
||||
sudo apt-get -qq install build-essential autoconf bison flex gawk
|
||||
sudo apt-get -qq install help2man libncurses5-dev libtool libtool-bin
|
||||
sudo apt-get -qq install python3-dev texinfo unzip
|
||||
|
||||
- name: Install erlang/OTP
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ env.OTP_VSN }}
|
||||
elixir-version: ${{ env.ELIXIR_VSN }}
|
||||
version-type: strict
|
||||
|
||||
- name: Remove Elixir Matchers
|
||||
run: |
|
||||
echo "::remove-matcher owner=elixir-mixCompileWarning::"
|
||||
echo "::remove-matcher owner=elixir-credoOutputDefault::"
|
||||
echo "::remove-matcher owner=elixir-mixCompileError::"
|
||||
echo "::remove-matcher owner=elixir-mixTestFailure::"
|
||||
echo "::remove-matcher owner=elixir-dialyzerOutputDefault::"
|
||||
|
||||
- name: Build musl-libc based binary archives
|
||||
run: |
|
||||
sed -i "s|targets='.*'|targets='x86_64-linux-musl aarch64-linux-musl'|" tools/make-binaries
|
||||
mv .github/container/ejabberdctl.template .
|
||||
CHECK_DEPS=false tools/make-binaries
|
||||
|
||||
- name: Collect packages
|
||||
run: |
|
||||
mkdir tarballs
|
||||
mv ejabberd-*.tar.gz tarballs
|
||||
|
||||
- name: Checkout ejabberd-contrib
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -34,7 +81,7 @@ jobs:
|
||||
path: .ejabberd-modules/sources/ejabberd-contrib
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v1.14.1
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
@@ -42,11 +89,11 @@ jobs:
|
||||
|
||||
- name: Get git describe
|
||||
id: gitdescribe
|
||||
run: echo "::set-output name=ver::$(git describe --tags)"
|
||||
run: echo "ver=$(git describe --tags)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@v3.8.0
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
labels: |
|
||||
@@ -55,15 +102,16 @@ jobs:
|
||||
org.opencontainers.image.vendor=ProcessOne
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v2.10.0
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
build-args: |
|
||||
METHOD=package
|
||||
VERSION=${{ steps.gitdescribe.outputs.ver }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
- name: Install FPM
|
||||
run: |
|
||||
gem install --no-document --user-install fpm
|
||||
echo $HOME/.gem/ruby/*/bin >> $GITHUB_PATH
|
||||
echo $HOME/.local/share/gem/ruby/*/bin >> $GITHUB_PATH
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
|
||||
@@ -31,8 +31,11 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['19.3', '20.3', '24.3', '25']
|
||||
otp: ['20.3', '25.3', '26']
|
||||
rebar: ['rebar', 'rebar3']
|
||||
exclude:
|
||||
- otp: '26'
|
||||
rebar: 'rebar'
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: erlang:${{ matrix.otp }}
|
||||
@@ -109,19 +112,23 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['21.3', '22.0', '25.0']
|
||||
elixir: ['1.10.3', '1.11.4', '1.12.3', '1.13.0']
|
||||
elixir: ['1.10.3', '1.11.4', '1.12.3', '1.13.0', '1.14.0']
|
||||
exclude:
|
||||
- otp: '21.3'
|
||||
elixir: '1.12.3'
|
||||
- otp: '21.3'
|
||||
elixir: '1.13.0'
|
||||
- otp: '21.3'
|
||||
elixir: '1.14.0'
|
||||
- otp: '22.0'
|
||||
elixir: '1.14.0'
|
||||
- otp: '25.0'
|
||||
elixir: '1.10.3'
|
||||
- otp: '25.0'
|
||||
elixir: '1.11.4'
|
||||
- otp: '25.0'
|
||||
elixir: '1.12.3'
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
.edts
|
||||
*.dump
|
||||
/Makefile
|
||||
/doc
|
||||
/config.log
|
||||
/config.status
|
||||
/config/releases.exs
|
||||
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"erlang-ls.erlang-ls"
|
||||
]
|
||||
}
|
||||
Vendored
+49
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Relive",
|
||||
"type": "erlang",
|
||||
"request": "launch",
|
||||
"runinterminal": [
|
||||
".vscode/relive.sh"
|
||||
],
|
||||
"projectnode": "ejabberd@localhost",
|
||||
"cookie": "COOKIE",
|
||||
"timeout": 300,
|
||||
"cwd": "${workspaceRoot}"
|
||||
},
|
||||
{
|
||||
"name": "Relive (alternate)",
|
||||
"type": "erlang",
|
||||
"request": "launch",
|
||||
"runinterminal": [
|
||||
"./rebar3", "shell",
|
||||
"--apps", "ejabberd",
|
||||
"--config", "rel/relive.config",
|
||||
"--script", "rel/relive.escript",
|
||||
"--name", "ejabberd@localhost",
|
||||
"--setcookie", "COOKIE"
|
||||
],
|
||||
"projectnode": "ejabberd@localhost",
|
||||
"cookie": "COOKIE",
|
||||
"timeout": 300,
|
||||
"cwd": "${workspaceRoot}"
|
||||
},
|
||||
{
|
||||
"name": "Attach",
|
||||
"type": "erlang",
|
||||
"request": "attach",
|
||||
"runinterminal": [
|
||||
"./rebar3", "shell",
|
||||
"--sname", "clean@localhost",
|
||||
"--setcookie", "COOKIE",
|
||||
"--start-clean"
|
||||
],
|
||||
"projectnode": "ejabberd@localhost",
|
||||
"cookie": "COOKIE",
|
||||
"timeout": 300,
|
||||
"cwd": "${workspaceRoot}"
|
||||
}
|
||||
]
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
[ ! -f Makefile ] \
|
||||
&& ./autogen.sh \
|
||||
&& ./configure --with-rebar=./rebar3 \
|
||||
&& make deps
|
||||
|
||||
make relive
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"editor.tabSize": 8,
|
||||
"remote.portsAttributes": {
|
||||
"1883": {"label": "MQTT", "onAutoForward": "silent"},
|
||||
"4369": {"label": "EPMD", "onAutoForward": "silent"},
|
||||
"5222": {"label": "XMPP C2S", "onAutoForward": "silent"},
|
||||
"5223": {"label": "XMPP C2S (legacy)", "onAutoForward": "silent"},
|
||||
"5269": {"label": "XMPP S2S", "onAutoForward": "silent"},
|
||||
"5280": {"label": "HTTP", "onAutoForward": "silent"},
|
||||
"5443": {"label": "HTTPS", "onAutoForward": "silent"},
|
||||
"7777": {"label": "XMPP SOCKS5 (proxy65)", "onAutoForward": "silent"}
|
||||
}
|
||||
}
|
||||
+141
-3
@@ -1,3 +1,141 @@
|
||||
# Version 23.04
|
||||
|
||||
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
|
||||
- `captcha_url` option now accepts `auto` value, and it's the default
|
||||
- `mod_mam`: Add support for XEP-0425: Message Moderation
|
||||
- `mod_mam_sql`: Fix problem with results of mam queries using rsm with max and before
|
||||
- `mod_muc_rtbl`: New module for Real-Time Block List for MUC rooms ([#4017](https://github.com/processone/ejabberd/issues/4017))
|
||||
- `mod_roster`: Set roster name from XEP-0172, or the stored one ([#1611](https://github.com/processone/ejabberd/issues/1611))
|
||||
- `mod_roster`: Preliminary support to store extra elements in subscription request ([#840](https://github.com/processone/ejabberd/issues/840))
|
||||
- `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:
|
||||
- `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:
|
||||
- New command `get_room_history`
|
||||
- Persist `none` role for outcasts
|
||||
- Try to populate room history from mam when unhibernating
|
||||
- Make `mod_muc_room:set_opts` process persistent flag first
|
||||
- Allow passing affiliations and subscribers to `create_room_with_opts` command
|
||||
- Store state in db in `mod_muc:create_room()`
|
||||
- Make subscribers members by default
|
||||
|
||||
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
|
||||
- Change PostgreSQL SERIAL to BIGSERIAL columns
|
||||
- Fix minor SQL schema inconsistencies
|
||||
- Remove unnecessary indexes
|
||||
- New SQL schema migrate fix
|
||||
|
||||
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:
|
||||
- Add support for running tests on MS SQL
|
||||
- Add ability to run tests on upgraded DB
|
||||
- Un-deprecate `ejabberd_config:set_option/2`
|
||||
- Use python3 to run `extauth.py` for tests
|
||||
- Correct README for creating test docker MS SQL DB
|
||||
- Fix TSQLlint warnings in MSSQL test script
|
||||
|
||||
Testing:
|
||||
- Fix Shellcheck warnings in shell scripts
|
||||
- Fix Remark-lint warnings
|
||||
- Fix Prospector and Pylint warnings in test `extauth.py`
|
||||
- Stop testing ejabberd with Erlang/OTP 19.3, as Github Actions no longer supports ubuntu-18.04
|
||||
- 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:
|
||||
- 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:
|
||||
- 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
|
||||
- Detect runtime dependencies automatically
|
||||
- Remove unused Mix stuff: ejabberd script and static COOKIE
|
||||
- Copy captcha scripts to `/opt/ejabberd-*/lib` like the installers
|
||||
- Expose only `HOME` volume, it contains all the required subdirs
|
||||
- ejabberdctl: Don't use `.../releases/COOKIE`, it's no longer included
|
||||
|
||||
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:
|
||||
- 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))
|
||||
- ConverseJS: Don't set i18n option because Converse enforces it instead of browser lang ([#3951](https://github.com/processone/ejabberd/issues/3951))
|
||||
- ConverseJS: Try to redirect access to files `mod_conversejs` to CDN when there is no local copies
|
||||
- ext_mod: compile C files and install them in ejabberd's `priv`
|
||||
- ext_mod: Support to get module status from Elixir modules
|
||||
- make-binaries: reduce log output
|
||||
- make-binaries: Bump zlib version to 1.2.13
|
||||
- MUC: Don't store mucsub presence events in offline storage
|
||||
- MUC: `hibernation_time` is not an option worth storing in room state ([#3946](https://github.com/processone/ejabberd/issues/3946))
|
||||
- Multicast: Jid format when `multicastc` was cached ([#3950](https://github.com/processone/ejabberd/issues/3950))
|
||||
- mysql: Pass `ssl` options to mysql driver
|
||||
- pgsql: Do not set `standard_conforming_strings` to `off` ([#3944](https://github.com/processone/ejabberd/issues/3944))
|
||||
- OAuth: Accept `jid` as a HTTP URL query argument
|
||||
- OAuth: Handle when client is not identified
|
||||
- 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:
|
||||
- `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
|
||||
- Fix bash completion when using Relive or other install methods
|
||||
- Fix portability issue with some shells ([#3970](https://github.com/processone/ejabberd/issues/3970))
|
||||
- Allow admin command to subscribe new users to `members_only` rooms
|
||||
- Use alternative `split/2` function that works with Erlang/OTP as old as 19.3
|
||||
- Silent warning in OTP24 about not specified `cacerts` in SQL connections
|
||||
- Fix compilation warnings with Elixir 1.14
|
||||
|
||||
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:
|
||||
- Add MQTT bridge module
|
||||
- Add support for certificate authentication in MQTT bridge
|
||||
- Implement reload in MQTT bridge
|
||||
- Add support for websockets to MQTT bridge
|
||||
- Recognize ws5/wss5 urls in MQTT bridge
|
||||
- `mqtt_publish`: New hook for MQTT publish event
|
||||
- `mqtt_(un)subscribe`: New hooks for MQTT subscribe & unsubscribe events
|
||||
|
||||
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
|
||||
- Add Elvis default configuration
|
||||
|
||||
# Version 22.10
|
||||
|
||||
Core:
|
||||
@@ -432,7 +570,7 @@ Translations:
|
||||
changed to logging disabled
|
||||
- Increase default shaper limits (this should help with delays for
|
||||
clients that are using jingle)
|
||||
- Fix couple compatibility problems which prevented working on
|
||||
- Fix couple compatibility problems which prevented working on
|
||||
erlang R19
|
||||
- Fix sending presence unavailable when session terminates for
|
||||
clients that only send directed presences (helps with sometimes
|
||||
@@ -447,7 +585,7 @@ Translations:
|
||||
- Add support of ssl connection when connection to mysql
|
||||
database (configured with `sql_ssl: true` option)
|
||||
- Experimental support for cockroachdb when configured
|
||||
with postgres connector
|
||||
with postgres connector
|
||||
- Add cache and optimize queries issued by `mod_shared_roster`,
|
||||
this should greatly improve performance of this module when
|
||||
used with `sql` backend
|
||||
@@ -744,6 +882,6 @@ Translations:
|
||||
# Version 18.12
|
||||
|
||||
* MAM data store compression
|
||||
* Proxy protocol support (http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)
|
||||
* Proxy protocol support
|
||||
* MUC Self-Ping optimization (XEP-0410)
|
||||
* Bookmarks conversion (XEP-0411)
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at conduct@process-one.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at the email address: conduct AT process-one.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
|
||||
+11
-11
@@ -15,20 +15,20 @@ Requirements
|
||||
|
||||
To compile ejabberd you need:
|
||||
|
||||
- GNU Make
|
||||
- GCC
|
||||
- Libexpat ≥ 1.95
|
||||
- Libyaml ≥ 0.1.4
|
||||
- Erlang/OTP ≥ 19.3
|
||||
- OpenSSL ≥ 1.0.0
|
||||
- GNU Make
|
||||
- GCC
|
||||
- Libexpat ≥ 1.95
|
||||
- Libyaml ≥ 0.1.4
|
||||
- Erlang/OTP ≥ 19.3
|
||||
- OpenSSL ≥ 1.0.0
|
||||
|
||||
Other optional libraries are:
|
||||
|
||||
- Zlib ≥ 1.2.3, for Stream Compression support (XEP-0138)
|
||||
- PAM library, for Pluggable Authentication Modules (PAM)
|
||||
- ImageMagick's Convert program and Ghostscript fonts, for CAPTCHA
|
||||
challenges
|
||||
- Elixir ≥ 1.10.3, to support Elixir, and alternative to rebar/rebar3
|
||||
- Zlib ≥ 1.2.3, for Stream Compression support (XEP-0138)
|
||||
- PAM library, for Pluggable Authentication Modules (PAM)
|
||||
- ImageMagick's Convert program and Ghostscript fonts, for CAPTCHA
|
||||
challenges
|
||||
- Elixir ≥ 1.10.3, to support Elixir, and alternative to rebar/rebar3
|
||||
|
||||
If your system splits packages in libraries and development headers,
|
||||
install the development packages too.
|
||||
|
||||
+181
-44
@@ -17,26 +17,25 @@ that includes [XMPP][xmpp] Server, [MQTT][mqtt] Broker and [SIP][sip] Service.
|
||||
[mqtt]: https://mqtt.org/
|
||||
[sip]: https://en.wikipedia.org/wiki/Session_Initiation_Protocol
|
||||
|
||||
This document explains how to use the
|
||||
[ejabberd container images](https://github.com/processone/ejabberd/pkgs/container/ejabberd)
|
||||
available in the GitHub Container Registry,
|
||||
This document explains how to use the `ejabberd` container image available in
|
||||
[ghcr.io/processone/ejabberd](https://github.com/processone/ejabberd/pkgs/container/ejabberd),
|
||||
built using the files in `.github/container/`.
|
||||
|
||||
Alternatively, there are also
|
||||
[ejabberd-ecs Docker images](https://hub.docker.com/r/ejabberd/ecs/)
|
||||
available in Docker Hub,
|
||||
Alternatively, there is also the `ecs` container image available in
|
||||
[docker.io/ejabberd/ecs](https://hub.docker.com/r/ejabberd/ecs/),
|
||||
built using the
|
||||
[docker-ejabberd/ecs](https://github.com/processone/docker-ejabberd/tree/master/ecs)
|
||||
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).
|
||||
|
||||
|
||||
Start ejabberd
|
||||
--------------
|
||||
==============
|
||||
|
||||
### With default configuration
|
||||
## With default configuration
|
||||
|
||||
Start ejabberd in a new container:
|
||||
|
||||
@@ -60,7 +59,7 @@ docker restart ejabberd
|
||||
```
|
||||
|
||||
|
||||
### Start with Erlang console attached
|
||||
## Start with Erlang console attached
|
||||
|
||||
Start ejabberd with an Erlang console attached using the `live` command:
|
||||
|
||||
@@ -71,7 +70,7 @@ docker run --name ejabberd -it -p 5222:5222 ghcr.io/processone/ejabberd live
|
||||
That uses the default configuration file and XMPP domain "localhost".
|
||||
|
||||
|
||||
### Start with your configuration and database
|
||||
## Start with your configuration and database
|
||||
|
||||
Pass a configuration file as a volume
|
||||
and share the local directory to store database:
|
||||
@@ -93,9 +92,9 @@ and the volumes you mount must grant proper rights to that account.
|
||||
|
||||
|
||||
Next steps
|
||||
----------
|
||||
==========
|
||||
|
||||
### Register the administrator account
|
||||
## Register the administrator account
|
||||
|
||||
The default ejabberd configuration does not grant admin privileges
|
||||
to any account,
|
||||
@@ -112,7 +111,7 @@ Then edit conf/ejabberd.yml and add the ACL as explained in
|
||||
[ejabberd Docs: Administration Account](https://docs.ejabberd.im/admin/installation/#administration-account)
|
||||
|
||||
|
||||
### Check ejabberd log files
|
||||
## Check ejabberd log files
|
||||
|
||||
Check the content of the log files inside the container,
|
||||
even if you do not put it on a shared persistent drive:
|
||||
@@ -122,7 +121,7 @@ docker exec -it ejabberd tail -f logs/ejabberd.log
|
||||
```
|
||||
|
||||
|
||||
### Inspect the container files
|
||||
## Inspect the container files
|
||||
|
||||
The container uses Alpine Linux. Start a shell inside the container:
|
||||
|
||||
@@ -131,7 +130,7 @@ docker exec -it ejabberd sh
|
||||
```
|
||||
|
||||
|
||||
### Open ejabberd debug console
|
||||
## Open ejabberd debug console
|
||||
|
||||
Open an interactive debug Erlang console attached to a running ejabberd in a running container:
|
||||
|
||||
@@ -140,7 +139,7 @@ docker exec -it ejabberd ejabberdctl debug
|
||||
```
|
||||
|
||||
|
||||
### CAPTCHA
|
||||
## CAPTCHA
|
||||
|
||||
ejabberd includes two example CAPTCHA scripts.
|
||||
If you want to use any of them, first install some additional required libraries:
|
||||
@@ -154,10 +153,9 @@ Now update your ejabberd configuration file, for example:
|
||||
docker exec -it ejabberd vi conf/ejabberd.yml
|
||||
```
|
||||
|
||||
and add the required options:
|
||||
```
|
||||
captcha_cmd: /opt/ejabberd-22.04/lib/ejabberd-22.04/priv/bin/captcha.sh
|
||||
captcha_url: https://localhost:5443/captcha
|
||||
and add this option:
|
||||
```yaml
|
||||
captcha_cmd: /opt/ejabberd-22.04/lib/captcha.sh
|
||||
```
|
||||
|
||||
Finally, reload the configuration file or restart the container:
|
||||
@@ -165,11 +163,23 @@ Finally, reload the configuration file or restart the container:
|
||||
docker exec ejabberd ejabberdctl reload_config
|
||||
```
|
||||
|
||||
If the CAPTCHA image is not visible, there may be a problem generating it
|
||||
(the ejabberd log file may show some error message);
|
||||
or the image URL may not be correctly detected by ejabberd,
|
||||
in that case you can set the correct URL manually, for example:
|
||||
```yaml
|
||||
captcha_url: https://localhost:5443/captcha
|
||||
```
|
||||
|
||||
For more details about CAPTCHA options, please check the
|
||||
[CAPTCHA](https://docs.ejabberd.im/admin/configuration/basic/#captcha)
|
||||
documentation section.
|
||||
|
||||
|
||||
Advanced Container Configuration
|
||||
--------------------------------
|
||||
================================
|
||||
|
||||
### Ports
|
||||
## Ports
|
||||
|
||||
This container image exposes the ports:
|
||||
|
||||
@@ -182,7 +192,7 @@ This container image exposes the ports:
|
||||
- `5210`: Erlang connectivity when `ERL_DIST_PORT` is set, alternative to EPMD
|
||||
|
||||
|
||||
### Volumes
|
||||
## Volumes
|
||||
|
||||
ejabberd produces two types of data: log files and database spool files (Mnesia).
|
||||
This is the kind of data you probably want to store on a persistent or local drive (at least the database).
|
||||
@@ -203,15 +213,15 @@ It's possible to install additional ejabberd modules using volumes,
|
||||
explains how to install an additional module using docker-compose.
|
||||
|
||||
|
||||
### Commands on start
|
||||
## Commands on start
|
||||
|
||||
The ejabberdctl script reads the `CTL_ON_CREATE` environment variable
|
||||
the first time the docker container is started,
|
||||
the first time the container is started,
|
||||
and reads `CTL_ON_START` every time the container is started.
|
||||
Those variables can contain one ejabberdctl command,
|
||||
or several commands separated with the blankspace and `;` characters.
|
||||
|
||||
Example usage (see full example [docker-compose.yml](https://github.com/processone/docker-ejabberd/issues/64#issuecomment-887741332)):
|
||||
Example usage (or check the [full example](#customized-example)):
|
||||
```yaml
|
||||
environment:
|
||||
- CTL_ON_CREATE=register admin localhost asd
|
||||
@@ -221,7 +231,7 @@ Example usage (see full example [docker-compose.yml](https://github.com/processo
|
||||
```
|
||||
|
||||
|
||||
### Clustering
|
||||
## Clustering
|
||||
|
||||
When setting several containers to form a
|
||||
[cluster of ejabberd nodes](https://docs.ejabberd.im/admin/guide/clustering/),
|
||||
@@ -259,11 +269,10 @@ Example using environment variables (see full example [docker-compose.yml](https
|
||||
```
|
||||
|
||||
|
||||
Generating a Container Image
|
||||
----------------------------
|
||||
Build a Container Image
|
||||
=======================
|
||||
|
||||
This container image includes ejabberd as a standalone OTP release built using Elixir.
|
||||
|
||||
That OTP release is configured with:
|
||||
|
||||
- `mix.exs`: Customize ejabberd release
|
||||
@@ -271,27 +280,18 @@ That OTP release is configured with:
|
||||
- `config/runtime.exs`: Customize ejabberd paths
|
||||
- `ejabberd.yml.template`: ejabberd default config file
|
||||
|
||||
Build ejabberd Community Server base image from ejabberd master on GitHub:
|
||||
## Direct build
|
||||
|
||||
Build ejabberd Community Server container image from ejabberd master git repository:
|
||||
|
||||
```bash
|
||||
docker build \
|
||||
docker buildx build \
|
||||
-t personal/ejabberd \
|
||||
-f .github/container/Dockerfile \
|
||||
.
|
||||
```
|
||||
|
||||
Build ejabberd Community Server base image for a given ejabberd version,
|
||||
both for amd64 and arm64 architectures:
|
||||
|
||||
```bash
|
||||
VERSION=22.05
|
||||
git checkout $VERSION
|
||||
docker buildx build \
|
||||
--platform=linux/amd64,linux/arm64
|
||||
-t personal/ejabberd:$VERSION \
|
||||
-f .github/container/Dockerfile \
|
||||
.
|
||||
```
|
||||
## Podman build
|
||||
|
||||
It's also possible to use podman instead of docker, just notice:
|
||||
- `EXPOSE 4369-4399` port range is not supported, remove that in Dockerfile
|
||||
@@ -311,3 +311,140 @@ podman exec -it eja1 sh
|
||||
|
||||
podman stop eja1
|
||||
```
|
||||
|
||||
## Package build for `arm64`
|
||||
|
||||
By default, `.github/container/Dockerfile` builds this container by directly compiling ejabberd,
|
||||
it is a fast and direct method.
|
||||
However, a problem with QEMU prevents building the container in QEMU using Erlang/OTP 25
|
||||
for the `arm64` architecture.
|
||||
|
||||
Providing `--build-arg METHOD=package` is an alternate method to build the container
|
||||
used by the Github Actions workflow that provides `amd64` and `arm64` container images.
|
||||
It first builds an ejabberd binary package, and later installs it in the image.
|
||||
That method avoids using QEMU, so it can build `arm64` container images, but is extremely
|
||||
slow the first time it's used, and consequently not recommended for general use.
|
||||
|
||||
In this case, to build the ejabberd container image for arm64 architecture:
|
||||
|
||||
```bash
|
||||
docker buildx build \
|
||||
--build-arg METHOD=package \
|
||||
--platform linux/arm64 \
|
||||
-t personal/ejabberd:$VERSION \
|
||||
-f .github/container/Dockerfile \
|
||||
.
|
||||
```
|
||||
|
||||
|
||||
Composer Examples
|
||||
=================
|
||||
|
||||
## Minimal Example
|
||||
|
||||
This is the barely minimal file to get a usable ejabberd.
|
||||
Store it as `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
main:
|
||||
image: ghcr.io/processone/ejabberd
|
||||
container_name: ejabberd
|
||||
ports:
|
||||
- "5222:5222"
|
||||
- "5269:5269"
|
||||
- "5280:5280"
|
||||
- "5443:5443"
|
||||
```
|
||||
|
||||
Create and start the container with the command:
|
||||
```bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
## Customized Example
|
||||
|
||||
This example shows the usage of several customizations:
|
||||
it uses a local configuration file,
|
||||
stores the mnesia database in a local path,
|
||||
registers an account when it's created,
|
||||
and checks the number of registered accounts every time it's started.
|
||||
|
||||
Download or copy the ejabberd configuration file:
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/processone/ejabberd/master/ejabberd.yml.example
|
||||
mv ejabberd.yml.example ejabberd.yml
|
||||
```
|
||||
|
||||
Create the database directory and allow the container access to it:
|
||||
```bash
|
||||
mkdir database
|
||||
sudo chown 9000:9000 database
|
||||
```
|
||||
|
||||
Now write this `docker-compose.yml` file:
|
||||
```yaml
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
|
||||
main:
|
||||
image: ghcr.io/processone/ejabberd
|
||||
container_name: ejabberd
|
||||
environment:
|
||||
- CTL_ON_CREATE=register admin localhost asd
|
||||
- CTL_ON_START=registered_users localhost ;
|
||||
status
|
||||
ports:
|
||||
- "5222:5222"
|
||||
- "5269:5269"
|
||||
- "5280:5280"
|
||||
- "5443:5443"
|
||||
volumes:
|
||||
- ./ejabberd.yml:/opt/ejabberd/conf/ejabberd.yml:ro
|
||||
- ./database:/opt/ejabberd/database
|
||||
```
|
||||
|
||||
## Clustering Example
|
||||
|
||||
In this example, the main container is created first.
|
||||
Once it is fully started and healthy, a second container is created,
|
||||
and once ejabberd is started in it, it joins the first one.
|
||||
|
||||
An account is registered in the first node when created,
|
||||
and it should exist in the second node after join.
|
||||
|
||||
Notice that in this example the main container does not have access
|
||||
to the exterior; the replica exports the ports and can be accessed.
|
||||
|
||||
```yaml
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
|
||||
main:
|
||||
image: ghcr.io/processone/ejabberd
|
||||
container_name: ejabberd
|
||||
environment:
|
||||
- ERLANG_NODE_ARG=ejabberd@main
|
||||
- ERLANG_COOKIE=dummycookie123
|
||||
- CTL_ON_CREATE=register admin localhost asd
|
||||
|
||||
replica:
|
||||
image: ghcr.io/processone/ejabberd
|
||||
container_name: replica
|
||||
depends_on:
|
||||
main:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- "5222:5222"
|
||||
- "5269:5269"
|
||||
- "5280:5280"
|
||||
- "5443:5443"
|
||||
environment:
|
||||
- ERLANG_NODE_ARG=ejabberd@replica
|
||||
- ERLANG_COOKIE=dummycookie123
|
||||
- CTL_ON_CREATE=join_cluster ejabberd@main
|
||||
- CTL_ON_START=registered_users localhost ;
|
||||
status
|
||||
```
|
||||
|
||||
+2
-3
@@ -34,9 +34,9 @@ To save your and our time, we will systematically close all issues that are requ
|
||||
support and redirect people to the section you are reading right now.
|
||||
|
||||
Other channels for support are:
|
||||
- [ejabberd Mailing List][list]
|
||||
- [ejabberd XMPP room][muc]: ejabberd@conference.process-one.net
|
||||
- ejabberd XMPP room: [ejabberd@conference.process-one.net][muc]
|
||||
- [ejabberd XMPP room logs][logs]
|
||||
- [ejabberd Mailing List][list]
|
||||
|
||||
### <a name="issue"></a> Found an Issue or Bug?
|
||||
|
||||
@@ -147,4 +147,3 @@ gives us the option to relicense the code with a more permissive license in the
|
||||
[doc-repo]: https://github.com/processone/docs.ejabberd.im
|
||||
[developer-setup]: https://docs.ejabberd.im/developer/
|
||||
[cla]: https://www.process-one.net/resources/ejabberd-cla.pdf
|
||||
[license]: https://github.com/processone/ejabberd/blob/master/COPYING
|
||||
|
||||
@@ -190,6 +190,9 @@ options: all
|
||||
translations:
|
||||
tools/prepare-tr.sh $(DEPSDIR)
|
||||
|
||||
doap:
|
||||
tools/generate-doap.sh
|
||||
|
||||
edoc:
|
||||
$(ERL) -noinput +B -eval \
|
||||
'case edoc:application(ejabberd, ".", []) of ok -> halt(0); error -> halt(1) end.'
|
||||
@@ -510,6 +513,7 @@ help:
|
||||
@echo " dev Build a development release"
|
||||
@echo " relive Start a live ejabberd in _build/relive/"
|
||||
@echo ""
|
||||
@echo " doap Generate DOAP file"
|
||||
@echo " edoc Generate edoc documentation (unused)"
|
||||
@echo " options Generate ejabberd_option.erl"
|
||||
@echo " translations Extract translation files (requires --enable-tools)"
|
||||
|
||||
@@ -29,8 +29,8 @@ robust, scalable and extensible realtime platform built using [Erlang/OTP][erlan
|
||||
that includes [XMPP][xmpp] Server, [MQTT][mqtt] Broker and [SIP][sip] Service.
|
||||
|
||||
Check the features in [ejabberd.im][im], [ejabberd Docs][features],
|
||||
[ejabberd at ProcessOne][p1home], and a list of [supported protocols and XEPs][xeps].
|
||||
|
||||
[ejabberd at ProcessOne][p1home], and the list of [supported protocols in ProcessOne][xeps]
|
||||
and [XMPP.org][xmppej].
|
||||
|
||||
Installation
|
||||
------------
|
||||
@@ -38,7 +38,7 @@ Installation
|
||||
There are several ways to install ejabberd:
|
||||
|
||||
- Source code: compile yourself, see [COMPILE](COMPILE.md)
|
||||
- Installers from [ejabberd GitHub Releases][releases] (run/deb/rpm for x64 and arm64)
|
||||
- Installers from [ProcessOne Download][p1download] or [ejabberd GitHub Releases][releases] (run/deb/rpm for x64 and arm64)
|
||||
- Container image from [ejabberd Docker Hub][hubecs], see [ecs README][docker-ecs-readme] (for x64)
|
||||
- Container image from [ejabberd Github Packages][packages], see [CONTAINER](CONTAINER.md) (for x64 and arm64)
|
||||
- Using your [Operating System package][osp]
|
||||
@@ -73,7 +73,7 @@ or in your local machine as explained in [Localization][localization].
|
||||
Documentation for developers is available in [ejabberd docs: Developers][docs-dev].
|
||||
|
||||
Security reports or concerns should preferably be reported privately,
|
||||
please send an email to the address: contact [at] process-one [dot] net
|
||||
please send an email to the address: contact at process-one dot net
|
||||
or some other method from [ProcessOne Contact][p1contact].
|
||||
|
||||
For commercial offering and support, including [ejabberd Business Edition][p1home]
|
||||
@@ -85,7 +85,7 @@ Community
|
||||
|
||||
There are several places to get in touch with other ejabberd developers and administrators:
|
||||
|
||||
- [ejabberd XMPP chatroom][muc]: ejabberd@conference.process-one.net
|
||||
- ejabberd XMPP chatroom: [ejabberd@conference.process-one.net][muc]
|
||||
- [Mailing list][list]
|
||||
- [GitHub Discussions][discussions]
|
||||
- [Stack Overflow][stackoverflow]
|
||||
@@ -105,7 +105,6 @@ 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/
|
||||
[github]: https://github.com/processone/ejabberd
|
||||
[homebrew]: https://docs.ejabberd.im/admin/installation/#homebrew
|
||||
[hubecs]: https://hub.docker.com/r/ejabberd/ecs/
|
||||
[im]: https://ejabberd.im/
|
||||
@@ -116,6 +115,7 @@ and [ejabberd translations](https://github.com/processone/ejabberd-po/) under MI
|
||||
[muc]: xmpp:ejabberd@conference.process-one.net
|
||||
[osp]: https://docs.ejabberd.im/admin/installation/#operating-system-packages
|
||||
[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/
|
||||
[packages]: https://github.com/processone/ejabberd/pkgs/container/ejabberd
|
||||
[releases]: https://github.com/processone/ejabberd/releases
|
||||
@@ -124,3 +124,4 @@ and [ejabberd translations](https://github.com/processone/ejabberd-po/) under MI
|
||||
[weblate]: https://hosted.weblate.org/projects/ejabberd/ejabberd-po/
|
||||
[xeps]: https://www.process-one.net/en/ejabberd/protocols/
|
||||
[xmpp]: https://xmpp.org/
|
||||
[xmppej]: https://xmpp.org/software/servers/ejabberd/
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 22.10` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
|
||||
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 23.04` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
|
||||
REQUIRE_ERLANG_MIN="8.3 (Erlang/OTP 19.3)"
|
||||
REQUIRE_ERLANG_MAX="100.0.0 (No Max)"
|
||||
|
||||
|
||||
+687
@@ -0,0 +1,687 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://usefulinc.com/ns/doap#"
|
||||
xmlns:xmpp="https://linkmauve.fr/ns/xmpp-doap#"
|
||||
xmlns:schema="https://schema.org/">
|
||||
<Project>
|
||||
<name>ejabberd</name>
|
||||
<shortdesc>XMPP Server with MQTT Broker and SIP Service</shortdesc>
|
||||
<description>Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP Server, MQTT Broker, SIP Service)</description>
|
||||
<created>2002-11-16</created>
|
||||
<os>BSD</os>
|
||||
<os>Linux</os>
|
||||
<os>macOS</os>
|
||||
<os>Windows</os>
|
||||
<programming-langauge>Erlang</programming-langauge>
|
||||
<programming-langauge>C</programming-langauge>
|
||||
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-jabber"/>
|
||||
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-server"/>
|
||||
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-xmpp"/>
|
||||
|
||||
<homepage rdf:resource="https://www.ejabberd.im"/>
|
||||
<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"/>
|
||||
<bug-database rdf:resource="https://github.com/processone/ejabberd/issues"/>
|
||||
<support-forum rdf:resource="xmpp:ejabberd@conference.process-one.net?join"/>
|
||||
<repository>
|
||||
<GitRepository>
|
||||
<location rdf:resource="https://github.com/processone/ejabberd.git"/>
|
||||
<browse rdf:resource="https://github.com/processone/ejabberd"/>
|
||||
</GitRepository>
|
||||
</repository>
|
||||
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc3261"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc3920"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc3921"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc5766"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc5802"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6120"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6121"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6122"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6455"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc7395"/>
|
||||
<implements rdf:resource="https://www.rfc-editor.org/info/rfc7590"/>
|
||||
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html"/>
|
||||
<xmpp:version>2.9</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0012.html"/>
|
||||
<xmpp:version>2.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_last</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0013.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since>16.02</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0016.html"/>
|
||||
<xmpp:version>1.6</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_privacy</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0022.html"/>
|
||||
<xmpp:version>1.4</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0023.html"/>
|
||||
<xmpp:version>1.3</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html"/>
|
||||
<xmpp:version>2.4</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_disco</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0033.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since>15.04</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_multicast</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0039.html"/>
|
||||
<xmpp:version>0.6.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_stats</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0045.html"/>
|
||||
<xmpp:version>1.25</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_muc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0049.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_private</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0050.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_adhoc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0054.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0055.html"/>
|
||||
<xmpp:version>1.3</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0060.html"/>
|
||||
<xmpp:version>1.14</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0065.html"/>
|
||||
<xmpp:version>1.8</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_proxy65</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0077.html"/>
|
||||
<xmpp:version>2.4</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_register</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0078.html"/>
|
||||
<xmpp:version>2.5</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_legacy_auth</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0085.html"/>
|
||||
<xmpp:version>2.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_client_state</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0086.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0092.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_version</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0106.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0114.html"/>
|
||||
<xmpp:version>1.6</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_service</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html"/>
|
||||
<xmpp:version>1.5</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_caps</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0124.html"/>
|
||||
<xmpp:version>1.11</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_bosh</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0133.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_configure</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0153.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0156.html"/>
|
||||
<xmpp:version>1.4.0</xmpp:version>
|
||||
<xmpp:since>22.05</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_host_meta</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0157.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_disco</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0158.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_captcha</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0160.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0163.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0170.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0176.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_stun</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0185.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_s2s_dialback</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0191.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_blocking</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0198.html"/>
|
||||
<xmpp:version>1.5.2</xmpp:version>
|
||||
<xmpp:since>14.05</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_stream_mgmt</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0199.html"/>
|
||||
<xmpp:version>2.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_ping</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0202.html"/>
|
||||
<xmpp:version>2.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_time</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0205.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0206.html"/>
|
||||
<xmpp:version>1.4</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_bosh</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0212.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0215.html"/>
|
||||
<xmpp:version>0.7</xmpp:version>
|
||||
<xmpp:since>20.04</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_stun_disco</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0216.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0220.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_s2s, mod_s2s_dialback</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0227.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>ejabberd_piefxis</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0237.html"/>
|
||||
<xmpp:version>1.3</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_roster</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0243.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0248.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0249.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_muc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0270.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0279.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_sic</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html"/>
|
||||
<xmpp:version>0.13.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_carboncopy</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0313.html"/>
|
||||
<xmpp:version>0.6.1</xmpp:version>
|
||||
<xmpp:since>15.06</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0317.html"/>
|
||||
<xmpp:version>0.1</xmpp:version>
|
||||
<xmpp:since>21.12</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_muc_room, conversejs/prosody compatible</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0328.html"/>
|
||||
<xmpp:version>0.1</xmpp:version>
|
||||
<xmpp:since>19.09</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_jidprep</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0334.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mam, mod_muc_log, mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0352.html"/>
|
||||
<xmpp:version>0.1</xmpp:version>
|
||||
<xmpp:since>14.12</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_client_state</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0355.html"/>
|
||||
<xmpp:version>0.4.1</xmpp:version>
|
||||
<xmpp:since>16.09</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_delegation</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0356.html"/>
|
||||
<xmpp:version>0.2.1</xmpp:version>
|
||||
<xmpp:since>16.09</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_privilege</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0357.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:since>17.08</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_push</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html"/>
|
||||
<xmpp:version>0.5.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0363.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:since>15.10</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_http_upload</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0368.html"/>
|
||||
<xmpp:version>1.1.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0369.html"/>
|
||||
<xmpp:version>0.14.1</xmpp:version>
|
||||
<xmpp:since>16.03</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mix</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0398.html"/>
|
||||
<xmpp:version>0.2.00.2.0</xmpp:version>
|
||||
<xmpp:since>17.09</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_avatar, mod_vcard_xupdate</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0405.html"/>
|
||||
<xmpp:version>0.3.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mix_pam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0410.html"/>
|
||||
<xmpp:version>1.1.0</xmpp:version>
|
||||
<xmpp:since>18.12</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_muc_room</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0411.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:since>18.12</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_private</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0425.html"/>
|
||||
<xmpp:version>0.2.1</xmpp:version>
|
||||
<xmpp:since>23.04</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0441.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:since></xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
</Project>
|
||||
</rdf:RDF>
|
||||
@@ -0,0 +1,42 @@
|
||||
[
|
||||
{
|
||||
elvis,
|
||||
[
|
||||
{config,
|
||||
[#{dirs => ["src"],
|
||||
filter => "*.erl",
|
||||
ruleset => erl_files,
|
||||
rules => [{elvis_style, line_length, #{limit => 100,
|
||||
skip_comments => false}},
|
||||
{elvis_text_style, no_tabs, disable},
|
||||
{elvis_style, no_debug_call, disable},
|
||||
{elvis_style, operator_spaces, disable},
|
||||
{elvis_style, invalid_dynamic_call, disable},
|
||||
{elvis_style, variable_naming_convention, #{ regex => ".*" }},
|
||||
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
|
||||
]
|
||||
},
|
||||
#{dirs => ["."],
|
||||
filter => "Makefile.in",
|
||||
ruleset => makefiles,
|
||||
rules => [{elvis_style, line_length, #{limit => 100,
|
||||
skip_comments => false}},
|
||||
{elvis_style, no_tabs, disable},
|
||||
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
|
||||
]
|
||||
},
|
||||
#{dirs => ["."],
|
||||
filter => "rebar.config",
|
||||
ruleset => rebar_config,
|
||||
rules => [{elvis_style, line_length, #{limit => 100,
|
||||
skip_comments => false}},
|
||||
{elvis_style, no_tabs, disable},
|
||||
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
].
|
||||
@@ -0,0 +1,32 @@
|
||||
otp_path: "/usr/lib/erlang"
|
||||
plt_path: "_build/default/rebar3_24.3.3_plt"
|
||||
#code_reload:
|
||||
# node: ejabberd@localhost
|
||||
apps_dirs:
|
||||
- "_build/default/lib/*"
|
||||
deps_dirs:
|
||||
- "_build/default/lib/*"
|
||||
include_dirs:
|
||||
- "_build/default/lib"
|
||||
- "_build/default/lib/*/include"
|
||||
- "include"
|
||||
macros:
|
||||
- name: DEPRECATED_GET_STACKTRACE
|
||||
- name: HAVE_ERL_ERROR
|
||||
- name: HAVE_URI_STRING
|
||||
- name: OTP_BELOW_25
|
||||
- name: SIP
|
||||
- name: STUN
|
||||
diagnostics:
|
||||
# enabled:
|
||||
# - crossref
|
||||
disabled:
|
||||
# - dialyzer
|
||||
- unused_includes # Otherwise it complains about unused logger.hrl
|
||||
lenses:
|
||||
disabled:
|
||||
- ct-run-test
|
||||
- function-references
|
||||
- server-info
|
||||
- show-behaviour-usages
|
||||
- suggest-spec
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% RFC 1928 constants.
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%% ejabberd, Copyright (C) 2017-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2017-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% @copyright (C) 2002-2022 ProcessOne, SARL. All Rights Reserved.
|
||||
%%% @copyright (C) 2002-2023 ProcessOne, SARL. All Rights Reserved.
|
||||
%%%
|
||||
%%% Licensed under the Apache License, Version 2.0 (the "License");
|
||||
%%% you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -17,9 +17,9 @@ defmodule Ejabberd.Config.EjabberdLogger do
|
||||
end
|
||||
|
||||
defp do_log_errors({:ok, _mod}), do: nil
|
||||
defp do_log_errors({:error, _mod, errors}), do: Enum.each errors, &do_log_errors/1
|
||||
defp do_log_errors({:attribute, errors}), do: Enum.each errors, &log_attribute_error/1
|
||||
defp do_log_errors({:dependency, errors}), do: Enum.each errors, &log_dependency_error/1
|
||||
defp do_log_errors({:error, _mod, errors}), do: (Enum.each errors, &do_log_errors/1)
|
||||
defp do_log_errors({:attribute, errors}), do: (Enum.each errors, &log_attribute_error/1)
|
||||
defp do_log_errors({:dependency, errors}), do: (Enum.each errors, &log_dependency_error/1)
|
||||
|
||||
defp log_attribute_error({{attr_name, _val}, :attr_not_supported}), do:
|
||||
IO.puts "[ WARN ] Annotation @#{attr_name} is not supported."
|
||||
|
||||
@@ -21,7 +21,7 @@ defmodule Ejabberd.Config.OptsFormatter do
|
||||
end
|
||||
|
||||
defp format_attrs_for_ejabberd(opts) when is_list(opts),
|
||||
do: Enum.map opts, &format_attrs_for_ejabberd/1
|
||||
do: (Enum.map opts, &format_attrs_for_ejabberd/1)
|
||||
|
||||
defp format_attrs_for_ejabberd({:listeners, mods}),
|
||||
do: {:listen, format_listeners_for_ejabberd(mods)}
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ EOF
|
||||
if test "x`cat conftest.out`" != "xok"; then
|
||||
AC_MSG_RESULT([failed])
|
||||
X="`cat conftest.out`"
|
||||
if test "[$3]" == "warn"; then
|
||||
if test "[$3]" = "warn"; then
|
||||
AC_MSG_WARN([$X])
|
||||
else
|
||||
AC_MSG_FAILURE([$X])
|
||||
|
||||
+143
-23
@@ -2,12 +2,12 @@
|
||||
.\" Title: ejabberd.yml
|
||||
.\" Author: [see the "AUTHOR" section]
|
||||
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
|
||||
.\" Date: 10/12/2022
|
||||
.\" Date: 04/17/2023
|
||||
.\" Manual: \ \&
|
||||
.\" Source: \ \&
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "EJABBERD\&.YML" "5" "10/12/2022" "\ \&" "\ \&"
|
||||
.TH "EJABBERD\&.YML" "5" "04/17/2023" "\ \&" "\ \&"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Define some portability stuff
|
||||
.\" -----------------------------------------------------------------
|
||||
@@ -82,7 +82,7 @@ All options can be changed in runtime by running \fIejabberdctl reload\-config\f
|
||||
.sp
|
||||
Some options can be specified for particular virtual host(s) only using \fIhost_config\fR or \fIappend_host_config\fR options\&. Such options are called \fIlocal\fR\&. Examples are \fImodules\fR, \fIauth_method\fR and \fIdefault_db\fR\&. The options that cannot be defined per virtual host are called \fIglobal\fR\&. Examples are \fIloglevel\fR, \fIcertfiles\fR and \fIlisten\fR\&. It is a configuration mistake to put \fIglobal\fR options under \fIhost_config\fR or \fIappend_host_config\fR section \- ejabberd will refuse to load such configuration\&.
|
||||
.sp
|
||||
It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is better to start from "default" configuration file available at https://github\&.com/processone/ejabberd/blob/22\&.10/ejabberd\&.yml\&.example\&. Once you get ejabberd running you can start changing configuration options to meet your requirements\&.
|
||||
It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is better to start from "default" configuration file available at https://github\&.com/processone/ejabberd/blob/23\&.04/ejabberd\&.yml\&.example\&. Once you get ejabberd running you can start changing configuration options to meet your requirements\&.
|
||||
.sp
|
||||
Note that this document is intended to provide comprehensive description of all configuration options that can be consulted to understand the meaning of a particular option, its format and possible values\&. It will be quite hard to understand how to configure ejabberd by reading this document only \- for this purpose the reader is recommended to read online Configuration Guide available at https://docs\&.ejabberd\&.im/admin/configuration\&.
|
||||
.SH "TOP LEVEL OPTIONS"
|
||||
@@ -560,13 +560,19 @@ A maximum number of items (not memory!) in cache\&. The rule of thumb, for all t
|
||||
\fIsm_cache_size\fR\&.
|
||||
.RE
|
||||
.sp
|
||||
\fINote\fR about the next option: improved in 21\&.10:
|
||||
\fINote\fR about the next option: improved in 23\&.01:
|
||||
.PP
|
||||
\fBcaptcha_cmd\fR: \fIPath\fR
|
||||
\fBcaptcha_cmd\fR: \fIPath | ModuleName\fR
|
||||
.RS 4
|
||||
Full path to a script that generates
|
||||
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\(cqs mix, or XX\&.YY format otherwise\&. There is no default value: when this option is not set, CAPTCHA functionality is completely disabled\&.
|
||||
images\&.
|
||||
\fI@VERSION@\fR
|
||||
is replaced with ejabberd version number in
|
||||
\fIXX\&.YY\fR
|
||||
format\&.
|
||||
\fI@SEMVER@\fR
|
||||
is replaced with ejabberd version number in semver format when compiled with Elixir\(cqs mix, or XX\&.YY format otherwise\&. Alternatively, it can be the name of a module that implements ejabberd CAPTCHA support\&. There is no default value: when this option is not set, CAPTCHA functionality is completely disabled\&.
|
||||
.sp
|
||||
When using the ejabberd installers or container image, the example captcha scripts can be used like this:
|
||||
.sp
|
||||
@@ -595,8 +601,10 @@ CAPTCHA
|
||||
generated images per minute for any given JID\&. The option is intended to protect the server from CAPTCHA DoS\&. The default value is
|
||||
\fIinfinity\fR\&.
|
||||
.RE
|
||||
.sp
|
||||
\fINote\fR about the next option: improved in 23\&.04:
|
||||
.PP
|
||||
\fBcaptcha_url\fR: \fIURL\fR
|
||||
\fBcaptcha_url\fR: \fIURL | auto | undefined\fR
|
||||
.RS 4
|
||||
An URL where
|
||||
CAPTCHA
|
||||
@@ -604,7 +612,14 @@ requests should be sent\&. NOTE: you need to configure
|
||||
\fIrequest_handlers\fR
|
||||
for
|
||||
\fIejabberd_http\fR
|
||||
listener as well\&. There is no default value\&.
|
||||
listener as well\&. If set to
|
||||
\fIauto\fR, it builds the URL using a
|
||||
\fIrequest_handler\fR
|
||||
already enabled, with encryption if available\&. If set to
|
||||
\fIundefined\fR, it builds the URL using the deprecated
|
||||
\fIcaptcha_host\fR
|
||||
+ /captcha\&. The default value is
|
||||
\fIauto\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBcertfiles\fR: \fI[Path, \&.\&.\&.]\fR
|
||||
@@ -1036,6 +1051,13 @@ period before starting to drop them\&. Default 500
|
||||
.RS 4
|
||||
The time period to rate\-limit log messages by\&. Defaults to 1 second\&.
|
||||
.RE
|
||||
.sp
|
||||
\fINote\fR about the next option: added in 23\&.01:
|
||||
.PP
|
||||
\fBlog_modules_fully\fR: \fI[Module, \&.\&.\&.]\fR
|
||||
.RS 4
|
||||
List of modules that will log everything independently from the general loglevel option\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBlog_rotate_count\fR: \fINumber\fR
|
||||
.RS 4
|
||||
@@ -1093,7 +1115,7 @@ This option can be used to tune tick time parameter of
|
||||
Whether to use
|
||||
\fInew\fR
|
||||
SQL schema\&. All schemas are located at
|
||||
https://github\&.com/processone/ejabberd/tree/22\&.10/sql\&. There are two schemas available\&. The default legacy schema allows to store one XMPP domain into one ejabberd database\&. The
|
||||
https://github\&.com/processone/ejabberd/tree/23\&.04/sql\&. There are two schemas available\&. The default legacy schema allows to store one XMPP domain into one ejabberd database\&. The
|
||||
\fInew\fR
|
||||
schema allows to handle several XMPP domains in a single ejabberd database\&. Using this
|
||||
\fInew\fR
|
||||
@@ -1202,12 +1224,14 @@ option)\&. Later, when memory drops below this
|
||||
\fI80\fR
|
||||
percents\&.
|
||||
.RE
|
||||
.sp
|
||||
\fINote\fR about the next option: changed in 23\&.01:
|
||||
.PP
|
||||
\fBoutgoing_s2s_families\fR: \fI[ipv4 | ipv6, \&.\&.\&.]\fR
|
||||
\fBoutgoing_s2s_families\fR: \fI[ipv6 | ipv4, \&.\&.\&.]\fR
|
||||
.RS 4
|
||||
Specify which address families to try, in what order\&. The default is
|
||||
\fI[ipv4, ipv6]\fR
|
||||
which means it first tries connecting with IPv4, if that fails it tries using IPv6\&.
|
||||
\fI[ipv6, ipv4]\fR
|
||||
which means it first tries connecting with IPv6, if that fails it tries using IPv4\&. This option is obsolete and irrelevant when using ejabberd 23\&.01 and Erlang/OTP 22, or newer versions of them\&.
|
||||
.RE
|
||||
.sp
|
||||
\fINote\fR about the next option: added in 20\&.12:
|
||||
@@ -1651,10 +1675,13 @@ An interval to make a dummy SQL request to keep alive the connections to the dat
|
||||
.PP
|
||||
\fBsql_odbc_driver\fR: \fIPath\fR
|
||||
.RS 4
|
||||
Path to the ODBC driver to use to connect to a Microsoft SQL Server database\&. This option is only valid if the
|
||||
Path to the ODBC driver to use to connect to a Microsoft SQL Server database\&. This option only applies if the
|
||||
\fIsql_type\fR
|
||||
option is set to
|
||||
\fImssql\fR\&. The default value is:
|
||||
\fImssql\fR
|
||||
and
|
||||
\fIsql_server\fR
|
||||
is not an ODBC connection string\&. The default value is:
|
||||
\fIlibtdsodbc\&.so\fR
|
||||
.RE
|
||||
.PP
|
||||
@@ -1710,7 +1737,12 @@ if the latter is not set\&.
|
||||
.PP
|
||||
\fBsql_server\fR: \fIHost\fR
|
||||
.RS 4
|
||||
A hostname or an IP address of the SQL server\&. The default value is
|
||||
The hostname or IP address of the SQL server\&. For
|
||||
\fIsql_type\fR
|
||||
\fImssql\fR
|
||||
or
|
||||
\fIodbc\fR
|
||||
this can also be an ODBC connection string\&. The default value is
|
||||
\fIlocalhost\fR\&.
|
||||
.RE
|
||||
.sp
|
||||
@@ -1718,7 +1750,7 @@ A hostname or an IP address of the SQL server\&. The default value is
|
||||
.PP
|
||||
\fBsql_ssl\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
Whether to use SSL encrypted connections to the SQL server\&. The option is only available for MySQL and PostgreSQL\&. The default value is
|
||||
Whether to use SSL encrypted connections to the SQL server\&. The option is only available for MySQL, MS SQL and PostgreSQL\&. The default value is
|
||||
\fIfalse\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
@@ -1729,7 +1761,7 @@ A path to a file with CA root certificates that will be used to verify SQL conne
|
||||
and
|
||||
\fIsql_ssl_verify\fR
|
||||
options are set to
|
||||
\fItrue\fR\&. There is no default which means certificate verification is disabled\&.
|
||||
\fItrue\fR\&. There is no default which means certificate verification is disabled\&. This option has no effect for MS SQL\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBsql_ssl_certfile\fR: \fIPath\fR
|
||||
@@ -1737,7 +1769,7 @@ options are set to
|
||||
A path to a certificate file that will be used for SSL connections to the SQL server\&. Implies
|
||||
\fIsql_ssl\fR
|
||||
option is set to
|
||||
\fItrue\fR\&. There is no default which means ejabberd won\(cqt provide a client certificate to the SQL server\&.
|
||||
\fItrue\fR\&. There is no default which means ejabberd won\(cqt provide a client certificate to the SQL server\&. This option has no effect for MS SQL\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBsql_ssl_verify\fR: \fItrue | false\fR
|
||||
@@ -1747,7 +1779,7 @@ Whether to verify SSL connection to the SQL server against CA root certificates
|
||||
option\&. Implies
|
||||
\fIsql_ssl\fR
|
||||
option is set to
|
||||
\fItrue\fR\&. The default value is
|
||||
\fItrue\fR\&. This option has no effect for MS SQL\&. The default value is
|
||||
\fIfalse\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
@@ -1962,7 +1994,7 @@ ejabberdctl srg\-create g1 example\&.org "\*(AqGroup number 1\*(Aq" this_is_g1 g
|
||||
.RE
|
||||
.SS "mod_admin_update_sql"
|
||||
.sp
|
||||
This module can be used to update existing SQL database from the default to the new schema\&. Check the section Default and New Schemas for details\&. Please note that only PostgreSQL is supported\&. When the module is loaded use \fIupdate_sql\fR API\&.
|
||||
This module can be used to update existing SQL database from the default to the new schema\&. Check the section Default and New Schemas for details\&. Please note that only MS SQL, MySQL, and PostgreSQL are supported\&. When the module is loaded use \fIupdate_sql\fR API\&.
|
||||
.sp
|
||||
The module has no options\&.
|
||||
.SS "mod_announce"
|
||||
@@ -3832,6 +3864,66 @@ Same as top\-level
|
||||
option, but applied to this module only\&.
|
||||
.RE
|
||||
.RE
|
||||
.SS "mod_mqtt_bridge"
|
||||
.sp
|
||||
This module adds ability to synchronize local MQTT topics with data on remote servers It can update topics on remote servers when local user updates local topic, or can subscribe for changes on remote server, and update local copy when remote data is updated\&. It is available since ejabberd 23\&.01\&.
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
.nr an-no-space-flag 1
|
||||
.nr an-break-flag 1
|
||||
.br
|
||||
.ps +1
|
||||
\fBAvailable options:\fR
|
||||
.RS 4
|
||||
.PP
|
||||
\fBreplication_user\fR: \fIJID\fR
|
||||
.RS 4
|
||||
Identifier of a user that will be assigned as owner of local changes\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBservers\fR: \fI{ServerUrl: {publish: [TopicPairs, subscribe: [TopicPairs], authentication: [AuthInfo]}}]\fR
|
||||
.RS 4
|
||||
Declaration of data to share, must contain
|
||||
\fIpublish\fR
|
||||
or
|
||||
\fIsubscribe\fR
|
||||
or both, and
|
||||
\fIauthentication\fR
|
||||
section with username/password field or certfile pointing to client certificate\&. Accepted urls can use schema mqtt, mqtts (mqtt with tls), mqtt5, mqtt5s (both to trigger v5 protocol), ws, wss, ws5, wss5\&. Certifcate authentication can be only used with mqtts, mqtt5s, wss, wss5\&.
|
||||
.RE
|
||||
.RE
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
.nr an-no-space-flag 1
|
||||
.nr an-break-flag 1
|
||||
.br
|
||||
.ps +1
|
||||
\fBExample:\fR
|
||||
.RS 4
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
modules:
|
||||
\&.\&.\&.
|
||||
mod_mqtt_bridge:
|
||||
servers:
|
||||
"mqtt://server\&.com":
|
||||
publish:
|
||||
"localA": "remoteA" # local changes to \*(AqlocalA\*(Aq will be replicated on remote server as \*(AqremoteA\*(Aq
|
||||
"topicB": "topicB"
|
||||
subscribe:
|
||||
"remoteB": "localB" # changes to \*(AqremoteB\*(Aq on remote server will be stored as \*(AqlocalB\*(Aq on local server
|
||||
authentication:
|
||||
certfile: "/etc/ejabberd/mqtt_server\&.pem"
|
||||
replication_user: "mqtt@xmpp\&.server\&.com"
|
||||
\&.\&.\&.
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.SS "mod_muc"
|
||||
.sp
|
||||
This module provides support for XEP\-0045: Multi\-User Chat\&. Users can discover existing rooms, join or create them\&. Occupants of a room can chat in public or have private chats\&.
|
||||
@@ -4583,6 +4675,34 @@ or a conference JID is appended to the
|
||||
otherwise\&. There is no default value\&.
|
||||
.RE
|
||||
.RE
|
||||
.SS "mod_muc_rtbl"
|
||||
.sp
|
||||
This module implement Real\-time blocklists for MUC rooms\&.
|
||||
.sp
|
||||
It works by observing remote pubsub node conforming with specification described in https://xmppbl\&.org/\&.
|
||||
.sp
|
||||
This module is available since ejabberd 23\&.04\&.
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
.nr an-no-space-flag 1
|
||||
.nr an-break-flag 1
|
||||
.br
|
||||
.ps +1
|
||||
\fBAvailable options:\fR
|
||||
.RS 4
|
||||
.PP
|
||||
\fBrtbl_node\fR: \fIPubsubNodeName\fR
|
||||
.RS 4
|
||||
Name of pubsub node that should be used to track blocked users\&. The default value is
|
||||
\fImuc_bans_sha256\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBrtbl_server\fR: \fIDomain\fR
|
||||
.RS 4
|
||||
Domain of xmpp server that serves block list\&. The default value is
|
||||
\fIxmppbl\&.org\fR
|
||||
.RE
|
||||
.RE
|
||||
.SS "mod_multicast"
|
||||
.sp
|
||||
This module implements a service for XEP\-0033: Extended Stanza Addressing\&.
|
||||
@@ -7628,13 +7748,13 @@ TODO
|
||||
ProcessOne\&.
|
||||
.SH "VERSION"
|
||||
.sp
|
||||
This document describes the configuration file of ejabberd 22\&.10\&. Configuration options of other ejabberd versions may differ significantly\&.
|
||||
This document describes the configuration file of ejabberd 23\&.04\&. Configuration options of other ejabberd versions may differ significantly\&.
|
||||
.SH "REPORTING BUGS"
|
||||
.sp
|
||||
Report bugs to https://github\&.com/processone/ejabberd/issues
|
||||
.SH "SEE ALSO"
|
||||
.sp
|
||||
Default configuration file: https://github\&.com/processone/ejabberd/blob/22\&.10/ejabberd\&.yml\&.example
|
||||
Default configuration file: https://github\&.com/processone/ejabberd/blob/23\&.04/ejabberd\&.yml\&.example
|
||||
.sp
|
||||
Main site: https://ejabberd\&.im
|
||||
.sp
|
||||
@@ -7645,4 +7765,4 @@ Configuration Guide: https://docs\&.ejabberd\&.im/admin/configuration
|
||||
Source code: https://github\&.com/processone/ejabberd
|
||||
.SH "COPYING"
|
||||
.sp
|
||||
Copyright (c) 2002\-2022 ProcessOne\&.
|
||||
Copyright (c) 2002\-2023 ProcessOne\&.
|
||||
|
||||
@@ -107,14 +107,14 @@ defmodule Ejabberd.MixProject do
|
||||
{:fast_yaml, "~> 1.0"},
|
||||
{:idna, "~> 6.0"},
|
||||
{:jiffy, "~> 1.1.1"},
|
||||
{:jose, "~> 1.11.1"},
|
||||
{:jose, "~> 1.11.5"},
|
||||
{:mqtree, "~> 1.0"},
|
||||
{:p1_acme, "~> 1.0"},
|
||||
{:p1_oauth2, "~> 0.6"},
|
||||
{:p1_utils, "~> 1.0"},
|
||||
{:pkix, "~> 1.0"},
|
||||
{:stringprep, ">= 1.0.26"},
|
||||
{:xmpp, ">= 1.6.0"},
|
||||
{:xmpp, ">= 1.6.2"},
|
||||
{:yconf, "~> 1.0"}]
|
||||
++ cond_deps()
|
||||
end
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
%{
|
||||
"base64url": {:hex, :base64url, "1.0.1", "f8c7f2da04ca9a5d0f5f50258f055e1d699f0e8bf4cfdb30b750865368403cf6", [:rebar3], [], "hexpm", "f9b3add4731a02a9b0410398b475b33e7566a695365237a6bdee1bb447719f5c"},
|
||||
"cache_tab": {:hex, :cache_tab, "1.0.30", "6d35eecfb65fbe5fc85988503a27338d32de01243f3fc8ea3ee7161af08725a4", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "6d8a5e00d8f84c42627706a6dbedb02e34d58495f3ed61935c8475ca0531cda0"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.25", "2024618731c55ebfcc5439d756852ec4e85978a39d0d58593763924d9a15916f", [:mix], [], "hexpm", "56749c5e1c59447f7b7a23ddb235e4b3defe276afc220a6227237f3efe83f51e"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"},
|
||||
"eimp": {:hex, :eimp, "1.0.22", "fa9b376ef0b50e8455db15c7c11dea4522c6902e04412288aab436d26335f6eb", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "b3b9ffb1d9a5f4a2ba88ac418a819164932d9a9d3a2fc3d32ca338ce855c4392"},
|
||||
"epam": {:hex, :epam, "1.0.12", "2a5625d4133bca4b3943791a3f723ba764455a461ae9b6ba5debb262efcf4b40", [:rebar3], [], "hexpm", "54c166c4459cef72f2990a3d89a8f0be27180fe0ab0f24b28ddcc3b815f49f7f"},
|
||||
"eredis": {:hex, :eredis, "1.2.0", "0b8e9cfc2c00fa1374cd107ea63b49be08d933df2cf175e6a89b73dd9c380de4", [:rebar3], [], "hexpm", "d9b5abef2c2c8aba8f32aa018203e0b3dc8b1157773b254ab1d4c2002317f1e1"},
|
||||
"esip": {:hex, :esip, "1.0.48", "3b3b3afc798be9458517d4fd2730674322368e54c2c1211aa630327354946d1b", [:rebar3], [{:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.2.6", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "02b9fc6e071415cbc62105f5115aeb68d11184bdad3960da7b62ea3e99e7fccf"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.28.4", "001a0ea6beac2f810f1abc3dbf4b123e9593eaa5f00dd13ded024eae7c523298", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bf85d003dd34911d89c8ddb8bda1a958af3471a274a4c2150a9c01c78ac3f8ed"},
|
||||
"esip": {:hex, :esip, "1.0.49", "7949c288d1e094cb44bff5499231939e34c2ace06de8bef950a341edb1743357", [:rebar3], [{:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.2.7", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "a1379ced50c3a2a8f82a77b3184e94c3b87782e90e5ddc0d2baf5b654ecfaa11"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"},
|
||||
"ezlib": {:hex, :ezlib, "1.0.12", "ffe906ba10d03aaee7977e1e0e81d9ffc3bb8b47fb9cd8e2e453507a2e56221f", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "30e94355fb42260aab6e12582cb0c56bf233515e655c8aeaf48760e7561e4ebb"},
|
||||
"fast_tls": {:hex, :fast_tls, "1.1.16", "85fa7f3112ea4ff5ccb4f3abadc130a8c855ad74eb00869487399cb0c322d208", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "aa08cca89b4044e74f1f12e399817d8beaeae3ee006c98a893c0bfb1d81fba51"},
|
||||
"fast_xml": {:hex, :fast_xml, "1.1.49", "67d9bfcadd04efd930e0ee1412b5ea09d3e791f1fdbd4d3e9a8c8f29f8bfed8c", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "01da064d2f740818956961036637fee2475c17bf8aab9442217f90dc77883593"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.34", "3be1ed8a37fe87a53f7f2ad1ee9586dcc257103d0b1d1f0ee6306cad9d54c29a", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "926dc1798399418d3983bd53356f3395b01c07a550f6b8d1dd5d6cc07c22c1c9"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.36", "65413a34a570fd4e205a460ba602e4ee7a682f35c22d2e1c839025dbf515105c", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "1abe8f758fc2a86b08edff80bbc687cfd41ebc1412cfec0ef4a0acfcd032052f"},
|
||||
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"},
|
||||
"jiffy": {:hex, :jiffy, "1.1.1", "aca10f47aa91697bf24ab9582c74e00e8e95474c7ef9f76d4f1a338d0f5de21b", [:rebar3], [], "hexpm", "62e1f0581c3c19c33a725c781dfa88410d8bff1bbafc3885a2552286b4785c4c"},
|
||||
"jose": {:hex, :jose, "1.11.1", "59da64010c69aad6cde2f5b9248b896b84472e99bd18f246085b7b9fe435dcdb", [:mix, :rebar3], [], "hexpm", "078f6c9fb3cd2f4cfafc972c814261a7d1e8d2b3685c0a76eb87e158efff1ac5"},
|
||||
"jose": {:hex, :jose, "1.11.5", "3bc2d75ffa5e2c941ca93e5696b54978323191988eb8d225c2e663ddfefd515e", [:mix, :rebar3], [], "hexpm", "dcd3b215bafe02ea7c5b23dafd3eb8062a5cd8f2d904fd9caa323d37034ab384"},
|
||||
"luerl": {:hex, :luerl, "1.0.0", "1b68c30649323590d5339b967b419260500ffe520cd3abc1987482a82d3b5a6c", [:rebar3], [], "hexpm", "c17bc45cb4b0845ec975387f9a5d8c81ab60456698527a29c96f78992af86bd1"},
|
||||
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.15", "bc54d8b88698fdaebc1e27a9ac43688b927e3dbc05bd5cee4057e69a89a8cf17", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "294ac43c9b3d372e24eeea56c259e19c655522dcff64a55c401a639663b9d829"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.20", "c976cbca2dd1bdcf71a6e17fb512e30451b5f258694157f7b63963767ee26560", [:rebar3], [{:base64url, "1.0.1", [hex: :base64url, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "1.1.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "1.11.1", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "1.0.14", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "70e0ecf8c8729dfc01f6a15279ef9fa4003c3b5af47b6732d9312296a8ba4f5c"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.20", "08aeade83a24902a5fca2dbf78fa674eef25ca4e66250b4be8bd3580f35880e7", [:rebar3], [], "hexpm", "12152e8feadcf8ce586334314ca27cb088f12e0a5c850c496a8df69859390877"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.22", "b40a8031ef0f4592e97e6a8e08e53dbd31a2198cb8377b249f0caea4f8025a1d", [:rebar3], [{:base64url, "1.0.1", [hex: :base64url, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "1.1.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "1.11.5", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "1.0.15", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "c2b25a7b295a435dac4f278a73d8417ff2b0020c45e1683504e8692ef03e2057"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.21", "5972add935e7b1b03d981fa88a0d01e96de357443eaf96ca2fb62e465a717f47", [:rebar3], [], "hexpm", "16f197adb99dab034139c429b256d65948a4057d3e4d553adbe5ce3236c4aabf"},
|
||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.11", "96b4e85c08355720523c2f892011a81a07994d15c179ce4dd82d704fecad15b2", [:rebar3], [], "hexpm", "9c3c6ae59382b9525473bb02a32949889808f33f95f6db10594fd92acd1f63db"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.19", "dc615844fd22a2e45182018d5bcc6b757ac19f576fab3fe6d69e1c0ff25cee2b", [:rebar3], [{:xmpp, "1.6.0", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "4b0c6d30bbf881feb01171d13f444a6e05e1d19b6926e3f56f4028823d02730b"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.22", "f2ca59b87e8c5dbbbe84d08e307c21f078384232e8fb78a783dbeffa6d37da28", [:rebar3], [{:xmpp, "1.6.2", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "bbc38d3878c7b58ab86c257a2a2ce1bacbd68a5034ebea2735db6a70c1aa12bc"},
|
||||
"p1_utils": {:hex, :p1_utils, "1.0.25", "2d39b5015a567bbd2cc7033eeb93a7c60d8c84efe1ef69a3473faa07fa268187", [:rebar3], [], "hexpm", "9219214428f2c6e5d3187ff8eb9a8783695c2427420be9a259840e07ada32847"},
|
||||
"pkix": {:hex, :pkix, "1.0.9", "eb20b2715d71a23b4fe7e754dae9281a964b51113d0bba8adf9da72bf9d65ac2", [:rebar3], [], "hexpm", "daab2c09cdd4eda05c9b45a5c00e994a1a5f27634929e1377e2e59b707103e3a"},
|
||||
"sqlite3": {:hex, :sqlite3, "1.1.13", "94a6e0508936514e1493efeb9b939a9bbfa861f4b8dc93ef174ae88a1d9381d3", [:rebar3], [], "hexpm", "b77fad096d1ae9553ad8551ea75bd0d64a2f5b09923a7ca48b14215564dbfc48"},
|
||||
"sqlite3": {:hex, :sqlite3, "1.1.14", "f9ea0cff8540865fdfdb7e24eef34dc46677364b1c070896e99b5bf08c8a7fd7", [:rebar3], [], "hexpm", "85054b6ca297343c159ed6794a473ff2c8eeabd854b6fe02f711c0bfd373ce86"},
|
||||
"stringprep": {:hex, :stringprep, "1.0.29", "02f23e8c3a219a3dfe40a22e908bece3a2f68af0ff599ea8a7b714ecb21e62ee", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "928eba304c3006eb1512110ebd7b87db163b00859a09375a1e4466152c6c462a"},
|
||||
"stun": {:hex, :stun, "1.2.6", "5d1978d340ea20efb28bc1e58779a3a1d64568c66168db4d20692e76ce813d5e", [:rebar3], [{:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "21aed098457e5099e925129459590592e001c470cf7503e5614a7a6b688ff146"},
|
||||
"stun": {:hex, :stun, "1.2.7", "d6bdcf0aa72c927fbe8b779fc4ef1f3916c5450b2ff136c800a7a0361fb1ddff", [:rebar3], [{:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "3fb1f07aaa630b2276e83d267557d1ceb3d2ce52d1145de71864160210655852"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
|
||||
"xmpp": {:hex, :xmpp, "1.6.0", "2ca2180eac1a97e929d1cfa1e4faabef4f32a719331c7f56e47d305c0ec8e438", [:rebar3], [{:ezlib, "1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "1.1.49", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "1.0.29", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "5fd723c95bce79600a8f44ba79cf5d3b1dac80af65493a4a414e39791f7dd7e9"},
|
||||
"yconf": {:hex, :yconf, "1.0.14", "b216f385f729b338385b25176f6e4fe8cabfdf7ede9c40a35b2e77fc93e98fc8", [:rebar3], [{:fast_yaml, "1.0.34", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "a8a9262553c11ed4cd13cc8e656e53acb00f9385f0a50cd235af7d02e9204bce"},
|
||||
"xmpp": {:hex, :xmpp, "1.6.2", "8045dfea83e8996415b9a5161f685cb97dc3c40c0b9c46763a5eca2408017221", [:rebar3], [{:ezlib, "1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "1.1.49", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "1.0.29", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "db2ee6115961fe159bc2629093797ac4535083176817cdbe2ae186a0ff540fde"},
|
||||
"yconf": {:hex, :yconf, "1.0.15", "e22998b3d7728270bdd06162a9515bd142b14fae8927cbdbd3ef639c32aa6f7a", [:rebar3], [{:fast_yaml, "1.0.36", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "7ff2ab24d3c9833842716b9aaaa01a8f96641a7695cbb701b03445c4def01117"},
|
||||
}
|
||||
|
||||
@@ -398,7 +398,6 @@
|
||||
{"Password:","Contrasenya:"}.
|
||||
{"Path to Dir","Ruta al directori"}.
|
||||
{"Path to File","Ruta al fitxer"}.
|
||||
{"Payload type","Tipus de payload"}.
|
||||
{"Pending","Pendent"}.
|
||||
{"Period: ","Període: "}.
|
||||
{"Persist items to storage","Persistir elements al guardar"}.
|
||||
@@ -564,7 +563,6 @@
|
||||
{"The sender of the last received message","Qui ha enviat l'ultim missatge rebut"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","El paquet DEU contindre només un element <active/>, un element <default/>, o un element <list/>"}.
|
||||
{"The subscription identifier associated with the subscription request","L'identificador de subscripció associat amb la petició de subscripció"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","El tipus de dades al node, usualment especificat pel namespace del payload (si n'hi ha)"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","La URL de uns transformació XSL que pot ser aplicada als payloads per a generar un element apropiat de contingut de missatge."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","La URL de una transformació XSL que pot ser aplicada al format de payload per a generar un resultat valid de Data Forms, que el client puga mostrar usant un métode generic de Data Forms"}.
|
||||
{"There was an error changing the password: ","Hi ha hagut un error canviant la contrasenya: "}.
|
||||
|
||||
+2
-2
@@ -234,6 +234,7 @@
|
||||
{"January","Januar"}.
|
||||
{"JID normalization denied by service policy","JID-Normalisierung aufgrund der Dienstrichtlinien verweigert"}.
|
||||
{"JID normalization failed","JID-Normalisierung fehlgeschlagen"}.
|
||||
{"Joined MIX channels:","Beigetretene MIX-Channels:"}.
|
||||
{"joins the room","betritt den Raum"}.
|
||||
{"July","Juli"}.
|
||||
{"June","Juni"}.
|
||||
@@ -395,7 +396,6 @@
|
||||
{"Password:","Passwort:"}.
|
||||
{"Path to Dir","Pfad zum Verzeichnis"}.
|
||||
{"Path to File","Pfad zur Datei"}.
|
||||
{"Payload type","Nutzdatentyp"}.
|
||||
{"Pending","Ausstehend"}.
|
||||
{"Period: ","Zeitraum: "}.
|
||||
{"Persist items to storage","Items dauerhaft speichern"}.
|
||||
@@ -561,7 +561,6 @@
|
||||
{"The sender of the last received message","Der Absender der letzten erhaltenen Nachricht"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Das Stanza darf nur ein <active/>-Element, ein <default/>-Element oder ein <list/>-Element enthalten"}.
|
||||
{"The subscription identifier associated with the subscription request","Die mit der Abonnement-Anforderung verknüpfte Abonnement-Bezeichnung"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","Die Art der Knotendaten, üblicherweise vom Namensraum der Nutzdaten angegeben (gegebenenfalls)"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","Die URL einer XSL-Transformation welche auf Nutzdaten angewendet werden kann, um ein geeignetes Nachrichtenkörper-Element zu generieren."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","Die URL einer XSL-Transformation welche auf das Nutzdaten-Format angewendet werden kann, um ein gültiges Data Forms-Ergebnis zu generieren das der Client mit Hilfe einer generischen Data Forms-Rendering-Engine anzeigen könnte"}.
|
||||
{"There was an error changing the password: ","Es trat ein Fehler beim Ändern des Passwortes auf: "}.
|
||||
@@ -639,6 +638,7 @@
|
||||
{"Value of '~s' should be integer","Wert von '~s' sollte eine Ganzzahl sein"}.
|
||||
{"Value 'set' of 'type' attribute is not allowed","Wert 'set' des 'type'-Attributs ist nicht erlaubt"}.
|
||||
{"vCard User Search","vCard-Benutzer-Suche"}.
|
||||
{"View joined MIX channels","Beitretene MIX-Channel ansehen"}.
|
||||
{"View Queue","Warteschlange ansehen"}.
|
||||
{"View Roster","Kontaktliste ansehen"}.
|
||||
{"Virtual Hosts","Virtuelle Hosts"}.
|
||||
|
||||
@@ -377,7 +377,6 @@
|
||||
{"Password:","Κωδικός πρόσβασης:"}.
|
||||
{"Path to Dir","Τοποθεσία κατάλογου αρχείων"}.
|
||||
{"Path to File","Τοποθεσία Αρχείου"}.
|
||||
{"Payload type","Τύπος φόρτου εργασιών"}.
|
||||
{"Pending","Εκκρεμεί"}.
|
||||
{"Period: ","Περίοδος: "}.
|
||||
{"Persist items to storage","Μόνιμη αποθήκευση στοιχείων"}.
|
||||
@@ -538,7 +537,6 @@
|
||||
{"The sender of the last received message","Ο αποστολέας του τελευταίου εισερχομένου μηνύματος"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Η stanza ΠΡΕΠΕΙ να περιέχει μόνο ένα στοιχείο <active />, ένα στοιχείο <default /> ή ένα στοιχείο <list />"}.
|
||||
{"The subscription identifier associated with the subscription request","Το αναγνωριστικό συνδρομής συσχετίστηκε με το αίτημα συνδρομής"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","Ο τύπος των δεδομένων του κόμβου συνήθως προσδιορίζεται από το namespace του φόρτου εργασιών (αν υπάρχουν)"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","Το URL ενός μετασχηματισμού XSL το οποίο μπορεί να εφαρμοστεί σε φόρτους εργασίας για να παραχθεί το κατάλληλο στοιχείο του σώματος του μηνύματος."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","Το URL ενός μετασχηματισμού XSL, το οποίο μπορεί να εφαρμοστεί στους τύπους φόρτου εργασίας για να παραχθεί έγκυρο αποτέλεσμα Data Forms, τέτοιο που ο πελάτης μπορεί να εμφανίσει, χρησιμοποιώντας μια ευρείας χρήσης μηχανή επεξεργασίας Data Forms"}.
|
||||
{"There was an error changing the password: ","Παρουσιάστηκε σφάλμα κατά την αλλαγή του κωδικού πρόσβασης: "}.
|
||||
|
||||
@@ -398,7 +398,6 @@
|
||||
{"Password:","Contraseña:"}.
|
||||
{"Path to Dir","Ruta al directorio"}.
|
||||
{"Path to File","Ruta al fichero"}.
|
||||
{"Payload type","Tipo de payload"}.
|
||||
{"Pending","Pendiente"}.
|
||||
{"Period: ","Periodo: "}.
|
||||
{"Persist items to storage","Persistir elementos al almacenar"}.
|
||||
@@ -564,7 +563,6 @@
|
||||
{"The sender of the last received message","El emisor del último mensaje recibido"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","El paquete DEBE contener solo un elemento <active/>, un elemento <default/>, o un elemento <list/>"}.
|
||||
{"The subscription identifier associated with the subscription request","El identificador de suscripción asociado con la petición de suscripción"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","El tipo de datos del nodo, usualmente especificado por el namespace del payload (en caso de haberlo)"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","La URL de una transformación XSL que puede aplicarse a payloads para generar un elemento de contenido del mensaje apropiado."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","La URL de una transformación XSL que puede aplicarse al formato de payload para generar un resultado de Formulario de Datos válido, que el cliente pueda mostrar usando un mecanismo de dibujado genérico de Formulario de Datos"}.
|
||||
{"There was an error changing the password: ","Hubo uno error al cambiar la contaseña: "}.
|
||||
|
||||
@@ -337,7 +337,6 @@
|
||||
{"The collections with which a node is affiliated","האוספים עמם צומת מסונף"}.
|
||||
{"The password is too weak","הסיסמה חלשה מדי"}.
|
||||
{"the password is","הסיסמה היא"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","סוג מידע ממסר, לרוב מצוין לפי מרחב־שמות של מטען הייעוד (אם בכלל)"}.
|
||||
{"There was an error creating the account: ","אירעה שגיאה ביצירת החשבון: "}.
|
||||
{"There was an error deleting the account: ","אירעה שגיאה במחיקת החשבון: "}.
|
||||
{"This room is not anonymous","חדר זה אינו אנונימי"}.
|
||||
|
||||
@@ -289,7 +289,6 @@
|
||||
{"Password","Sandi"}.
|
||||
{"Path to Dir","Jalur ke Dir"}.
|
||||
{"Path to File","Jalur ke File"}.
|
||||
{"Payload type","Tipe payload"}.
|
||||
{"Pending","Tertunda"}.
|
||||
{"Period: ","Periode: "}.
|
||||
{"Persist items to storage","Pertahankan item ke penyimpanan"}.
|
||||
|
||||
@@ -398,7 +398,6 @@
|
||||
{"Password:","Senha:"}.
|
||||
{"Path to Dir","Caminho para o diretório"}.
|
||||
{"Path to File","Caminho do arquivo"}.
|
||||
{"Payload type","Tipo da carga útil"}.
|
||||
{"Pending","Pendente"}.
|
||||
{"Period: ","Período: "}.
|
||||
{"Persist items to storage","Persistir elementos ao armazenar"}.
|
||||
@@ -564,7 +563,6 @@
|
||||
{"The sender of the last received message","O remetente da última mensagem que foi recebida"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","A instância DEVE conter apenas um elemento <active/>, um elemento <default/>, ou um elemento <list/>"}.
|
||||
{"The subscription identifier associated with the subscription request","O identificador da assinatura associado à solicitação da assinatura"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","O tipo dos dados do nó, normalmente definido pelo espaço dos nomes da carga útil (caso haja)"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","O URL da transformação XSL que pode ser aplicada nas cargas úteis para gerar um elemento apropriado no corpo da mensagem."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","A URL de uma transformação XSL que pode ser aplicada ao formato de carga útil para gerar um Formulário de Dados válido onde o cliente possa exibir usando um mecanismo genérico de renderização do Formulários de Dados"}.
|
||||
{"There was an error changing the password: ","Houve um erro ao alterar a senha: "}.
|
||||
|
||||
+20
-3
@@ -3,7 +3,7 @@
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Adicione * no final do campo para combinar com a substring)"}.
|
||||
{" (Add * to the end of field to match substring)"," (Adicione * no final do campo para combinar com a sub-cadeia)"}.
|
||||
{" has set the subject to: "," colocou o tópico: "}.
|
||||
{"# participants","# participantes"}.
|
||||
{"A description of the node","Uma descrição do nó"}.
|
||||
@@ -79,6 +79,7 @@
|
||||
{"Changing role/affiliation is not allowed","Não é permitida a alteração da função/afiliação"}.
|
||||
{"Channel already exists","O canal já existe"}.
|
||||
{"Channel does not exist","O canal não existe"}.
|
||||
{"Channel JID","Canal JID"}.
|
||||
{"Channels","Canais"}.
|
||||
{"Characters not allowed:","Caracteres não aceitos:"}.
|
||||
{"Chatroom configuration modified","Configuração da sala de bate-papo modificada"}.
|
||||
@@ -98,6 +99,7 @@
|
||||
{"Configuration","Configuração"}.
|
||||
{"Connected Resources:","Recursos conectados:"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Endereços de contato (normalmente, o proprietário ou os proprietários da sala)"}.
|
||||
{"Contrib Modules","Módulos contrib"}.
|
||||
{"Country","País"}.
|
||||
{"CPU Time:","Tempo da CPU:"}.
|
||||
{"Current Discussion Topic","Assunto em discussão"}.
|
||||
@@ -172,6 +174,8 @@
|
||||
{"Full List of Room Admins","Lista completa dos administradores das salas"}.
|
||||
{"Full List of Room Owners","Lista completa dos proprietários das salas"}.
|
||||
{"Full Name","Nome completo"}.
|
||||
{"Get List of Online Users","Obter a lista de utilizadores online"}.
|
||||
{"Get List of Registered Users","Obter a lista de utilizadores registados"}.
|
||||
{"Get Number of Online Users","Obter quantidade de utilizadores online"}.
|
||||
{"Get Number of Registered Users","Obter quantidade de utilizadores registados"}.
|
||||
{"Get Pending","Obter os pendentes"}.
|
||||
@@ -213,6 +217,8 @@
|
||||
{"Incorrect value of 'action' attribute","Valor incorreto do atributo 'action'"}.
|
||||
{"Incorrect value of 'action' in data form","Valor incorreto de 'action' no formulário de dados"}.
|
||||
{"Incorrect value of 'path' in data form","Valor incorreto de 'path' no formulário de dados"}.
|
||||
{"Installed Modules:","Módulos instalados:"}.
|
||||
{"Install","Instalar"}.
|
||||
{"Insufficient privilege","Privilégio insuficiente"}.
|
||||
{"Internal server error","Erro interno do servidor"}.
|
||||
{"Invalid 'from' attribute in forwarded message","Atributo 'from' inválido na mensagem reenviada"}.
|
||||
@@ -229,6 +235,8 @@
|
||||
{"January","Janeiro"}.
|
||||
{"JID normalization denied by service policy","Normalização JID negada por causa da política de serviços"}.
|
||||
{"JID normalization failed","A normalização JID falhou"}.
|
||||
{"Joined MIX channels of ~ts","Entrou no canais MIX do ~ts"}.
|
||||
{"Joined MIX channels:","Uniu-se aos canais MIX:"}.
|
||||
{"joins the room","Entrar na sala"}.
|
||||
{"July","Julho"}.
|
||||
{"June","Junho"}.
|
||||
@@ -349,6 +357,7 @@
|
||||
{"Number of registered users","Quantidade de utilizadores registados"}.
|
||||
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Quantidade de segundos após limpar automaticamente os itens ou `max` para nenhum limite específico que não seja um servidor imposto máximo"}.
|
||||
{"Occupants are allowed to invite others","As pessoas estão autorizadas a convidar outras pessoas"}.
|
||||
{"Occupants are allowed to query others","Os ocupantes estão autorizados a consultar os outros"}.
|
||||
{"Occupants May Change the Subject","As pessoas talvez possam alterar o assunto"}.
|
||||
{"October","Outubro"}.
|
||||
{"Offline Messages","Mensagens offline"}.
|
||||
@@ -375,11 +384,13 @@
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Apenas aqueles presentes numa lista branca podem se inscrever e recuperar os itens"}.
|
||||
{"Organization Name","Nome da organização"}.
|
||||
{"Organization Unit","Unidade da organização"}.
|
||||
{"Other Modules Available:","Outros módulos disponíveis:"}.
|
||||
{"Outgoing s2s Connections","Conexões s2s de Saída"}.
|
||||
{"Outgoing s2s Connections:","Saída das conexões s2s:"}.
|
||||
{"Owner privileges required","São necessários privilégios de dono"}.
|
||||
{"Packet relay is denied by service policy","A retransmissão de pacote é negada por causa da política de serviço"}.
|
||||
{"Packet","Pacote"}.
|
||||
{"Participant ID","ID do participante"}.
|
||||
{"Participant","Participante"}.
|
||||
{"Password Verification:","Verificação da Palavra-passe:"}.
|
||||
{"Password Verification","Verificação de Palavra-passe"}.
|
||||
@@ -387,7 +398,6 @@
|
||||
{"Password:","Palavra-chave:"}.
|
||||
{"Path to Dir","Caminho para o directório"}.
|
||||
{"Path to File","Caminho do ficheiro"}.
|
||||
{"Payload type","Tipo da carga útil"}.
|
||||
{"Pending","Pendente"}.
|
||||
{"Period: ","Período: "}.
|
||||
{"Persist items to storage","Persistir elementos ao armazenar"}.
|
||||
@@ -482,6 +492,7 @@
|
||||
{"Shut Down Service","Parar Serviço"}.
|
||||
{"SOCKS5 Bytestreams","Bytestreams SOCKS5"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Alguns clientes XMPP podem armazenar a sua palavra-passe no seu computador, só faça isso no seu computador particular por questões de segurança."}.
|
||||
{"Sources Specs:","Especificações das fontes:"}.
|
||||
{"Specify the access model","Especificar os modelos de acesso"}.
|
||||
{"Specify the event message type","Especificar o tipo de mensagem para o evento"}.
|
||||
{"Specify the publisher model","Especificar o modelo do publicante"}.
|
||||
@@ -527,6 +538,8 @@
|
||||
{"The JIDs of those to contact with questions","Os JIDs daqueles para entrar em contato com perguntas"}.
|
||||
{"The JIDs of those with an affiliation of owner","Os JIDs daqueles com uma afiliação de proprietário"}.
|
||||
{"The JIDs of those with an affiliation of publisher","Os JIDs daqueles com uma afiliação de editor"}.
|
||||
{"The list of all online users","A lista de todos os utilizadores online"}.
|
||||
{"The list of all users","A lista de todos os utilizadores"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","A lista dos JIDs que podem associar as páginas dos nós numa coleção"}.
|
||||
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","A quantidade máxima de nós relacionados que podem ser associados a uma coleção ou `máximo` para nenhum limite específico que não seja um servidor imposto no máximo"}.
|
||||
{"The minimum number of milliseconds between sending any two notification digests","A quantidade mínima de milissegundos entre o envio do resumo das duas notificações"}.
|
||||
@@ -550,7 +563,6 @@
|
||||
{"The sender of the last received message","O remetente da última mensagem que foi recebida"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","A instância DEVE conter apenas um elemento <active/>, um elemento <default/>, ou um elemento <list/>"}.
|
||||
{"The subscription identifier associated with the subscription request","O identificador da assinatura associado à solicitação da assinatura"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","O tipo dos dados do nó, normalmente definido pelo espaço dos nomes da carga útil (caso haja)"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","O URL da transformação XSL que pode ser aplicada nas cargas úteis para gerar um elemento apropriado no corpo da mensagem."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","A URL de uma transformação XSL que pode ser aplicada ao formato de carga útil para gerar um Formulário de Dados válido onde o cliente possa exibir usando um mecanismo genérico de renderização do Formulários de Dados"}.
|
||||
{"There was an error changing the password: ","Houve um erro ao alterar a palavra-passe: "}.
|
||||
@@ -591,6 +603,7 @@
|
||||
{"Unauthorized","Não Autorizado"}.
|
||||
{"Unexpected action","Ação inesperada"}.
|
||||
{"Unexpected error condition: ~p","Condição de erro inesperada: ~p"}.
|
||||
{"Uninstall","Desinstalar"}.
|
||||
{"Unregister an XMPP account","Excluir uma conta XMPP"}.
|
||||
{"Unregister","Deletar registo"}.
|
||||
{"Unselect All","Desmarcar todos"}.
|
||||
@@ -601,7 +614,10 @@
|
||||
{"Update ~p","Atualizar ~p"}.
|
||||
{"Update plan","Plano de atualização"}.
|
||||
{"Update script","Script de atualização"}.
|
||||
{"Update specs to get modules source, then install desired ones.","Atualize as especificações para obter a fonte dos módulos e instale os que desejar."}.
|
||||
{"Update Specs","Atualizar as especificações"}.
|
||||
{"Update","Actualizar"}.
|
||||
{"Upgrade","Atualização"}.
|
||||
{"Uptime:","Tempo de atividade:"}.
|
||||
{"URL for Archived Discussion Logs","A URL para o arquivamento dos registos da discussão"}.
|
||||
{"User already exists","Utilizador já existe"}.
|
||||
@@ -624,6 +640,7 @@
|
||||
{"Value of '~s' should be integer","Valor de '~s' deveria ser um inteiro"}.
|
||||
{"Value 'set' of 'type' attribute is not allowed","Valor 'set' não permitido para atributo 'type'"}.
|
||||
{"vCard User Search","Busca de Utilizador vCard"}.
|
||||
{"View joined MIX channels","Exibir os canais MIX aderidos"}.
|
||||
{"View Queue","Exibir a fila"}.
|
||||
{"View Roster","Ver a lista"}.
|
||||
{"Virtual Hosts","Hosts virtuais"}.
|
||||
|
||||
@@ -253,7 +253,6 @@
|
||||
{"Password:","Fjalëkalim:"}.
|
||||
{"Path to Dir","Shteg për te Drejtori"}.
|
||||
{"Path to File","Shteg për te Kartelë"}.
|
||||
{"Payload type","Lloj ngarkese"}.
|
||||
{"Pending","Pezull"}.
|
||||
{"Period: ","Periudhë: "}.
|
||||
{"Ping","Ping"}.
|
||||
|
||||
@@ -398,7 +398,6 @@
|
||||
{"Password:","密码:"}.
|
||||
{"Path to Dir","目录的路径"}.
|
||||
{"Path to File","文件路径"}.
|
||||
{"Payload type","有效载荷类型"}.
|
||||
{"Pending","挂起"}.
|
||||
{"Period: ","持续时间: "}.
|
||||
{"Persist items to storage","持久化内容条目"}.
|
||||
@@ -564,7 +563,6 @@
|
||||
{"The sender of the last received message","最后收到的消息的发送者"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","本节必须只含一个 <active/> 元素, <default/> 元素,或 <list/> 元素"}.
|
||||
{"The subscription identifier associated with the subscription request","与订阅请求关联的订阅标识符"}.
|
||||
{"The type of node data, usually specified by the namespace of the payload (if any)","节点数据的类型, 如果有, 通常由有效负载的名称空间指定"}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","XSL转换的URL,可以将其应用于有效负载以生成适当的消息正文元素。"}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","XSL转换的URL, 可以将其应用于有效负载格式, 以生成有效的数据表单结果, 客户端可以使用通用数据表单呈现引擎来显示该结果"}.
|
||||
{"There was an error changing the password: ","修改密码出错: "}.
|
||||
|
||||
+15
-12
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -26,22 +26,25 @@
|
||||
{if_var_true, elixir,
|
||||
{elixir, ".*", {git, "https://github.com/elixir-lang/elixir", {tag, "v1.4.4"}}}},
|
||||
{if_var_true, pam,
|
||||
{epam, ".*", {git, "https://github.com/processone/epam", {tag, "1.0.12"}}}},
|
||||
{epam, ".*", {git, "https://github.com/processone/epam", {tag, "1.0.14"}}}},
|
||||
{if_var_true, redis,
|
||||
{eredis, ".*", {git, "https://github.com/wooga/eredis", {tag, "v1.2.0"}}}},
|
||||
{if_var_true, sip,
|
||||
{esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.48"}}}},
|
||||
{esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.49"}}}},
|
||||
{if_var_true, zlib,
|
||||
{ezlib, ".*", {git, "https://github.com/processone/ezlib", {tag, "1.0.12"}}}},
|
||||
{fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.1.16"}}},
|
||||
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.49"}}},
|
||||
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.34"}}},
|
||||
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.36"}}},
|
||||
{idna, ".*", {git, "https://github.com/benoitc/erlang-idna", {tag, "6.0.0"}}},
|
||||
{if_version_above, "19",
|
||||
{jiffy, ".*", {git, "https://github.com/davisp/jiffy", {tag, "1.1.1"}}},
|
||||
{jiffy, ".*", {git, "https://github.com/davisp/jiffy", {tag, "1.1.0"}}} % for R19 and below
|
||||
},
|
||||
{jose, ".*", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.1"}}},
|
||||
{if_version_above, "20",
|
||||
{jose, ".*", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.5"}}},
|
||||
{jose, ".*", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.1"}}}
|
||||
},
|
||||
{if_version_below, "22",
|
||||
{lager, ".*", {git, "https://github.com/erlang-lager/lager", {tag, "3.9.1"}}}
|
||||
},
|
||||
@@ -54,24 +57,24 @@
|
||||
{luerl, ".*", {git, "https://github.com/rvirding/luerl", {tag, "1.0.0"}}}
|
||||
}},
|
||||
{mqtree, ".*", {git, "https://github.com/processone/mqtree", {tag, "1.0.15"}}},
|
||||
{p1_acme, ".*", {git, "https://github.com/processone/p1_acme", {tag, "1.0.20"}}},
|
||||
{p1_acme, ".*", {git, "https://github.com/processone/p1_acme", {tag, "1.0.22"}}},
|
||||
{if_var_true, mysql,
|
||||
{p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql", {tag, "1.0.20"}}}},
|
||||
{p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql", {tag, "1.0.21"}}}},
|
||||
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.11"}}},
|
||||
{if_var_true, pgsql,
|
||||
{p1_pgsql, ".*", {git, "https://github.com/processone/p1_pgsql", {tag, "1.1.19"}}}},
|
||||
{p1_pgsql, ".*", {git, "https://github.com/processone/p1_pgsql", {tag, "1.1.22"}}}},
|
||||
{p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.25"}}},
|
||||
{pkix, ".*", {git, "https://github.com/processone/pkix", {tag, "1.0.9"}}},
|
||||
{if_not_rebar3, %% Needed because modules are not fully migrated to new structure and mix
|
||||
{if_var_true, elixir,
|
||||
{rebar_elixir_plugin, ".*", {git, "https://github.com/processone/rebar_elixir_plugin", "0.1.0"}}}},
|
||||
{if_var_true, sqlite,
|
||||
{sqlite3, ".*", {git, "https://github.com/processone/erlang-sqlite3", {tag, "1.1.13"}}}},
|
||||
{sqlite3, ".*", {git, "https://github.com/processone/erlang-sqlite3", {tag, "1.1.14"}}}},
|
||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.29"}}},
|
||||
{if_var_true, stun,
|
||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.2.6"}}}},
|
||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", {tag, "1.6.0"}}},
|
||||
{yconf, ".*", {git, "https://github.com/processone/yconf", {tag, "1.0.14"}}}
|
||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.2.7"}}}},
|
||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", {tag, "1.6.2"}}},
|
||||
{yconf, ".*", {git, "https://github.com/processone/yconf", {tag, "1.0.15"}}}
|
||||
]}.
|
||||
|
||||
{gitonly_deps, [elixir]}.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @author Evgeniy Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% @copyright (C) 2013-2022, Evgeniy Khramtsov
|
||||
%%% @copyright (C) 2013-2023, Evgeniy Khramtsov
|
||||
%%% @doc
|
||||
%%%
|
||||
%%% @end
|
||||
|
||||
+5
-6
@@ -1,25 +1,24 @@
|
||||
echo -n "===> Preparing dev configuration files: "
|
||||
printf "===> Preparing dev configuration files: "
|
||||
|
||||
PWD_DIR=`pwd`
|
||||
PWD_DIR=$(pwd)
|
||||
REL_DIR=$PWD_DIR/_build/dev/rel/ejabberd/
|
||||
CON_DIR=$REL_DIR/conf/
|
||||
|
||||
[ -z "$REL_DIR_TEMP" ] && REL_DIR_TEMP=$REL_DIR
|
||||
CON_DIR_TEMP=$REL_DIR_TEMP/conf/
|
||||
BIN_DIR_TEMP=$REL_DIR_TEMP/bin/
|
||||
|
||||
cd $CON_DIR_TEMP
|
||||
cd $CON_DIR_TEMP || exit
|
||||
|
||||
sed -i "s|# certfiles:|certfiles:\n - $CON_DIR/cert.pem|g" ejabberd.yml.example
|
||||
sed -i "s|certfiles:|ca_file: $CON_DIR/ca.pem\ncertfiles:|g" ejabberd.yml.example
|
||||
sed -i 's|^acl:$|acl:\n admin: [user: admin]|g' ejabberd.yml.example
|
||||
[ ! -f "$CON_DIR/ejabberd.yml" ] \
|
||||
&& echo -n "ejabberd.yml " \
|
||||
&& printf "ejabberd.yml " \
|
||||
&& mv ejabberd.yml.example ejabberd.yml
|
||||
|
||||
sed -i "s|#' POLL|EJABBERD_BYPASS_WARNINGS=true\n\n#' POLL|g" ejabberdctl.cfg.example
|
||||
[ ! -f "$CON_DIR/ejabberdctl.cfg" ] \
|
||||
&& echo -n "ejabberdctl.cfg " \
|
||||
&& printf "ejabberdctl.cfg " \
|
||||
&& mv ejabberdctl.cfg.example ejabberdctl.cfg
|
||||
|
||||
echo ""
|
||||
|
||||
+6
-5
@@ -1,4 +1,4 @@
|
||||
PWD_DIR=`pwd`
|
||||
PWD_DIR=$(pwd)
|
||||
REL_DIR=$PWD_DIR/_build/relive/
|
||||
CON_DIR=$REL_DIR/conf/
|
||||
|
||||
@@ -15,16 +15,17 @@ cp ejabberd.yml.example $CON_DIR/ejabberd.yml.example
|
||||
cp test/ejabberd_SUITE_data/ca.pem $CON_DIR
|
||||
cp test/ejabberd_SUITE_data/cert.pem $CON_DIR
|
||||
|
||||
cd $CON_DIR_TEMP
|
||||
cd $CON_DIR_TEMP || exit
|
||||
|
||||
sed -i "s|# certfiles:|certfiles:\n - $CON_DIR/cert.pem|g" ejabberd.yml.example
|
||||
sed -i "s|certfiles:|ca_file: $CON_DIR/ca.pem\ncertfiles:|g" ejabberd.yml.example
|
||||
sed -i 's|^acl:$|acl:\n admin: [user: admin]|g' ejabberd.yml.example
|
||||
[ ! -f "$CON_DIR/ejabberd.yml" ] \
|
||||
&& echo -n "ejabberd.yml " \
|
||||
&& printf "ejabberd.yml " \
|
||||
&& mv ejabberd.yml.example ejabberd.yml
|
||||
|
||||
sed -i "s|#' POLL|EJABBERD_BYPASS_WARNINGS=true\n\n#' POLL|g" ejabberdctl.cfg.example
|
||||
[ ! -f "$CON_DIR/ejabberdctl.cfg" ] \
|
||||
&& echo -n "ejabberdctl.cfg " \
|
||||
&& mv ejabberdctl.cfg.example ejabberdctl.cfg
|
||||
&& printf "ejabberdctl.cfg " \
|
||||
&& mv ejabberdctl.cfg.example ejabberdctl.cfg \
|
||||
|| printf
|
||||
|
||||
+2
-13
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -52,7 +52,6 @@ CREATE TABLE rosterusers (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers (server_host, username, jid);
|
||||
CREATE INDEX i_rosteru_sh_username ON rosterusers (server_host, username);
|
||||
CREATE INDEX i_rosteru_sh_jid ON rosterusers (server_host, jid);
|
||||
|
||||
|
||||
@@ -84,7 +83,6 @@ CREATE TABLE sr_user (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_user_sh_jid_grp ON sr_user (server_host, jid, grp);
|
||||
CREATE INDEX i_sr_user_sh_jid ON sr_user (server_host, jid);
|
||||
CREATE INDEX i_sr_user_sh_grp ON sr_user (server_host, grp);
|
||||
|
||||
CREATE TABLE spool (
|
||||
@@ -190,7 +188,6 @@ CREATE TABLE privacy_list (
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX i_privacy_list_sh_username ON privacy_list (server_host, username);
|
||||
CREATE UNIQUE INDEX i_privacy_list_sh_username_name ON privacy_list (server_host, username, name);
|
||||
|
||||
CREATE TABLE privacy_list_data (
|
||||
@@ -215,9 +212,6 @@ CREATE TABLE private_storage (
|
||||
PRIMARY KEY (server_host, username, namespace)
|
||||
);
|
||||
|
||||
CREATE INDEX i_private_storage_sh_username ON private_storage (server_host, username);
|
||||
|
||||
|
||||
CREATE TABLE roster_version (
|
||||
username text NOT NULL,
|
||||
server_host text NOT NULL,
|
||||
@@ -319,7 +313,6 @@ CREATE TABLE muc_online_users (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users (username, server, resource, name, host);
|
||||
CREATE INDEX i_muc_online_users_us ON muc_online_users (username, server);
|
||||
|
||||
CREATE TABLE muc_room_subscribers (
|
||||
room text NOT NULL,
|
||||
@@ -389,7 +382,6 @@ CREATE TABLE route (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_route ON route(domain, server_host, node, pid);
|
||||
CREATE INDEX i_route_domain ON route(domain);
|
||||
|
||||
CREATE TABLE bosh (
|
||||
sid text NOT NULL,
|
||||
@@ -422,6 +414,7 @@ CREATE TABLE push_session (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session (server_host, username, service, node);
|
||||
CREATE INDEX i_push_session_sh_username_timestamp ON push_session (server_host, username, timestamp);
|
||||
|
||||
CREATE TABLE mix_channel (
|
||||
channel text NOT NULL,
|
||||
@@ -449,7 +442,6 @@ CREATE TABLE mix_participant (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_participant ON mix_participant (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_participant_chan_serv ON mix_participant (channel, service);
|
||||
|
||||
CREATE TABLE mix_subscription (
|
||||
channel text NOT NULL,
|
||||
@@ -461,9 +453,7 @@ CREATE TABLE mix_subscription (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_subscription ON mix_subscription (channel, service, username, domain, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_ud ON mix_subscription (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_node ON mix_subscription (channel, service, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv ON mix_subscription (channel, service);
|
||||
|
||||
CREATE TABLE mix_pam (
|
||||
username text NOT NULL,
|
||||
@@ -475,7 +465,6 @@ CREATE TABLE mix_pam (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username, server_host, channel, service);
|
||||
CREATE INDEX i_mix_pam_us ON mix_pam (username, server_host);
|
||||
|
||||
CREATE TABLE mqtt_pub (
|
||||
username text NOT NULL,
|
||||
|
||||
+1
-11
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -47,7 +47,6 @@ CREATE TABLE rosterusers (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_rosteru_user_jid ON rosterusers (username, jid);
|
||||
CREATE INDEX i_rosteru_username ON rosterusers (username);
|
||||
CREATE INDEX i_rosteru_jid ON rosterusers (jid);
|
||||
|
||||
|
||||
@@ -74,7 +73,6 @@ CREATE TABLE sr_user (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_user_jid_grp ON sr_user (jid, grp);
|
||||
CREATE INDEX i_sr_user_jid ON sr_user (jid);
|
||||
CREATE INDEX i_sr_user_grp ON sr_user (grp);
|
||||
|
||||
CREATE TABLE spool (
|
||||
@@ -169,7 +167,6 @@ CREATE TABLE privacy_list (
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX i_privacy_list_username ON privacy_list (username);
|
||||
CREATE UNIQUE INDEX i_privacy_list_username_name ON privacy_list (username, name);
|
||||
|
||||
CREATE TABLE privacy_list_data (
|
||||
@@ -192,7 +189,6 @@ CREATE TABLE private_storage (
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX i_private_storage_username ON private_storage (username);
|
||||
CREATE UNIQUE INDEX i_private_storage_username_namespace ON private_storage (username, namespace);
|
||||
|
||||
|
||||
@@ -291,7 +287,6 @@ CREATE TABLE muc_online_users (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users (username, server, resource, name, host);
|
||||
CREATE INDEX i_muc_online_users_us ON muc_online_users (username, server);
|
||||
|
||||
CREATE TABLE muc_room_subscribers (
|
||||
room text NOT NULL,
|
||||
@@ -358,7 +353,6 @@ CREATE TABLE route (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_route ON route(domain, server_host, node, pid);
|
||||
CREATE INDEX i_route_domain ON route(domain);
|
||||
|
||||
CREATE TABLE bosh (
|
||||
sid text NOT NULL,
|
||||
@@ -417,7 +411,6 @@ CREATE TABLE mix_participant (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_participant ON mix_participant (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_participant_chan_serv ON mix_participant (channel, service);
|
||||
|
||||
CREATE TABLE mix_subscription (
|
||||
channel text NOT NULL,
|
||||
@@ -429,9 +422,7 @@ CREATE TABLE mix_subscription (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_subscription ON mix_subscription (channel, service, username, domain, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_ud ON mix_subscription (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_node ON mix_subscription (channel, service, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv ON mix_subscription (channel, service);
|
||||
|
||||
CREATE TABLE mix_pam (
|
||||
username text NOT NULL,
|
||||
@@ -442,7 +433,6 @@ CREATE TABLE mix_pam (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username, channel, service);
|
||||
CREATE INDEX i_mix_pam_us ON mix_pam (username);
|
||||
|
||||
CREATE TABLE mqtt_pub (
|
||||
username text NOT NULL,
|
||||
|
||||
@@ -0,0 +1,646 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
-- published by the Free Software Foundation; either version 2 of the
|
||||
-- License, or (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
-- General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License along
|
||||
-- with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
--
|
||||
|
||||
SET ANSI_PADDING OFF;
|
||||
SET ANSI_NULLS ON;
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
SET ANSI_PADDING ON;
|
||||
|
||||
CREATE TABLE [dbo].[archive] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[timestamp] [bigint] NOT NULL,
|
||||
[peer] [varchar] (250) NOT NULL,
|
||||
[bare_peer] [varchar] (250) NOT NULL,
|
||||
[xml] [ntext] NOT NULL,
|
||||
[txt] [ntext] NULL,
|
||||
[id] [bigint] IDENTITY(1,1) NOT NULL,
|
||||
[kind] [varchar] (10) NULL,
|
||||
[nick] [varchar] (250) NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [archive_PK] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[id] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE INDEX [archive_sh_username_timestamp] ON [archive] (server_host, username, timestamp)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [archive_sh_username_peer] ON [archive] (server_host, username, peer)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [archive_sh_username_bare_peer] ON [archive] (server_host, username, bare_peer)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [archive_sh_timestamp] ON [archive] (server_host, timestamp)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[archive_prefs] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[def] [text] NOT NULL,
|
||||
[always] [text] NOT NULL,
|
||||
[never] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [archive_prefs_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[caps_features] (
|
||||
[node] [varchar] (250) NOT NULL,
|
||||
[subnode] [varchar] (250) NOT NULL,
|
||||
[feature] [text] NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE CLUSTERED INDEX [caps_features_node_subnode] ON [caps_features] (node, subnode)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[last] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[seconds] [text] NOT NULL,
|
||||
[state] [text] NOT NULL,
|
||||
CONSTRAINT [last_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[motd] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[xml] [text] NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [motd_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[muc_registered] (
|
||||
[jid] [varchar] (255) NOT NULL,
|
||||
[host] [varchar] (255) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[nick] [varchar] (255) NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
CREATE INDEX [muc_registered_nick] ON [muc_registered] (nick)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [muc_registered_jid_host] ON [muc_registered] (jid, host)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[muc_room] (
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[host] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[opts] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [muc_room_name_host] ON [muc_room] (name, host)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
CREATE INDEX [muc_room_host_created_at] ON [muc_registered] (host, nick)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[muc_online_room] (
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[host] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[node] [varchar] (250) NOT NULL,
|
||||
[pid] [varchar] (100) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [muc_online_room_name_host] ON [muc_online_room] (name, host)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[muc_online_users] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server] [varchar] (250) NOT NULL,
|
||||
[resource] [varchar] (250) NOT NULL,
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[host] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[node] [varchar] (250) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX [muc_online_users_i] ON [muc_online_users] (username, server, resource, name, host)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[muc_room_subscribers] (
|
||||
[room] [varchar] (191) NOT NULL,
|
||||
[host] [varchar] (191) NOT NULL,
|
||||
[jid] [varchar] (191) NOT NULL,
|
||||
[nick] [text] NOT NULL,
|
||||
[nodes] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [muc_room_subscribers_host_room_jid] ON [muc_room_subscribers] (host, room, jid);
|
||||
CREATE INDEX [muc_room_subscribers_host_jid] ON [muc_room_subscribers] (host, jid);
|
||||
CREATE INDEX [muc_room_subscribers_jid] ON [muc_room_subscribers] (jid);
|
||||
|
||||
CREATE TABLE [dbo].[privacy_default_list] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
CONSTRAINT [privacy_default_list_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
);
|
||||
|
||||
CREATE TABLE [dbo].[privacy_list] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[id] [bigint] IDENTITY(1,1) NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [privacy_list_PK] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[id] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX [privacy_list_sh_username_name] ON [privacy_list] (server_host, username, name)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[privacy_list_data] (
|
||||
[id] [bigint] NULL,
|
||||
[t] [char] (1) NOT NULL,
|
||||
[value] [text] NOT NULL,
|
||||
[action] [char] (1) NOT NULL,
|
||||
[ord] [smallint] NOT NULL,
|
||||
[match_all] [smallint] NOT NULL,
|
||||
[match_iq] [smallint] NOT NULL,
|
||||
[match_message] [smallint] NOT NULL,
|
||||
[match_presence_in] [smallint] NOT NULL,
|
||||
[match_presence_out] [smallint] NOT NULL
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE CLUSTERED INDEX [privacy_list_data_id] ON [privacy_list_data] (id)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[private_storage] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[namespace] [varchar] (250) NOT NULL,
|
||||
[data] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [private_storage_sh_username_namespace] ON [private_storage] (server_host, username, namespace)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_item] (
|
||||
[nodeid] [bigint] NULL,
|
||||
[itemid] [varchar] (255) NOT NULL,
|
||||
[publisher] [varchar] (250) NOT NULL,
|
||||
[creation] [varchar] (32) NOT NULL,
|
||||
[modification] [varchar] (32) NOT NULL,
|
||||
[payload] [text] NOT NULL DEFAULT ''
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE INDEX [pubsub_item_itemid] ON [pubsub_item] (itemid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [pubsub_item_nodeid_itemid] ON [pubsub_item] (nodeid, itemid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_node_option] (
|
||||
[nodeid] [bigint] NULL,
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[val] [varchar] (250) NOT NULL
|
||||
);
|
||||
|
||||
CREATE CLUSTERED INDEX [pubsub_node_option_nodeid] ON [pubsub_node_option] (nodeid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_node_owner] (
|
||||
[nodeid] [bigint] NULL,
|
||||
[owner] [text] NOT NULL
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE CLUSTERED INDEX [pubsub_node_owner_nodeid] ON [pubsub_node_owner] (nodeid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_state] (
|
||||
[nodeid] [bigint] NULL,
|
||||
[jid] [varchar] (255) NOT NULL,
|
||||
[affiliation] [char] (1) NOT NULL,
|
||||
[subscriptions] [text] NOT NULL DEFAULT '',
|
||||
[stateid] [bigint] IDENTITY(1,1) NOT NULL,
|
||||
CONSTRAINT [pubsub_state_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[stateid] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE INDEX [pubsub_state_jid] ON [pubsub_state] (jid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE INDEX [pubsub_state_nodeid_jid] ON [pubsub_state] (nodeid, jid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_subscription_opt] (
|
||||
[subid] [varchar] (255) NOT NULL,
|
||||
[opt_name] [varchar] (32) NOT NULL,
|
||||
[opt_value] [text] NOT NULL
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [pubsub_subscription_opt_subid_opt_name] ON [pubsub_subscription_opt] (subid, opt_name)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_node] (
|
||||
[host] [varchar] (255) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
[parent] [varchar] (255) NOT NULL DEFAULT '',
|
||||
[plugin] [varchar] (32) NOT NULL,
|
||||
[nodeid] [bigint] IDENTITY(1,1) NOT NULL,
|
||||
CONSTRAINT [pubsub_node_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[nodeid] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
);
|
||||
|
||||
CREATE INDEX [pubsub_node_parent] ON [pubsub_node] (parent)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE INDEX [pubsub_node_host_node] ON [pubsub_node] (host, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[roster_version] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[version] [text] NOT NULL,
|
||||
CONSTRAINT [roster_version_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[rostergroups] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[grp] [text] NOT NULL
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE CLUSTERED INDEX [rostergroups_sh_username_jid] ON [rostergroups] ([server_host], [username], [jid])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[rosterusers] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[nick] [text] NOT NULL,
|
||||
[subscription] [char] (1) NOT NULL,
|
||||
[ask] [char] (1) NOT NULL,
|
||||
[askmessage] [text] NOT NULL,
|
||||
[server] [char] (1) NOT NULL,
|
||||
[subscribe] [text] NOT NULL,
|
||||
[type] [text] NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [rosterusers_sh_username_jid] ON [rosterusers] ([server_host], [username], [jid])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [rosterusers_sh_jid] ON [rosterusers] ([server_host], [jid])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[sm] (
|
||||
[usec] [bigint] NOT NULL,
|
||||
[pid] [varchar] (100) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
[username] [varchar] (255) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[resource] [varchar] (255) NOT NULL,
|
||||
[priority] [text] NOT NULL,
|
||||
[info] [text] NOT NULL
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [sm_sid] ON [sm] (usec, pid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [sm_node] ON [sm] (node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [sm_sh_username] ON [sm] (server_host, username)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[spool] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[xml] [text] NOT NULL,
|
||||
[seq] [bigint] IDENTITY(1,1) NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [spool_PK] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[seq] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE INDEX [spool_sh_username] ON [spool] (server_host, username)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [spool_created_at] ON [spool] (created_at)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
;
|
||||
|
||||
CREATE TABLE [dbo].[sr_group] (
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[opts] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [sr_group_sh_name] ON [sr_group] ([server_host], [name])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[sr_user] (
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[grp] [varchar] (250) NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [sr_user_sh_jid_group] ON [sr_user] ([server_host], [jid], [grp])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [sr_user_sh_grp] ON [sr_user] ([server_host], [grp])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[users] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[password] [text] NOT NULL,
|
||||
[serverkey] [text] NOT NULL DEFAULT '',
|
||||
[salt] [text] NOT NULL DEFAULT '',
|
||||
[iterationcount] [smallint] NOT NULL DEFAULT 0,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [users_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[vcard] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[vcard] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [vcard_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[username] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[vcard_search] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[lusername] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[fn] [text] NOT NULL,
|
||||
[lfn] [varchar] (250) NOT NULL,
|
||||
[family] [text] NOT NULL,
|
||||
[lfamily] [varchar] (250) NOT NULL,
|
||||
[given] [text] NOT NULL,
|
||||
[lgiven] [varchar] (250) NOT NULL,
|
||||
[middle] [text] NOT NULL,
|
||||
[lmiddle] [varchar] (250) NOT NULL,
|
||||
[nickname] [text] NOT NULL,
|
||||
[lnickname] [varchar] (250) NOT NULL,
|
||||
[bday] [text] NOT NULL,
|
||||
[lbday] [varchar] (250) NOT NULL,
|
||||
[ctry] [text] NOT NULL,
|
||||
[lctry] [varchar] (250) NOT NULL,
|
||||
[locality] [text] NOT NULL,
|
||||
[llocality] [varchar] (250) NOT NULL,
|
||||
[email] [text] NOT NULL,
|
||||
[lemail] [varchar] (250) NOT NULL,
|
||||
[orgname] [text] NOT NULL,
|
||||
[lorgname] [varchar] (250) NOT NULL,
|
||||
[orgunit] [text] NOT NULL,
|
||||
[lorgunit] [varchar] (250) NOT NULL,
|
||||
CONSTRAINT [vcard_search_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[server_host] ASC,
|
||||
[lusername] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lfn] ON [vcard_search] (server_host, lfn)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lfamily] ON [vcard_search] (server_host, lfamily)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lgiven] ON [vcard_search] (server_host, lgiven)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lmiddle] ON [vcard_search] (server_host, lmiddle)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lnickname] ON [vcard_search] (server_host, lnickname)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lbday] ON [vcard_search] (server_host, lbday)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lctry] ON [vcard_search] (server_host, lctry)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_llocality] ON [vcard_search] (server_host, llocality)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lemail] ON [vcard_search] (server_host, lemail)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lorgname] ON [vcard_search] (server_host, lorgname)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [vcard_search_sh_lorgunit] ON [vcard_search] (server_host, lorgunit)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_item] WITH CHECK ADD CONSTRAINT [pubsub_item_ibfk_1] FOREIGN KEY([nodeid])
|
||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
||||
ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_item] CHECK CONSTRAINT [pubsub_item_ibfk_1];
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_node_option] WITH CHECK ADD CONSTRAINT [pubsub_node_option_ibfk_1] FOREIGN KEY([nodeid])
|
||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
||||
ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_node_option] CHECK CONSTRAINT [pubsub_node_option_ibfk_1];
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_node_owner] WITH CHECK ADD CONSTRAINT [pubsub_node_owner_ibfk_1] FOREIGN KEY([nodeid])
|
||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
||||
ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_node_owner] CHECK CONSTRAINT [pubsub_node_owner_ibfk_1];
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_state] WITH CHECK ADD CONSTRAINT [pubsub_state_ibfk_1] FOREIGN KEY([nodeid])
|
||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
||||
ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE [dbo].[pubsub_state] CHECK CONSTRAINT [pubsub_state_ibfk_1];
|
||||
|
||||
CREATE TABLE [dbo].[oauth_token] (
|
||||
[token] [varchar] (250) NOT NULL,
|
||||
[jid] [text] NOT NULL,
|
||||
[scope] [text] NOT NULL,
|
||||
[expire] [bigint] NOT NULL,
|
||||
CONSTRAINT [oauth_token_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[token] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE TABLE [dbo].[route] (
|
||||
[domain] [varchar] (255) NOT NULL,
|
||||
[server_host] [varchar] (255) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
[pid] [varchar](100) NOT NULL,
|
||||
[local_hint] [text] NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [route_i] ON [route] (domain, server_host, node, pid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[bosh] (
|
||||
[sid] [varchar] (255) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
[pid] [varchar](100) NOT NULL
|
||||
CONSTRAINT [bosh_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[sid] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
);
|
||||
|
||||
CREATE TABLE [dbo].[push_session] (
|
||||
[username] [varchar] (255) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[timestamp] [bigint] NOT NULL,
|
||||
[service] [varchar] (255) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
[xml] [varchar] (255) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE NONCLUSTERED INDEX [push_session_susn] ON [push_session] (server_host, username, service, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [push_session_sh_username_timestamp] ON [push_session] (server_host, username, timestamp)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_channel] (
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[domain] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[hidden] [smallint] NOT NULL,
|
||||
[hmac_key] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [mix_channel] ON [mix_channel] (channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_channel_serv] ON [mix_channel] (service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_participant] (
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[domain] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[id] [text] NOT NULL,
|
||||
[nick] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE INDEX [mix_participant] ON [mix_participant] (channel, service, username, domain)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_participant_chan_serv] ON [mix_participant] (channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_subscription] (
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[domain] [varchar] (250) NOT NULL,
|
||||
[node] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX [mix_subscription] ON [mix_subscription] (channel, service, username, domain, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_subscription_chan_serv_ud] ON [mix_subscription] (channel, service, username, domain)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_subscription_chan_serv_node] ON [mix_subscription] (channel, service, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_subscription_chan_serv] ON [mix_subscription] (channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_pam] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[id] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE NONCLUSTERED INDEX [mix_pam] ON [mix_pam] (username, server_host, channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mqtt_pub] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[server_host] [varchar] (250) NOT NULL,
|
||||
[resource] [varchar] (250) NOT NULL,
|
||||
[topic] [varchar] (250) NOT NULL,
|
||||
[qos] [tinyint] NOT NULL,
|
||||
[payload] [varbinary](max) NOT NULL,
|
||||
[payload_format] [tinyint] NOT NULL,
|
||||
[content_type] [text] NOT NULL,
|
||||
[response_topic] [text] NOT NULL,
|
||||
[correlation_data] [varbinary](max) NOT NULL,
|
||||
[user_properties] [varbinary](max) NOT NULL,
|
||||
[expiry] [int] NOT NULL
|
||||
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [mqtt_topic_server] ON [mqtt_pub] (topic, server_host)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
+96
-51
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -118,10 +118,10 @@ CREATE INDEX [muc_room_host_created_at] ON [muc_registered] (host, nick)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[muc_online_room] (
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[host] [varchar] (250) NOT NULL,
|
||||
[node] [text] NOT NULL,
|
||||
[pid] [text] NOT NULL
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[host] [varchar] (250) NOT NULL,
|
||||
[node] [varchar] (250) NOT NULL,
|
||||
[pid] [varchar] (100) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [muc_online_room_name_host] ON [muc_online_room] (name, host)
|
||||
@@ -133,13 +133,11 @@ CREATE TABLE [dbo].[muc_online_users] (
|
||||
[resource] [varchar] (250) NOT NULL,
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[host] [varchar] (250) NOT NULL,
|
||||
node text NOT NULL
|
||||
[node] [varchar] (250) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX [muc_online_users_i] ON [muc_online_users] (username, server, resource, name, host)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
CREATE UNIQUE CLUSTERED INDEX [muc_online_users_us] ON [muc_online_users] (username, server)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[muc_room_subscribers] (
|
||||
[room] [varchar] (191) NOT NULL,
|
||||
@@ -174,9 +172,6 @@ CREATE TABLE [dbo].[privacy_list] (
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
);
|
||||
|
||||
CREATE INDEX [privacy_list_username] ON [privacy_list] (username)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE INDEX [privacy_list_username_name] ON [privacy_list] (username, name)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
@@ -203,9 +198,6 @@ CREATE TABLE [dbo].[private_storage] (
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE INDEX [private_storage_username] ON [private_storage] (username)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [private_storage_username_namespace] ON [private_storage] (username, namespace)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
@@ -226,9 +218,9 @@ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW
|
||||
|
||||
CREATE TABLE [dbo].[pubsub_node_option] (
|
||||
[nodeid] [bigint] NULL,
|
||||
[name] [text] NOT NULL,
|
||||
[val] [text] NOT NULL
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[val] [varchar] (250) NOT NULL
|
||||
);
|
||||
|
||||
CREATE CLUSTERED INDEX [pubsub_node_option_nodeid] ON [pubsub_node_option] (nodeid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
@@ -272,13 +264,13 @@ CREATE TABLE [dbo].[pubsub_node] (
|
||||
[host] [varchar] (255) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
[parent] [varchar] (255) NOT NULL DEFAULT '',
|
||||
[plugin] [text] NOT NULL,
|
||||
[plugin] [varchar] (32) NOT NULL,
|
||||
[nodeid] [bigint] IDENTITY(1,1) NOT NULL,
|
||||
CONSTRAINT [pubsub_node_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[nodeid] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
);
|
||||
|
||||
CREATE INDEX [pubsub_node_parent] ON [pubsub_node] (parent)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
@@ -320,9 +312,6 @@ CREATE TABLE [dbo].[rosterusers] (
|
||||
CREATE UNIQUE CLUSTERED INDEX [rosterusers_username_jid] ON [rosterusers] ([username], [jid])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [rosterusers_username] ON [rosterusers] ([username])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [rosterusers_jid] ON [rosterusers] ([jid])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
@@ -366,13 +355,12 @@ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW
|
||||
CREATE TABLE [dbo].[sr_group] (
|
||||
[name] [varchar] (250) NOT NULL,
|
||||
[opts] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [sr_group_PRIMARY] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[name] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [sr_group_name] ON [sr_group] ([name])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[sr_user] (
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[grp] [varchar] (250) NOT NULL,
|
||||
@@ -382,9 +370,6 @@ CREATE TABLE [dbo].[sr_user] (
|
||||
CREATE UNIQUE CLUSTERED INDEX [sr_user_jid_group] ON [sr_user] ([jid], [grp])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [sr_user_jid] ON [sr_user] ([jid])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [sr_user_grp] ON [sr_user] ([grp])
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
@@ -521,9 +506,6 @@ CREATE TABLE [dbo].[route] (
|
||||
CREATE UNIQUE CLUSTERED INDEX [route_i] ON [route] (domain, server_host, node, pid)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [route_domain] ON [route] (domain)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[bosh] (
|
||||
[sid] [varchar] (255) NOT NULL,
|
||||
[node] [varchar] (255) NOT NULL,
|
||||
@@ -545,25 +527,88 @@ CREATE TABLE [dbo].[push_session] (
|
||||
CREATE UNIQUE CLUSTERED INDEX [i_push_usn] ON [push_session] (username, service, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE UNIQUE INDEX [i_push_ut] ON [push_session] (username, timestamp)
|
||||
CREATE INDEX [i_push_ut] ON [push_session] (username, timestamp)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_channel] (
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[domain] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[hidden] [smallint] NOT NULL,
|
||||
[hmac_key] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [mix_channel] ON [mix_channel] (channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_channel_serv] ON [mix_channel] (service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_participant] (
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[domain] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL,
|
||||
[id] [text] NOT NULL,
|
||||
[nick] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE INDEX [mix_participant] ON [mix_participant] (channel, service, username, domain)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_participant_chan_serv] ON [mix_participant] (channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_subscription] (
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[domain] [varchar] (250) NOT NULL,
|
||||
[node] [varchar] (250) NOT NULL,
|
||||
[jid] [varchar] (250) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX [mix_subscription] ON [mix_subscription] (channel, service, username, domain, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_subscription_chan_serv_ud] ON [mix_subscription] (channel, service, username, domain)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_subscription_chan_serv_node] ON [mix_subscription] (channel, service, node)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE INDEX [mix_subscription_chan_serv] ON [mix_subscription] (channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mix_pam] (
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[channel] [varchar] (250) NOT NULL,
|
||||
[service] [varchar] (250) NOT NULL,
|
||||
[id] [text] NOT NULL,
|
||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
||||
) TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [mix_pam] ON [mix_pam] (username, channel, service)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
CREATE TABLE [dbo].[mqtt_pub] (
|
||||
[username] [varchar](191) NOT NULL,
|
||||
[server_host] [varchar](191) NOT NULL,
|
||||
[resource] [varchar](191) NOT NULL,
|
||||
[topic] [varchar](191) NOT NULL,
|
||||
[qos] [tinyint] NOT NULL,
|
||||
[payload] [varbinary](max) NOT NULL,
|
||||
[payload_format] [tinyint] NOT NULL,
|
||||
[content_type] [text] NOT NULL,
|
||||
[response_topic] [text] NOT NULL,
|
||||
[correlation_data] [varbinary](max) NOT NULL,
|
||||
[user_properties] [varbinary](max) NOT NULL,
|
||||
[expiry] [int] NOT NULL,
|
||||
CONSTRAINT [i_mqtt_topic_server] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[topic] ASC,
|
||||
[server_host] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
|
||||
[username] [varchar] (250) NOT NULL,
|
||||
[resource] [varchar] (250) NOT NULL,
|
||||
[topic] [varchar] (250) NOT NULL,
|
||||
[qos] [tinyint] NOT NULL,
|
||||
[payload] [varbinary](max) NOT NULL,
|
||||
[payload_format] [tinyint] NOT NULL,
|
||||
[content_type] [text] NOT NULL,
|
||||
[response_topic] [text] NOT NULL,
|
||||
[correlation_data] [varbinary](max) NOT NULL,
|
||||
[user_properties] [varbinary](max) NOT NULL,
|
||||
[expiry] [int] NOT NULL
|
||||
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
|
||||
|
||||
CREATE UNIQUE CLUSTERED INDEX [mqtt_topic] ON [mqtt_pub] (topic)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
||||
|
||||
+5
-14
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -56,7 +56,6 @@ CREATE TABLE rosterusers (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers(server_host(191), username(75), jid(75));
|
||||
CREATE INDEX i_rosteru_sh_username ON rosterusers(server_host(191), username);
|
||||
CREATE INDEX i_rosteru_sh_jid ON rosterusers(server_host(191), jid);
|
||||
|
||||
CREATE TABLE rostergroups (
|
||||
@@ -86,8 +85,7 @@ CREATE TABLE sr_user (
|
||||
PRIMARY KEY (server_host(191), jid, grp)
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_user_sh_jid_group ON sr_user(server_host(191), jid, grp);
|
||||
CREATE INDEX i_sr_user_sh_jid ON sr_user(server_host(191), jid);
|
||||
CREATE UNIQUE INDEX i_sr_user_sh_jid_grp ON sr_user(server_host(191), jid, grp);
|
||||
CREATE INDEX i_sr_user_sh_grp ON sr_user(server_host(191), grp);
|
||||
|
||||
CREATE TABLE spool (
|
||||
@@ -195,7 +193,6 @@ CREATE TABLE privacy_list (
|
||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE INDEX i_privacy_list_sh_username USING BTREE ON privacy_list(server_host(191), username);
|
||||
CREATE UNIQUE INDEX i_privacy_list_sh_username_name USING BTREE ON privacy_list (server_host(191), username(75), name(75));
|
||||
|
||||
CREATE TABLE privacy_list_data (
|
||||
@@ -218,11 +215,10 @@ CREATE TABLE private_storage (
|
||||
server_host varchar(191) NOT NULL,
|
||||
namespace varchar(191) NOT NULL,
|
||||
data text NOT NULL,
|
||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (server_host(191), username, namespace)
|
||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE INDEX i_private_storage_sh_username USING BTREE ON private_storage(server_host(191), username);
|
||||
CREATE UNIQUE INDEX i_private_storage_sh_sername_namespace USING BTREE ON private_storage(server_host(191), username, namespace);
|
||||
|
||||
-- Not tested in mysql
|
||||
CREATE TABLE roster_version (
|
||||
@@ -335,7 +331,6 @@ CREATE TABLE muc_online_users (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_muc_online_users USING BTREE ON muc_online_users(username(75), server(75), resource(75), name(75), host(75));
|
||||
CREATE INDEX i_muc_online_users_us USING BTREE ON muc_online_users(username(75), server(75));
|
||||
|
||||
CREATE TABLE muc_room_subscribers (
|
||||
room varchar(191) NOT NULL,
|
||||
@@ -405,7 +400,6 @@ CREATE TABLE route (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_route ON route(domain(75), server_host(75), node(75), pid(75));
|
||||
CREATE INDEX i_route_domain ON route(domain(75));
|
||||
|
||||
CREATE TABLE bosh (
|
||||
sid text NOT NULL,
|
||||
@@ -438,6 +432,7 @@ CREATE TABLE push_session (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session (server_host(191), username(191), service(191), node(191));
|
||||
CREATE INDEX i_push_session_sh_username_timestamp ON push_session (server_host, username(191), timestamp);
|
||||
|
||||
CREATE TABLE mix_channel (
|
||||
channel text NOT NULL,
|
||||
@@ -465,7 +460,6 @@ CREATE TABLE mix_participant (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_participant ON mix_participant (channel(191), service(191), username(191), domain(191));
|
||||
CREATE INDEX i_mix_participant_chan_serv ON mix_participant (channel(191), service(191));
|
||||
|
||||
CREATE TABLE mix_subscription (
|
||||
channel text NOT NULL,
|
||||
@@ -477,9 +471,7 @@ CREATE TABLE mix_subscription (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_subscription ON mix_subscription (channel(153), service(153), username(153), domain(153), node(153));
|
||||
CREATE INDEX i_mix_subscription_chan_serv_ud ON mix_subscription (channel(191), service(191), username(191), domain(191));
|
||||
CREATE INDEX i_mix_subscription_chan_serv_node ON mix_subscription (channel(191), service(191), node(191));
|
||||
CREATE INDEX i_mix_subscription_chan_serv ON mix_subscription (channel(191), service(191));
|
||||
|
||||
CREATE TABLE mix_pam (
|
||||
username text NOT NULL,
|
||||
@@ -491,7 +483,6 @@ CREATE TABLE mix_pam (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username(191), server_host(191), channel(191), service(191));
|
||||
CREATE INDEX i_mix_pam_us ON mix_pam (username(191), server_host(191));
|
||||
|
||||
CREATE TABLE mqtt_pub (
|
||||
username varchar(191) NOT NULL,
|
||||
|
||||
@@ -17,6 +17,7 @@ BEGIN
|
||||
ALTER TABLE `push_session` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `push_session` ADD PRIMARY KEY (`server_host`, `username`(191), `timestamp`);
|
||||
ALTER TABLE `push_session` ADD UNIQUE INDEX `i_push_session_susn` (`server_host`, `username`(191), `service`(191), `node`(191));
|
||||
ALTER TABLE `push_session` ADD INDEX `i_push_session_sh_username_timestamp` (`server_host`, `username`(191), `timestamp`);
|
||||
ALTER TABLE `roster_version` DROP PRIMARY KEY;
|
||||
ALTER TABLE `roster_version` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `roster_version` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
@@ -33,14 +34,12 @@ BEGIN
|
||||
ALTER TABLE `rosterusers` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `rosterusers` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `rosterusers` ADD UNIQUE INDEX `i_rosteru_sh_user_jid` (`server_host`, `username`(75), `jid`(75));
|
||||
ALTER TABLE `rosterusers` ADD INDEX `i_rosteru_sh_username` (`server_host`, `username`);
|
||||
ALTER TABLE `rosterusers` ADD INDEX `i_rosteru_sh_jid` (`server_host`, `jid`);
|
||||
ALTER TABLE `private_storage` DROP INDEX `i_private_storage_username_namespace`;
|
||||
ALTER TABLE `private_storage` DROP INDEX `i_private_storage_username`;
|
||||
ALTER TABLE `private_storage` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `private_storage` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `private_storage` ADD PRIMARY KEY (`server_host`, `username`, `namespace`);
|
||||
ALTER TABLE `private_storage` ADD INDEX `i_private_storage_sh_username` USING BTREE (`server_host`, `username`);
|
||||
ALTER TABLE `mqtt_pub` DROP INDEX `i_mqtt_topic`;
|
||||
ALTER TABLE `mqtt_pub` ADD COLUMN `server_host` VARCHAR (191) NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `mqtt_pub` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
@@ -75,10 +74,10 @@ BEGIN
|
||||
ALTER TABLE `last` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `last` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `last` ADD PRIMARY KEY (`server_host`, `username`);
|
||||
ALTER TABLE `sr_group` DROP INDEX `i_sr_group_name`;
|
||||
ALTER TABLE `sr_group` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `name`;
|
||||
ALTER TABLE `sr_group` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `sr_group` ADD UNIQUE INDEX `i_sr_group_sh_name` (`server_host`, `name`);
|
||||
ALTER TABLE `sr_group` ADD PRIMARY KEY (`server_host`, `name`);
|
||||
ALTER TABLE `muc_registered` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `host`;
|
||||
ALTER TABLE `muc_registered` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `sm` DROP INDEX `i_node`;
|
||||
@@ -94,16 +93,13 @@ BEGIN
|
||||
ALTER TABLE `privacy_list` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `privacy_list` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `privacy_list` ADD UNIQUE INDEX `i_privacy_list_sh_username_name` USING BTREE (`server_host`, `username`(75), `name`(75));
|
||||
ALTER TABLE `privacy_list` ADD INDEX `i_privacy_list_sh_username` USING BTREE (`server_host`, `username`);
|
||||
ALTER TABLE `sr_user` DROP INDEX `i_sr_user_jid`;
|
||||
ALTER TABLE `sr_user` DROP INDEX `i_sr_user_grp`;
|
||||
ALTER TABLE `sr_user` DROP INDEX `i_sr_user_jid_group`;
|
||||
ALTER TABLE `sr_user` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `jid`;
|
||||
ALTER TABLE `sr_user` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `sr_user` ADD UNIQUE INDEX `i_sr_user_sh_jid_group` (`server_host`, `jid`, `grp`);
|
||||
ALTER TABLE `sr_user` ADD INDEX `i_sr_user_sh_jid` (`server_host`, `jid`);
|
||||
ALTER TABLE `sr_user` ADD INDEX `i_sr_user_sh_grp` (`server_host`, `grp`);
|
||||
ALTER TABLE `sr_user` ADD PRIMARY KEY (`server_host`, `jid`, `grp`);
|
||||
ALTER TABLE `muc_online_users` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `host`;
|
||||
ALTER TABLE `muc_online_users` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `vcard` DROP PRIMARY KEY;
|
||||
@@ -119,7 +115,6 @@ BEGIN
|
||||
ALTER TABLE `mix_pam` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
ALTER TABLE `mix_pam` ALTER COLUMN `server_host` DROP DEFAULT;
|
||||
ALTER TABLE `mix_pam` ADD UNIQUE INDEX `i_mix_pam` (`username`(191), `server_host`, `channel`(191), `service`(191));
|
||||
ALTER TABLE `mix_pam` ADD INDEX `i_mix_pam_us` (`username`(191), `server_host`);
|
||||
ALTER TABLE `route` CHANGE COLUMN `server_host` `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL;
|
||||
ALTER TABLE `users` DROP PRIMARY KEY;
|
||||
ALTER TABLE `users` ADD COLUMN `server_host` VARCHAR (191) COLLATE `utf8mb4_unicode_ci` NOT NULL DEFAULT @DEFAULT_HOST AFTER `username`;
|
||||
|
||||
+1
-11
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -51,7 +51,6 @@ CREATE TABLE rosterusers (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_rosteru_user_jid ON rosterusers(username(75), jid(75));
|
||||
CREATE INDEX i_rosteru_username ON rosterusers(username);
|
||||
CREATE INDEX i_rosteru_jid ON rosterusers(jid);
|
||||
|
||||
CREATE TABLE rostergroups (
|
||||
@@ -77,7 +76,6 @@ CREATE TABLE sr_user (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_user_jid_group ON sr_user(jid(75), grp(75));
|
||||
CREATE INDEX i_sr_user_jid ON sr_user(jid);
|
||||
CREATE INDEX i_sr_user_grp ON sr_user(grp);
|
||||
|
||||
CREATE TABLE spool (
|
||||
@@ -174,7 +172,6 @@ CREATE TABLE privacy_list (
|
||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE INDEX i_privacy_list_username USING BTREE ON privacy_list(username);
|
||||
CREATE UNIQUE INDEX i_privacy_list_username_name USING BTREE ON privacy_list (username(75), name(75));
|
||||
|
||||
CREATE TABLE privacy_list_data (
|
||||
@@ -199,7 +196,6 @@ CREATE TABLE private_storage (
|
||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE INDEX i_private_storage_username USING BTREE ON private_storage(username);
|
||||
CREATE UNIQUE INDEX i_private_storage_username_namespace USING BTREE ON private_storage(username(75), namespace(75));
|
||||
|
||||
-- Not tested in mysql
|
||||
@@ -307,7 +303,6 @@ CREATE TABLE muc_online_users (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_muc_online_users USING BTREE ON muc_online_users(username(75), server(75), resource(75), name(75), host(75));
|
||||
CREATE INDEX i_muc_online_users_us USING BTREE ON muc_online_users(username(75), server(75));
|
||||
|
||||
CREATE TABLE muc_room_subscribers (
|
||||
room varchar(191) NOT NULL,
|
||||
@@ -374,7 +369,6 @@ CREATE TABLE route (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_route ON route(domain(75), server_host(75), node(75), pid(75));
|
||||
CREATE INDEX i_route_domain ON route(domain(75));
|
||||
|
||||
CREATE TABLE bosh (
|
||||
sid text NOT NULL,
|
||||
@@ -433,7 +427,6 @@ CREATE TABLE mix_participant (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_participant ON mix_participant (channel(191), service(191), username(191), domain(191));
|
||||
CREATE INDEX i_mix_participant_chan_serv ON mix_participant (channel(191), service(191));
|
||||
|
||||
CREATE TABLE mix_subscription (
|
||||
channel text NOT NULL,
|
||||
@@ -445,9 +438,7 @@ CREATE TABLE mix_subscription (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_subscription ON mix_subscription (channel(153), service(153), username(153), domain(153), node(153));
|
||||
CREATE INDEX i_mix_subscription_chan_serv_ud ON mix_subscription (channel(191), service(191), username(191), domain(191));
|
||||
CREATE INDEX i_mix_subscription_chan_serv_node ON mix_subscription (channel(191), service(191), node(191));
|
||||
CREATE INDEX i_mix_subscription_chan_serv ON mix_subscription (channel(191), service(191));
|
||||
|
||||
CREATE TABLE mix_pam (
|
||||
username text NOT NULL,
|
||||
@@ -458,7 +449,6 @@ CREATE TABLE mix_pam (
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username(191), channel(191), service(191));
|
||||
CREATE INDEX i_mix_pam_u ON mix_pam (username(191));
|
||||
|
||||
CREATE TABLE mqtt_pub (
|
||||
username varchar(191) NOT NULL,
|
||||
|
||||
+15
-39
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -30,10 +30,8 @@
|
||||
|
||||
-- ALTER TABLE rosterusers ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_rosteru_user_jid;
|
||||
-- DROP INDEX i_rosteru_username;
|
||||
-- DROP INDEX i_rosteru_jid;
|
||||
-- CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers USING btree (server_host, username, jid);
|
||||
-- CREATE INDEX i_rosteru_sh_username ON rosterusers USING btree (server_host, username);
|
||||
-- CREATE INDEX i_rosteru_sh_jid ON rosterusers USING btree (server_host, jid);
|
||||
-- ALTER TABLE rosterusers ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
@@ -43,15 +41,15 @@
|
||||
-- ALTER TABLE rostergroups ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE sr_group ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_sr_group_name;
|
||||
-- ALTER TABLE sr_group ADD PRIMARY KEY (server_host, name);
|
||||
-- CREATE UNIQUE INDEX i_sr_group_sh_name ON sr_group USING btree (server_host, name);
|
||||
-- ALTER TABLE sr_group ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE sr_user ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_sr_user_jid_grp;
|
||||
-- DROP INDEX i_sr_user_jid;
|
||||
-- DROP INDEX i_sr_user_grp;
|
||||
-- ALTER TABLE sr_user ADD PRIMARY KEY (server_host, jid, grp);
|
||||
-- CREATE INDEX i_sr_user_sh_jid ON sr_user USING btree (server_host, jid);
|
||||
-- CREATE INDEX i_sr_user_sh_grp ON sr_user USING btree (server_host, grp);
|
||||
-- ALTER TABLE sr_user ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
@@ -94,7 +92,7 @@
|
||||
-- DROP INDEX i_vcard_search_lemail;
|
||||
-- DROP INDEX i_vcard_search_lorgname;
|
||||
-- DROP INDEX i_vcard_search_lorgunit;
|
||||
-- ALTER TABLE vcard_search ADD PRIMARY KEY (server_host, username);
|
||||
-- ALTER TABLE vcard_search ADD PRIMARY KEY (server_host, lusername);
|
||||
-- CREATE INDEX i_vcard_search_sh_lfn ON vcard_search(server_host, lfn);
|
||||
-- CREATE INDEX i_vcard_search_sh_lfamily ON vcard_search(server_host, lfamily);
|
||||
-- CREATE INDEX i_vcard_search_sh_lgiven ON vcard_search(server_host, lgiven);
|
||||
@@ -114,17 +112,13 @@
|
||||
-- ALTER TABLE privacy_default_list ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE privacy_list ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_privacy_list_username;
|
||||
-- DROP INDEX i_privacy_list_username_name;
|
||||
-- CREATE INDEX i_privacy_list_sh_username ON privacy_list USING btree (server_host, username);
|
||||
-- CREATE UNIQUE INDEX i_privacy_list_sh_username_name ON privacy_list USING btree (server_host, username, name);
|
||||
-- ALTER TABLE privacy_list ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE private_storage ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_private_storage_username;
|
||||
-- DROP INDEX i_private_storage_username_namespace;
|
||||
-- ALTER TABLE private_storage ADD PRIMARY KEY (server_host, username, namespace);
|
||||
-- CREATE INDEX i_private_storage_sh_username ON private_storage USING btree (server_host, username);
|
||||
-- ALTER TABLE private_storage ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE roster_version ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
@@ -161,20 +155,14 @@
|
||||
-- DROP INDEX i_push_ut;
|
||||
-- ALTER TABLE push_session ADD PRIMARY KEY (server_host, username, timestamp);
|
||||
-- CREATE UNIQUE INDEX i_push_session_susn ON push_session USING btree (server_host, username, service, node);
|
||||
-- CREATE INDEX i_push_session_sh_username_timestamp ON push_session USING btree (server_host, username, timestamp);
|
||||
-- ALTER TABLE push_session ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE mix_pam ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_mix_pam;
|
||||
-- DROP INDEX i_mix_pam_us;
|
||||
-- CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username, server_host, channel, service);
|
||||
-- CREATE INDEX i_mix_pam_us ON mix_pam (username, server_host);
|
||||
-- ALTER TABLE mix_pam ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE route ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_route;
|
||||
-- CREATE UNIQUE INDEX i_route ON route USING btree (domain, server_host, node, pid);
|
||||
-- ALTER TABLE i_route ALTER COLUMN server_host DROP DEFAULT;
|
||||
|
||||
-- ALTER TABLE mqtt_pub ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
||||
-- DROP INDEX i_mqtt_topic;
|
||||
-- CREATE UNIQUE INDEX i_mqtt_topic_server ON mqtt_pub (topic, server_host);
|
||||
@@ -221,7 +209,6 @@ CREATE TABLE rosterusers (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers USING btree (server_host, username, jid);
|
||||
CREATE INDEX i_rosteru_sh_username ON rosterusers USING btree (server_host, username);
|
||||
CREATE INDEX i_rosteru_sh_jid ON rosterusers USING btree (server_host, jid);
|
||||
|
||||
|
||||
@@ -238,8 +225,7 @@ CREATE TABLE sr_group (
|
||||
name text NOT NULL,
|
||||
server_host text NOT NULL,
|
||||
opts text NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||||
PRIMARY KEY (server_host, name)
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_group_sh_name ON sr_group USING btree (server_host, name);
|
||||
@@ -248,19 +234,17 @@ CREATE TABLE sr_user (
|
||||
jid text NOT NULL,
|
||||
server_host text NOT NULL,
|
||||
grp text NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||||
PRIMARY KEY (server_host, jid, grp)
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_user_sh_jid_grp ON sr_user USING btree (server_host, jid, grp);
|
||||
CREATE INDEX i_sr_user_sh_jid ON sr_user USING btree (server_host, jid);
|
||||
CREATE INDEX i_sr_user_sh_grp ON sr_user USING btree (server_host, grp);
|
||||
|
||||
CREATE TABLE spool (
|
||||
username text NOT NULL,
|
||||
server_host text NOT NULL,
|
||||
xml text NOT NULL,
|
||||
seq SERIAL,
|
||||
seq BIGSERIAL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
@@ -274,7 +258,7 @@ CREATE TABLE archive (
|
||||
bare_peer text NOT NULL,
|
||||
xml text NOT NULL,
|
||||
txt text,
|
||||
id SERIAL,
|
||||
id BIGSERIAL,
|
||||
kind text,
|
||||
nick text,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
@@ -355,11 +339,10 @@ CREATE TABLE privacy_list (
|
||||
username text NOT NULL,
|
||||
server_host text NOT NULL,
|
||||
name text NOT NULL,
|
||||
id SERIAL UNIQUE,
|
||||
id BIGSERIAL UNIQUE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX i_privacy_list_sh_username ON privacy_list USING btree (server_host, username);
|
||||
CREATE UNIQUE INDEX i_privacy_list_sh_username_name ON privacy_list USING btree (server_host, username, name);
|
||||
|
||||
CREATE TABLE privacy_list_data (
|
||||
@@ -382,12 +365,10 @@ CREATE TABLE private_storage (
|
||||
server_host text NOT NULL,
|
||||
namespace text NOT NULL,
|
||||
data text NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||||
PRIMARY KEY (server_host, username, namespace)
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX i_private_storage_sh_username ON private_storage USING btree (server_host, username);
|
||||
|
||||
CREATE UNIQUE INDEX i_private_storage_sh_username_namespace ON private_storage USING btree (server_host, username, namespace);
|
||||
|
||||
CREATE TABLE roster_version (
|
||||
username text NOT NULL,
|
||||
@@ -413,7 +394,7 @@ CREATE TABLE pubsub_node (
|
||||
node text NOT NULL,
|
||||
parent text NOT NULL DEFAULT '',
|
||||
plugin text NOT NULL,
|
||||
nodeid SERIAL UNIQUE
|
||||
nodeid BIGSERIAL UNIQUE
|
||||
);
|
||||
CREATE INDEX i_pubsub_node_parent ON pubsub_node USING btree (parent);
|
||||
CREATE UNIQUE INDEX i_pubsub_node_tuple ON pubsub_node USING btree (host, node);
|
||||
@@ -436,7 +417,7 @@ CREATE TABLE pubsub_state (
|
||||
jid text NOT NULL,
|
||||
affiliation character(1),
|
||||
subscriptions text NOT NULL DEFAULT '',
|
||||
stateid SERIAL UNIQUE
|
||||
stateid BIGSERIAL UNIQUE
|
||||
);
|
||||
CREATE INDEX i_pubsub_state_jid ON pubsub_state USING btree (jid);
|
||||
CREATE UNIQUE INDEX i_pubsub_state_tuple ON pubsub_state USING btree (nodeid, jid);
|
||||
@@ -502,7 +483,6 @@ CREATE TABLE muc_online_users (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users USING btree (username, server, resource, name, host);
|
||||
CREATE INDEX i_muc_online_users_us ON muc_online_users USING btree (username, server);
|
||||
|
||||
CREATE TABLE muc_room_subscribers (
|
||||
room text NOT NULL,
|
||||
@@ -574,7 +554,6 @@ CREATE TABLE route (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_route ON route USING btree (domain, server_host, node, pid);
|
||||
CREATE INDEX i_route_domain ON route USING btree (domain);
|
||||
|
||||
CREATE TABLE bosh (
|
||||
sid text NOT NULL,
|
||||
@@ -607,6 +586,7 @@ CREATE TABLE push_session (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session USING btree (server_host, username, service, node);
|
||||
CREATE INDEX i_push_session_sh_username_timestamp ON push_session USING btree (server_host, username, timestamp);
|
||||
|
||||
CREATE TABLE mix_channel (
|
||||
channel text NOT NULL,
|
||||
@@ -634,7 +614,6 @@ CREATE TABLE mix_participant (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_participant ON mix_participant (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_participant_chan_serv ON mix_participant (channel, service);
|
||||
|
||||
CREATE TABLE mix_subscription (
|
||||
channel text NOT NULL,
|
||||
@@ -646,9 +625,7 @@ CREATE TABLE mix_subscription (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_subscription ON mix_subscription (channel, service, username, domain, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_ud ON mix_subscription (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_node ON mix_subscription (channel, service, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv ON mix_subscription (channel, service);
|
||||
|
||||
CREATE TABLE mix_pam (
|
||||
username text NOT NULL,
|
||||
@@ -660,7 +637,6 @@ CREATE TABLE mix_pam (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username, server_host, channel, service);
|
||||
CREATE INDEX i_mix_pam_us ON mix_pam (username, server_host);
|
||||
|
||||
CREATE TABLE mqtt_pub (
|
||||
username text NOT NULL,
|
||||
|
||||
+7
-17
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
-- ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or
|
||||
-- modify it under the terms of the GNU General Public License as
|
||||
@@ -51,7 +51,6 @@ CREATE TABLE rosterusers (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_rosteru_user_jid ON rosterusers USING btree (username, jid);
|
||||
CREATE INDEX i_rosteru_username ON rosterusers USING btree (username);
|
||||
CREATE INDEX i_rosteru_jid ON rosterusers USING btree (jid);
|
||||
|
||||
|
||||
@@ -78,13 +77,12 @@ CREATE TABLE sr_user (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_sr_user_jid_grp ON sr_user USING btree (jid, grp);
|
||||
CREATE INDEX i_sr_user_jid ON sr_user USING btree (jid);
|
||||
CREATE INDEX i_sr_user_grp ON sr_user USING btree (grp);
|
||||
|
||||
CREATE TABLE spool (
|
||||
username text NOT NULL,
|
||||
xml text NOT NULL,
|
||||
seq SERIAL,
|
||||
seq BIGSERIAL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
@@ -97,7 +95,7 @@ CREATE TABLE archive (
|
||||
bare_peer text NOT NULL,
|
||||
xml text NOT NULL,
|
||||
txt text,
|
||||
id SERIAL,
|
||||
id BIGSERIAL,
|
||||
kind text,
|
||||
nick text,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
@@ -169,11 +167,10 @@ CREATE TABLE privacy_default_list (
|
||||
CREATE TABLE privacy_list (
|
||||
username text NOT NULL,
|
||||
name text NOT NULL,
|
||||
id SERIAL UNIQUE,
|
||||
id BIGSERIAL UNIQUE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX i_privacy_list_username ON privacy_list USING btree (username);
|
||||
CREATE UNIQUE INDEX i_privacy_list_username_name ON privacy_list USING btree (username, name);
|
||||
|
||||
CREATE TABLE privacy_list_data (
|
||||
@@ -198,7 +195,6 @@ CREATE TABLE private_storage (
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX i_private_storage_username ON private_storage USING btree (username);
|
||||
CREATE UNIQUE INDEX i_private_storage_username_namespace ON private_storage USING btree (username, namespace);
|
||||
|
||||
|
||||
@@ -224,7 +220,7 @@ CREATE TABLE pubsub_node (
|
||||
node text NOT NULL,
|
||||
parent text NOT NULL DEFAULT '',
|
||||
plugin text NOT NULL,
|
||||
nodeid SERIAL UNIQUE
|
||||
nodeid BIGSERIAL UNIQUE
|
||||
);
|
||||
CREATE INDEX i_pubsub_node_parent ON pubsub_node USING btree (parent);
|
||||
CREATE UNIQUE INDEX i_pubsub_node_tuple ON pubsub_node USING btree (host, node);
|
||||
@@ -247,7 +243,7 @@ CREATE TABLE pubsub_state (
|
||||
jid text NOT NULL,
|
||||
affiliation character(1),
|
||||
subscriptions text NOT NULL DEFAULT '',
|
||||
stateid SERIAL UNIQUE
|
||||
stateid BIGSERIAL UNIQUE
|
||||
);
|
||||
CREATE INDEX i_pubsub_state_jid ON pubsub_state USING btree (jid);
|
||||
CREATE UNIQUE INDEX i_pubsub_state_tuple ON pubsub_state USING btree (nodeid, jid);
|
||||
@@ -309,7 +305,6 @@ CREATE TABLE muc_online_users (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users USING btree (username, server, resource, name, host);
|
||||
CREATE INDEX i_muc_online_users_us ON muc_online_users USING btree (username, server);
|
||||
|
||||
CREATE TABLE muc_room_subscribers (
|
||||
room text NOT NULL,
|
||||
@@ -378,7 +373,6 @@ CREATE TABLE route (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_route ON route USING btree (domain, server_host, node, pid);
|
||||
CREATE INDEX i_route_domain ON route USING btree (domain);
|
||||
|
||||
CREATE TABLE bosh (
|
||||
sid text NOT NULL,
|
||||
@@ -409,7 +403,7 @@ CREATE TABLE push_session (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_push_usn ON push_session USING btree (username, service, node);
|
||||
CREATE UNIQUE INDEX i_push_ut ON push_session USING btree (username, timestamp);
|
||||
CREATE INDEX i_push_ut ON push_session USING btree (username, timestamp);
|
||||
|
||||
CREATE TABLE mix_channel (
|
||||
channel text NOT NULL,
|
||||
@@ -437,7 +431,6 @@ CREATE TABLE mix_participant (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_participant ON mix_participant (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_participant_chan_serv ON mix_participant (channel, service);
|
||||
|
||||
CREATE TABLE mix_subscription (
|
||||
channel text NOT NULL,
|
||||
@@ -449,9 +442,7 @@ CREATE TABLE mix_subscription (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_subscription ON mix_subscription (channel, service, username, domain, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_ud ON mix_subscription (channel, service, username, domain);
|
||||
CREATE INDEX i_mix_subscription_chan_serv_node ON mix_subscription (channel, service, node);
|
||||
CREATE INDEX i_mix_subscription_chan_serv ON mix_subscription (channel, service);
|
||||
|
||||
CREATE TABLE mix_pam (
|
||||
username text NOT NULL,
|
||||
@@ -462,7 +453,6 @@ CREATE TABLE mix_pam (
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX i_mix_pam ON mix_pam (username, channel, service);
|
||||
CREATE INDEX i_mix_pam_us ON mix_pam (username);
|
||||
|
||||
CREATE TABLE mqtt_pub (
|
||||
username text NOT NULL,
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
%%% Purpose : Validator for ejabberd configuration options
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
+4
-1
@@ -5,7 +5,7 @@
|
||||
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -27,6 +27,8 @@
|
||||
-author('alexey@process-one.net').
|
||||
-compile({no_auto_import, [{halt, 0}]}).
|
||||
|
||||
-protocol({rfc, 6122}).
|
||||
-protocol({rfc, 7590}).
|
||||
-protocol({xep, 4, '2.9'}).
|
||||
-protocol({xep, 86, '1.0'}).
|
||||
-protocol({xep, 106, '1.1'}).
|
||||
@@ -36,6 +38,7 @@
|
||||
-protocol({xep, 216, '1.0'}).
|
||||
-protocol({xep, 243, '1.0'}).
|
||||
-protocol({xep, 270, '1.0'}).
|
||||
-protocol({xep, 368, '1.1.0'}).
|
||||
|
||||
-export([start/0, stop/0, halt/0, start_app/1, start_app/2,
|
||||
get_pid_file/0, check_apps/0, module_name/1, is_loaded/0]).
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 7 Sep 2016 by Paweł Chmielowski <pawel@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -377,6 +377,6 @@ validator() ->
|
||||
fun(Os) ->
|
||||
{proplists:get_value(from, Os, []),
|
||||
proplists:get_value(who, Os, none),
|
||||
proplists:get_value(what, Os, [])}
|
||||
proplists:get_value(what, Os, {none, none})}
|
||||
end),
|
||||
[unique]).
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 7 May 2006 by Mickael Remond <mremond@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -103,6 +103,7 @@ prep_stop(State) ->
|
||||
ejabberd_sm:stop(),
|
||||
ejabberd_service:stop(),
|
||||
ejabberd_s2s:stop(),
|
||||
ejabberd_system_monitor:stop(),
|
||||
gen_mod:stop(),
|
||||
State.
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 23 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -28,6 +28,8 @@
|
||||
|
||||
-author('alexey@process-one.net').
|
||||
|
||||
-protocol({rfc, 5802}).
|
||||
|
||||
%% External exports
|
||||
-export([start_link/0, host_up/1, host_down/1, config_reloaded/0,
|
||||
set_password/3, check_password/4,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 17 Feb 2006 by Mickael Remond <mremond@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
%%% Created : 16 Mar 2019 by Mickael Remond <mremond@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user