mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 19204b097d | |||
| 567d809efe | |||
| 8171e3d614 | |||
| 98b221096b | |||
| 027f6a4b02 | |||
| 42028f155b | |||
| 6999246d19 | |||
| 01f6893c07 | |||
| ed93a4ad9f | |||
| cc8a4501b5 | |||
| cbb1632a1a | |||
| df59fc35b4 | |||
| c927bc7b30 | |||
| c1ce40c008 | |||
| 66be11a978 |
@@ -0,0 +1,53 @@
|
|||||||
|
name: Auto Labeler
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, reopened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
auto-label:
|
||||||
|
name: Apply labels based on changed files
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Apply PR Labels
|
||||||
|
uses: https://github.com/actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const allFiles = await github.paginate(github.rest.pulls.listFiles, {
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: context.issue.number,
|
||||||
|
});
|
||||||
|
|
||||||
|
const fileNames = allFiles.map(f => f.filename);
|
||||||
|
const labelsToAdd = new Set();
|
||||||
|
|
||||||
|
for (const file of fileNames) {
|
||||||
|
if (file.startsWith('docs/') || file.startsWith('theme/') || file.endsWith('.md') || file == 'rspress.config.ts') {
|
||||||
|
labelsToAdd.add('Documentation');
|
||||||
|
}
|
||||||
|
if (file.startsWith('.forgejo/')) {
|
||||||
|
labelsToAdd.add('Meta/CI');
|
||||||
|
}
|
||||||
|
if (file.startsWith('pkg/') || file.startsWith('nix/') || file === 'flake.nix' || file === 'flake.lock' || file.startsWith('docker/')) {
|
||||||
|
labelsToAdd.add('Meta/Packaging');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labelsToAdd.size > 0) {
|
||||||
|
const labelsArray = Array.from(labelsToAdd);
|
||||||
|
console.log('Adding labels:', labelsArray);
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
labels: labelsArray,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log('No files changed that require auto-labeling.');
|
||||||
|
}
|
||||||
@@ -92,10 +92,13 @@ jobs:
|
|||||||
BASE_VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r ".packages[] | select(.name == \"conduwuit\").version" | sed 's/[^a-zA-Z0-9.+]/~/g')
|
BASE_VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r ".packages[] | select(.name == \"conduwuit\").version" | sed 's/[^a-zA-Z0-9.+]/~/g')
|
||||||
# VERSION is the package version, COMPONENT is used in
|
# VERSION is the package version, COMPONENT is used in
|
||||||
# apt's repository config like a git repo branch
|
# apt's repository config like a git repo branch
|
||||||
if [[ "${{ forge.ref }}" == "refs/tags/"* ]]; then
|
VERSION=$BASE_VERSION
|
||||||
# Use the "stable" component for tagged releases
|
if [[ ${{ forge.ref_name }} =~ ^v+[0-9]\.+[0-9]\.+[0-9]$ ]]; then
|
||||||
|
# Use the "stable" component for tagged semver releases
|
||||||
COMPONENT="stable"
|
COMPONENT="stable"
|
||||||
VERSION=$BASE_VERSION
|
elif [[ ${{ forge.ref }} =~ ^refs/tags/^v+[0-9]\.+[0-9]\.+[0-9] ]]; then
|
||||||
|
# Use the "unstable" component for tagged semver pre-releases
|
||||||
|
COMPONENT="unstable"
|
||||||
else
|
else
|
||||||
# Use the "dev" component for development builds
|
# Use the "dev" component for development builds
|
||||||
SHA=$(echo "${{ forge.sha }}" | cut -c1-7)
|
SHA=$(echo "${{ forge.sha }}" | cut -c1-7)
|
||||||
|
|||||||
@@ -1,3 +1,45 @@
|
|||||||
|
# Continuwuity v0.5.7 (2026-04-17)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Re-added support for reading registration tokens from a file. Contributed by @ginger and @benbot. (#1371)
|
||||||
|
- Add new config option to allow or disallow search engine indexing through a `<meta ../>` tag. Defaults to blocking indexing (`content="noindex"`). Contributed by @s1lv3r and @ginger. (#1527)
|
||||||
|
- Add new config option for [MSC4439](https://github.com/matrix-org/matrix-spec-proposals/pull/4439)
|
||||||
|
PGP key URIs. Contributed by LogN. (#1609)
|
||||||
|
- Added `!admin users reset-push-rules` command to reset the notification settings of users. Contributed by @nex. (#1613)
|
||||||
|
- Notification pushers are now automatically removed when their associated device is. Admin commands now exist for manual cleanup too. Contributed by @nex. (#1614)
|
||||||
|
- Implemented option to deprioritize servers for room join requests. Contributed by @ezera. (#1624)
|
||||||
|
- Added admin commands to get build information and features. Contributed by @Jade (#1629)
|
||||||
|
- Added support for associating email addresses with accounts, requiring email addresses for registration, and resetting passwords via email. Contributed by @ginger
|
||||||
|
- Added support for requiring users to accept terms and conditions when registering.
|
||||||
|
- Added support for using an admin command to issue self-service password reset links.
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Fixed corrupted appservice registrations causing the server to enter a crash loop. Contributed by @nex. (#1265)
|
||||||
|
- Prevent removing the admin room alias (`#admins`) to avoid accidentally breaking admin room functionality. Contributed by @0xnim (#1448)
|
||||||
|
- Stripped `join_authorised_via_users_server` from json if user is already in room (@partha:cxy.run) (#1542)
|
||||||
|
- Fixed internal server errors for fetching thumbnails. Contributed by @PerformativeJade (#1572)
|
||||||
|
- Fixed error 500 when joining non-existent rooms. Contributed by @ezera. (#1579)
|
||||||
|
- Refactored nix package. Breaking, since `all-features` package no longer exists. Continuwuity is now built with jemalloc and liburing by default. Contributed by @Henry-Hiles (QuadRadical). (#1596)
|
||||||
|
- Fixed resolving IP of servers that only use SRV delegation. Contributed by @tulir. (#1615)
|
||||||
|
- Fixed "Sender must be a local user" error for make_join, make_knock, and make_leave federation routes. Contributed by @nex. (#1623)
|
||||||
|
- Fixed restricted joins not being signed when we are being used as an authorising server. Contributed by @nex, reported by [vel](matrix:u/vel:nhjkl.com?action=chat). (#1630)
|
||||||
|
- Fixed room alias deletion so removing one local alias no longer removes other aliases from room alias listings.
|
||||||
|
- Stopped left rooms from being unconditionally sent on initial sync, hopefully fixing spurious appearances of left rooms in some clients (and making sync faster as a bonus). Contributed by @ginger
|
||||||
|
- Correct the response field name for MatrixRTC transports. Contributed by @spaetz
|
||||||
|
|
||||||
|
## Improved Documentation
|
||||||
|
|
||||||
|
- Added Testing and Troubleshooting instructions for Livekit documentation. Contributed by @stratself. (#1429)
|
||||||
|
- Refactored docker docs to include new initial token workflow, and add Caddyfile example. Contributed by @stratself. (#1594)
|
||||||
|
- Add DNS tuning guide for Continuwuity. Users are recommended to set up a local caching resolver following the guide's advice. Contributed by @stratself (#1601)
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
|
||||||
|
- Fixed compiler warning in cf_opts.rs when building in release. Contributed by @ezera. (#1620)
|
||||||
|
|
||||||
|
|
||||||
# Continuwuity 0.5.6 (2026-03-03)
|
# Continuwuity 0.5.6 (2026-03-03)
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|||||||
Generated
+22
-22
@@ -848,9 +848,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.6.0"
|
version = "4.6.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
|
checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -868,9 +868,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "4.6.0"
|
version = "4.6.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
|
checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -936,7 +936,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit"
|
name = "conduwuit"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"conduwuit_admin",
|
"conduwuit_admin",
|
||||||
@@ -970,7 +970,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_admin"
|
name = "conduwuit_admin"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"conduwuit_api",
|
"conduwuit_api",
|
||||||
@@ -993,7 +993,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_api"
|
name = "conduwuit_api"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"axum",
|
"axum",
|
||||||
@@ -1028,7 +1028,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_build_metadata"
|
name = "conduwuit_build_metadata"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"built",
|
"built",
|
||||||
"cargo_metadata",
|
"cargo_metadata",
|
||||||
@@ -1036,7 +1036,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_core"
|
name = "conduwuit_core"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"argon2",
|
"argon2",
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
@@ -1100,7 +1100,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_database"
|
name = "conduwuit_database"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"conduwuit_core",
|
"conduwuit_core",
|
||||||
@@ -1120,7 +1120,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_macros"
|
name = "conduwuit_macros"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo_toml",
|
"cargo_toml",
|
||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
@@ -1131,7 +1131,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_router"
|
name = "conduwuit_router"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
"axum-client-ip",
|
"axum-client-ip",
|
||||||
@@ -1167,7 +1167,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_service"
|
name = "conduwuit_service"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama",
|
"askama",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -1214,7 +1214,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "conduwuit_web"
|
name = "conduwuit_web"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama",
|
"askama",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -1906,7 +1906,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3475,7 +3475,7 @@ version = "0.50.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4845,7 +4845,7 @@ dependencies = [
|
|||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5446,7 +5446,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5749,9 +5749,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.51.1"
|
version = "1.52.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c"
|
checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -6578,7 +6578,7 @@ version = "0.1.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -6920,7 +6920,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xtask"
|
name = "xtask"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama",
|
"askama",
|
||||||
"cargo_metadata",
|
"cargo_metadata",
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ license = "Apache-2.0"
|
|||||||
# See also `rust-toolchain.toml`
|
# See also `rust-toolchain.toml`
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://forgejo.ellis.link/continuwuation/continuwuity"
|
repository = "https://forgejo.ellis.link/continuwuation/continuwuity"
|
||||||
version = "0.5.7-alpha.2"
|
version = "0.5.7"
|
||||||
|
|
||||||
[workspace.metadata.crane]
|
[workspace.metadata.crane]
|
||||||
name = "conduwuit"
|
name = "conduwuit"
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Users will now be prevented from removing their email if the server is configured to require an email when registering an account.
|
||||||
@@ -1 +0,0 @@
|
|||||||
Added support for associating email addresses with accounts, requiring email addresses for registration, and resetting passwords via email. Contributed by @ginger
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Added support for using an admin command to issue self-service password reset links.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Stopped left rooms from being unconditionally sent on initial sync, hopefully fixing spurious appearances of left rooms in some clients (and making sync faster as a bonus). Contributed by @ginger
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Added support for requiring users to accept terms and conditions when registering.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed room alias deletion so removing one local alias no longer removes other aliases from room alias listings.
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Fixed a situation where multiple email addresses could be associated with one user when that user changes their email address.
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed corrupted appservice registrations causing the server to enter a crash loop. Contributed by @nex.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Re-added support for reading registration tokens from a file. Contributed by @ginger and @benbot.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Added Testing and Troubleshooting instructions for Livekit documentation. Contributed by @stratself.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Prevent removing the admin room alias (`#admins`) to avoid accidentally breaking admin room functionality. Contributed by @0xnim
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Add new config option to allow or disallow search engine indexing through a `<meta ../>` tag. Defaults to blocking indexing (`content="noindex"`). Contributed by @s1lv3r and @ginger.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Stripped `join_authorised_via_users_server` from json if user is already in room (@partha:cxy.run)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed internal server errors for fetching thumbnails. Contributed by @PerformativeJade
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed error 500 when joining non-existent rooms. Contributed by @ezera.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Refactored docker docs to include new initial token workflow, and add Caddyfile example. Contributed by @stratself.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Refactored nix package. Breaking, since `all-features` package no longer exists. Continuwuity is now built with jemalloc and liburing by default. Contributed by @Henry-Hiles (QuadRadical).
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Add DNS tuning guide for Continuwuity. Users are recommended to set up a local caching resolver following the guide's advice. Contributed by @stratself
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
Add new config option for [MSC4439](https://github.com/matrix-org/matrix-spec-proposals/pull/4439)
|
|
||||||
PGP key URIs. Contributed by LogN.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Added `!admin users reset-push-rules` command to reset the notification settings of users. Contributed by @nex.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Notification pushers are now automatically removed when their associated device is. Admin commands now exist for manual cleanup too. Contributed by @nex.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed resolving IP of servers that only use SRV delegation. Contributed by @tulir.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed compiler warning in cf_opts.rs when building in release. Contributed by @ezera.
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Updated config docs to state we support room version 12, and set it as default. Contributed by @ezera.
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed "Sender must be a local user" error for make_join, make_knock, and make_leave federation routes. Contributed by @nex.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Implemented option to deprioritize servers for room join requests. Contributed by @ezera.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Added admin commands to get build information and features. Contributed by @Jade
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Fixed restricted joins not being signed when we are being used as an authorising server. Contributed by @nex, reported by [vel](matrix:u/vel:nhjkl.com?action=chat).
|
|
||||||
@@ -619,7 +619,7 @@
|
|||||||
# Set to false to disable users from joining or creating room versions
|
# Set to false to disable users from joining or creating room versions
|
||||||
# that aren't officially supported by continuwuity.
|
# that aren't officially supported by continuwuity.
|
||||||
#
|
#
|
||||||
# continuwuity officially supports room versions 6 - 11.
|
# continuwuity officially supports room versions 6 - 12.
|
||||||
#
|
#
|
||||||
# continuwuity has slightly experimental (though works fine in practice)
|
# continuwuity has slightly experimental (though works fine in practice)
|
||||||
# support for versions 3 - 5.
|
# support for versions 3 - 5.
|
||||||
@@ -631,9 +631,9 @@
|
|||||||
# rather than an integer. Forgetting the quotes will make the server fail
|
# rather than an integer. Forgetting the quotes will make the server fail
|
||||||
# to start!
|
# to start!
|
||||||
#
|
#
|
||||||
# Per spec, room version "11" is the default.
|
# Per spec, room version "12" is the default.
|
||||||
#
|
#
|
||||||
#default_room_version = "11"
|
#default_room_version = "12"
|
||||||
|
|
||||||
# Enable OpenTelemetry OTLP tracing export. This replaces the deprecated
|
# Enable OpenTelemetry OTLP tracing export. This replaces the deprecated
|
||||||
# Jaeger exporter. Traces will be sent via OTLP to a collector (such as
|
# Jaeger exporter. Traces will be sent via OTLP to a collector (such as
|
||||||
@@ -2104,6 +2104,9 @@
|
|||||||
# Whether to require that users provide an email address when they
|
# Whether to require that users provide an email address when they
|
||||||
# register.
|
# register.
|
||||||
#
|
#
|
||||||
|
# If either this option or `require_email_for_token_registration` are set,
|
||||||
|
# users will not be allowed to remove their email address.
|
||||||
|
#
|
||||||
#require_email_for_registration = false
|
#require_email_for_registration = false
|
||||||
|
|
||||||
# Whether to require that users who register with a registration token
|
# Whether to require that users who register with a registration token
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
"message": "Welcome to Continuwuity! Important announcements about the project will appear here."
|
"message": "Welcome to Continuwuity! Important announcements about the project will appear here."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 11,
|
||||||
"mention_room": false,
|
"mention_room": false,
|
||||||
"date": "2026-03-03",
|
"date": "2026-04-17",
|
||||||
"message": "We've just released [v0.5.6](https://forgejo.ellis.link/continuwuation/continuwuity/releases/tag/v0.5.6), which contains a few security improvements - plus significant reliability and performance improvements. Please update as soon as possible. \n\nWe released [v0.5.5](https://forgejo.ellis.link/continuwuation/continuwuity/releases/tag/v0.5.5) two weeks ago, but it skipped your admin room straight to [our announcements channel](https://matrix.to/#/!jIdNjSM5X-V5JVx2h2kAhUZIIQ08GyzPL55NFZAH1vM?via=ellis.link&via=gingershaped.computer&via=matrix.org). Make sure you're there to get important information as soon as we announce it! [Our space](https://matrix.to/#/!8cR4g-i9ucof69E4JHNg9LbPVkGprHb3SzcrGBDDJgk?via=continuwuity.org&via=ellis.link&via=matrix.org) has also gained a bunch of new and interesting rooms - be there or be square."
|
"message": "[v0.5.7](https://forgejo.ellis.link/continuwuation/continuwuity/releases/tag/v0.5.7) is out! Email verification! Terms and Conditions! Deleting notification pushers! So much good stuff. Go grab the release and read the changelog!"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
callPackage,
|
callPackage,
|
||||||
rustPlatform,
|
rustPlatform,
|
||||||
cargoExtraArgs ? "",
|
cargoExtraArgs ? "",
|
||||||
|
rustflags ? "",
|
||||||
rocksdb ? callPackage ./rocksdb.nix { },
|
rocksdb ? callPackage ./rocksdb.nix { },
|
||||||
|
profile ? "release",
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
# see https://crane.dev/API.html#cranelibfiltercargosources
|
# see https://crane.dev/API.html#cranelibfiltercargosources
|
||||||
@@ -35,6 +37,8 @@ let
|
|||||||
env = {
|
env = {
|
||||||
ROCKSDB_INCLUDE_DIR = "${rocksdb}/include";
|
ROCKSDB_INCLUDE_DIR = "${rocksdb}/include";
|
||||||
ROCKSDB_LIB_DIR = "${rocksdb}/lib";
|
ROCKSDB_LIB_DIR = "${rocksdb}/lib";
|
||||||
|
CARGO_PROFILE = profile;
|
||||||
|
RUSTFLAGS = rustflags;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
{
|
{
|
||||||
perSystem =
|
perSystem =
|
||||||
{
|
{
|
||||||
|
self',
|
||||||
pkgs,
|
pkgs,
|
||||||
craneLib,
|
craneLib,
|
||||||
...
|
...
|
||||||
@@ -12,7 +13,22 @@
|
|||||||
{
|
{
|
||||||
packages = {
|
packages = {
|
||||||
rocksdb = pkgs.callPackage ./rocksdb.nix { };
|
rocksdb = pkgs.callPackage ./rocksdb.nix { };
|
||||||
default = pkgs.callPackage ./continuwuity.nix { inherit self craneLib; };
|
default = pkgs.callPackage ./continuwuity.nix {
|
||||||
|
inherit self craneLib;
|
||||||
|
# extra features via `cargoExtraArgs`
|
||||||
|
cargoExtraArgs = "-F http3";
|
||||||
|
# extra RUSTFLAGS via `rustflags`
|
||||||
|
# the stuff below is required for http3
|
||||||
|
rustflags = "--cfg reqwest_unstable";
|
||||||
|
};
|
||||||
|
# users may also override this with other cargo profiles to build for other feature sets
|
||||||
|
#
|
||||||
|
# other examples include:
|
||||||
|
#
|
||||||
|
# - release-high-perf
|
||||||
|
max-perf = self'.packages.default.override {
|
||||||
|
profile = "release-max-perf";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ This document provides information about downloading and deploying the Debian pa
|
|||||||
|
|
||||||
To add the Continuwuation apt repository:
|
To add the Continuwuation apt repository:
|
||||||
```bash
|
```bash
|
||||||
# Replace with `"dev"` for bleeding-edge builds at your own risk
|
# Component `"stable"` contains all tagged releases. Use `"stable unstable"` to additionally include all pre-releases (alpha, beta, rc,...)
|
||||||
|
# Replace with `"dev"` for bleeding-edge builds at your own risk, these contain
|
||||||
|
# automatic nightly builds and might or might not work.
|
||||||
export COMPONENT="stable"
|
export COMPONENT="stable"
|
||||||
# Import the Continuwuation signing key
|
# Import the Continuwuation signing key
|
||||||
sudo curl https://forgejo.ellis.link/api/packages/continuwuation/debian/repository.key -o /etc/apt/keyrings/forgejo-continuwuation.asc
|
sudo curl https://forgejo.ellis.link/api/packages/continuwuation/debian/repository.key -o /etc/apt/keyrings/forgejo-continuwuation.asc
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ pub(crate) async fn request_3pid_management_token_via_email_route(
|
|||||||
State(services): State<crate::State>,
|
State(services): State<crate::State>,
|
||||||
body: Ruma<request_3pid_management_token_via_email::v3::Request>,
|
body: Ruma<request_3pid_management_token_via_email::v3::Request>,
|
||||||
) -> Result<request_3pid_management_token_via_email::v3::Response> {
|
) -> Result<request_3pid_management_token_via_email::v3::Response> {
|
||||||
|
if !services.threepid.email_requirement().may_change() {
|
||||||
|
return Err!(Request(Forbidden("You may not change your email address.")));
|
||||||
|
}
|
||||||
|
|
||||||
let Ok(email) = Address::try_from(body.email.clone()) else {
|
let Ok(email) = Address::try_from(body.email.clone()) else {
|
||||||
return Err!(Request(InvalidParam("Invalid email address.")));
|
return Err!(Request(InvalidParam("Invalid email address.")));
|
||||||
};
|
};
|
||||||
@@ -105,6 +109,10 @@ pub(crate) async fn add_3pid_route(
|
|||||||
) -> Result<add_3pid::v3::Response> {
|
) -> Result<add_3pid::v3::Response> {
|
||||||
let sender_user = body.sender_user();
|
let sender_user = body.sender_user();
|
||||||
|
|
||||||
|
if !services.threepid.email_requirement().may_change() {
|
||||||
|
return Err!(Request(Forbidden("You may not change your email address.")));
|
||||||
|
}
|
||||||
|
|
||||||
// Require password auth to add an email
|
// Require password auth to add an email
|
||||||
let _ = services
|
let _ = services
|
||||||
.uiaa
|
.uiaa
|
||||||
@@ -138,6 +146,10 @@ pub(crate) async fn delete_3pid_route(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !services.threepid.email_requirement().may_remove() {
|
||||||
|
return Err!(Request(Forbidden("You may not remove your email address.")));
|
||||||
|
}
|
||||||
|
|
||||||
if services
|
if services
|
||||||
.threepid
|
.threepid
|
||||||
.disassociate_localpart_email(sender_user.localpart())
|
.disassociate_localpart_email(sender_user.localpart())
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ pub(crate) async fn get_capabilities_route(
|
|||||||
|
|
||||||
// Only allow 3pid changes if SMTP is configured
|
// Only allow 3pid changes if SMTP is configured
|
||||||
capabilities.thirdparty_id_changes = ThirdPartyIdChangesCapability {
|
capabilities.thirdparty_id_changes = ThirdPartyIdChangesCapability {
|
||||||
enabled: services.mailer.mailer().is_some(),
|
enabled: services.threepid.email_requirement().may_change(),
|
||||||
};
|
};
|
||||||
|
|
||||||
capabilities.get_login_token = GetLoginTokenCapability {
|
capabilities.get_login_token = GetLoginTokenCapability {
|
||||||
|
|||||||
@@ -753,7 +753,7 @@ pub struct Config {
|
|||||||
/// Set to false to disable users from joining or creating room versions
|
/// Set to false to disable users from joining or creating room versions
|
||||||
/// that aren't officially supported by continuwuity.
|
/// that aren't officially supported by continuwuity.
|
||||||
///
|
///
|
||||||
/// continuwuity officially supports room versions 6 - 11.
|
/// continuwuity officially supports room versions 6 - 12.
|
||||||
///
|
///
|
||||||
/// continuwuity has slightly experimental (though works fine in practice)
|
/// continuwuity has slightly experimental (though works fine in practice)
|
||||||
/// support for versions 3 - 5.
|
/// support for versions 3 - 5.
|
||||||
@@ -765,9 +765,9 @@ pub struct Config {
|
|||||||
/// rather than an integer. Forgetting the quotes will make the server fail
|
/// rather than an integer. Forgetting the quotes will make the server fail
|
||||||
/// to start!
|
/// to start!
|
||||||
///
|
///
|
||||||
/// Per spec, room version "11" is the default.
|
/// Per spec, room version "12" is the default.
|
||||||
///
|
///
|
||||||
/// default: "11"
|
/// default: "12"
|
||||||
#[serde(default = "default_default_room_version")]
|
#[serde(default = "default_default_room_version")]
|
||||||
pub default_room_version: RoomVersionId,
|
pub default_room_version: RoomVersionId,
|
||||||
|
|
||||||
@@ -2516,6 +2516,9 @@ pub struct SmtpConfig {
|
|||||||
/// Whether to require that users provide an email address when they
|
/// Whether to require that users provide an email address when they
|
||||||
/// register.
|
/// register.
|
||||||
///
|
///
|
||||||
|
/// If either this option or `require_email_for_token_registration` are set,
|
||||||
|
/// users will not be allowed to remove their email address.
|
||||||
|
///
|
||||||
/// default: false
|
/// default: false
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub require_email_for_registration: bool,
|
pub require_email_for_registration: bool,
|
||||||
@@ -2545,7 +2548,6 @@ const DEPRECATED_KEYS: &[&str] = &[
|
|||||||
"well_known_support_role",
|
"well_known_support_role",
|
||||||
"well_known_support_email",
|
"well_known_support_email",
|
||||||
"well_known_support_mxid",
|
"well_known_support_mxid",
|
||||||
"registration_token_file",
|
|
||||||
"well_known.rtc_focus_server_urls",
|
"well_known.rtc_focus_server_urls",
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -2828,7 +2830,7 @@ fn default_rocksdb_stats_level() -> u8 { 1 }
|
|||||||
// I know, it's a great name
|
// I know, it's a great name
|
||||||
#[must_use]
|
#[must_use]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn default_default_room_version() -> RoomVersionId { RoomVersionId::V11 }
|
pub fn default_default_room_version() -> RoomVersionId { RoomVersionId::V12 }
|
||||||
|
|
||||||
fn default_ip_range_denylist() -> Vec<String> {
|
fn default_ip_range_denylist() -> Vec<String> {
|
||||||
vec![
|
vec![
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use base64::{Engine as _, engine::general_purpose::URL_SAFE_NO_PAD};
|
use base64::{Engine as _, engine::general_purpose::URL_SAFE_NO_PAD};
|
||||||
|
use conduwuit::info;
|
||||||
use conduwuit_core::{
|
use conduwuit_core::{
|
||||||
Error, Event, Result, at, debug, err, error,
|
Error, Event, Result, at, debug, err, error,
|
||||||
result::LogErr,
|
result::LogErr,
|
||||||
@@ -866,9 +867,12 @@ impl Service {
|
|||||||
|
|
||||||
for (event_id, result) in result.iter().flat_map(|resp| resp.pdus.iter()) {
|
for (event_id, result) in result.iter().flat_map(|resp| resp.pdus.iter()) {
|
||||||
if let Err(e) = result {
|
if let Err(e) = result {
|
||||||
warn!(
|
info!(
|
||||||
%txn_id, %server,
|
%txn_id,
|
||||||
"error sending PDU {event_id} to remote server: {e:?}"
|
%server,
|
||||||
|
%event_id,
|
||||||
|
remote_error=?e,
|
||||||
|
"remote server encountered an error while processing an event"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,23 @@ pub struct Service {
|
|||||||
ratelimiter: DefaultKeyedRateLimiter<Address>,
|
ratelimiter: DefaultKeyedRateLimiter<Address>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum EmailRequirement {
|
||||||
|
/// Users may change their email, but cannot remove it entirely.
|
||||||
|
Required,
|
||||||
|
/// Users may change or remove their email.
|
||||||
|
Optional,
|
||||||
|
/// Users may not change their email at all.
|
||||||
|
Unavailable,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl EmailRequirement {
|
||||||
|
#[must_use]
|
||||||
|
pub fn may_change(&self) -> bool { matches!(self, Self::Required | Self::Optional) }
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
pub fn may_remove(&self) -> bool { matches!(self, Self::Optional) }
|
||||||
|
}
|
||||||
|
|
||||||
struct Data {
|
struct Data {
|
||||||
localpart_email: Arc<Map>,
|
localpart_email: Arc<Map>,
|
||||||
email_localpart: Arc<Map>,
|
email_localpart: Arc<Map>,
|
||||||
@@ -64,6 +81,19 @@ impl Service {
|
|||||||
Quota::per_minute(nonzero!(10_u32)).allow_burst(nonzero!(2_u32));
|
Quota::per_minute(nonzero!(10_u32)).allow_burst(nonzero!(2_u32));
|
||||||
const VALIDATION_URL_PATH: &str = "/_continuwuity/3pid/email/validate";
|
const VALIDATION_URL_PATH: &str = "/_continuwuity/3pid/email/validate";
|
||||||
|
|
||||||
|
/// Check if users are required to have an email address.
|
||||||
|
pub fn email_requirement(&self) -> EmailRequirement {
|
||||||
|
if let Some(smtp) = &self.services.config.smtp {
|
||||||
|
if smtp.require_email_for_registration || smtp.require_email_for_token_registration {
|
||||||
|
EmailRequirement::Required
|
||||||
|
} else {
|
||||||
|
EmailRequirement::Optional
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
EmailRequirement::Unavailable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Send a validation message to an email address.
|
/// Send a validation message to an email address.
|
||||||
///
|
///
|
||||||
/// Returns the validation session ID on success.
|
/// Returns the validation session ID on success.
|
||||||
@@ -234,6 +264,9 @@ impl Service {
|
|||||||
| None => {
|
| None => {
|
||||||
// The supplied email is not already in use.
|
// The supplied email is not already in use.
|
||||||
|
|
||||||
|
// Remove the user's existing email first.
|
||||||
|
let _ = self.disassociate_localpart_email(localpart).await;
|
||||||
|
|
||||||
let email: &str = email.as_ref();
|
let email: &str = email.as_ref();
|
||||||
self.db.localpart_email.insert(localpart, email);
|
self.db.localpart_email.insert(localpart, email);
|
||||||
self.db.email_localpart.insert(email, localpart);
|
self.db.email_localpart.insert(email, localpart);
|
||||||
|
|||||||
Reference in New Issue
Block a user