Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
8301410
chore: Improve `task update:plugins`
RemiBardon Sep 17, 2025
2e90560
chore: Add `task dev:build`
RemiBardon Sep 17, 2025
21fef8c
fix(mod_admin_rest): Replace `prosodyctl.reload` by `prosody.reload_c…
RemiBardon Sep 17, 2025
3998a65
fix(prosody): Revert fixes for `prosodyctl.reload`
RemiBardon Sep 17, 2025
72c11ba
feat(prosody): Bump Prosody
RemiBardon Sep 17, 2025
d2af5c4
wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 18, 2025
aa549f8
feat(mod_http_admin_api): Allow choosing an ID when creating a group
RemiBardon Sep 18, 2025
e9a5dd4
chore: Delete `plugins/community/.hg*` which should not have been com…
RemiBardon Sep 18, 2025
aa0d13c
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 19, 2025
82769ba
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 19, 2025
0b59248
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 19, 2025
b2deac8
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 19, 2025
be1fe44
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 19, 2025
42545b3
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 19, 2025
1d342c2
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 20, 2025
901d565
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 20, 2025
c887866
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 21, 2025
6973897
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 22, 2025
ac1d97a
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Sep 23, 2025
5e9fa51
Revert "chore: Delete `plugins/community/.hg*` which should not have …
RemiBardon Oct 4, 2025
cc6e6e8
feat(prosody): Improve some Prosody modules
RemiBardon Oct 4, 2025
4d99aa0
chore(tasks): Allow passing flags to Docker via `task dev:build`
RemiBardon Oct 4, 2025
991f0ea
chore: Fix `.gitignore` and `.dockerignore`
RemiBardon Oct 4, 2025
9715739
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 4, 2025
55ed7d3
fixup! chore: Fix `.gitignore` and `.dockerignore`
RemiBardon Oct 8, 2025
c07e7a3
fixup! chore: Fix `.gitignore` and `.dockerignore`
RemiBardon Oct 12, 2025
167fb71
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 12, 2025
2875451
fixup! chore: Fix `.gitignore` and `.dockerignore`
RemiBardon Oct 12, 2025
88b3558
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 12, 2025
ea43733
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 14, 2025
ddb1b1d
fixup! chore: Fix `.gitignore` and `.dockerignore`
RemiBardon Oct 14, 2025
e648144
fixup! chore: Fix `.gitignore` and `.dockerignore`
RemiBardon Oct 17, 2025
b33f511
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 17, 2025
95ff4dc
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 22, 2025
a3d949d
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 26, 2025
1c65d8a
fixup! wip(api): Introduce `prose-pod-server-api`
RemiBardon Oct 27, 2025
07e0efb
feat: Bump Prosody community modules to latest version
RemiBardon Oct 28, 2025
4972245
feat!: Stabilize `mod_http_oauth2` API
RemiBardon Oct 28, 2025
9abe8d6
feat(prosody-http): Add `mod_http_admin_api`
RemiBardon Oct 28, 2025
8638509
feat(prosody-http)!: Remove useless `*Client` suffixes from types
RemiBardon Oct 28, 2025
31494b9
fix: Pin `arc-swap` version
RemiBardon Oct 28, 2025
8704bce
feat(prosody-http/admin_api)!: Return boxed slices instead of `Vec`s
RemiBardon Oct 28, 2025
479cf75
feat(prosody-http/admin_api)!: Mark invitation IDs as secret
RemiBardon Oct 28, 2025
fea40bc
fix(prosody-http): Re-export `time`
RemiBardon Oct 28, 2025
d810bc1
feat(prosody-http): Add optional depency to `jid`
RemiBardon Oct 28, 2025
528e65b
chore: Revert `jid` to `0.11.1`
RemiBardon Oct 31, 2025
5ad0203
chore: Fix linter warning
RemiBardon Oct 31, 2025
a0a2500
chore: Make code more readable and fix some warnings
RemiBardon Oct 31, 2025
1a195e3
chore: Improve code readability
RemiBardon Nov 2, 2025
f0b9453
feat!: Move all lifecycle routes under `/lifecycle`
RemiBardon Nov 2, 2025
6a666bc
chore: Normalize `frontend_reload`
RemiBardon Nov 2, 2025
f7366dc
chore: Normalize `factory_reset`
RemiBardon Nov 2, 2025
1f6b129
feat: Validate configuration changes
RemiBardon Nov 2, 2025
080c1a1
chore: Remove `*_route` methods from `AppState`
RemiBardon Nov 2, 2025
eb37b6a
feat: Expose `/lifecycle/backend-restart` when “Starting”
RemiBardon Nov 2, 2025
1303129
chore: Remove outdated todo
RemiBardon Nov 2, 2025
033d1a9
chore: Remove outdated todo
RemiBardon Nov 2, 2025
35f86ec
fix: Fix compilation when `features=mod_http_admin_api,jid`
RemiBardon Nov 2, 2025
47c3d40
fix: Remove stacktrace from error messages
RemiBardon Nov 3, 2025
13a864a
fix: Fix `get_user_by_name` returning “Unauthorized: User not found” …
RemiBardon Nov 3, 2025
4ee230a
fix: Add name to unnamed arguments
RemiBardon Nov 3, 2025
32c1978
fix(mod_http_admin_api): Accept `"application/json"` with parameters
RemiBardon Nov 3, 2025
4dc1681
fix(prosody-http/admin_api): Make `UserInfo::display_name` optional
RemiBardon Nov 3, 2025
d62d502
fix(prosody-http/admin_api): Fix `UserInfo` deserialization
RemiBardon Nov 3, 2025
acb10e8
fix: Accept numbers in error codes
RemiBardon Nov 3, 2025
d80c3dd
fix(prosody-http/admin_api): Fix error log
RemiBardon Nov 3, 2025
de4e310
fix: Fix error parsing in `mod_http_oauth2`
RemiBardon Nov 3, 2025
a2167a3
fix: Various fixes
RemiBardon Nov 4, 2025
8227750
fix(init): Add first account to team group
RemiBardon Nov 5, 2025
65f240c
chore: Ignore merged `mod_graceful_shutdown`
RemiBardon Nov 6, 2025
eee36de
fix: Fix circular reference in `AppContext`
RemiBardon Nov 6, 2025
942510a
fix: Set `admin_socket`
RemiBardon Nov 6, 2025
1a11e2f
fix: Shut Prosody down gracefully
RemiBardon Nov 6, 2025
cb807db
feat: Delete `admin.prose.local` data at startup
RemiBardon Nov 6, 2025
45033ac
fix(prosody): Remove `mod_cloud_notify` (now bundled)
RemiBardon Nov 6, 2025
834de1d
feat: Support log configuration and log Prosody via `tracing`
RemiBardon Nov 7, 2025
8c3d8b7
chore: Fix some file headers
RemiBardon Nov 8, 2025
c645e6c
chore: Replace some utility functions by macros
RemiBardon Nov 8, 2025
574ec0a
feat(logging): Support hot-reloading the log configuration
RemiBardon Nov 9, 2025
63f91af
fix(logging): Avoid boxing tracing layers
RemiBardon Nov 9, 2025
0947ba8
chore(refactor): Introduce a functional-style API for app states
RemiBardon Nov 11, 2025
33412c5
fix(logging): Reload only filters
RemiBardon Nov 11, 2025
e1db6df
fix(logging): Improve performance of log filters
RemiBardon Nov 11, 2025
1719113
fix: Store cache purge task cancellation token for later cleanup
RemiBardon Nov 11, 2025
4ef694e
feat: Listen for `SIGHUP`
RemiBardon Nov 11, 2025
0aa9936
chore(refactor): Homogenize use of `FailState` in `do_` functions
RemiBardon Nov 11, 2025
8d985fd
chore: Remove copy-pasted comment
RemiBardon Nov 11, 2025
b01c193
chore: Rename `prose-pod-server-api` to `prose-pod-server`
RemiBardon Nov 12, 2025
27c6d58
wip(docs): Document the Prose Pod Server API
RemiBardon Nov 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .dockerignore

This file was deleted.

63 changes: 63 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Bloat
.task
**/.git*
**/.hg*
api/target

# Prosody Community modules conflicting with internal plugins or merged
plugins/community/mod_cloud_notify
plugins/community/mod_graceful_shutdown
plugins/community/mod_pep_vcard_avatar
plugins/community/mod_server_contact_info
plugins/community/mod_server_info
# See `for f in $(rg -l Stage-Merged --no-ignore-vcs); do print -- "$(dirname "$f")"; done | sort`
plugins/community/mod_auth_any
plugins/community/mod_auth_ldap
plugins/community/mod_bookmarks2
plugins/community/mod_invites
plugins/community/mod_invites_adhoc
plugins/community/mod_invites_register
plugins/community/mod_stanzadebug
plugins/community/mod_storage_memory
plugins/community/mod_turn_external

# Broken Prosody Community modules
plugins/community/mod_vcard_command

# Other plugins we probably don’t want
# See `for f in $(rg -li 'Stage-(Broken|Obsolete)' --no-ignore-vcs); do print -- "$(dirname "$f")"; done | sort`
# TIP: See all statuses uing `rg -Ioi 'Stage-[a-z]+' | sort -u`
plugins/community/mod_bidi
plugins/community/mod_bookmarks
plugins/community/mod_carbons
plugins/community/mod_checkcerts
plugins/community/mod_csi
plugins/community/mod_http_upload
plugins/community/mod_limits
plugins/community/mod_limits_exception
plugins/community/mod_listusers
plugins/community/mod_mam
plugins/community/mod_mam_muc
plugins/community/mod_muc_log
plugins/community/mod_muc_log_http
plugins/community/mod_muc_occupant_id
plugins/community/mod_muc_ping
plugins/community/mod_muc_restrict_pm
plugins/community/mod_profile
plugins/community/mod_prometheus
plugins/community/mod_s2s_auth_dane
plugins/community/mod_s2s_smacks_timeout
plugins/community/mod_smacks
plugins/community/mod_smacks_offline
plugins/community/mod_sslv3_warn
plugins/community/mod_statistics
plugins/community/mod_telnet_tlsinfo
plugins/community/mod_turncredentials
plugins/community/mod_twitter

# Editor
.nova
.zed

# macOS
**/.DS_Store
59 changes: 57 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,64 @@
# Bloat
plugins/community/.hg
.task
**/.hg/cache/
**/.hg/store/undo*
**/.hg/wcache/
**/.hg/hgrc.d/

# Prosody Community modules conflicting with internal plugins or merged
plugins/community/mod_cloud_notify
plugins/community/mod_graceful_shutdown
plugins/community/mod_pep_vcard_avatar
plugins/community/mod_server_contact_info
plugins/community/mod_server_info
# See `for f in $(rg -l Stage-Merged --no-ignore-vcs); do print -- "$(dirname "$f")"; done | sort`
plugins/community/mod_auth_any
plugins/community/mod_auth_ldap
plugins/community/mod_bookmarks2
plugins/community/mod_invites
plugins/community/mod_invites_adhoc
plugins/community/mod_invites_register
plugins/community/mod_stanzadebug
plugins/community/mod_storage_memory
plugins/community/mod_turn_external

# Broken Prosody Community modules
plugins/community/mod_vcard_command

# Other plugins we probably don’t want
# See `for f in $(rg -li 'Stage-(Broken|Obsolete)' --no-ignore-vcs); do print -- "$(dirname "$f")"; done | sort`
# TIP: See all statuses uing `rg -Ioi 'Stage-[a-z]+' | sort -u`
plugins/community/mod_bidi
plugins/community/mod_bookmarks
plugins/community/mod_carbons
plugins/community/mod_checkcerts
plugins/community/mod_csi
plugins/community/mod_http_upload
plugins/community/mod_limits
plugins/community/mod_limits_exception
plugins/community/mod_listusers
plugins/community/mod_mam
plugins/community/mod_mam_muc
plugins/community/mod_muc_log
plugins/community/mod_muc_log_http
plugins/community/mod_muc_occupant_id
plugins/community/mod_muc_ping
plugins/community/mod_muc_restrict_pm
plugins/community/mod_profile
plugins/community/mod_prometheus
plugins/community/mod_s2s_auth_dane
plugins/community/mod_s2s_smacks_timeout
plugins/community/mod_smacks
plugins/community/mod_smacks_offline
plugins/community/mod_sslv3_warn
plugins/community/mod_statistics
plugins/community/mod_telnet_tlsinfo
plugins/community/mod_turncredentials
plugins/community/mod_twitter

# Editor
.nova
.zed

# macOS
**.DS_Store
**/.DS_Store
128 changes: 83 additions & 45 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,20 +1,46 @@
ARG BASE_IMAGE=alpine:3.19
ARG BASE_IMAGE=alpine:3.22.1
ARG CARGO_CHEF_IMAGE=lukemathwalker/cargo-chef:0.1.72-rust-1.89.0-alpine

# -- STAGE 1 [build] --

FROM ${BASE_IMAGE} AS build


FROM ${CARGO_CHEF_IMAGE} AS chef
WORKDIR /usr/src/prose-pod-server


FROM chef AS api-plan
COPY api .
RUN cargo chef prepare --recipe-path recipe.json


FROM chef AS api-build
COPY --from=api-plan /usr/src/prose-pod-server/recipe.json recipe.json

ARG CARGO_PROFILE='release'

# Build dependencies.
RUN cargo chef cook --recipe-path recipe.json --profile "${CARGO_PROFILE}"

# Build the application.
COPY api .
RUN cargo install --path . --bin prose-pod-server --profile "${CARGO_PROFILE}"




FROM ${BASE_IMAGE} AS prosody-build

WORKDIR /build

RUN apk add --no-cache \
build-base \
linux-headers \
lua5.4-dev \
libidn-dev \
openssl-dev \
libidn-dev \
luarocks5.4 \
sqlite-dev
build-base \
linux-headers \
lua5.4-dev \
libidn-dev \
openssl-dev \
libidn-dev \
luarocks5.4 \
sqlite-dev

# BUG: Broken. See [Builds broken by issue in LuaSQLite3 · Issue #8 · prose-im/prose-pod-server](https://github.com/prose-im/prose-pod-server/issues/8).
#RUN luarocks-5.4 install lsqlite3
Expand All @@ -24,41 +50,40 @@ RUN apk add --no-cache \
COPY ./build /build
RUN apk add --no-cache unzip
RUN unzip /build/lsqlite3_v096.zip; \
cd /build/lsqlite3_v096; \
luarocks-5.4 make lsqlite3-0.9.6-1.rockspec
cd /build/lsqlite3_v096; \
luarocks-5.4 make lsqlite3-0.9.6-1.rockspec

COPY ./prosody /build

RUN ./configure \
--prefix=/ \
--sysconfdir=/etc/prosody \
--libdir=/lib \
--datadir=/var/lib/prosody \
--lua-version=5.4 \
--lua-suffix=5.4 \
--idn-library=idn
--prefix=/ \
--sysconfdir=/etc/prosody \
--libdir=/lib \
--datadir=/var/lib/prosody \
--lua-version=5.4 \
--lua-suffix=5.4 \
--idn-library=idn

RUN make
RUN make install

# -- STAGE 2 [run] --

FROM ${BASE_IMAGE} AS run
FROM ${BASE_IMAGE} AS prosody-run

RUN apk add --no-cache \
libidn \
lua5.4 \
lua5.4-expat \
lua5.4-socket \
lua5.4-filesystem \
lua5.4-sec \
lua5.4-unbound \
sqlite-libs

COPY --from=build /bin/prosody bin/
COPY --from=build /bin/prosodyctl bin/
COPY --from=build /lib/prosody/ /lib/prosody/
COPY --from=build /usr/local/lib/lua/5.4/lsqlite3.so /usr/lib/lua/5.4/
libidn \
lua5.4 \
lua5.4-expat \
lua5.4-socket \
lua5.4-filesystem \
lua5.4-sec \
lua5.4-unbound \
sqlite-libs

COPY --from=prosody-build /bin/prosody bin/
COPY --from=prosody-build /bin/prosodyctl bin/
COPY --from=prosody-build /lib/prosody/ /lib/prosody/
COPY --from=prosody-build /usr/local/lib/lua/5.4/lsqlite3.so /usr/lib/lua/5.4/

COPY ./plugins/*/ /usr/local/lib/prosody/modules/
COPY ./pod-bootstrap.cfg.lua /usr/share/prose/prosody.bootstrap.cfg.lua
Expand All @@ -67,22 +92,22 @@ RUN addgroup -S --gid 1001 prosody
RUN adduser -S --uid 1001 -G prosody --no-create-home prosody

RUN mkdir \
/var/lib/prosody/ \
/var/run/prosody/
/var/lib/prosody/ \
/var/run/prosody/

RUN chown prosody:prosody \
/var/lib/prosody/ \
/var/run/prosody/
/var/lib/prosody/ \
/var/run/prosody/

ARG VERSION=''
ARG COMMIT=''
ARG BUILD_TIMESTAMP=''
RUN SERVER_VERSION_DIR=/lib/prosody/prose.version.d && \
mkdir -p "${SERVER_VERSION_DIR:?}" && \
echo "${VERSION:-}" > "${SERVER_VERSION_DIR:?}"/VERSION && \
echo "${COMMIT:-}" > "${SERVER_VERSION_DIR:?}"/COMMIT && \
if [ -z "${BUILD_TIMESTAMP:-}" ]; then BUILD_TIMESTAMP="$(date -u -Iseconds)" && BUILD_TIMESTAMP="${BUILD_TIMESTAMP//+00:00/Z}"; fi && \
echo "${BUILD_TIMESTAMP:?}" > "${SERVER_VERSION_DIR:?}"/BUILD_TIMESTAMP
mkdir -p "${SERVER_VERSION_DIR:?}" && \
echo "${VERSION:-}" > "${SERVER_VERSION_DIR:?}"/VERSION && \
echo "${COMMIT:-}" > "${SERVER_VERSION_DIR:?}"/COMMIT && \
if [ -z "${BUILD_TIMESTAMP:-}" ]; then BUILD_TIMESTAMP="$(date -u -Iseconds)" && BUILD_TIMESTAMP="${BUILD_TIMESTAMP//+00:00/Z}"; fi && \
echo "${BUILD_TIMESTAMP:?}" > "${SERVER_VERSION_DIR:?}"/BUILD_TIMESTAMP

VOLUME /etc/prosody/
VOLUME /var/lib/prosody/
Expand All @@ -99,4 +124,17 @@ EXPOSE 5280/tcp

USER prosody:prosody

ENTRYPOINT ["prosody"]



FROM prosody-run AS run

WORKDIR /usr/share/prose-pod-server

COPY --from=api-build /usr/local/cargo/bin/prose-pod-server /usr/local/bin/prose-pod-server

VOLUME /etc/prose/

ENTRYPOINT ["prose-pod-server"]

EXPOSE 8080/tcp
41 changes: 40 additions & 1 deletion Taskfile.dist.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,43 @@ tasks:

update:plugins:
desc: Update Prosody community modules
cmd: hg -R plugins/community pull --update
cmds:
- hg -R plugins/community pull --update
- git add plugins/community
- "git commit -m 'feat(prosody): Update Prosody Community modules'"
preconditions:
- git diff --cached --quiet

dev:build:
desc: Build `proseim/prose-pod-server:local`
cmds:
- |-
docker build -t proseim/prose-pod-server:local \
--build-arg VERSION="$(cat VERSION)" \
--build-arg COMMIT="$(git rev-parse HEAD)" \
--build-arg CARGO_PROFILE='{{ .CARGO_PROFILE }}' \
{{ .CLI_ARGS }} \
'{{ .ROOT_DIR }}'
- echo '{{ .CARGO_PROFILE }}-{{ .CHECKSUM }}' > .task/checksum/dev-build-profile
vars:
CARGO_PROFILE: '{{ .CARGO_PROFILE | default "dev" }}'
sources:
- plugins/**
- prosody/**
- api/src/**
- api/crates/**/src/**
- api/Cargo.toml
- pod-bootstrap.cfg.lua
- VERSION
- Dockerfile
- .dockerignore
status:
- >-
[[ "$(cat .task/checksum/dev-build-profile)" == '{{ .CARGO_PROFILE }}-{{ .CHECKSUM }}' ]]

internal:
cmds:
- pushd plugins/community
- hg init
- hg pull https://hg.prosody.im/prosody-modules/
- popd
1 change: 1 addition & 0 deletions api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
target/
1 change: 1 addition & 0 deletions api/ARCHITECTURE.md
Loading