1 Commits
Author SHA1 Message Date
aitzol ebf1c16f8b changelog 2026-08-02 16:58:55 +02:00
12 changed files with 91 additions and 93 deletions
-6
View File
@@ -1,11 +1,5 @@
# Changelog # Changelog
## v 1.3.6
* Updated to LuaRocks 3.13.0
* Updated to Prosody 13.0.6
* Updated deprecated modules
## v 1.3.5 ## v 1.3.5
* Added `prosodyctl check config` result to server test. * Added `prosodyctl check config` result to server test.
+16 -9
View File
@@ -1,14 +1,14 @@
FROM debian:trixie-slim FROM debian:bookworm-slim
ARG BUILD_DATE ARG BUILD_DATE
ARG VCS_REF ARG VCS_REF
ARG VERSION ARG VERSION
ARG LUAROCKS_VERSION=3.13.0 ARG LUAROCKS_VERSION=3.12.2
ARG PROSODY_VERSION=13.0.6 ARG PROSODY_VERSION=0.12.5
ARG LUAROCKS_SHA256="245bf6ec560c042cb8948e3d661189292587c5949104677f1eecddc54dbe7e37" ARG LUAROCKS_SHA256="b0e0c85205841ddd7be485f53d6125766d18a81d226588d2366931e9a1484492"
ARG PROSODY_DOWNLOAD_SHA256="ec696f9cf562c3af4a04b07d3fb36a1cedcc4e69a392fddcfc524bc67d93050f" ARG PROSODY_DOWNLOAD_SHA256="778fb7707a0f10399595ba7ab9c66dd2a2288c0ae3a7fe4ab78f97d462bd399f"
LABEL luarocks.version="${LUAROCKS_VERSION}" LABEL luarocks.version="${LUAROCKS_VERSION}"
LABEL org.opencontainers.image.authors="Wproject Garapenak" LABEL org.opencontainers.image.authors="Wproject Garapenak"
@@ -25,7 +25,8 @@ LABEL prosody.version="${PROSODY_VERSION}"
RUN apt-get update \ RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \
libicu76 \ libevent-dev `# this is no build dependency, but needed for luaevent` \
libicu72 \
libidn2-0 \ libidn2-0 \
libpq-dev \ libpq-dev \
libsqlite3-0 \ libsqlite3-0 \
@@ -44,7 +45,7 @@ RUN apt-get update \
&& apt-get clean \ && apt-get clean \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
RUN buildDeps='gcc git libc6-dev libidn2-dev liblua5.4-dev libsqlite3-dev libssl-dev libicu-dev make unzip' \ RUN buildDeps='gcc git libc6-dev libidn2-dev liblua5.2-dev libsqlite3-dev libssl-dev libicu-dev make unzip' \
&& set -x \ && set -x \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \ && apt-get update && apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/* \
@@ -70,10 +71,10 @@ RUN buildDeps='gcc git libc6-dev libidn2-dev liblua5.4-dev libsqlite3-dev libssl
&& tar zxpf luarocks-${LUAROCKS_VERSION}.tar.gz \ && tar zxpf luarocks-${LUAROCKS_VERSION}.tar.gz \
&& cd luarocks-${LUAROCKS_VERSION} \ && cd luarocks-${LUAROCKS_VERSION} \
&& ./configure \ && ./configure \
&& make \ && make bootstrap \
&& make install \
&& cd / && rm -r /usr/src/luarocks \ && cd / && rm -r /usr/src/luarocks \
\ \
# && luarocks install luaevent \
&& luarocks install luadbi \ && luarocks install luadbi \
`#&& luarocks install luadbi-mysql MYSQL_INCDIR=/usr/include/mariadb/` \ `#&& luarocks install luadbi-mysql MYSQL_INCDIR=/usr/include/mariadb/` \
&& luarocks install luadbi-sqlite3 \ && luarocks install luadbi-sqlite3 \
@@ -102,10 +103,16 @@ COPY *.bash /usr/local/bin/
RUN download-prosody-modules.bash \ RUN download-prosody-modules.bash \
&& docker-prosody-module-install.bash \ && docker-prosody-module-install.bash \
bookmarks `# XEP-0411: Bookmarks Conversion` \
carbons `# message carbons (XEP-0280)` \
cloud_notify `# XEP-0357: Push Notifications` \
csi `# client state indication (XEP-0352)` \
e2e_policy `# require end-2-end encryption` \ e2e_policy `# require end-2-end encryption` \
filter_chatstates `# disable "X is typing" type messages` \ filter_chatstates `# disable "X is typing" type messages` \
smacks `# stream management (XEP-0198)` \ smacks `# stream management (XEP-0198)` \
throttle_presence `# presence throttling in CSI` \ throttle_presence `# presence throttling in CSI` \
vcard_muc `# XEP-0153: vCard-Based Avatar (MUC)` \
#&& docker-prosody-module-pre-install.bash \
firewall `# anti-spam firewall` \ firewall `# anti-spam firewall` \
&& rm -rf "/usr/src/prosody-modules" && rm -rf "/usr/src/prosody-modules"
RUN echo "TLS_REQCERT allow" >> /etc/ldap/ldap.conf RUN echo "TLS_REQCERT allow" >> /etc/ldap/ldap.conf
+2 -8
View File
@@ -1,5 +1,3 @@
local getenv = Lua.os.getenv
plugin_paths = { "/usr/local/lib/prosody/custom-modules/" }; plugin_paths = { "/usr/local/lib/prosody/custom-modules/" };
-- table of enabled modules -- table of enabled modules
@@ -21,7 +19,6 @@ modules_enabled = {
"carbons"; -- Share and sync conversations (XEP-0280) "carbons"; -- Share and sync conversations (XEP-0280)
"csi_simple"; -- Buffer unimportant traffic for simple optimisation for clients using state indication "csi_simple"; -- Buffer unimportant traffic for simple optimisation for clients using state indication
"limits"; -- Enable bandwidth limiting for XMPP connections "limits"; -- Enable bandwidth limiting for XMPP connections
"bookmarks"; -- Converts between old and new ways to store chat room bookmarks
-- Nice to have -- Nice to have
"version"; -- Replies to server version requests "version"; -- Replies to server version requests
@@ -38,11 +35,10 @@ modules_enabled = {
-- HTTP modules -- HTTP modules
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP" "bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
"websocket"; -- Enable mod_websocket
--"http_files"; -- Serve static files from a directory over HTTP --"http_files"; -- Serve static files from a directory over HTTP
-- Other specific functionality -- Other specific functionality
--"posix"; -- POSIX functionality, sends server to background, enables syslog, etc. "posix"; -- POSIX functionality, sends server to background, enables syslog, etc.
--"groups"; -- Shared roster support --"groups"; -- Shared roster support
"announce"; -- Send announcement to all online users "announce"; -- Send announcement to all online users
--"welcome"; -- Welcome users who register accounts --"welcome"; -- Welcome users who register accounts
@@ -50,9 +46,7 @@ modules_enabled = {
--"motd"; -- Send a message to users when they log in --"motd"; -- Send a message to users when they log in
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots. --"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
"lastactivity"; "lastactivity";
"server_info"; -- This module lets you advertise various contact addresses for your XMPP service via XEP-0158. "server_contact_info"; -- This module lets you advertise various contact addresses for your XMPP service via XEP-0157.
"cloud_notify";
}; };
-- modules_enabled = mods_enabled; -- modules_enabled = mods_enabled;
+7 -9
View File
@@ -1,14 +1,12 @@
local getenv = Lua.os.getenv
default_storage = "sql" default_storage = "sql"
sql = { sql = {
driver = getenv("DB_DRIVER") or "SQLite3"; driver = os.getenv("DB_DRIVER") or "SQLite3";
database = getenv("DB_DATABASE") or "prosody.sqlite"; database = os.getenv("DB_DATABASE") or "prosody.sqlite";
host = getenv("DB_HOST"); host = os.getenv("DB_HOST");
port = getenv("DB_PORT"); port = os.getenv("DB_PORT");
username = getenv("DB_USERNAME"); username = os.getenv("DB_USERNAME");
password = getenv("DB_PASSWORD"); password = os.getenv("DB_PASSWORD");
} }
-- make 0.10-distributed mod_mam use sql store -- make 0.10-distributed mod_mam use sql store
@@ -32,4 +30,4 @@ archive_expires_after = "1y"
--}; --};
--} --}
http_max_content_size = getenv("HTTP_MAX_CONTENT_SIZE") or 1024 * 1024 * 10 -- Default is 10MB http_max_content_size = os.getenv("HTTP_MAX_CONTENT_SIZE") or 1024 * 1024 * 10 -- Default is 10MB
+4 -5
View File
@@ -1,10 +1,9 @@
local getenv = Lua.os.getenv local stringy = require "stringy"
local stringy = Lua.require "stringy"
e2e_policy_chat = getenv("E2E_POLICY_CHAT") or "required" e2e_policy_chat = os.getenv("E2E_POLICY_CHAT") or "required"
e2e_policy_muc = getenv("E2E_POLICY_MUC") or "required" e2e_policy_muc = os.getenv("E2E_POLICY_MUC") or "required"
local whitelist = getenv("E2E_POLICY_WHITELIST") or "" local whitelist = os.getenv("E2E_POLICY_WHITELIST") or ""
e2e_policy_whitelist = stringy.split(whitelist, ", ") e2e_policy_whitelist = stringy.split(whitelist, ", ")
e2e_policy_message_optional_chat = "For security reasons, OMEMO, OTR or PGP encryption is STRONGLY recommended for conversations on this server." e2e_policy_message_optional_chat = "For security reasons, OMEMO, OTR or PGP encryption is STRONGLY recommended for conversations on this server."
+29
View File
@@ -0,0 +1,29 @@
local stringy = require "stringy"
local function _split(s, sep)
if not s then return nil; end
sep = sep or ",";
local parts = {};
for part in s:gmatch("[^"..sep.."]+") do
parts[#parts+1] = part;
end
return parts;
end
local domain = os.getenv("DOMAIN")
local abuse = os.getenv("SERVER_CONTACT_INFO_ABUSE") or "xmpp:abuse@" .. domain
local admin = os.getenv("SERVER_CONTACT_INFO_ADMIN") or "xmpp:admin@" .. domain
local feedback = os.getenv("SERVER_CONTACT_INFO_FEEDBACK") or "xmpp:feedback@" .. domain
local sales = os.getenv("SERVER_CONTACT_INFO_SALES") or "xmpp:sales@" .. domain
local security = os.getenv("SERVER_CONTACT_INFO_SECURITY") or "xmpp:security@" .. domain
local support = os.getenv("SERVER_CONTACT_INFO_SUPPORT") or "xmpp:support@" .. domain
contact_info = {
abuse = _split(abuse, ", ");
admin = _split(admin, ", ");
feedback = _split(feedback, ", ");
sales = _split(sales, ", ");
security = _split(security, ", ");
support = _split(support, ", ");
}
welcome_message = "Kaixo $username, ongi etorri $host IM zerbitzura! Mesedez irakurri itzazu ondorengo <a href='https://lainoa.eus/terms/tos.html'>Erabilpen baldintzak</a>."
-21
View File
@@ -1,21 +0,0 @@
local getenv = Lua.os.getenv
local stringy = Lua.require "stringy"
local domain = getenv("DOMAIN")
local abuse = getenv("SERVER_CONTACT_INFO_ABUSE") or "xmpp:abuse@" .. domain
local admin = getenv("SERVER_CONTACT_INFO_ADMIN") or "xmpp:admin@" .. domain
local feedback = getenv("SERVER_CONTACT_INFO_FEEDBACK") or "xmpp:feedback@" .. domain
local sales = getenv("SERVER_CONTACT_INFO_SALES") or "xmpp:sales@" .. domain
local security = getenv("SERVER_CONTACT_INFO_SECURITY") or "xmpp:security@" .. domain
local support = getenv("SERVER_CONTACT_INFO_SUPPORT") or "xmpp:support@" .. domain
contact_info = {
abuse = stringy.split(abuse, ", ");
admin = stringy.split(admin, ", ");
feedback = stringy.split(feedback, ", ");
sales = stringy.split(sales, ", ");
security = stringy.split(security, ", ");
support = stringy.split(support, ", ");
}
welcome_message = "Kaixo $username, ongi etorri $host IM zerbitzura! Mesedez irakurri itzazu ondorengo <a href='https://lainoa.eus/terms/tos.html'>Erabilpen baldintzak</a>."
+8 -10
View File
@@ -1,10 +1,8 @@
local getenv = Lua.os.getenv local domain = os.getenv("DOMAIN")
local domain_http_upload = os.getenv("DOMAIN_HTTP_UPLOAD") or "upload." .. domain
local domain = getenv("DOMAIN") local domain_muc = os.getenv("DOMAIN_MUC") or "conference." .. domain
local domain_http_upload = getenv("DOMAIN_HTTP_UPLOAD") or "upload." .. domain local domain_proxy = os.getenv("DOMAIN_PROXY") or "proxy." .. domain
local domain_muc = getenv("DOMAIN_MUC") or "conference." .. domain local domain_pubsub = os.getenv("DOMAIN_PUBSUB") or "pubsub." .. domain
local domain_proxy = getenv("DOMAIN_PROXY") or "proxy." .. domain
local domain_pubsub = getenv("DOMAIN_PUBSUB") or "pubsub." .. domain
-- XEP-0368: SRV records for XMPP over TLS -- XEP-0368: SRV records for XMPP over TLS
-- https://compliance.conversations.im/test/xep0368/ -- https://compliance.conversations.im/test/xep0368/
c2s_direct_tls_ssl = { c2s_direct_tls_ssl = {
@@ -25,9 +23,9 @@ VirtualHost (domain)
-- Set up a http file upload -- Set up a http file upload
Component (domain_http_upload) "http_file_share" Component (domain_http_upload) "http_file_share"
http_file_share_expires_after = 60 * 60 * 24 * 7 -- a week in seconds http_file_share_expires_after = 60 * 60 * 24 * 7 -- a week in seconds
local size_limit = getenv("HTTP_FILE_SHARE_SIZE_LIMIT") or 10 * 1024 * 1024 -- Default is 10MB local size_limit = os.getenv("HTTP_FILE_SHARE_SIZE_LIMIT") or 10 * 1024 * 1024 -- Default is 10MB
http_file_share_size_limit = size_limit http_file_share_size_limit = size_limit
http_file_share_daily_quota = getenv("HTTP_FILE_SHARE_DAILY_QUOTA") or 10 * size_limit -- Default is 10x the size limit http_file_share_daily_quota = os.getenv("HTTP_FILE_SHARE_DAILY_QUOTA") or 10 * size_limit -- Default is 10x the size limit
Component (domain_muc) "muc" Component (domain_muc) "muc"
name = "Prosody Chatrooms" name = "Prosody Chatrooms"
@@ -35,7 +33,7 @@ Component (domain_muc) "muc"
max_history_messages = 20 max_history_messages = 20
modules_enabled = { modules_enabled = {
"muc_mam", "muc_mam",
--"vcard_muc" "vcard_muc"
} }
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers -- Set up a SOCKS5 bytestream proxy for server-proxied file transfers
+1 -1
View File
@@ -49,7 +49,7 @@ for ext in $exts; do
# firewall module configuration # firewall module configuration
if [ "$ext" == "firewall" ] ; then if [ "$ext" == "firewall" ] ; then
echo " - setting up mod_${ext}" echo " - setting up mod_${ext}"
new_config=$(cat "${config}" | echo -e "\nlocal spam_blocklist = getenv(\"SPAM_BLOCKLIST\") and \"/usr/local/etc/prosody/firewall/\" .. getenv(\"SPAM_BLOCKLIST\") or \"module:scripts/spam-blocklists.pfw\"\n\nfirewall_scripts = {\n\t\"module:scripts/spam-blocking.pfw\";\n\tspam_blocklist;\n};") new_config=$(cat "${config}" | echo -e "\nlocal spam_blocklist = os.getenv(\"SPAM_BLOCKLIST\") and \"/usr/local/etc/prosody/firewall/\" .. os.getenv(\"SPAM_BLOCKLIST\") or \"module:scripts/spam-blocklists.pfw\"\n\nfirewall_scripts = {\n\t\"module:scripts/spam-blocking.pfw\";\n\tspam_blocklist;\n};")
echo "${new_config}" >> "${config}" echo "${new_config}" >> "${config}"
fi fi
done done
+2 -2
View File
@@ -4,7 +4,7 @@ set -e
dir="/usr/src/prosody-modules" dir="/usr/src/prosody-modules"
mkdir -p "${dir}" mkdir -p "${dir}"
#wget https://hg.prosody.im/prosody-modules/archive/233691533318.tar.gz -O tip.tar.gz wget https://hg.prosody.im/prosody-modules/archive/233691533318.tar.gz -O tip.tar.gz
wget https://hg.prosody.im/prosody-modules/archive/tip.tar.gz #wget https://hg.prosody.im/prosody-modules/archive/tip.tar.gz
tar -xzf tip.tar.gz -C "${dir}" --strip-components=1 tar -xzf tip.tar.gz -C "${dir}" --strip-components=1
rm tip.tar.gz rm tip.tar.gz
+18 -18
View File
@@ -1,33 +1,33 @@
-- see example config at https://hg.prosody.im/-1.9/file/0.9.10/prosody.cfg.lua.dist -- see example config at https://hg.prosody.im/-1.9/file/0.9.10/prosody.cfg.lua.dist
-- easily extendable by putting into different config files within conf.d folder -- easily extendable by putting into different config files within conf.d folder
local getenv = Lua.os.getenv
local stringy = Lua.require "stringy"
local prosody_admins = getenv("PROSODY_ADMINS") or ""; local stringy = require "stringy"
local prosody_admins = os.getenv("PROSODY_ADMINS") or "";
admins = stringy.split(prosody_admins, ", "); admins = stringy.split(prosody_admins, ", ");
pidfile = "/var/run/prosody/prosody.pid" pidfile = "/var/run/prosody/prosody.pid"
allow_registration = getenv("ALLOW_REGISTRATION") or "true"; allow_registration = os.getenv("ALLOW_REGISTRATION") or "true";
c2s_require_encryption = getenv("C2S_REQUIRE_ENCRYPTION") or "true"; c2s_require_encryption = os.getenv("C2S_REQUIRE_ENCRYPTION") or "true";
s2s_require_encryption = getenv("S2S_REQUIRE_ENCRYPTION") or "true"; s2s_require_encryption = os.getenv("S2S_REQUIRE_ENCRYPTION") or "true";
s2s_secure_auth = getenv("S2S_SECURE_AUTH") or "true"; s2s_secure_auth = os.getenv("S2S_SECURE_AUTH") or "true";
authentication = getenv("AUTHENTICATION") or "internal_hashed"; authentication = os.getenv("AUTHENTICATION") or "internal_hashed";
ldap_base = getenv("LDAP_BASE"); ldap_base = os.getenv("LDAP_BASE");
ldap_server = getenv("LDAP_SERVER") or "localhost"; ldap_server = os.getenv("LDAP_SERVER") or "localhost";
ldap_rootdn = getenv("LDAP_ROOTDN") or ""; ldap_rootdn = os.getenv("LDAP_ROOTDN") or "";
ldap_password = getenv("LDAP_PASSWORD") or ""; ldap_password = os.getenv("LDAP_PASSWORD") or "";
ldap_filter = getenv("LDAP_FILTER") or "(uid=$user)"; ldap_filter = os.getenv("LDAP_FILTER") or "(uid=$user)";
ldap_scope = getenv("LDAP_SCOPE") or "subtree"; ldap_scope = os.getenv("LDAP_SCOPE") or "subtree";
ldap_tls = getenv("LDAP_TLS") or "false"; ldap_tls = os.getenv("LDAP_TLS") or "false";
ldap_mode = getenv("LDAP_MODE") or "bind"; ldap_mode = os.getenv("LDAP_MODE") or "bind";
ldap_admin_filter = getenv("LDAP_ADMIN_FILTER") or ""; ldap_admin_filter = os.getenv("LDAP_ADMIN_FILTER") or "";
log = { log = {
{levels = {min = getenv("LOG_LEVEL") or "info"}, to = "console"}; {levels = {min = os.getenv("LOG_LEVEL") or "info"}, to = "console"};
}; };
Include "conf.d/*.cfg.lua"; Include "conf.d/*.cfg.lua";
+4 -4
View File
@@ -47,10 +47,10 @@ runTests() {
&& ./bats/bats-core/bin/bats tests-"$containerName".bats && ./bats/bats-core/bin/bats tests-"$containerName".bats
} }
checkFeatures() { checkConfig() {
local containerName="$1" local containerName="$1"
sudo docker compose up -d "$containerName" sudo docker compose up -d "$containerName"
sudo docker compose exec -T "$containerName" prosodyctl check features || true sudo docker compose exec -T "$containerName" prosodyctl check config || true
sudo docker compose down sudo docker compose down
} }
@@ -82,5 +82,5 @@ sudo docker compose up -d prosody_ldap
runTests prosody_ldap runTests prosody_ldap
sudo docker compose down sudo docker compose down
# Check server features # Check server config
checkFeatures prosody checkConfig prosody