feat: implement optional support for MSC4495 (Selective Presence) #2034
Open
thetayloredman
wants to merge 11 commits from
thetayloredman/continuwuity:presence-v2/msc4495 into main
pull from: thetayloredman/continuwuity:presence-v2/msc4495
merge into: continuwuation:main
continuwuation:main
continuwuation:ginger/msc4484
continuwuation:aranje/illegal-car-mods
continuwuation:renovate/rust-zerover-patch-updates
continuwuation:ginger/web-ui-profile-banners
continuwuation:renovate/rand_core-0.x
continuwuation:renovate/base64-0.x
continuwuation:renovate/argon2-0.x
continuwuation:renovate/cargo-bins-cargo-binstall-1.x
continuwuation:renovate/ruma-digest
continuwuation:ginger/no-oidc-deactivate
continuwuation:ginger/fix-2062
continuwuation:morgan/arm64-runner
continuwuation:next/meta/disable-ci-build-cache
continuwuation:fix/26.7.3
continuwuation:nex/feat/msc-fed-bidi-ping
continuwuation:1235-add-arm-deb
continuwuation:nex/feat/admin-api
continuwuation:nex/meta/release-schedule
continuwuation:nex/feat/centralise-remote-memberships
continuwuation:nex/feat/pdu-versions
continuwuation:ginger/revert-direct-tls
continuwuation:nex/fix/federated-invite-revoke
continuwuation:nex/fix/plunger
continuwuation:jade/perf/gme-rebased
continuwuation:nex/perf/get-missing-events2
continuwuation:nex/backport/v0.5.11
continuwuation:nex/backport/v0.5.10-backport
continuwuation:nex/feat/msc4491-invite-reasons-in-room-creation
continuwuation:nex/feat/deprecated-room-versions
continuwuation:release/v0.5.9
continuwuation:nex/feat/enable-debug-log-release-builds
continuwuation:nex/feat/room-purging
continuwuation:nex/feat/room-shutdown
continuwuation:ginger/ruma-upstreaming
continuwuation:jade/tls-backends
continuwuation:ginger/email-fixes
continuwuation:jade/changelog-labels
continuwuation:nex/fix/v12-publishing
continuwuation:jade/build-info
continuwuation:jade/purge-sync-tokens
continuwuation:ginger/terms-and-conditions
continuwuation:ginger/remove-sliding-sync-proxy
continuwuation:nex/fix/pusher-association
continuwuation:ginger/email-support
continuwuation:jade/community-guidelines
continuwuation:nex/fix/federation-format
continuwuation:jade/git-deps-updates
continuwuation:jade/changelog-check
continuwuation:jade/rust-1-92
continuwuation:ginger/password-reset
continuwuation:nex/experiment/push-gateway-logs
continuwuation:ginger/msc3575-obliteration
continuwuation:nex/feat/block-busted-rooms
continuwuation:nex/fix/informative-startup-errs
continuwuation:ginger/no-left-room-initial-sync
continuwuation:jade/docker-entrypoint
continuwuation:jade/dehydrated-devices
continuwuation:ginger/complement-fixes
continuwuation:nex/fix/stale-destination-cache
continuwuation:nex/experiment/sync-mutex
continuwuation:tcpipuk/docker-docs
continuwuation:jade/snafu
continuwuation:jade/rand-update
continuwuation:nex/stateres-refactor
continuwuation:ginger/779-in-troubleshooting
continuwuation:jade/liveit-guide
continuwuation:jade/http3
continuwuation:nex/feat/admin-hide-empty-rooms
continuwuation:ginger/oobe
continuwuation:nex/fix/debian-thingy
continuwuation:jade/ldap-admin-check
continuwuation:nex/fix/remote-restricted-joins
continuwuation:nex/feat/msc4406-sender-ignored
continuwuation:jade/deadlock-detection
continuwuation:jade/get-started
continuwuation:jade/docs-guide
continuwuation:ginger/fix-local-invites
continuwuation:nex/fix/tpi
continuwuation:nex/feat/room-deletion
continuwuation:nex/feat/msc4322-media-redaction
continuwuation:ginger/stitched-order
continuwuation:ginger/deps/update-rspress
continuwuation:jade/admin-announce-improvements
continuwuation:ginger/xtask-improvements
continuwuation:jade/improve-admin-config-display
continuwuation:nex/fix/better-stateres-error-logs
continuwuation:jade/sender-timeouts
continuwuation:nex/feat/custom-v12-room-ids
continuwuation:ginger/update-metadata
continuwuation:nex/feat/admin-force-logout
continuwuation:tom/max-perf-docs
continuwuation:nex/fix/invalid-appservice-reg
continuwuation:nex/feat/antispam
continuwuation:nex/feat/account-locking
continuwuation:jade/logging-cleanup
continuwuation:jade/remove-legacy-appservice-auth
continuwuation:nex/fix/key-query
continuwuation:jade/update-prek
continuwuation:nex/fix/room-summaries
continuwuation:ginger/restrict-admin-commands
continuwuation:ginger/enable-console-by-default
continuwuation:jade/tag-fixes
continuwuation:jade/otlp
continuwuation:nex/meta/pull-req-template
continuwuation:nex/fix/fed-invite-compliance
continuwuation:nex/feat/build-commit
continuwuation:nex/feat/join-logging
continuwuation:jade/mailmap-updates
continuwuation:jade/hack-ci-tmp
continuwuation:jade/v12-stable
continuwuation:jade/relations
continuwuation:ginger/database-refactor
continuwuation:jade/fix-ldap-uiaa
continuwuation:nex/fix/validation
continuwuation:ginger/nuke-invalid-msc4133-fields-in-migration
continuwuation:ginger/downgrade-artifact-actions
continuwuation:oddlid/reload-fix
continuwuation:jade/fix-assert
continuwuation:ginger/sync-v3-cleanup
continuwuation:ginger/remove-absolute-action-urls
continuwuation:jade/website
continuwuation:nex/fix/backoff
continuwuation:ginger/fix-mdbook-for-0.5
continuwuation:ginger/no-docker-on-prs
continuwuation:backport/v0.5.0-rc.8-1
continuwuation:nex/fed-improvements
continuwuation:jade/rust-1.90
continuwuation:jade/mirror-dockerhub
continuwuation:jade/clippy-fixes
continuwuation:jade/fix-support
continuwuation:jade/clean-images
continuwuation:jade/wal-compression-type
continuwuation:jade/flake-clone
continuwuation:ginger/upload-rpms-on-schedule
continuwuation:nex/fix/incoming-fetch
continuwuation:nex/fix/upgrade
continuwuation:tom/ci-fedora-rpm
continuwuation:jade/ci-release-fix
continuwuation:jade/rocksdb-10-5
continuwuation:ginger/fix-msc4133-migration
continuwuation:ginger/migrate-busted-tz
continuwuation:hydra/public
continuwuation:nex/feat/manual-extremities
continuwuation:nex/feat/async-media
continuwuation:nex/feat/fast-joins-hack-do-not-use-DO-NOT-USE
continuwuation:nex/feat/better-logging
continuwuation:trigger-ci-so-latest-isnt-on-illegal-car-mods
continuwuation:nex/feat/pins-backfill
continuwuation:jade/tuwunel-2025-06-old
continuwuation:jade/ai-slop-db-docs
continuwuation:nex/fix-create-auth
continuwuation:jade/version-stats
continuwuation:jade/read-receipts
continuwuation:jade/rust-toolchain-no-targets
continuwuation:jade/logging-features
continuwuation:jade/syncv5-typing
continuwuation:jade/msc2815
continuwuation:morguldir/see-eye
continuwuation:jade/css-small-screen
continuwuation:nex/wip-751
continuwuation:tuwunel-rebase
continuwuation:test
continuwuation:oddlid/rename-admin-room-bot
continuwuation:strawberry/nix-ci-stuff
continuwuation:strawberry/valgrind
continuwuation:phonemain
continuwuation:strawberry/morgs-snake-sync-jason-main
continuwuation:newer-media-endpoints
continuwuation:folly-coroutines-async-io
continuwuation:federation-retry-timer-port
continuwuation:bad-attempt-at-extracting-homeserver-signing-key
continuwuation:room-deletion-attempt-do-not-use
11 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
329f491c9e |
chore: address CI failure and code review comment
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 9s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m9s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m24s
Checks / Prek / Clippy and Cargo Tests (pull_request) Failing after 5m36s
|
|||
|
8a405c9908 |
chore: add changelog fragment | |||
|
3df16ecabc |
feat: handle outbound Selective Presence
This commit moves responsibility for sending presence EDUs out of the sender's `select_edus_presence` function, and instead to a push approach from the presence module. Upon `set_presence` for a local user, the presence module calculates the user's recipient set (if selective presence is enabled) and then applies that information to outbound presence EDUs. |
|||
|
0009bad90e |
feat: use presence recipient lists to restrict presence access
This commit applies recipient lists as access control to presence down `/sync`
and the `/client/users/{userId}/status` endpoint.
|
|||
|
14ef1cbc02 |
feat: handle presence recipients on inbound EDUs | |||
|
01a89f7f56 |
feat: add presence sharing hint to room creation template | |||
|
5c4ea33e81 |
feat: add MSC4495 /query/presence_recipients federation endpoint
Adds the `presence_recipients` federation query endpoint, used by remote servers to query the recipients of a local user in the case of a break in the stream of EDU updates. |
|||
|
388dfe250d |
feat(admin): add admin commands for presence recipients
Adds `!admin debug recalculate-presence-recipients` and `!admin query get-recipient-users`. |
|||
|
f90254465a |
feat: add MSC4495 recipient user set calculation
This commit adds logic for MSC4495 to the presence module, specifically calculating a user's desired recipient user set given their `m.presence.sharing` account_data alongside hints in rooms they are a member of. |
|||
|
652d829d9e |
chore(database): add MSC4495 userid_recipients column and data model
This commit adds the MSC4495 `userid_recipients` column, along with the `PresenceRecipients` type and utilities. For local users, this stores the user's most recently sent presence recipients stream, and all remote and local users in their recipients set. For remote users, this stores all local users in the recipient set as of the last received presence EDU. Additionally, utility functions for calculating and applying updates are added. |
|||
|
33b00d0e8e |
chore: add MSC4495 config option, make unstable feature optional
This commit adds the config option `enable_msc4495_selective_presence`, which will allow server operators to toggle MSC4495 before it is merged into the spec. As this proposal is likely to break people's workflow up until clients adequately support it, this gate is enabled for now. We also pave the framework for future optional MSCs, by allowing the `unstable_features()` function to take in a `Config` instance. This is also propagated to callsites where it is used for path building by Ruma. |