mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-07-06 22:36:10 +02:00
Compare commits
27 commits
f840372c92
...
dd372f77eb
Author | SHA1 | Date | |
---|---|---|---|
|
dd372f77eb | ||
|
dfd599d07d | ||
|
e06ed8ef13 | ||
|
80f3a07e08 | ||
|
6aebf8aa72 | ||
|
64e081dcbe | ||
|
0232575e7d | ||
|
137282ca3b | ||
|
461ad346c0 | ||
|
c081afeaec | ||
|
b5c38d7c12 | ||
|
6a2dde6eb8 | ||
|
de4ba83a44 | ||
|
ece2616395 | ||
|
b703ea003a | ||
|
142fc6ab59 | ||
|
875194f546 | ||
|
74a9303b2b | ||
|
5411fdcac9 | ||
|
33102f886f | ||
|
a2c293e22e | ||
|
c3ddb63065 | ||
|
bc53ae01f7 | ||
|
357c9f11b9 | ||
|
da7def2bef | ||
|
2e0bb01595 | ||
|
d9d8e0acfd |
27 changed files with 749 additions and 634 deletions
|
@ -3,6 +3,7 @@ concurrency:
|
||||||
group: "release-image-${{ github.ref }}"
|
group: "release-image-${{ github.ref }}"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
pull_request:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- "*.md"
|
- "*.md"
|
||||||
|
@ -79,14 +80,28 @@ jobs:
|
||||||
run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}'
|
run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}'
|
||||||
- name: Echo matrix
|
- name: Echo matrix
|
||||||
run: echo '${{ toJSON(matrix) }}'
|
run: echo '${{ toJSON(matrix) }}'
|
||||||
|
- run: |
|
||||||
|
if ! command -v rustup &> /dev/null ; then
|
||||||
|
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
|
||||||
|
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install rust
|
|
||||||
id: rust-toolchain
|
- name: Cache timelord-cli installation
|
||||||
uses: ./.forgejo/actions/rust-toolchain
|
id: cache-timelord-bin
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ~/.cargo/bin/timelord
|
||||||
|
key: timelord-cli-v3.0.1
|
||||||
|
- name: Install timelord-cli
|
||||||
|
uses: https://github.com/cargo-bins/cargo-binstall@main
|
||||||
|
if: steps.cache-timelord-bin.outputs.cache-hit != 'true'
|
||||||
|
- run: cargo binstall timelord-cli@3.0.1
|
||||||
|
if: steps.cache-timelord-bin.outputs.cache-hit != 'true'
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
@ -121,58 +136,18 @@ jobs:
|
||||||
echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV
|
echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV
|
||||||
- name: Get Git commit timestamps
|
- name: Get Git commit timestamps
|
||||||
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
|
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
|
||||||
|
- name: Set up timelord
|
||||||
- uses: ./.forgejo/actions/timelord
|
uses: actions/cache/restore@v3
|
||||||
with:
|
with:
|
||||||
|
path: /timelord/
|
||||||
|
key: timelord-v0 # Cache is already split per runner
|
||||||
|
- name: Run timelord to set timestamps
|
||||||
|
run: timelord sync --source-dir . --cache-dir /timelord/
|
||||||
|
- name: Save timelord
|
||||||
|
uses: actions/cache/save@v3
|
||||||
|
with:
|
||||||
|
path: /timelord/
|
||||||
key: timelord-v0
|
key: timelord-v0
|
||||||
path: .
|
|
||||||
|
|
||||||
- name: Cache Rust registry
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
.cargo/git
|
|
||||||
.cargo/git/checkouts
|
|
||||||
.cargo/registry
|
|
||||||
.cargo/registry/src
|
|
||||||
key: rust-registry-image-${{hashFiles('**/Cargo.lock') }}
|
|
||||||
- name: Cache cargo target
|
|
||||||
id: cache-cargo-target
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
cargo-target-${{ matrix.slug }}
|
|
||||||
key: cargo-target-${{ matrix.slug }}-${{hashFiles('**/Cargo.lock') }}-${{steps.rust-toolchain.outputs.rustc_version}}
|
|
||||||
- name: Cache apt cache
|
|
||||||
id: cache-apt
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
var-cache-apt-${{ matrix.slug }}
|
|
||||||
key: var-cache-apt-${{ matrix.slug }}
|
|
||||||
- name: Cache apt lib
|
|
||||||
id: cache-apt-lib
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
var-lib-apt-${{ matrix.slug }}
|
|
||||||
key: var-lib-apt-${{ matrix.slug }}
|
|
||||||
- name: inject cache into docker
|
|
||||||
uses: https://github.com/reproducible-containers/buildkit-cache-dance@v3.1.0
|
|
||||||
with:
|
|
||||||
cache-map: |
|
|
||||||
{
|
|
||||||
".cargo/registry": "/usr/local/cargo/registry",
|
|
||||||
".cargo/git/db": "/usr/local/cargo/git/db",
|
|
||||||
"cargo-target-${{ matrix.slug }}": {
|
|
||||||
"target": "/app/target",
|
|
||||||
"id": "cargo-target-${{ matrix.platform }}"
|
|
||||||
},
|
|
||||||
"var-cache-apt-${{ matrix.slug }}": "/var/cache/apt",
|
|
||||||
"var-lib-apt-${{ matrix.slug }}": "/var/lib/apt"
|
|
||||||
}
|
|
||||||
skip-extraction: ${{ steps.cache.outputs.cache-hit }}
|
|
||||||
|
|
||||||
- name: Build and push Docker image by digest
|
- name: Build and push Docker image by digest
|
||||||
id: build
|
id: build
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
[files]
|
|
||||||
extend-exclude = ["*.csr"]
|
|
||||||
|
|
||||||
[default.extend-words]
|
[default.extend-words]
|
||||||
"allocatedp" = "allocatedp"
|
"allocatedp" = "allocatedp"
|
||||||
"conduwuit" = "conduwuit"
|
"conduwuit" = "conduwuit"
|
||||||
"continuwuity" = "continuwuity"
|
"continuwuity" = "continuwuity"
|
||||||
"continuwity" = "continuwuity"
|
|
||||||
"execuse" = "execuse"
|
"execuse" = "execuse"
|
||||||
|
|
478
Cargo.lock
generated
478
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -298,7 +298,7 @@ version = "1.15.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["serde"]
|
features = ["serde"]
|
||||||
|
|
||||||
# Used for reading the configuration from continuwuity.toml & environment variables
|
# Used for reading the configuration from conduwuit.toml & environment variables
|
||||||
[workspace.dependencies.figment]
|
[workspace.dependencies.figment]
|
||||||
version = "0.10.19"
|
version = "0.10.19"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
@ -745,6 +745,7 @@ incremental = true
|
||||||
|
|
||||||
[profile.dev.package.conduwuit_core]
|
[profile.dev.package.conduwuit_core]
|
||||||
inherits = "dev"
|
inherits = "dev"
|
||||||
|
incremental = false
|
||||||
#rustflags = [
|
#rustflags = [
|
||||||
# '--cfg', 'conduwuit_mods',
|
# '--cfg', 'conduwuit_mods',
|
||||||
# '-Ztime-passes',
|
# '-Ztime-passes',
|
||||||
|
@ -784,6 +785,7 @@ inherits = "dev"
|
||||||
[profile.dev.package.'*']
|
[profile.dev.package.'*']
|
||||||
inherits = "dev"
|
inherits = "dev"
|
||||||
debug = 'limited'
|
debug = 'limited'
|
||||||
|
incremental = false
|
||||||
codegen-units = 1
|
codegen-units = 1
|
||||||
opt-level = 'z'
|
opt-level = 'z'
|
||||||
#rustflags = [
|
#rustflags = [
|
||||||
|
@ -805,6 +807,7 @@ inherits = "dev"
|
||||||
strip = false
|
strip = false
|
||||||
opt-level = 0
|
opt-level = 0
|
||||||
codegen-units = 16
|
codegen-units = 16
|
||||||
|
incremental = false
|
||||||
|
|
||||||
[profile.test.package.'*']
|
[profile.test.package.'*']
|
||||||
inherits = "dev"
|
inherits = "dev"
|
||||||
|
@ -812,6 +815,7 @@ debug = 0
|
||||||
strip = false
|
strip = false
|
||||||
opt-level = 0
|
opt-level = 0
|
||||||
codegen-units = 16
|
codegen-units = 16
|
||||||
|
incremental = false
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
|
@ -988,6 +992,3 @@ let_underscore_future = { level = "allow", priority = 1 }
|
||||||
|
|
||||||
# rust doesnt understand conduwuit's custom log macros
|
# rust doesnt understand conduwuit's custom log macros
|
||||||
literal_string_with_formatting_args = { level = "allow", priority = 1 }
|
literal_string_with_formatting_args = { level = "allow", priority = 1 }
|
||||||
|
|
||||||
|
|
||||||
needless_raw_string_hashes = "allow"
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
### continuwuity Configuration
|
### conduwuit Configuration
|
||||||
###
|
###
|
||||||
### THIS FILE IS GENERATED. CHANGES/CONTRIBUTIONS IN THE REPO WILL BE
|
### THIS FILE IS GENERATED. CHANGES/CONTRIBUTIONS IN THE REPO WILL BE
|
||||||
### OVERWRITTEN!
|
### OVERWRITTEN!
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
### that say "YOU NEED TO EDIT THIS".
|
### that say "YOU NEED TO EDIT THIS".
|
||||||
###
|
###
|
||||||
### For more information, see:
|
### For more information, see:
|
||||||
### https://continuwuity.org/configuration.html
|
### https://conduwuit.puppyirl.gay/configuration.html
|
||||||
|
|
||||||
[global]
|
[global]
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
# suffix for user and room IDs/aliases.
|
# suffix for user and room IDs/aliases.
|
||||||
#
|
#
|
||||||
# See the docs for reverse proxying and delegation:
|
# See the docs for reverse proxying and delegation:
|
||||||
# https://continuwuity.org/deploying/generic.html#setting-up-the-reverse-proxy
|
# https://conduwuit.puppyirl.gay/deploying/generic.html#setting-up-the-reverse-proxy
|
||||||
#
|
#
|
||||||
# Also see the `[global.well_known]` config section at the very bottom.
|
# Also see the `[global.well_known]` config section at the very bottom.
|
||||||
#
|
#
|
||||||
|
@ -32,11 +32,11 @@
|
||||||
# YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
# YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
||||||
# WIPE.
|
# WIPE.
|
||||||
#
|
#
|
||||||
# example: "continuwuity.org"
|
# example: "conduwuit.woof"
|
||||||
#
|
#
|
||||||
#server_name =
|
#server_name =
|
||||||
|
|
||||||
# The default address (IPv4 or IPv6) continuwuity will listen on.
|
# The default address (IPv4 or IPv6) conduwuit will listen on.
|
||||||
#
|
#
|
||||||
# If you are using Docker or a container NAT networking setup, this must
|
# If you are using Docker or a container NAT networking setup, this must
|
||||||
# be "0.0.0.0".
|
# be "0.0.0.0".
|
||||||
|
@ -46,10 +46,10 @@
|
||||||
#
|
#
|
||||||
#address = ["127.0.0.1", "::1"]
|
#address = ["127.0.0.1", "::1"]
|
||||||
|
|
||||||
# The port(s) continuwuity will listen on.
|
# The port(s) conduwuit will listen on.
|
||||||
#
|
#
|
||||||
# For reverse proxying, see:
|
# For reverse proxying, see:
|
||||||
# https://continuwuity.org/deploying/generic.html#setting-up-the-reverse-proxy
|
# https://conduwuit.puppyirl.gay/deploying/generic.html#setting-up-the-reverse-proxy
|
||||||
#
|
#
|
||||||
# If you are using Docker, don't change this, you'll need to map an
|
# If you are using Docker, don't change this, you'll need to map an
|
||||||
# external port to this.
|
# external port to this.
|
||||||
|
@ -58,17 +58,16 @@
|
||||||
#
|
#
|
||||||
#port = 8008
|
#port = 8008
|
||||||
|
|
||||||
# The UNIX socket continuwuity will listen on.
|
# The UNIX socket conduwuit will listen on.
|
||||||
#
|
#
|
||||||
# continuwuity cannot listen on both an IP address and a UNIX socket. If
|
# conduwuit cannot listen on both an IP address and a UNIX socket. If
|
||||||
# listening on a UNIX socket, you MUST remove/comment the `address` key.
|
# listening on a UNIX socket, you MUST remove/comment the `address` key.
|
||||||
#
|
#
|
||||||
# Remember to make sure that your reverse proxy has access to this socket
|
# Remember to make sure that your reverse proxy has access to this socket
|
||||||
# file, either by adding your reverse proxy to the appropriate user group
|
# file, either by adding your reverse proxy to the 'conduwuit' group or
|
||||||
# or granting world R/W permissions with `unix_socket_perms` (666
|
# granting world R/W permissions with `unix_socket_perms` (666 minimum).
|
||||||
# minimum).
|
|
||||||
#
|
#
|
||||||
# example: "/run/continuwuity/continuwuity.sock"
|
# example: "/run/conduwuit/conduwuit.sock"
|
||||||
#
|
#
|
||||||
#unix_socket_path =
|
#unix_socket_path =
|
||||||
|
|
||||||
|
@ -76,23 +75,23 @@
|
||||||
#
|
#
|
||||||
#unix_socket_perms = 660
|
#unix_socket_perms = 660
|
||||||
|
|
||||||
# This is the only directory where continuwuity will save its data,
|
# This is the only directory where conduwuit will save its data, including
|
||||||
# including media. Note: this was previously "/var/lib/matrix-conduit".
|
# media. Note: this was previously "/var/lib/matrix-conduit".
|
||||||
#
|
#
|
||||||
# YOU NEED TO EDIT THIS.
|
# YOU NEED TO EDIT THIS.
|
||||||
#
|
#
|
||||||
# example: "/var/lib/continuwuity"
|
# example: "/var/lib/conduwuit"
|
||||||
#
|
#
|
||||||
#database_path =
|
#database_path =
|
||||||
|
|
||||||
# continuwuity supports online database backups using RocksDB's Backup
|
# conduwuit supports online database backups using RocksDB's Backup engine
|
||||||
# engine API. To use this, set a database backup path that continuwuity
|
# API. To use this, set a database backup path that conduwuit can write
|
||||||
# can write to.
|
# to.
|
||||||
#
|
#
|
||||||
# For more information, see:
|
# For more information, see:
|
||||||
# https://continuwuity.org/maintenance.html#backups
|
# https://conduwuit.puppyirl.gay/maintenance.html#backups
|
||||||
#
|
#
|
||||||
# example: "/opt/continuwuity-db-backups"
|
# example: "/opt/conduwuit-db-backups"
|
||||||
#
|
#
|
||||||
#database_backup_path =
|
#database_backup_path =
|
||||||
|
|
||||||
|
@ -113,14 +112,14 @@
|
||||||
#
|
#
|
||||||
#new_user_displayname_suffix = "🏳️⚧️"
|
#new_user_displayname_suffix = "🏳️⚧️"
|
||||||
|
|
||||||
# If enabled, continuwuity will send a simple GET request periodically to
|
# If enabled, conduwuit will send a simple GET request periodically to
|
||||||
# `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
# `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
||||||
# announcements or major updates. This is not an update check endpoint.
|
# announcements or major updates. This is not an update check endpoint.
|
||||||
#
|
#
|
||||||
#allow_announcements_check = true
|
#allow_announcements_check = true
|
||||||
|
|
||||||
# Set this to any float value to multiply continuwuity's in-memory LRU
|
# Set this to any float value to multiply conduwuit's in-memory LRU caches
|
||||||
# caches with such as "auth_chain_cache_capacity".
|
# with such as "auth_chain_cache_capacity".
|
||||||
#
|
#
|
||||||
# May be useful if you have significant memory to spare to increase
|
# May be useful if you have significant memory to spare to increase
|
||||||
# performance.
|
# performance.
|
||||||
|
@ -132,7 +131,7 @@
|
||||||
#
|
#
|
||||||
#cache_capacity_modifier = 1.0
|
#cache_capacity_modifier = 1.0
|
||||||
|
|
||||||
# Set this to any float value in megabytes for continuwuity to tell the
|
# Set this to any float value in megabytes for conduwuit to tell the
|
||||||
# database engine that this much memory is available for database read
|
# database engine that this much memory is available for database read
|
||||||
# caches.
|
# caches.
|
||||||
#
|
#
|
||||||
|
@ -146,7 +145,7 @@
|
||||||
#
|
#
|
||||||
#db_cache_capacity_mb = varies by system
|
#db_cache_capacity_mb = varies by system
|
||||||
|
|
||||||
# Set this to any float value in megabytes for continuwuity to tell the
|
# Set this to any float value in megabytes for conduwuit to tell the
|
||||||
# database engine that this much memory is available for database write
|
# database engine that this much memory is available for database write
|
||||||
# caches.
|
# caches.
|
||||||
#
|
#
|
||||||
|
@ -251,9 +250,9 @@
|
||||||
# Enable using *only* TCP for querying your specified nameservers instead
|
# Enable using *only* TCP for querying your specified nameservers instead
|
||||||
# of UDP.
|
# of UDP.
|
||||||
#
|
#
|
||||||
# If you are running continuwuity in a container environment, this config
|
# If you are running conduwuit in a container environment, this config
|
||||||
# option may need to be enabled. For more details, see:
|
# option may need to be enabled. For more details, see:
|
||||||
# https://continuwuity.org/troubleshooting.html#potential-dns-issues-when-using-docker
|
# https://conduwuit.puppyirl.gay/troubleshooting.html#potential-dns-issues-when-using-docker
|
||||||
#
|
#
|
||||||
#query_over_tcp_only = false
|
#query_over_tcp_only = false
|
||||||
|
|
||||||
|
@ -419,9 +418,9 @@
|
||||||
# tokens. Multiple tokens can be added if you separate them with
|
# tokens. Multiple tokens can be added if you separate them with
|
||||||
# whitespace
|
# whitespace
|
||||||
#
|
#
|
||||||
# continuwuity must be able to access the file, and it must not be empty
|
# conduwuit must be able to access the file, and it must not be empty
|
||||||
#
|
#
|
||||||
# example: "/etc/continuwuity/.reg_token"
|
# example: "/etc/conduwuit/.reg_token"
|
||||||
#
|
#
|
||||||
#registration_token_file =
|
#registration_token_file =
|
||||||
|
|
||||||
|
@ -513,16 +512,16 @@
|
||||||
#allow_room_creation = true
|
#allow_room_creation = true
|
||||||
|
|
||||||
# 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 conduwuit.
|
||||||
#
|
#
|
||||||
# continuwuity officially supports room versions 6 - 11.
|
# conduwuit officially supports room versions 6 - 11.
|
||||||
#
|
#
|
||||||
# continuwuity has slightly experimental (though works fine in practice)
|
# conduwuit has slightly experimental (though works fine in practice)
|
||||||
# support for versions 3 - 5.
|
# support for versions 3 - 5.
|
||||||
#
|
#
|
||||||
#allow_unstable_room_versions = true
|
#allow_unstable_room_versions = true
|
||||||
|
|
||||||
# Default room version continuwuity will create rooms with.
|
# Default room version conduwuit will create rooms with.
|
||||||
#
|
#
|
||||||
# Per spec, room version 11 is the default.
|
# Per spec, room version 11 is the default.
|
||||||
#
|
#
|
||||||
|
@ -588,7 +587,7 @@
|
||||||
# Servers listed here will be used to gather public keys of other servers
|
# Servers listed here will be used to gather public keys of other servers
|
||||||
# (notary trusted key servers).
|
# (notary trusted key servers).
|
||||||
#
|
#
|
||||||
# Currently, continuwuity doesn't support inbound batched key requests, so
|
# Currently, conduwuit doesn't support inbound batched key requests, so
|
||||||
# this list should only contain other Synapse servers.
|
# this list should only contain other Synapse servers.
|
||||||
#
|
#
|
||||||
# example: ["matrix.org", "tchncs.de"]
|
# example: ["matrix.org", "tchncs.de"]
|
||||||
|
@ -629,7 +628,7 @@
|
||||||
#
|
#
|
||||||
#trusted_server_batch_size = 1024
|
#trusted_server_batch_size = 1024
|
||||||
|
|
||||||
# Max log level for continuwuity. Allows debug, info, warn, or error.
|
# Max log level for conduwuit. Allows debug, info, warn, or error.
|
||||||
#
|
#
|
||||||
# See also:
|
# See also:
|
||||||
# https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives
|
# https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives
|
||||||
|
@ -650,9 +649,8 @@
|
||||||
#
|
#
|
||||||
#log_span_events = "none"
|
#log_span_events = "none"
|
||||||
|
|
||||||
# Configures whether CONTINUWUITY_LOG EnvFilter matches values using
|
# Configures whether CONDUWUIT_LOG EnvFilter matches values using regular
|
||||||
# regular expressions. See the tracing_subscriber documentation on
|
# expressions. See the tracing_subscriber documentation on Directives.
|
||||||
# Directives.
|
|
||||||
#
|
#
|
||||||
#log_filter_regex = true
|
#log_filter_regex = true
|
||||||
|
|
||||||
|
@ -720,7 +718,7 @@
|
||||||
# This takes priority over "turn_secret" first, and falls back to
|
# This takes priority over "turn_secret" first, and falls back to
|
||||||
# "turn_secret" if invalid or failed to open.
|
# "turn_secret" if invalid or failed to open.
|
||||||
#
|
#
|
||||||
# example: "/etc/continuwuity/.turn_secret"
|
# example: "/etc/conduwuit/.turn_secret"
|
||||||
#
|
#
|
||||||
#turn_secret_file =
|
#turn_secret_file =
|
||||||
|
|
||||||
|
@ -728,12 +726,12 @@
|
||||||
#
|
#
|
||||||
#turn_ttl = 86400
|
#turn_ttl = 86400
|
||||||
|
|
||||||
# List/vector of room IDs or room aliases that continuwuity will make
|
# List/vector of room IDs or room aliases that conduwuit will make newly
|
||||||
# newly registered users join. The rooms specified must be rooms that you
|
# registered users join. The rooms specified must be rooms that you have
|
||||||
# have joined at least once on the server, and must be public.
|
# joined at least once on the server, and must be public.
|
||||||
#
|
#
|
||||||
# example: ["#continuwuity:continuwuity.org",
|
# example: ["#conduwuit:puppygock.gay",
|
||||||
# "!main-1:continuwuity.org"]
|
# "!eoIzvAvVwY23LPDay8:puppygock.gay"]
|
||||||
#
|
#
|
||||||
#auto_join_rooms = []
|
#auto_join_rooms = []
|
||||||
|
|
||||||
|
@ -756,10 +754,10 @@
|
||||||
#
|
#
|
||||||
#auto_deactivate_banned_room_attempts = false
|
#auto_deactivate_banned_room_attempts = false
|
||||||
|
|
||||||
# RocksDB log level. This is not the same as continuwuity's log level.
|
# RocksDB log level. This is not the same as conduwuit's log level. This
|
||||||
# This is the log level for the RocksDB engine/library which show up in
|
# is the log level for the RocksDB engine/library which show up in your
|
||||||
# your database folder/path as `LOG` files. continuwuity will log RocksDB
|
# database folder/path as `LOG` files. conduwuit will log RocksDB errors
|
||||||
# errors as normal through tracing or panics if severe for safety.
|
# as normal through tracing or panics if severe for safety.
|
||||||
#
|
#
|
||||||
#rocksdb_log_level = "error"
|
#rocksdb_log_level = "error"
|
||||||
|
|
||||||
|
@ -779,7 +777,7 @@
|
||||||
# Set this to true to use RocksDB config options that are tailored to HDDs
|
# Set this to true to use RocksDB config options that are tailored to HDDs
|
||||||
# (slower device storage).
|
# (slower device storage).
|
||||||
#
|
#
|
||||||
# It is worth noting that by default, continuwuity will use RocksDB with
|
# It is worth noting that by default, conduwuit will use RocksDB with
|
||||||
# Direct IO enabled. *Generally* speaking this improves performance as it
|
# Direct IO enabled. *Generally* speaking this improves performance as it
|
||||||
# bypasses buffered I/O (system page cache). However there is a potential
|
# bypasses buffered I/O (system page cache). However there is a potential
|
||||||
# chance that Direct IO may cause issues with database operations if your
|
# chance that Direct IO may cause issues with database operations if your
|
||||||
|
@ -787,7 +785,7 @@
|
||||||
# possibly ZFS filesystem. RocksDB generally deals/corrects these issues
|
# possibly ZFS filesystem. RocksDB generally deals/corrects these issues
|
||||||
# but it cannot account for all setups. If you experience any weird
|
# but it cannot account for all setups. If you experience any weird
|
||||||
# RocksDB issues, try enabling this option as it turns off Direct IO and
|
# RocksDB issues, try enabling this option as it turns off Direct IO and
|
||||||
# feel free to report in the continuwuity Matrix room if this option fixes
|
# feel free to report in the conduwuit Matrix room if this option fixes
|
||||||
# your DB issues.
|
# your DB issues.
|
||||||
#
|
#
|
||||||
# For more information, see:
|
# For more information, see:
|
||||||
|
@ -842,7 +840,7 @@
|
||||||
# as they all differ. See their `kDefaultCompressionLevel`.
|
# as they all differ. See their `kDefaultCompressionLevel`.
|
||||||
#
|
#
|
||||||
# Note when using the default value we may override it with a setting
|
# Note when using the default value we may override it with a setting
|
||||||
# tailored specifically for continuwuity.
|
# tailored specifically conduwuit.
|
||||||
#
|
#
|
||||||
#rocksdb_compression_level = 32767
|
#rocksdb_compression_level = 32767
|
||||||
|
|
||||||
|
@ -858,7 +856,7 @@
|
||||||
# algorithm.
|
# algorithm.
|
||||||
#
|
#
|
||||||
# Note when using the default value we may override it with a setting
|
# Note when using the default value we may override it with a setting
|
||||||
# tailored specifically for continuwuity.
|
# tailored specifically conduwuit.
|
||||||
#
|
#
|
||||||
#rocksdb_bottommost_compression_level = 32767
|
#rocksdb_bottommost_compression_level = 32767
|
||||||
|
|
||||||
|
@ -898,13 +896,13 @@
|
||||||
# 0 = AbsoluteConsistency
|
# 0 = AbsoluteConsistency
|
||||||
# 1 = TolerateCorruptedTailRecords (default)
|
# 1 = TolerateCorruptedTailRecords (default)
|
||||||
# 2 = PointInTime (use me if trying to recover)
|
# 2 = PointInTime (use me if trying to recover)
|
||||||
# 3 = SkipAnyCorruptedRecord (you now voided your Continuwuity warranty)
|
# 3 = SkipAnyCorruptedRecord (you now voided your Conduwuit warranty)
|
||||||
#
|
#
|
||||||
# For more information on these modes, see:
|
# For more information on these modes, see:
|
||||||
# https://github.com/facebook/rocksdb/wiki/WAL-Recovery-Modes
|
# https://github.com/facebook/rocksdb/wiki/WAL-Recovery-Modes
|
||||||
#
|
#
|
||||||
# For more details on recovering a corrupt database, see:
|
# For more details on recovering a corrupt database, see:
|
||||||
# https://continuwuity.org/troubleshooting.html#database-corruption
|
# https://conduwuit.puppyirl.gay/troubleshooting.html#database-corruption
|
||||||
#
|
#
|
||||||
#rocksdb_recovery_mode = 1
|
#rocksdb_recovery_mode = 1
|
||||||
|
|
||||||
|
@ -944,7 +942,7 @@
|
||||||
# - Disabling repair mode and restarting the server is recommended after
|
# - Disabling repair mode and restarting the server is recommended after
|
||||||
# running the repair.
|
# running the repair.
|
||||||
#
|
#
|
||||||
# See https://continuwuity.org/troubleshooting.html#database-corruption for more details on recovering a corrupt database.
|
# See https://conduwuit.puppyirl.gay/troubleshooting.html#database-corruption for more details on recovering a corrupt database.
|
||||||
#
|
#
|
||||||
#rocksdb_repair = false
|
#rocksdb_repair = false
|
||||||
|
|
||||||
|
@ -971,7 +969,7 @@
|
||||||
# Enables RocksDB compaction. You should never ever have to set this
|
# Enables RocksDB compaction. You should never ever have to set this
|
||||||
# option to false. If you for some reason find yourself needing to use
|
# option to false. If you for some reason find yourself needing to use
|
||||||
# this option as part of troubleshooting or a bug, please reach out to us
|
# this option as part of troubleshooting or a bug, please reach out to us
|
||||||
# in the continuwuity Matrix room with information and details.
|
# in the conduwuit Matrix room with information and details.
|
||||||
#
|
#
|
||||||
# Disabling compaction will lead to a significantly bloated and
|
# Disabling compaction will lead to a significantly bloated and
|
||||||
# explosively large database, gradually poor performance, unnecessarily
|
# explosively large database, gradually poor performance, unnecessarily
|
||||||
|
@ -997,7 +995,7 @@
|
||||||
# purposes such as recovering/recreating your admin room, or inviting
|
# purposes such as recovering/recreating your admin room, or inviting
|
||||||
# yourself back.
|
# yourself back.
|
||||||
#
|
#
|
||||||
# See https://continuwuity.org/troubleshooting.html#lost-access-to-admin-room for other ways to get back into your admin room.
|
# See https://conduwuit.puppyirl.gay/troubleshooting.html#lost-access-to-admin-room for other ways to get back into your admin room.
|
||||||
#
|
#
|
||||||
# Once this password is unset, all sessions will be logged out for
|
# Once this password is unset, all sessions will be logged out for
|
||||||
# security purposes.
|
# security purposes.
|
||||||
|
@ -1012,8 +1010,8 @@
|
||||||
|
|
||||||
# Allow local (your server only) presence updates/requests.
|
# Allow local (your server only) presence updates/requests.
|
||||||
#
|
#
|
||||||
# Note that presence on continuwuity is very fast unlike Synapse's. If
|
# Note that presence on conduwuit is very fast unlike Synapse's. If using
|
||||||
# using outgoing presence, this MUST be enabled.
|
# outgoing presence, this MUST be enabled.
|
||||||
#
|
#
|
||||||
#allow_local_presence = true
|
#allow_local_presence = true
|
||||||
|
|
||||||
|
@ -1021,7 +1019,7 @@
|
||||||
#
|
#
|
||||||
# This option receives presence updates from other servers, but does not
|
# This option receives presence updates from other servers, but does not
|
||||||
# send any unless `allow_outgoing_presence` is true. Note that presence on
|
# send any unless `allow_outgoing_presence` is true. Note that presence on
|
||||||
# continuwuity is very fast unlike Synapse's.
|
# conduwuit is very fast unlike Synapse's.
|
||||||
#
|
#
|
||||||
#allow_incoming_presence = true
|
#allow_incoming_presence = true
|
||||||
|
|
||||||
|
@ -1029,8 +1027,8 @@
|
||||||
#
|
#
|
||||||
# This option sends presence updates to other servers, but does not
|
# This option sends presence updates to other servers, but does not
|
||||||
# receive any unless `allow_incoming_presence` is true. Note that presence
|
# receive any unless `allow_incoming_presence` is true. Note that presence
|
||||||
# on continuwuity is very fast unlike Synapse's. If using outgoing
|
# on conduwuit is very fast unlike Synapse's. If using outgoing presence,
|
||||||
# presence, you MUST enable `allow_local_presence` as well.
|
# you MUST enable `allow_local_presence` as well.
|
||||||
#
|
#
|
||||||
#allow_outgoing_presence = true
|
#allow_outgoing_presence = true
|
||||||
|
|
||||||
|
@ -1083,8 +1081,8 @@
|
||||||
#
|
#
|
||||||
#typing_client_timeout_max_s = 45
|
#typing_client_timeout_max_s = 45
|
||||||
|
|
||||||
# Set this to true for continuwuity to compress HTTP response bodies using
|
# Set this to true for conduwuit to compress HTTP response bodies using
|
||||||
# zstd. This option does nothing if continuwuity was not built with
|
# zstd. This option does nothing if conduwuit was not built with
|
||||||
# `zstd_compression` feature. Please be aware that enabling HTTP
|
# `zstd_compression` feature. Please be aware that enabling HTTP
|
||||||
# compression may weaken TLS. Most users should not need to enable this.
|
# compression may weaken TLS. Most users should not need to enable this.
|
||||||
# See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
# See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
||||||
|
@ -1092,8 +1090,8 @@
|
||||||
#
|
#
|
||||||
#zstd_compression = false
|
#zstd_compression = false
|
||||||
|
|
||||||
# Set this to true for continuwuity to compress HTTP response bodies using
|
# Set this to true for conduwuit to compress HTTP response bodies using
|
||||||
# gzip. This option does nothing if continuwuity was not built with
|
# gzip. This option does nothing if conduwuit was not built with
|
||||||
# `gzip_compression` feature. Please be aware that enabling HTTP
|
# `gzip_compression` feature. Please be aware that enabling HTTP
|
||||||
# compression may weaken TLS. Most users should not need to enable this.
|
# compression may weaken TLS. Most users should not need to enable this.
|
||||||
# See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH before
|
# See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH before
|
||||||
|
@ -1104,8 +1102,8 @@
|
||||||
#
|
#
|
||||||
#gzip_compression = false
|
#gzip_compression = false
|
||||||
|
|
||||||
# Set this to true for continuwuity to compress HTTP response bodies using
|
# Set this to true for conduwuit to compress HTTP response bodies using
|
||||||
# brotli. This option does nothing if continuwuity was not built with
|
# brotli. This option does nothing if conduwuit was not built with
|
||||||
# `brotli_compression` feature. Please be aware that enabling HTTP
|
# `brotli_compression` feature. Please be aware that enabling HTTP
|
||||||
# compression may weaken TLS. Most users should not need to enable this.
|
# compression may weaken TLS. Most users should not need to enable this.
|
||||||
# See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
# See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
||||||
|
@ -1167,7 +1165,7 @@
|
||||||
# Otherwise setting this to false reduces filesystem clutter and overhead
|
# Otherwise setting this to false reduces filesystem clutter and overhead
|
||||||
# for managing these symlinks in the directory. This is now disabled by
|
# for managing these symlinks in the directory. This is now disabled by
|
||||||
# default. You may still return to upstream Conduit but you have to run
|
# default. You may still return to upstream Conduit but you have to run
|
||||||
# continuwuity at least once with this set to true and allow the
|
# conduwuit at least once with this set to true and allow the
|
||||||
# media_startup_check to take place before shutting down to return to
|
# media_startup_check to take place before shutting down to return to
|
||||||
# Conduit.
|
# Conduit.
|
||||||
#
|
#
|
||||||
|
@ -1212,8 +1210,8 @@
|
||||||
#
|
#
|
||||||
#allowed_remote_server_names = []
|
#allowed_remote_server_names = []
|
||||||
|
|
||||||
# Vector list of regex patterns of server names that continuwuity will
|
# Vector list of regex patterns of server names that conduwuit will refuse
|
||||||
# refuse to download remote media from.
|
# to download remote media from.
|
||||||
#
|
#
|
||||||
# example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
# example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
||||||
#
|
#
|
||||||
|
@ -1227,7 +1225,7 @@
|
||||||
#
|
#
|
||||||
#forbidden_remote_room_directory_server_names = []
|
#forbidden_remote_room_directory_server_names = []
|
||||||
|
|
||||||
# Vector list of regex patterns of server names that continuwuity will not
|
# Vector list of regex patterns of server names that conduwuit will not
|
||||||
# send messages to the client from.
|
# send messages to the client from.
|
||||||
#
|
#
|
||||||
# Note that there is no way for clients to receive messages once a server
|
# Note that there is no way for clients to receive messages once a server
|
||||||
|
@ -1251,7 +1249,7 @@
|
||||||
#send_messages_from_ignored_users_to_client = false
|
#send_messages_from_ignored_users_to_client = false
|
||||||
|
|
||||||
# Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
# Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
||||||
# do not want continuwuity to send outbound requests to. Defaults to
|
# do not want conduwuit to send outbound requests to. Defaults to
|
||||||
# RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
# RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
||||||
# security.
|
# security.
|
||||||
#
|
#
|
||||||
|
@ -1401,26 +1399,26 @@
|
||||||
|
|
||||||
# Allow admins to enter commands in rooms other than "#admins" (admin
|
# Allow admins to enter commands in rooms other than "#admins" (admin
|
||||||
# room) by prefixing your message with "\!admin" or "\\!admin" followed up
|
# room) by prefixing your message with "\!admin" or "\\!admin" followed up
|
||||||
# a normal continuwuity admin command. The reply will be publicly visible
|
# a normal conduwuit admin command. The reply will be publicly visible to
|
||||||
# to the room, originating from the sender.
|
# the room, originating from the sender.
|
||||||
#
|
#
|
||||||
# example: \\!admin debug ping puppygock.gay
|
# example: \\!admin debug ping puppygock.gay
|
||||||
#
|
#
|
||||||
#admin_escape_commands = true
|
#admin_escape_commands = true
|
||||||
|
|
||||||
# Automatically activate the continuwuity admin room console / CLI on
|
# Automatically activate the conduwuit admin room console / CLI on
|
||||||
# startup. This option can also be enabled with `--console` continuwuity
|
# startup. This option can also be enabled with `--console` conduwuit
|
||||||
# argument.
|
# argument.
|
||||||
#
|
#
|
||||||
#admin_console_automatic = false
|
#admin_console_automatic = false
|
||||||
|
|
||||||
# List of admin commands to execute on startup.
|
# List of admin commands to execute on startup.
|
||||||
#
|
#
|
||||||
# This option can also be configured with the `--execute` continuwuity
|
# This option can also be configured with the `--execute` conduwuit
|
||||||
# argument and can take standard shell commands and environment variables
|
# argument and can take standard shell commands and environment variables
|
||||||
#
|
#
|
||||||
# For example: `./continuwuity --execute "server admin-notice continuwuity
|
# For example: `./conduwuit --execute "server admin-notice conduwuit has
|
||||||
# has started up at $(date)"`
|
# started up at $(date)"`
|
||||||
#
|
#
|
||||||
# example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
# example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
||||||
#
|
#
|
||||||
|
@ -1428,7 +1426,7 @@
|
||||||
|
|
||||||
# Ignore errors in startup commands.
|
# Ignore errors in startup commands.
|
||||||
#
|
#
|
||||||
# If false, continuwuity will error and fail to start if an admin execute
|
# If false, conduwuit will error and fail to start if an admin execute
|
||||||
# command (`--execute` / `admin_execute`) fails.
|
# command (`--execute` / `admin_execute`) fails.
|
||||||
#
|
#
|
||||||
#admin_execute_errors_ignore = false
|
#admin_execute_errors_ignore = false
|
||||||
|
@ -1449,14 +1447,15 @@
|
||||||
# The default room tag to apply on the admin room.
|
# The default room tag to apply on the admin room.
|
||||||
#
|
#
|
||||||
# On some clients like Element, the room tag "m.server_notice" is a
|
# On some clients like Element, the room tag "m.server_notice" is a
|
||||||
# special pinned room at the very bottom of your room list. The
|
# special pinned room at the very bottom of your room list. The conduwuit
|
||||||
# continuwuity admin room can be pinned here so you always have an
|
# admin room can be pinned here so you always have an easy-to-access
|
||||||
# easy-to-access shortcut dedicated to your admin room.
|
# shortcut dedicated to your admin room.
|
||||||
#
|
#
|
||||||
#admin_room_tag = "m.server_notice"
|
#admin_room_tag = "m.server_notice"
|
||||||
|
|
||||||
# Sentry.io crash/panic reporting, performance monitoring/metrics, etc.
|
# Sentry.io crash/panic reporting, performance monitoring/metrics, etc.
|
||||||
# This is NOT enabled by default.
|
# This is NOT enabled by default. conduwuit's default Sentry reporting
|
||||||
|
# endpoint domain is `o4506996327251968.ingest.us.sentry.io`.
|
||||||
#
|
#
|
||||||
#sentry = false
|
#sentry = false
|
||||||
|
|
||||||
|
@ -1464,7 +1463,7 @@
|
||||||
#
|
#
|
||||||
#sentry_endpoint = ""
|
#sentry_endpoint = ""
|
||||||
|
|
||||||
# Report your continuwuity server_name in Sentry.io crash reports and
|
# Report your conduwuit server_name in Sentry.io crash reports and
|
||||||
# metrics.
|
# metrics.
|
||||||
#
|
#
|
||||||
#sentry_send_server_name = false
|
#sentry_send_server_name = false
|
||||||
|
@ -1501,7 +1500,7 @@
|
||||||
# Enable the tokio-console. This option is only relevant to developers.
|
# Enable the tokio-console. This option is only relevant to developers.
|
||||||
#
|
#
|
||||||
# For more information, see:
|
# For more information, see:
|
||||||
# https://continuwuity.org/development.html#debugging-with-tokio-console
|
# https://conduwuit.puppyirl.gay/development.html#debugging-with-tokio-console
|
||||||
#
|
#
|
||||||
#tokio_console = false
|
#tokio_console = false
|
||||||
|
|
||||||
|
@ -1641,29 +1640,19 @@
|
||||||
#
|
#
|
||||||
#server =
|
#server =
|
||||||
|
|
||||||
# URL to a support page for the server, which will be served as part of
|
# This item is undocumented. Please contribute documentation for it.
|
||||||
# the MSC1929 server support endpoint at /.well-known/matrix/support.
|
|
||||||
# Will be included alongside any contact information
|
|
||||||
#
|
#
|
||||||
#support_page =
|
#support_page =
|
||||||
|
|
||||||
# Role string for server support contacts, to be served as part of the
|
# This item is undocumented. Please contribute documentation for it.
|
||||||
# MSC1929 server support endpoint at /.well-known/matrix/support.
|
|
||||||
#
|
#
|
||||||
#support_role = "m.role.admin"
|
#support_role =
|
||||||
|
|
||||||
# Email address for server support contacts, to be served as part of the
|
# This item is undocumented. Please contribute documentation for it.
|
||||||
# MSC1929 server support endpoint.
|
|
||||||
# This will be used along with support_mxid if specified.
|
|
||||||
#
|
#
|
||||||
#support_email =
|
#support_email =
|
||||||
|
|
||||||
# Matrix ID for server support contacts, to be served as part of the
|
# This item is undocumented. Please contribute documentation for it.
|
||||||
# MSC1929 server support endpoint.
|
|
||||||
# This will be used along with support_email if specified.
|
|
||||||
#
|
|
||||||
# If no email or mxid is specified, all of the server's admins will be
|
|
||||||
# listed.
|
|
||||||
#
|
#
|
||||||
#support_mxid =
|
#support_mxid =
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
|
|
||||||
# Create symlinks for LLVM tools
|
# Create symlinks for LLVM tools
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o xtrace
|
|
||||||
# clang
|
# clang
|
||||||
ln -s /usr/bin/clang-${LLVM_VERSION} /usr/bin/clang
|
ln -s /usr/bin/clang-${LLVM_VERSION} /usr/bin/clang
|
||||||
ln -s "/usr/bin/clang++-${LLVM_VERSION}" "/usr/bin/clang++"
|
ln -s "/usr/bin/clang++-${LLVM_VERSION}" "/usr/bin/clang++"
|
||||||
|
@ -47,7 +46,6 @@ ENV LDDTREE_VERSION=0.3.7
|
||||||
|
|
||||||
# Install unpackaged tools
|
# Install unpackaged tools
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o xtrace
|
|
||||||
curl --retry 5 -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
|
curl --retry 5 -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
|
||||||
cargo binstall --no-confirm cargo-sbom --version $CARGO_SBOM_VERSION
|
cargo binstall --no-confirm cargo-sbom --version $CARGO_SBOM_VERSION
|
||||||
cargo binstall --no-confirm lddtree --version $LDDTREE_VERSION
|
cargo binstall --no-confirm lddtree --version $LDDTREE_VERSION
|
||||||
|
@ -77,7 +75,6 @@ RUN echo "CARGO_INCREMENTAL=0" >> /etc/environment
|
||||||
|
|
||||||
# Configure pkg-config
|
# Configure pkg-config
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o xtrace
|
|
||||||
echo "PKG_CONFIG_LIBDIR=/usr/lib/$(xx-info)/pkgconfig" >> /etc/environment
|
echo "PKG_CONFIG_LIBDIR=/usr/lib/$(xx-info)/pkgconfig" >> /etc/environment
|
||||||
echo "PKG_CONFIG=/usr/bin/$(xx-info)-pkg-config" >> /etc/environment
|
echo "PKG_CONFIG=/usr/bin/$(xx-info)-pkg-config" >> /etc/environment
|
||||||
echo "PKG_CONFIG_ALLOW_CROSS=true" >> /etc/environment
|
echo "PKG_CONFIG_ALLOW_CROSS=true" >> /etc/environment
|
||||||
|
@ -85,14 +82,12 @@ EOF
|
||||||
|
|
||||||
# Configure cc to use clang version
|
# Configure cc to use clang version
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o xtrace
|
|
||||||
echo "CC=clang" >> /etc/environment
|
echo "CC=clang" >> /etc/environment
|
||||||
echo "CXX=clang++" >> /etc/environment
|
echo "CXX=clang++" >> /etc/environment
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Cross-language LTO
|
# Cross-language LTO
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o xtrace
|
|
||||||
echo "CFLAGS=-flto" >> /etc/environment
|
echo "CFLAGS=-flto" >> /etc/environment
|
||||||
echo "CXXFLAGS=-flto" >> /etc/environment
|
echo "CXXFLAGS=-flto" >> /etc/environment
|
||||||
# Linker is set to target-compatible clang by xx
|
# Linker is set to target-compatible clang by xx
|
||||||
|
@ -103,7 +98,6 @@ EOF
|
||||||
ARG TARGET_CPU=
|
ARG TARGET_CPU=
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o allexport
|
set -o allexport
|
||||||
set -o xtrace
|
|
||||||
. /etc/environment
|
. /etc/environment
|
||||||
if [ -n "${TARGET_CPU}" ]; then
|
if [ -n "${TARGET_CPU}" ]; then
|
||||||
echo "CFLAGS='${CFLAGS} -march=${TARGET_CPU}'" >> /etc/environment
|
echo "CFLAGS='${CFLAGS} -march=${TARGET_CPU}'" >> /etc/environment
|
||||||
|
@ -124,6 +118,7 @@ COPY . .
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
# Verify environment configuration
|
# Verify environment configuration
|
||||||
|
RUN cat /etc/environment
|
||||||
RUN xx-cargo --print-target-triple
|
RUN xx-cargo --print-target-triple
|
||||||
|
|
||||||
# Conduwuit version info
|
# Conduwuit version info
|
||||||
|
@ -144,10 +139,9 @@ ENV CONTINUWUITY_VERSION_EXTRA=$CONTINUWUITY_VERSION_EXTRA
|
||||||
# Build the binary
|
# Build the binary
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
||||||
--mount=type=cache,target=/usr/local/cargo/git/db \
|
--mount=type=cache,target=/usr/local/cargo/git/db \
|
||||||
--mount=type=cache,target=/app/target,id=cargo-target-${TARGETPLATFORM} \
|
--mount=type=cache,target=/app/target \
|
||||||
bash <<'EOF'
|
bash <<'EOF'
|
||||||
set -o allexport
|
set -o allexport
|
||||||
set -o xtrace
|
|
||||||
. /etc/environment
|
. /etc/environment
|
||||||
TARGET_DIR=($(cargo metadata --no-deps --format-version 1 | \
|
TARGET_DIR=($(cargo metadata --no-deps --format-version 1 | \
|
||||||
jq -r ".target_directory"))
|
jq -r ".target_directory"))
|
||||||
|
@ -168,7 +162,6 @@ EOF
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
||||||
--mount=type=cache,target=/usr/local/cargo/git/db \
|
--mount=type=cache,target=/usr/local/cargo/git/db \
|
||||||
bash <<'EOF'
|
bash <<'EOF'
|
||||||
set -o xtrace
|
|
||||||
mkdir /out/sbom
|
mkdir /out/sbom
|
||||||
typeset -A PACKAGES
|
typeset -A PACKAGES
|
||||||
for BINARY in /out/sbin/*; do
|
for BINARY in /out/sbin/*; do
|
||||||
|
@ -187,7 +180,6 @@ EOF
|
||||||
|
|
||||||
# Extract dynamically linked dependencies
|
# Extract dynamically linked dependencies
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
set -o xtrace
|
|
||||||
mkdir /out/libs
|
mkdir /out/libs
|
||||||
mkdir /out/libs-root
|
mkdir /out/libs-root
|
||||||
for BINARY in /out/sbin/*; do
|
for BINARY in /out/sbin/*; do
|
||||||
|
|
|
@ -7,30 +7,30 @@ services:
|
||||||
image: forgejo.ellis.link/continuwuation/continuwuity:latest
|
image: forgejo.ellis.link/continuwuation/continuwuity:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- db:/var/lib/continuwuity
|
- db:/var/lib/conduwuit
|
||||||
- /etc/resolv.conf:/etc/resolv.conf:ro # Use the host's DNS resolver rather than Docker's.
|
- /etc/resolv.conf:/etc/resolv.conf:ro # Use the host's DNS resolver rather than Docker's.
|
||||||
#- ./continuwuity.toml:/etc/continuwuity.toml
|
#- ./conduwuit.toml:/etc/conduwuit.toml
|
||||||
networks:
|
networks:
|
||||||
- proxy
|
- proxy
|
||||||
environment:
|
environment:
|
||||||
CONTINUWUITY_SERVER_NAME: your.server.name.example # EDIT THIS
|
CONDUWUIT_SERVER_NAME: your.server.name.example # EDIT THIS
|
||||||
CONTINUWUITY_DATABASE_PATH: /var/lib/continuwuity
|
CONDUWUIT_DATABASE_PATH: /var/lib/conduwuit
|
||||||
CONTINUWUITY_PORT: 6167 # should match the loadbalancer traefik label
|
CONDUWUIT_PORT: 6167 # should match the loadbalancer traefik label
|
||||||
CONTINUWUITY_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
|
CONDUWUIT_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
|
||||||
CONTINUWUITY_ALLOW_REGISTRATION: 'true'
|
CONDUWUIT_ALLOW_REGISTRATION: 'true'
|
||||||
CONTINUWUITY_REGISTRATION_TOKEN: 'YOUR_TOKEN' # A registration token is required when registration is allowed.
|
CONDUWUIT_REGISTRATION_TOKEN: 'YOUR_TOKEN' # A registration token is required when registration is allowed.
|
||||||
#CONTINUWUITY_YES_I_AM_VERY_VERY_SURE_I_WANT_AN_OPEN_REGISTRATION_SERVER_PRONE_TO_ABUSE: 'true'
|
#CONDUWUIT_YES_I_AM_VERY_VERY_SURE_I_WANT_AN_OPEN_REGISTRATION_SERVER_PRONE_TO_ABUSE: 'true'
|
||||||
CONTINUWUITY_ALLOW_FEDERATION: 'true'
|
CONDUWUIT_ALLOW_FEDERATION: 'true'
|
||||||
CONTINUWUITY_ALLOW_CHECK_FOR_UPDATES: 'true'
|
CONDUWUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
|
||||||
CONTINUWUITY_TRUSTED_SERVERS: '["matrix.org"]'
|
CONDUWUIT_TRUSTED_SERVERS: '["matrix.org"]'
|
||||||
#CONTINUWUITY_LOG: warn,state_res=warn
|
#CONDUWUIT_LOG: warn,state_res=warn
|
||||||
CONTINUWUITY_ADDRESS: 0.0.0.0
|
CONDUWUIT_ADDRESS: 0.0.0.0
|
||||||
#CONTINUWUITY_CONFIG: '/etc/continuwuity.toml' # Uncomment if you mapped config toml above
|
#CONDUWUIT_CONFIG: '/etc/conduwuit.toml' # Uncomment if you mapped config toml above
|
||||||
|
|
||||||
# We need some way to serve the client and server .well-known json. The simplest way is via the CONTINUWUITY_WELL_KNOWN
|
# We need some way to serve the client and server .well-known json. The simplest way is via the CONDUWUIT_WELL_KNOWN
|
||||||
# variable / config option, there are multiple ways to do this, e.g. in the continuwuity.toml file, and in a separate
|
# variable / config option, there are multiple ways to do this, e.g. in the conduwuit.toml file, and in a separate
|
||||||
# see the override file for more information about delegation
|
# see the override file for more information about delegation
|
||||||
CONTINUWUITY_WELL_KNOWN: |
|
CONDUWUIT_WELL_KNOWN: |
|
||||||
{
|
{
|
||||||
client=https://your.server.name.example,
|
client=https://your.server.name.example,
|
||||||
server=your.server.name.example:443
|
server=your.server.name.example:443
|
||||||
|
|
|
@ -7,38 +7,38 @@ services:
|
||||||
image: forgejo.ellis.link/continuwuation/continuwuity:latest
|
image: forgejo.ellis.link/continuwuation/continuwuity:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- db:/var/lib/continuwuity
|
- db:/var/lib/conduwuit
|
||||||
- /etc/resolv.conf:/etc/resolv.conf:ro # Use the host's DNS resolver rather than Docker's.
|
- /etc/resolv.conf:/etc/resolv.conf:ro # Use the host's DNS resolver rather than Docker's.
|
||||||
#- ./continuwuity.toml:/etc/continuwuity.toml
|
#- ./conduwuit.toml:/etc/conduwuit.toml
|
||||||
networks:
|
networks:
|
||||||
- proxy
|
- proxy
|
||||||
environment:
|
environment:
|
||||||
CONTINUWUITY_SERVER_NAME: your.server.name.example # EDIT THIS
|
CONDUWUIT_SERVER_NAME: your.server.name.example # EDIT THIS
|
||||||
CONTINUWUITY_TRUSTED_SERVERS: '["matrix.org"]'
|
CONDUWUIT_TRUSTED_SERVERS: '["matrix.org"]'
|
||||||
CONTINUWUITY_ALLOW_REGISTRATION: 'false' # After setting a secure registration token, you can enable this
|
CONDUWUIT_ALLOW_REGISTRATION: 'false' # After setting a secure registration token, you can enable this
|
||||||
CONTINUWUITY_REGISTRATION_TOKEN: "" # This is a token you can use to register on the server
|
CONDUWUIT_REGISTRATION_TOKEN: "" # This is a token you can use to register on the server
|
||||||
#CONTINUWUITY_REGISTRATION_TOKEN_FILE: "" # Alternatively you can configure a path to a token file to read
|
#CONDUWUIT_REGISTRATION_TOKEN_FILE: "" # Alternatively you can configure a path to a token file to read
|
||||||
CONTINUWUITY_ADDRESS: 0.0.0.0
|
CONDUWUIT_ADDRESS: 0.0.0.0
|
||||||
CONTINUWUITY_PORT: 6167 # you need to match this with the traefik load balancer label if you're want to change it
|
CONDUWUIT_PORT: 6167 # you need to match this with the traefik load balancer label if you're want to change it
|
||||||
CONTINUWUITY_DATABASE_PATH: /var/lib/continuwuity
|
CONDUWUIT_DATABASE_PATH: /var/lib/conduwuit
|
||||||
#CONTINUWUITY_CONFIG: '/etc/continuwuity.toml' # Uncomment if you mapped config toml above
|
#CONDUWUIT_CONFIG: '/etc/conduit.toml' # Uncomment if you mapped config toml above
|
||||||
### Uncomment and change values as desired, note that Continuwuity has plenty of config options, so you should check out the example example config too
|
### Uncomment and change values as desired, note that Continuwuity has plenty of config options, so you should check out the example example config too
|
||||||
# Available levels are: error, warn, info, debug, trace - more info at: https://docs.rs/env_logger/*/env_logger/#enabling-logging
|
# Available levels are: error, warn, info, debug, trace - more info at: https://docs.rs/env_logger/*/env_logger/#enabling-logging
|
||||||
# CONTINUWUITY_LOG: info # default is: "warn,state_res=warn"
|
# CONDUWUIT_LOG: info # default is: "warn,state_res=warn"
|
||||||
# CONTINUWUITY_ALLOW_ENCRYPTION: 'true'
|
# CONDUWUIT_ALLOW_ENCRYPTION: 'true'
|
||||||
# CONTINUWUITY_ALLOW_FEDERATION: 'true'
|
# CONDUWUIT_ALLOW_FEDERATION: 'true'
|
||||||
# CONTINUWUITY_ALLOW_CHECK_FOR_UPDATES: 'true'
|
# CONDUWUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
|
||||||
# CONTINUWUITY_ALLOW_INCOMING_PRESENCE: true
|
# CONDUWUIT_ALLOW_INCOMING_PRESENCE: true
|
||||||
# CONTINUWUITY_ALLOW_OUTGOING_PRESENCE: true
|
# CONDUWUIT_ALLOW_OUTGOING_PRESENCE: true
|
||||||
# CONTINUWUITY_ALLOW_LOCAL_PRESENCE: true
|
# CONDUWUIT_ALLOW_LOCAL_PRESENCE: true
|
||||||
# CONTINUWUITY_WORKERS: 10
|
# CONDUWUIT_WORKERS: 10
|
||||||
# CONTINUWUITY_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
|
# CONDUWUIT_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
|
||||||
# CONTINUWUITY_NEW_USER_DISPLAYNAME_SUFFIX = "🏳<200d>⚧"
|
# CONDUWUIT_NEW_USER_DISPLAYNAME_SUFFIX = "🏳<200d>⚧"
|
||||||
|
|
||||||
# We need some way to serve the client and server .well-known json. The simplest way is via the CONTINUWUITY_WELL_KNOWN
|
# We need some way to serve the client and server .well-known json. The simplest way is via the CONDUWUIT_WELL_KNOWN
|
||||||
# variable / config option, there are multiple ways to do this, e.g. in the continuwuity.toml file, and in a separate
|
# variable / config option, there are multiple ways to do this, e.g. in the conduwuit.toml file, and in a separate
|
||||||
# reverse proxy, but since you do not have a reverse proxy and following this guide, this example is included
|
# reverse proxy, but since you do not have a reverse proxy and following this guide, this example is included
|
||||||
CONTINUWUITY_WELL_KNOWN: |
|
CONDUWUIT_WELL_KNOWN: |
|
||||||
{
|
{
|
||||||
client=https://your.server.name.example,
|
client=https://your.server.name.example,
|
||||||
server=your.server.name.example:443
|
server=your.server.name.example:443
|
||||||
|
|
|
@ -6,6 +6,7 @@ use conduwuit::{
|
||||||
warn,
|
warn,
|
||||||
};
|
};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
|
use futures::FutureExt;
|
||||||
use ruma::{OwnedRoomId, OwnedRoomOrAliasId, RoomAliasId, RoomId, RoomOrAliasId};
|
use ruma::{OwnedRoomId, OwnedRoomOrAliasId, RoomAliasId, RoomId, RoomOrAliasId};
|
||||||
|
|
||||||
use crate::{admin_command, admin_command_dispatch, get_room_info};
|
use crate::{admin_command, admin_command_dispatch, get_room_info};
|
||||||
|
@ -155,7 +156,10 @@ async fn ban_room(&self, room: OwnedRoomOrAliasId) -> Result {
|
||||||
evicting admins too)",
|
evicting admins too)",
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Err(e) = leave_room(self.services, user_id, &room_id, None).await {
|
if let Err(e) = leave_room(self.services, user_id, &room_id, None)
|
||||||
|
.boxed()
|
||||||
|
.await
|
||||||
|
{
|
||||||
warn!("Failed to leave room: {e}");
|
warn!("Failed to leave room: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,7 +327,10 @@ async fn ban_list_of_rooms(&self) -> Result {
|
||||||
evicting admins too)",
|
evicting admins too)",
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Err(e) = leave_room(self.services, user_id, &room_id, None).await {
|
if let Err(e) = leave_room(self.services, user_id, &room_id, None)
|
||||||
|
.boxed()
|
||||||
|
.await
|
||||||
|
{
|
||||||
warn!("Failed to leave room: {e}");
|
warn!("Failed to leave room: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ use conduwuit::{
|
||||||
};
|
};
|
||||||
use conduwuit_api::client::{leave_all_rooms, update_avatar_url, update_displayname};
|
use conduwuit_api::client::{leave_all_rooms, update_avatar_url, update_displayname};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
|
use futures::FutureExt;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
OwnedEventId, OwnedRoomId, OwnedRoomOrAliasId, OwnedUserId, UserId,
|
OwnedEventId, OwnedRoomId, OwnedRoomOrAliasId, OwnedUserId, UserId,
|
||||||
events::{
|
events::{
|
||||||
|
@ -655,7 +656,9 @@ pub(super) async fn force_leave_room(
|
||||||
return Err!("{user_id} is not joined in the room");
|
return Err!("{user_id} is not joined in the room");
|
||||||
}
|
}
|
||||||
|
|
||||||
leave_room(self.services, &user_id, &room_id, None).await?;
|
leave_room(self.services, &user_id, &room_id, None)
|
||||||
|
.boxed()
|
||||||
|
.await?;
|
||||||
|
|
||||||
self.write_str(&format!("{user_id} has left {room_id}.",))
|
self.write_str(&format!("{user_id} has left {room_id}.",))
|
||||||
.await
|
.await
|
||||||
|
|
|
@ -763,7 +763,9 @@ pub(crate) async fn deactivate_route(
|
||||||
super::update_displayname(&services, sender_user, None, &all_joined_rooms).await;
|
super::update_displayname(&services, sender_user, None, &all_joined_rooms).await;
|
||||||
super::update_avatar_url(&services, sender_user, None, None, &all_joined_rooms).await;
|
super::update_avatar_url(&services, sender_user, None, None, &all_joined_rooms).await;
|
||||||
|
|
||||||
full_user_deactivate(&services, sender_user, &all_joined_rooms).await?;
|
full_user_deactivate(&services, sender_user, &all_joined_rooms)
|
||||||
|
.boxed()
|
||||||
|
.await?;
|
||||||
|
|
||||||
info!("User {sender_user} deactivated their account.");
|
info!("User {sender_user} deactivated their account.");
|
||||||
|
|
||||||
|
@ -915,7 +917,9 @@ pub async fn full_user_deactivate(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super::leave_all_rooms(services, user_id).await;
|
super::leave_all_rooms(services, user_id)
|
||||||
|
.boxed()
|
||||||
|
.await;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,9 @@ async fn banned_room_check(
|
||||||
.collect()
|
.collect()
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
full_user_deactivate(services, user_id, &all_joined_rooms).await?;
|
full_user_deactivate(services, user_id, &all_joined_rooms)
|
||||||
|
.boxed()
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Err!(Request(Forbidden("This room is banned on this homeserver.")));
|
return Err!(Request(Forbidden("This room is banned on this homeserver.")));
|
||||||
|
@ -153,7 +155,9 @@ async fn banned_room_check(
|
||||||
.collect()
|
.collect()
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
full_user_deactivate(services, user_id, &all_joined_rooms).await?;
|
full_user_deactivate(services, user_id, &all_joined_rooms)
|
||||||
|
.boxed()
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Err!(Request(Forbidden("This remote server is banned on this homeserver.")));
|
return Err!(Request(Forbidden("This remote server is banned on this homeserver.")));
|
||||||
|
@ -259,6 +263,7 @@ pub(crate) async fn join_room_by_id_or_alias_route(
|
||||||
room_id.server_name(),
|
room_id.server_name(),
|
||||||
client,
|
client,
|
||||||
)
|
)
|
||||||
|
.boxed()
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut servers = body.via.clone();
|
let mut servers = body.via.clone();
|
||||||
|
@ -478,6 +483,7 @@ pub(crate) async fn leave_room_route(
|
||||||
body: Ruma<leave_room::v3::Request>,
|
body: Ruma<leave_room::v3::Request>,
|
||||||
) -> Result<leave_room::v3::Response> {
|
) -> Result<leave_room::v3::Response> {
|
||||||
leave_room(&services, body.sender_user(), &body.room_id, body.reason.clone())
|
leave_room(&services, body.sender_user(), &body.room_id, body.reason.clone())
|
||||||
|
.boxed()
|
||||||
.await
|
.await
|
||||||
.map(|()| leave_room::v3::Response::new())
|
.map(|()| leave_room::v3::Response::new())
|
||||||
}
|
}
|
||||||
|
@ -1792,7 +1798,10 @@ pub async fn leave_all_rooms(services: &Services, user_id: &UserId) {
|
||||||
|
|
||||||
for room_id in all_rooms {
|
for room_id in all_rooms {
|
||||||
// ignore errors
|
// ignore errors
|
||||||
if let Err(e) = leave_room(services, user_id, &room_id, None).await {
|
if let Err(e) = leave_room(services, user_id, &room_id, None)
|
||||||
|
.boxed()
|
||||||
|
.await
|
||||||
|
{
|
||||||
warn!(%user_id, "Failed to leave {room_id} remotely: {e}");
|
warn!(%user_id, "Failed to leave {room_id} remotely: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2162,6 +2171,109 @@ async fn knock_room_by_id_helper(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For knock_restricted rooms, check if the user meets the restricted conditions
|
||||||
|
// If they do, attempt to join instead of knock
|
||||||
|
// This is not mentioned in the spec, but should be allowable (we're allowed to
|
||||||
|
// auto-join invites to knocked rooms)
|
||||||
|
let join_rule = services.rooms.state_accessor.get_join_rules(room_id).await;
|
||||||
|
if let JoinRule::KnockRestricted(restricted) = &join_rule {
|
||||||
|
let restriction_rooms: Vec<_> = restricted
|
||||||
|
.allow
|
||||||
|
.iter()
|
||||||
|
.filter_map(|a| match a {
|
||||||
|
| AllowRule::RoomMembership(r) => Some(&r.room_id),
|
||||||
|
| _ => None,
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
// Check if the user is in any of the allowed rooms
|
||||||
|
let mut user_meets_restrictions = false;
|
||||||
|
for restriction_room_id in &restriction_rooms {
|
||||||
|
if services
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.is_joined(sender_user, restriction_room_id)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
user_meets_restrictions = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the user meets the restrictions, try joining instead
|
||||||
|
if user_meets_restrictions {
|
||||||
|
debug_info!(
|
||||||
|
"{sender_user} meets the restricted criteria in knock_restricted room \
|
||||||
|
{room_id}, attempting to join instead of knock"
|
||||||
|
);
|
||||||
|
// For this case, we need to drop the state lock and get a new one in
|
||||||
|
// join_room_by_id_helper We need to release the lock here and let
|
||||||
|
// join_room_by_id_helper acquire it again
|
||||||
|
drop(state_lock);
|
||||||
|
match join_room_by_id_helper(
|
||||||
|
services,
|
||||||
|
sender_user,
|
||||||
|
room_id,
|
||||||
|
reason.clone(),
|
||||||
|
servers,
|
||||||
|
None,
|
||||||
|
&None,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
| Ok(_) => return Ok(knock_room::v3::Response::new(room_id.to_owned())),
|
||||||
|
| Err(e) => {
|
||||||
|
debug_warn!(
|
||||||
|
"Failed to convert knock to join for {sender_user} in {room_id}: {e:?}"
|
||||||
|
);
|
||||||
|
// Get a new state lock for the remaining knock logic
|
||||||
|
let new_state_lock = services.rooms.state.mutex.lock(room_id).await;
|
||||||
|
|
||||||
|
let server_in_room = services
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.server_in_room(services.globals.server_name(), room_id)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let local_knock = server_in_room
|
||||||
|
|| servers.is_empty()
|
||||||
|
|| (servers.len() == 1 && services.globals.server_is_ours(&servers[0]));
|
||||||
|
|
||||||
|
if local_knock {
|
||||||
|
knock_room_helper_local(
|
||||||
|
services,
|
||||||
|
sender_user,
|
||||||
|
room_id,
|
||||||
|
reason,
|
||||||
|
servers,
|
||||||
|
new_state_lock,
|
||||||
|
)
|
||||||
|
.boxed()
|
||||||
|
.await?;
|
||||||
|
} else {
|
||||||
|
knock_room_helper_remote(
|
||||||
|
services,
|
||||||
|
sender_user,
|
||||||
|
room_id,
|
||||||
|
reason,
|
||||||
|
servers,
|
||||||
|
new_state_lock,
|
||||||
|
)
|
||||||
|
.boxed()
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(knock_room::v3::Response::new(room_id.to_owned()));
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if !matches!(join_rule, JoinRule::Knock | JoinRule::KnockRestricted(_)) {
|
||||||
|
debug_warn!(
|
||||||
|
"{sender_user} attempted to knock on room {room_id} but its join rule is \
|
||||||
|
{join_rule:?}, not knock or knock_restricted"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let server_in_room = services
|
let server_in_room = services
|
||||||
.rooms
|
.rooms
|
||||||
.state_cache
|
.state_cache
|
||||||
|
@ -2209,6 +2321,12 @@ async fn knock_room_helper_local(
|
||||||
return Err!(Request(Forbidden("This room does not support knocking.")));
|
return Err!(Request(Forbidden("This room does not support knocking.")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verify that this room has a valid knock or knock_restricted join rule
|
||||||
|
let join_rule = services.rooms.state_accessor.get_join_rules(room_id).await;
|
||||||
|
if !matches!(join_rule, JoinRule::Knock | JoinRule::KnockRestricted(_)) {
|
||||||
|
return Err!(Request(Forbidden("This room's join rule does not allow knocking.")));
|
||||||
|
}
|
||||||
|
|
||||||
let content = RoomMemberEventContent {
|
let content = RoomMemberEventContent {
|
||||||
displayname: services.users.displayname(sender_user).await.ok(),
|
displayname: services.users.displayname(sender_user).await.ok(),
|
||||||
avatar_url: services.users.avatar_url(sender_user).await.ok(),
|
avatar_url: services.users.avatar_url(sender_user).await.ok(),
|
||||||
|
|
|
@ -121,7 +121,9 @@ where
|
||||||
.map(|(key, val)| (key, val.collect()))
|
.map(|(key, val)| (key, val.collect()))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if !populate {
|
if populate {
|
||||||
|
rooms.push(summary_to_chunk(summary.clone()));
|
||||||
|
} else {
|
||||||
children = children
|
children = children
|
||||||
.iter()
|
.iter()
|
||||||
.rev()
|
.rev()
|
||||||
|
@ -144,10 +146,8 @@ where
|
||||||
.collect();
|
.collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
if populate {
|
if !populate && queue.is_empty() && children.is_empty() {
|
||||||
rooms.push(summary_to_chunk(summary.clone()));
|
break;
|
||||||
} else if queue.is_empty() && children.is_empty() {
|
|
||||||
return Err!(Request(InvalidParam("Room IDs in token were not found.")));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
parents.insert(current_room.clone());
|
parents.insert(current_room.clone());
|
||||||
|
|
|
@ -6,6 +6,7 @@ use conduwuit::{
|
||||||
};
|
};
|
||||||
use conduwuit_service::Services;
|
use conduwuit_service::Services;
|
||||||
use futures::TryStreamExt;
|
use futures::TryStreamExt;
|
||||||
|
use futures::FutureExt;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
OwnedEventId, RoomId, UserId,
|
OwnedEventId, RoomId, UserId,
|
||||||
api::client::state::{get_state_events, get_state_events_for_key, send_state_event},
|
api::client::state::{get_state_events, get_state_events_for_key, send_state_event},
|
||||||
|
@ -59,6 +60,7 @@ pub(crate) async fn send_state_event_for_empty_key_route(
|
||||||
body: Ruma<send_state_event::v3::Request>,
|
body: Ruma<send_state_event::v3::Request>,
|
||||||
) -> Result<RumaResponse<send_state_event::v3::Response>> {
|
) -> Result<RumaResponse<send_state_event::v3::Response>> {
|
||||||
send_state_event_for_key_route(State(services), body)
|
send_state_event_for_key_route(State(services), body)
|
||||||
|
.boxed()
|
||||||
.await
|
.await
|
||||||
.map(RumaResponse)
|
.map(RumaResponse)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1009,8 +1009,6 @@ async fn calculate_state_incremental<'a>(
|
||||||
) -> Result<StateChanges> {
|
) -> Result<StateChanges> {
|
||||||
let since_shortstatehash = since_shortstatehash.unwrap_or(current_shortstatehash);
|
let since_shortstatehash = since_shortstatehash.unwrap_or(current_shortstatehash);
|
||||||
|
|
||||||
let state_changed = since_shortstatehash != current_shortstatehash;
|
|
||||||
|
|
||||||
let encrypted_room = services
|
let encrypted_room = services
|
||||||
.rooms
|
.rooms
|
||||||
.state_accessor
|
.state_accessor
|
||||||
|
@ -1042,7 +1040,7 @@ async fn calculate_state_incremental<'a>(
|
||||||
})
|
})
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
let state_diff_ids: OptionFuture<_> = (!full_state && state_changed)
|
let state_diff_ids: OptionFuture<_> = (!full_state)
|
||||||
.then(|| {
|
.then(|| {
|
||||||
StreamExt::into_future(
|
StreamExt::into_future(
|
||||||
services
|
services
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
use axum::{Json, extract::State, response::IntoResponse};
|
use axum::{Json, extract::State, response::IntoResponse};
|
||||||
use conduwuit::{Error, Result};
|
use conduwuit::{Error, Result};
|
||||||
use futures::StreamExt;
|
|
||||||
use ruma::api::client::{
|
use ruma::api::client::{
|
||||||
discovery::{
|
discovery::{
|
||||||
discover_homeserver::{self, HomeserverInfo, SlidingSyncProxyInfo},
|
discover_homeserver::{self, HomeserverInfo, SlidingSyncProxyInfo},
|
||||||
|
@ -18,7 +17,7 @@ pub(crate) async fn well_known_client(
|
||||||
State(services): State<crate::State>,
|
State(services): State<crate::State>,
|
||||||
_body: Ruma<discover_homeserver::Request>,
|
_body: Ruma<discover_homeserver::Request>,
|
||||||
) -> Result<discover_homeserver::Response> {
|
) -> Result<discover_homeserver::Response> {
|
||||||
let client_url = match services.config.well_known.client.as_ref() {
|
let client_url = match services.server.config.well_known.client.as_ref() {
|
||||||
| Some(url) => url.to_string(),
|
| Some(url) => url.to_string(),
|
||||||
| None => return Err(Error::BadRequest(ErrorKind::NotFound, "Not found.")),
|
| None => return Err(Error::BadRequest(ErrorKind::NotFound, "Not found.")),
|
||||||
};
|
};
|
||||||
|
@ -34,63 +33,44 @@ pub(crate) async fn well_known_client(
|
||||||
/// # `GET /.well-known/matrix/support`
|
/// # `GET /.well-known/matrix/support`
|
||||||
///
|
///
|
||||||
/// Server support contact and support page of a homeserver's domain.
|
/// Server support contact and support page of a homeserver's domain.
|
||||||
/// Implements MSC1929 for server discovery.
|
|
||||||
/// If no configuration is set, uses admin users as contacts.
|
|
||||||
pub(crate) async fn well_known_support(
|
pub(crate) async fn well_known_support(
|
||||||
State(services): State<crate::State>,
|
State(services): State<crate::State>,
|
||||||
_body: Ruma<discover_support::Request>,
|
_body: Ruma<discover_support::Request>,
|
||||||
) -> Result<discover_support::Response> {
|
) -> Result<discover_support::Response> {
|
||||||
let support_page = services
|
let support_page = services
|
||||||
|
.server
|
||||||
.config
|
.config
|
||||||
.well_known
|
.well_known
|
||||||
.support_page
|
.support_page
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(ToString::to_string);
|
.map(ToString::to_string);
|
||||||
|
|
||||||
let email_address = services.config.well_known.support_email.clone();
|
let role = services.server.config.well_known.support_role.clone();
|
||||||
let matrix_id = services.config.well_known.support_mxid.clone();
|
|
||||||
|
// support page or role must be either defined for this to be valid
|
||||||
|
if support_page.is_none() && role.is_none() {
|
||||||
|
return Err(Error::BadRequest(ErrorKind::NotFound, "Not found."));
|
||||||
|
}
|
||||||
|
|
||||||
|
let email_address = services.server.config.well_known.support_email.clone();
|
||||||
|
let matrix_id = services.server.config.well_known.support_mxid.clone();
|
||||||
|
|
||||||
|
// if a role is specified, an email address or matrix id is required
|
||||||
|
if role.is_some() && (email_address.is_none() && matrix_id.is_none()) {
|
||||||
|
return Err(Error::BadRequest(ErrorKind::NotFound, "Not found."));
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: support defining multiple contacts in the config
|
// TODO: support defining multiple contacts in the config
|
||||||
let mut contacts: Vec<Contact> = vec![];
|
let mut contacts: Vec<Contact> = vec![];
|
||||||
|
|
||||||
let role_value = services
|
if let Some(role) = role {
|
||||||
.config
|
let contact = Contact { role, email_address, matrix_id };
|
||||||
.well_known
|
|
||||||
.support_role
|
|
||||||
.clone()
|
|
||||||
.unwrap_or_else(|| "m.role.admin".to_owned().into());
|
|
||||||
|
|
||||||
// Add configured contact if at least one contact method is specified
|
contacts.push(contact);
|
||||||
if email_address.is_some() || matrix_id.is_some() {
|
|
||||||
contacts.push(Contact {
|
|
||||||
role: role_value.clone(),
|
|
||||||
email_address: email_address.clone(),
|
|
||||||
matrix_id: matrix_id.clone(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to add admin users as contacts if no contacts are configured
|
|
||||||
if contacts.is_empty() {
|
|
||||||
if let Ok(admin_room) = services.admin.get_admin_room().await {
|
|
||||||
let admin_users = services.rooms.state_cache.room_members(&admin_room);
|
|
||||||
let mut stream = admin_users;
|
|
||||||
|
|
||||||
while let Some(user_id) = stream.next().await {
|
|
||||||
// Skip server user
|
|
||||||
if *user_id == services.globals.server_user {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
contacts.push(Contact {
|
|
||||||
role: role_value.clone(),
|
|
||||||
email_address: None,
|
|
||||||
matrix_id: Some(user_id.to_owned()),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// support page or role+contacts must be either defined for this to be valid
|
||||||
if contacts.is_empty() && support_page.is_none() {
|
if contacts.is_empty() && support_page.is_none() {
|
||||||
// No admin room, no configured contacts, and no support page
|
|
||||||
return Err(Error::BadRequest(ErrorKind::NotFound, "Not found."));
|
return Err(Error::BadRequest(ErrorKind::NotFound, "Not found."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,9 +84,9 @@ pub(crate) async fn well_known_support(
|
||||||
pub(crate) async fn syncv3_client_server_json(
|
pub(crate) async fn syncv3_client_server_json(
|
||||||
State(services): State<crate::State>,
|
State(services): State<crate::State>,
|
||||||
) -> Result<impl IntoResponse> {
|
) -> Result<impl IntoResponse> {
|
||||||
let server_url = match services.config.well_known.client.as_ref() {
|
let server_url = match services.server.config.well_known.client.as_ref() {
|
||||||
| Some(url) => url.to_string(),
|
| Some(url) => url.to_string(),
|
||||||
| None => match services.config.well_known.server.as_ref() {
|
| None => match services.server.config.well_known.server.as_ref() {
|
||||||
| Some(url) => url.to_string(),
|
| Some(url) => url.to_string(),
|
||||||
| None => return Err(Error::BadRequest(ErrorKind::NotFound, "Not found.")),
|
| None => return Err(Error::BadRequest(ErrorKind::NotFound, "Not found.")),
|
||||||
},
|
},
|
||||||
|
|
|
@ -28,7 +28,7 @@ crate-type = [
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
built = { version = "0.8", features = [] }
|
built = {version = "0.7", features = ["cargo-lock", "dependency-tree"]}
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
@ -78,7 +78,6 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Rerun Triggers ---
|
// --- Rerun Triggers ---
|
||||||
// TODO: The git rerun triggers seem to always run
|
|
||||||
// Rerun if the git HEAD changes
|
// Rerun if the git HEAD changes
|
||||||
println!("cargo:rerun-if-changed=.git/HEAD");
|
println!("cargo:rerun-if-changed=.git/HEAD");
|
||||||
// Rerun if the ref pointed to by HEAD changes (e.g., new commit on branch)
|
// Rerun if the ref pointed to by HEAD changes (e.g., new commit on branch)
|
||||||
|
|
|
@ -12,17 +12,11 @@ pub static VERSION_EXTRA: Option<&str> =
|
||||||
v
|
v
|
||||||
} else if let v @ Some(_) = option_env!("CONDUWUIT_VERSION_EXTRA") {
|
} else if let v @ Some(_) = option_env!("CONDUWUIT_VERSION_EXTRA") {
|
||||||
v
|
v
|
||||||
|
} else if let v @ Some(_) = option_env!("CONDUIT_VERSION_EXTRA") {
|
||||||
|
v
|
||||||
} else {
|
} else {
|
||||||
option_env!("CONDUIT_VERSION_EXTRA")
|
GIT_COMMIT_HASH_SHORT
|
||||||
};
|
};
|
||||||
|
|
||||||
#[must_use]
|
|
||||||
pub fn version_tag() -> Option<&'static str> {
|
|
||||||
VERSION_EXTRA
|
|
||||||
.filter(|s| !s.is_empty())
|
|
||||||
.or(GIT_COMMIT_HASH_SHORT)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub static GIT_REMOTE_WEB_URL: Option<&str> = option_env!("GIT_REMOTE_WEB_URL");
|
pub static GIT_REMOTE_WEB_URL: Option<&str> = option_env!("GIT_REMOTE_WEB_URL");
|
||||||
pub static GIT_REMOTE_COMMIT_URL: Option<&str> = option_env!("GIT_REMOTE_COMMIT_URL");
|
pub static GIT_REMOTE_COMMIT_URL: Option<&str> = option_env!("GIT_REMOTE_COMMIT_URL");
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ use self::proxy::ProxyConfig;
|
||||||
pub use self::{check::check, manager::Manager};
|
pub use self::{check::check, manager::Manager};
|
||||||
use crate::{Result, err, error::Error, utils::sys};
|
use crate::{Result, err, error::Error, utils::sys};
|
||||||
|
|
||||||
/// All the config options for continuwuity.
|
/// All the config options for conduwuit.
|
||||||
#[allow(clippy::struct_excessive_bools)]
|
#[allow(clippy::struct_excessive_bools)]
|
||||||
#[allow(rustdoc::broken_intra_doc_links, rustdoc::bare_urls)]
|
#[allow(rustdoc::broken_intra_doc_links, rustdoc::bare_urls)]
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
|
@ -35,7 +35,7 @@ use crate::{Result, err, error::Error, utils::sys};
|
||||||
filename = "conduwuit-example.toml",
|
filename = "conduwuit-example.toml",
|
||||||
section = "global",
|
section = "global",
|
||||||
undocumented = "# This item is undocumented. Please contribute documentation for it.",
|
undocumented = "# This item is undocumented. Please contribute documentation for it.",
|
||||||
header = r#"### continuwuity Configuration
|
header = r#"### conduwuit Configuration
|
||||||
###
|
###
|
||||||
### THIS FILE IS GENERATED. CHANGES/CONTRIBUTIONS IN THE REPO WILL BE
|
### THIS FILE IS GENERATED. CHANGES/CONTRIBUTIONS IN THE REPO WILL BE
|
||||||
### OVERWRITTEN!
|
### OVERWRITTEN!
|
||||||
|
@ -50,7 +50,7 @@ use crate::{Result, err, error::Error, utils::sys};
|
||||||
### that say "YOU NEED TO EDIT THIS".
|
### that say "YOU NEED TO EDIT THIS".
|
||||||
###
|
###
|
||||||
### For more information, see:
|
### For more information, see:
|
||||||
### https://continuwuity.org/configuration.html
|
### https://conduwuit.puppyirl.gay/configuration.html
|
||||||
"#,
|
"#,
|
||||||
ignore = "catchall well_known tls blurhashing allow_invalid_tls_certificates_yes_i_know_what_the_fuck_i_am_doing_with_this_and_i_know_this_is_insecure"
|
ignore = "catchall well_known tls blurhashing allow_invalid_tls_certificates_yes_i_know_what_the_fuck_i_am_doing_with_this_and_i_know_this_is_insecure"
|
||||||
)]
|
)]
|
||||||
|
@ -59,7 +59,7 @@ pub struct Config {
|
||||||
/// suffix for user and room IDs/aliases.
|
/// suffix for user and room IDs/aliases.
|
||||||
///
|
///
|
||||||
/// See the docs for reverse proxying and delegation:
|
/// See the docs for reverse proxying and delegation:
|
||||||
/// https://continuwuity.org/deploying/generic.html#setting-up-the-reverse-proxy
|
/// https://conduwuit.puppyirl.gay/deploying/generic.html#setting-up-the-reverse-proxy
|
||||||
///
|
///
|
||||||
/// Also see the `[global.well_known]` config section at the very bottom.
|
/// Also see the `[global.well_known]` config section at the very bottom.
|
||||||
///
|
///
|
||||||
|
@ -70,10 +70,10 @@ pub struct Config {
|
||||||
/// YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
/// YOU NEED TO EDIT THIS. THIS CANNOT BE CHANGED AFTER WITHOUT A DATABASE
|
||||||
/// WIPE.
|
/// WIPE.
|
||||||
///
|
///
|
||||||
/// example: "continuwuity.org"
|
/// example: "conduwuit.woof"
|
||||||
pub server_name: OwnedServerName,
|
pub server_name: OwnedServerName,
|
||||||
|
|
||||||
/// The default address (IPv4 or IPv6) continuwuity will listen on.
|
/// The default address (IPv4 or IPv6) conduwuit will listen on.
|
||||||
///
|
///
|
||||||
/// If you are using Docker or a container NAT networking setup, this must
|
/// If you are using Docker or a container NAT networking setup, this must
|
||||||
/// be "0.0.0.0".
|
/// be "0.0.0.0".
|
||||||
|
@ -85,10 +85,10 @@ pub struct Config {
|
||||||
#[serde(default = "default_address")]
|
#[serde(default = "default_address")]
|
||||||
address: ListeningAddr,
|
address: ListeningAddr,
|
||||||
|
|
||||||
/// The port(s) continuwuity will listen on.
|
/// The port(s) conduwuit will listen on.
|
||||||
///
|
///
|
||||||
/// For reverse proxying, see:
|
/// For reverse proxying, see:
|
||||||
/// https://continuwuity.org/deploying/generic.html#setting-up-the-reverse-proxy
|
/// https://conduwuit.puppyirl.gay/deploying/generic.html#setting-up-the-reverse-proxy
|
||||||
///
|
///
|
||||||
/// If you are using Docker, don't change this, you'll need to map an
|
/// If you are using Docker, don't change this, you'll need to map an
|
||||||
/// external port to this.
|
/// external port to this.
|
||||||
|
@ -103,17 +103,16 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub tls: TlsConfig,
|
pub tls: TlsConfig,
|
||||||
|
|
||||||
/// The UNIX socket continuwuity will listen on.
|
/// The UNIX socket conduwuit will listen on.
|
||||||
///
|
///
|
||||||
/// continuwuity cannot listen on both an IP address and a UNIX socket. If
|
/// conduwuit cannot listen on both an IP address and a UNIX socket. If
|
||||||
/// listening on a UNIX socket, you MUST remove/comment the `address` key.
|
/// listening on a UNIX socket, you MUST remove/comment the `address` key.
|
||||||
///
|
///
|
||||||
/// Remember to make sure that your reverse proxy has access to this socket
|
/// Remember to make sure that your reverse proxy has access to this socket
|
||||||
/// file, either by adding your reverse proxy to the appropriate user group
|
/// file, either by adding your reverse proxy to the 'conduwuit' group or
|
||||||
/// or granting world R/W permissions with `unix_socket_perms` (666
|
/// granting world R/W permissions with `unix_socket_perms` (666 minimum).
|
||||||
/// minimum).
|
|
||||||
///
|
///
|
||||||
/// example: "/run/continuwuity/continuwuity.sock"
|
/// example: "/run/conduwuit/conduwuit.sock"
|
||||||
pub unix_socket_path: Option<PathBuf>,
|
pub unix_socket_path: Option<PathBuf>,
|
||||||
|
|
||||||
/// The default permissions (in octal) to create the UNIX socket with.
|
/// The default permissions (in octal) to create the UNIX socket with.
|
||||||
|
@ -122,22 +121,22 @@ pub struct Config {
|
||||||
#[serde(default = "default_unix_socket_perms")]
|
#[serde(default = "default_unix_socket_perms")]
|
||||||
pub unix_socket_perms: u32,
|
pub unix_socket_perms: u32,
|
||||||
|
|
||||||
/// This is the only directory where continuwuity will save its data,
|
/// This is the only directory where conduwuit will save its data, including
|
||||||
/// including media. Note: this was previously "/var/lib/matrix-conduit".
|
/// media. Note: this was previously "/var/lib/matrix-conduit".
|
||||||
///
|
///
|
||||||
/// YOU NEED TO EDIT THIS.
|
/// YOU NEED TO EDIT THIS.
|
||||||
///
|
///
|
||||||
/// example: "/var/lib/continuwuity"
|
/// example: "/var/lib/conduwuit"
|
||||||
pub database_path: PathBuf,
|
pub database_path: PathBuf,
|
||||||
|
|
||||||
/// continuwuity supports online database backups using RocksDB's Backup
|
/// conduwuit supports online database backups using RocksDB's Backup engine
|
||||||
/// engine API. To use this, set a database backup path that continuwuity
|
/// API. To use this, set a database backup path that conduwuit can write
|
||||||
/// can write to.
|
/// to.
|
||||||
///
|
///
|
||||||
/// For more information, see:
|
/// For more information, see:
|
||||||
/// https://continuwuity.org/maintenance.html#backups
|
/// https://conduwuit.puppyirl.gay/maintenance.html#backups
|
||||||
///
|
///
|
||||||
/// example: "/opt/continuwuity-db-backups"
|
/// example: "/opt/conduwuit-db-backups"
|
||||||
pub database_backup_path: Option<PathBuf>,
|
pub database_backup_path: Option<PathBuf>,
|
||||||
|
|
||||||
/// The amount of online RocksDB database backups to keep/retain, if using
|
/// The amount of online RocksDB database backups to keep/retain, if using
|
||||||
|
@ -161,7 +160,7 @@ pub struct Config {
|
||||||
#[serde(default = "default_new_user_displayname_suffix")]
|
#[serde(default = "default_new_user_displayname_suffix")]
|
||||||
pub new_user_displayname_suffix: String,
|
pub new_user_displayname_suffix: String,
|
||||||
|
|
||||||
/// If enabled, continuwuity will send a simple GET request periodically to
|
/// If enabled, conduwuit will send a simple GET request periodically to
|
||||||
/// `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
/// `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
||||||
/// announcements or major updates. This is not an update check endpoint.
|
/// announcements or major updates. This is not an update check endpoint.
|
||||||
///
|
///
|
||||||
|
@ -169,8 +168,8 @@ pub struct Config {
|
||||||
#[serde(alias = "allow_check_for_updates", default = "true_fn")]
|
#[serde(alias = "allow_check_for_updates", default = "true_fn")]
|
||||||
pub allow_announcements_check: bool,
|
pub allow_announcements_check: bool,
|
||||||
|
|
||||||
/// Set this to any float value to multiply continuwuity's in-memory LRU
|
/// Set this to any float value to multiply conduwuit's in-memory LRU caches
|
||||||
/// caches with such as "auth_chain_cache_capacity".
|
/// with such as "auth_chain_cache_capacity".
|
||||||
///
|
///
|
||||||
/// May be useful if you have significant memory to spare to increase
|
/// May be useful if you have significant memory to spare to increase
|
||||||
/// performance.
|
/// performance.
|
||||||
|
@ -187,7 +186,7 @@ pub struct Config {
|
||||||
)]
|
)]
|
||||||
pub cache_capacity_modifier: f64,
|
pub cache_capacity_modifier: f64,
|
||||||
|
|
||||||
/// Set this to any float value in megabytes for continuwuity to tell the
|
/// Set this to any float value in megabytes for conduwuit to tell the
|
||||||
/// database engine that this much memory is available for database read
|
/// database engine that this much memory is available for database read
|
||||||
/// caches.
|
/// caches.
|
||||||
///
|
///
|
||||||
|
@ -203,7 +202,7 @@ pub struct Config {
|
||||||
#[serde(default = "default_db_cache_capacity_mb")]
|
#[serde(default = "default_db_cache_capacity_mb")]
|
||||||
pub db_cache_capacity_mb: f64,
|
pub db_cache_capacity_mb: f64,
|
||||||
|
|
||||||
/// Set this to any float value in megabytes for continuwuity to tell the
|
/// Set this to any float value in megabytes for conduwuit to tell the
|
||||||
/// database engine that this much memory is available for database write
|
/// database engine that this much memory is available for database write
|
||||||
/// caches.
|
/// caches.
|
||||||
///
|
///
|
||||||
|
@ -320,9 +319,9 @@ pub struct Config {
|
||||||
/// Enable using *only* TCP for querying your specified nameservers instead
|
/// Enable using *only* TCP for querying your specified nameservers instead
|
||||||
/// of UDP.
|
/// of UDP.
|
||||||
///
|
///
|
||||||
/// If you are running continuwuity in a container environment, this config
|
/// If you are running conduwuit in a container environment, this config
|
||||||
/// option may need to be enabled. For more details, see:
|
/// option may need to be enabled. For more details, see:
|
||||||
/// https://continuwuity.org/troubleshooting.html#potential-dns-issues-when-using-docker
|
/// https://conduwuit.puppyirl.gay/troubleshooting.html#potential-dns-issues-when-using-docker
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub query_over_tcp_only: bool,
|
pub query_over_tcp_only: bool,
|
||||||
|
|
||||||
|
@ -535,9 +534,9 @@ pub struct Config {
|
||||||
/// tokens. Multiple tokens can be added if you separate them with
|
/// tokens. Multiple tokens can be added if you separate them with
|
||||||
/// whitespace
|
/// whitespace
|
||||||
///
|
///
|
||||||
/// continuwuity must be able to access the file, and it must not be empty
|
/// conduwuit must be able to access the file, and it must not be empty
|
||||||
///
|
///
|
||||||
/// example: "/etc/continuwuity/.reg_token"
|
/// example: "/etc/conduwuit/.reg_token"
|
||||||
pub registration_token_file: Option<PathBuf>,
|
pub registration_token_file: Option<PathBuf>,
|
||||||
|
|
||||||
/// Controls whether encrypted rooms and events are allowed.
|
/// Controls whether encrypted rooms and events are allowed.
|
||||||
|
@ -628,16 +627,16 @@ pub struct Config {
|
||||||
pub allow_room_creation: bool,
|
pub allow_room_creation: bool,
|
||||||
|
|
||||||
/// 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 conduwuit.
|
||||||
///
|
///
|
||||||
/// continuwuity officially supports room versions 6 - 11.
|
/// conduwuit officially supports room versions 6 - 11.
|
||||||
///
|
///
|
||||||
/// continuwuity has slightly experimental (though works fine in practice)
|
/// conduwuit has slightly experimental (though works fine in practice)
|
||||||
/// support for versions 3 - 5.
|
/// support for versions 3 - 5.
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub allow_unstable_room_versions: bool,
|
pub allow_unstable_room_versions: bool,
|
||||||
|
|
||||||
/// Default room version continuwuity will create rooms with.
|
/// Default room version conduwuit will create rooms with.
|
||||||
///
|
///
|
||||||
/// Per spec, room version 11 is the default.
|
/// Per spec, room version 11 is the default.
|
||||||
///
|
///
|
||||||
|
@ -711,7 +710,7 @@ pub struct Config {
|
||||||
/// Servers listed here will be used to gather public keys of other servers
|
/// Servers listed here will be used to gather public keys of other servers
|
||||||
/// (notary trusted key servers).
|
/// (notary trusted key servers).
|
||||||
///
|
///
|
||||||
/// Currently, continuwuity doesn't support inbound batched key requests, so
|
/// Currently, conduwuit doesn't support inbound batched key requests, so
|
||||||
/// this list should only contain other Synapse servers.
|
/// this list should only contain other Synapse servers.
|
||||||
///
|
///
|
||||||
/// example: ["matrix.org", "tchncs.de"]
|
/// example: ["matrix.org", "tchncs.de"]
|
||||||
|
@ -756,7 +755,7 @@ pub struct Config {
|
||||||
#[serde(default = "default_trusted_server_batch_size")]
|
#[serde(default = "default_trusted_server_batch_size")]
|
||||||
pub trusted_server_batch_size: usize,
|
pub trusted_server_batch_size: usize,
|
||||||
|
|
||||||
/// Max log level for continuwuity. Allows debug, info, warn, or error.
|
/// Max log level for conduwuit. Allows debug, info, warn, or error.
|
||||||
///
|
///
|
||||||
/// See also:
|
/// See also:
|
||||||
/// https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives
|
/// https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives
|
||||||
|
@ -781,9 +780,8 @@ pub struct Config {
|
||||||
#[serde(default = "default_log_span_events")]
|
#[serde(default = "default_log_span_events")]
|
||||||
pub log_span_events: String,
|
pub log_span_events: String,
|
||||||
|
|
||||||
/// Configures whether CONTINUWUITY_LOG EnvFilter matches values using
|
/// Configures whether CONDUWUIT_LOG EnvFilter matches values using regular
|
||||||
/// regular expressions. See the tracing_subscriber documentation on
|
/// expressions. See the tracing_subscriber documentation on Directives.
|
||||||
/// Directives.
|
|
||||||
///
|
///
|
||||||
/// default: true
|
/// default: true
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
|
@ -865,7 +863,7 @@ pub struct Config {
|
||||||
/// This takes priority over "turn_secret" first, and falls back to
|
/// This takes priority over "turn_secret" first, and falls back to
|
||||||
/// "turn_secret" if invalid or failed to open.
|
/// "turn_secret" if invalid or failed to open.
|
||||||
///
|
///
|
||||||
/// example: "/etc/continuwuity/.turn_secret"
|
/// example: "/etc/conduwuit/.turn_secret"
|
||||||
pub turn_secret_file: Option<PathBuf>,
|
pub turn_secret_file: Option<PathBuf>,
|
||||||
|
|
||||||
/// TURN TTL, in seconds.
|
/// TURN TTL, in seconds.
|
||||||
|
@ -874,12 +872,12 @@ pub struct Config {
|
||||||
#[serde(default = "default_turn_ttl")]
|
#[serde(default = "default_turn_ttl")]
|
||||||
pub turn_ttl: u64,
|
pub turn_ttl: u64,
|
||||||
|
|
||||||
/// List/vector of room IDs or room aliases that continuwuity will make
|
/// List/vector of room IDs or room aliases that conduwuit will make newly
|
||||||
/// newly registered users join. The rooms specified must be rooms that you
|
/// registered users join. The rooms specified must be rooms that you have
|
||||||
/// have joined at least once on the server, and must be public.
|
/// joined at least once on the server, and must be public.
|
||||||
///
|
///
|
||||||
/// example: ["#continuwuity:continuwuity.org",
|
/// example: ["#conduwuit:puppygock.gay",
|
||||||
/// "!main-1:continuwuity.org"]
|
/// "!eoIzvAvVwY23LPDay8:puppygock.gay"]
|
||||||
///
|
///
|
||||||
/// default: []
|
/// default: []
|
||||||
#[serde(default = "Vec::new")]
|
#[serde(default = "Vec::new")]
|
||||||
|
@ -904,10 +902,10 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub auto_deactivate_banned_room_attempts: bool,
|
pub auto_deactivate_banned_room_attempts: bool,
|
||||||
|
|
||||||
/// RocksDB log level. This is not the same as continuwuity's log level.
|
/// RocksDB log level. This is not the same as conduwuit's log level. This
|
||||||
/// This is the log level for the RocksDB engine/library which show up in
|
/// is the log level for the RocksDB engine/library which show up in your
|
||||||
/// your database folder/path as `LOG` files. continuwuity will log RocksDB
|
/// database folder/path as `LOG` files. conduwuit will log RocksDB errors
|
||||||
/// errors as normal through tracing or panics if severe for safety.
|
/// as normal through tracing or panics if severe for safety.
|
||||||
///
|
///
|
||||||
/// default: "error"
|
/// default: "error"
|
||||||
#[serde(default = "default_rocksdb_log_level")]
|
#[serde(default = "default_rocksdb_log_level")]
|
||||||
|
@ -932,7 +930,7 @@ pub struct Config {
|
||||||
/// Set this to true to use RocksDB config options that are tailored to HDDs
|
/// Set this to true to use RocksDB config options that are tailored to HDDs
|
||||||
/// (slower device storage).
|
/// (slower device storage).
|
||||||
///
|
///
|
||||||
/// It is worth noting that by default, continuwuity will use RocksDB with
|
/// It is worth noting that by default, conduwuit will use RocksDB with
|
||||||
/// Direct IO enabled. *Generally* speaking this improves performance as it
|
/// Direct IO enabled. *Generally* speaking this improves performance as it
|
||||||
/// bypasses buffered I/O (system page cache). However there is a potential
|
/// bypasses buffered I/O (system page cache). However there is a potential
|
||||||
/// chance that Direct IO may cause issues with database operations if your
|
/// chance that Direct IO may cause issues with database operations if your
|
||||||
|
@ -940,7 +938,7 @@ pub struct Config {
|
||||||
/// possibly ZFS filesystem. RocksDB generally deals/corrects these issues
|
/// possibly ZFS filesystem. RocksDB generally deals/corrects these issues
|
||||||
/// but it cannot account for all setups. If you experience any weird
|
/// but it cannot account for all setups. If you experience any weird
|
||||||
/// RocksDB issues, try enabling this option as it turns off Direct IO and
|
/// RocksDB issues, try enabling this option as it turns off Direct IO and
|
||||||
/// feel free to report in the continuwuity Matrix room if this option fixes
|
/// feel free to report in the conduwuit Matrix room if this option fixes
|
||||||
/// your DB issues.
|
/// your DB issues.
|
||||||
///
|
///
|
||||||
/// For more information, see:
|
/// For more information, see:
|
||||||
|
@ -1001,7 +999,7 @@ pub struct Config {
|
||||||
/// as they all differ. See their `kDefaultCompressionLevel`.
|
/// as they all differ. See their `kDefaultCompressionLevel`.
|
||||||
///
|
///
|
||||||
/// Note when using the default value we may override it with a setting
|
/// Note when using the default value we may override it with a setting
|
||||||
/// tailored specifically for continuwuity.
|
/// tailored specifically conduwuit.
|
||||||
///
|
///
|
||||||
/// default: 32767
|
/// default: 32767
|
||||||
#[serde(default = "default_rocksdb_compression_level")]
|
#[serde(default = "default_rocksdb_compression_level")]
|
||||||
|
@ -1019,7 +1017,7 @@ pub struct Config {
|
||||||
/// algorithm.
|
/// algorithm.
|
||||||
///
|
///
|
||||||
/// Note when using the default value we may override it with a setting
|
/// Note when using the default value we may override it with a setting
|
||||||
/// tailored specifically for continuwuity.
|
/// tailored specifically conduwuit.
|
||||||
///
|
///
|
||||||
/// default: 32767
|
/// default: 32767
|
||||||
#[serde(default = "default_rocksdb_bottommost_compression_level")]
|
#[serde(default = "default_rocksdb_bottommost_compression_level")]
|
||||||
|
@ -1061,13 +1059,13 @@ pub struct Config {
|
||||||
/// 0 = AbsoluteConsistency
|
/// 0 = AbsoluteConsistency
|
||||||
/// 1 = TolerateCorruptedTailRecords (default)
|
/// 1 = TolerateCorruptedTailRecords (default)
|
||||||
/// 2 = PointInTime (use me if trying to recover)
|
/// 2 = PointInTime (use me if trying to recover)
|
||||||
/// 3 = SkipAnyCorruptedRecord (you now voided your Continuwuity warranty)
|
/// 3 = SkipAnyCorruptedRecord (you now voided your Conduwuit warranty)
|
||||||
///
|
///
|
||||||
/// For more information on these modes, see:
|
/// For more information on these modes, see:
|
||||||
/// https://github.com/facebook/rocksdb/wiki/WAL-Recovery-Modes
|
/// https://github.com/facebook/rocksdb/wiki/WAL-Recovery-Modes
|
||||||
///
|
///
|
||||||
/// For more details on recovering a corrupt database, see:
|
/// For more details on recovering a corrupt database, see:
|
||||||
/// https://continuwuity.org/troubleshooting.html#database-corruption
|
/// https://conduwuit.puppyirl.gay/troubleshooting.html#database-corruption
|
||||||
///
|
///
|
||||||
/// default: 1
|
/// default: 1
|
||||||
#[serde(default = "default_rocksdb_recovery_mode")]
|
#[serde(default = "default_rocksdb_recovery_mode")]
|
||||||
|
@ -1111,7 +1109,7 @@ pub struct Config {
|
||||||
/// - Disabling repair mode and restarting the server is recommended after
|
/// - Disabling repair mode and restarting the server is recommended after
|
||||||
/// running the repair.
|
/// running the repair.
|
||||||
///
|
///
|
||||||
/// See https://continuwuity.org/troubleshooting.html#database-corruption for more details on recovering a corrupt database.
|
/// See https://conduwuit.puppyirl.gay/troubleshooting.html#database-corruption for more details on recovering a corrupt database.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub rocksdb_repair: bool,
|
pub rocksdb_repair: bool,
|
||||||
|
|
||||||
|
@ -1136,7 +1134,7 @@ pub struct Config {
|
||||||
/// Enables RocksDB compaction. You should never ever have to set this
|
/// Enables RocksDB compaction. You should never ever have to set this
|
||||||
/// option to false. If you for some reason find yourself needing to use
|
/// option to false. If you for some reason find yourself needing to use
|
||||||
/// this option as part of troubleshooting or a bug, please reach out to us
|
/// this option as part of troubleshooting or a bug, please reach out to us
|
||||||
/// in the continuwuity Matrix room with information and details.
|
/// in the conduwuit Matrix room with information and details.
|
||||||
///
|
///
|
||||||
/// Disabling compaction will lead to a significantly bloated and
|
/// Disabling compaction will lead to a significantly bloated and
|
||||||
/// explosively large database, gradually poor performance, unnecessarily
|
/// explosively large database, gradually poor performance, unnecessarily
|
||||||
|
@ -1164,7 +1162,7 @@ pub struct Config {
|
||||||
/// purposes such as recovering/recreating your admin room, or inviting
|
/// purposes such as recovering/recreating your admin room, or inviting
|
||||||
/// yourself back.
|
/// yourself back.
|
||||||
///
|
///
|
||||||
/// See https://continuwuity.org/troubleshooting.html#lost-access-to-admin-room for other ways to get back into your admin room.
|
/// See https://conduwuit.puppyirl.gay/troubleshooting.html#lost-access-to-admin-room for other ways to get back into your admin room.
|
||||||
///
|
///
|
||||||
/// Once this password is unset, all sessions will be logged out for
|
/// Once this password is unset, all sessions will be logged out for
|
||||||
/// security purposes.
|
/// security purposes.
|
||||||
|
@ -1180,8 +1178,8 @@ pub struct Config {
|
||||||
|
|
||||||
/// Allow local (your server only) presence updates/requests.
|
/// Allow local (your server only) presence updates/requests.
|
||||||
///
|
///
|
||||||
/// Note that presence on continuwuity is very fast unlike Synapse's. If
|
/// Note that presence on conduwuit is very fast unlike Synapse's. If using
|
||||||
/// using outgoing presence, this MUST be enabled.
|
/// outgoing presence, this MUST be enabled.
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub allow_local_presence: bool,
|
pub allow_local_presence: bool,
|
||||||
|
|
||||||
|
@ -1189,7 +1187,7 @@ pub struct Config {
|
||||||
///
|
///
|
||||||
/// This option receives presence updates from other servers, but does not
|
/// This option receives presence updates from other servers, but does not
|
||||||
/// send any unless `allow_outgoing_presence` is true. Note that presence on
|
/// send any unless `allow_outgoing_presence` is true. Note that presence on
|
||||||
/// continuwuity is very fast unlike Synapse's.
|
/// conduwuit is very fast unlike Synapse's.
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub allow_incoming_presence: bool,
|
pub allow_incoming_presence: bool,
|
||||||
|
|
||||||
|
@ -1197,8 +1195,8 @@ pub struct Config {
|
||||||
///
|
///
|
||||||
/// This option sends presence updates to other servers, but does not
|
/// This option sends presence updates to other servers, but does not
|
||||||
/// receive any unless `allow_incoming_presence` is true. Note that presence
|
/// receive any unless `allow_incoming_presence` is true. Note that presence
|
||||||
/// on continuwuity is very fast unlike Synapse's. If using outgoing
|
/// on conduwuit is very fast unlike Synapse's. If using outgoing presence,
|
||||||
/// presence, you MUST enable `allow_local_presence` as well.
|
/// you MUST enable `allow_local_presence` as well.
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub allow_outgoing_presence: bool,
|
pub allow_outgoing_presence: bool,
|
||||||
|
|
||||||
|
@ -1261,8 +1259,8 @@ pub struct Config {
|
||||||
#[serde(default = "default_typing_client_timeout_max_s")]
|
#[serde(default = "default_typing_client_timeout_max_s")]
|
||||||
pub typing_client_timeout_max_s: u64,
|
pub typing_client_timeout_max_s: u64,
|
||||||
|
|
||||||
/// Set this to true for continuwuity to compress HTTP response bodies using
|
/// Set this to true for conduwuit to compress HTTP response bodies using
|
||||||
/// zstd. This option does nothing if continuwuity was not built with
|
/// zstd. This option does nothing if conduwuit was not built with
|
||||||
/// `zstd_compression` feature. Please be aware that enabling HTTP
|
/// `zstd_compression` feature. Please be aware that enabling HTTP
|
||||||
/// compression may weaken TLS. Most users should not need to enable this.
|
/// compression may weaken TLS. Most users should not need to enable this.
|
||||||
/// See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
/// See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
||||||
|
@ -1270,8 +1268,8 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub zstd_compression: bool,
|
pub zstd_compression: bool,
|
||||||
|
|
||||||
/// Set this to true for continuwuity to compress HTTP response bodies using
|
/// Set this to true for conduwuit to compress HTTP response bodies using
|
||||||
/// gzip. This option does nothing if continuwuity was not built with
|
/// gzip. This option does nothing if conduwuit was not built with
|
||||||
/// `gzip_compression` feature. Please be aware that enabling HTTP
|
/// `gzip_compression` feature. Please be aware that enabling HTTP
|
||||||
/// compression may weaken TLS. Most users should not need to enable this.
|
/// compression may weaken TLS. Most users should not need to enable this.
|
||||||
/// See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH before
|
/// See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH before
|
||||||
|
@ -1282,8 +1280,8 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub gzip_compression: bool,
|
pub gzip_compression: bool,
|
||||||
|
|
||||||
/// Set this to true for continuwuity to compress HTTP response bodies using
|
/// Set this to true for conduwuit to compress HTTP response bodies using
|
||||||
/// brotli. This option does nothing if continuwuity was not built with
|
/// brotli. This option does nothing if conduwuit was not built with
|
||||||
/// `brotli_compression` feature. Please be aware that enabling HTTP
|
/// `brotli_compression` feature. Please be aware that enabling HTTP
|
||||||
/// compression may weaken TLS. Most users should not need to enable this.
|
/// compression may weaken TLS. Most users should not need to enable this.
|
||||||
/// See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
/// See https://breachattack.com/ and https://wikipedia.org/wiki/BREACH
|
||||||
|
@ -1344,7 +1342,7 @@ pub struct Config {
|
||||||
/// Otherwise setting this to false reduces filesystem clutter and overhead
|
/// Otherwise setting this to false reduces filesystem clutter and overhead
|
||||||
/// for managing these symlinks in the directory. This is now disabled by
|
/// for managing these symlinks in the directory. This is now disabled by
|
||||||
/// default. You may still return to upstream Conduit but you have to run
|
/// default. You may still return to upstream Conduit but you have to run
|
||||||
/// continuwuity at least once with this set to true and allow the
|
/// conduwuit at least once with this set to true and allow the
|
||||||
/// media_startup_check to take place before shutting down to return to
|
/// media_startup_check to take place before shutting down to return to
|
||||||
/// Conduit.
|
/// Conduit.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
@ -1393,8 +1391,8 @@ pub struct Config {
|
||||||
#[serde(default, with = "serde_regex")]
|
#[serde(default, with = "serde_regex")]
|
||||||
pub allowed_remote_server_names: RegexSet,
|
pub allowed_remote_server_names: RegexSet,
|
||||||
|
|
||||||
/// Vector list of regex patterns of server names that continuwuity will
|
/// Vector list of regex patterns of server names that conduwuit will refuse
|
||||||
/// refuse to download remote media from.
|
/// to download remote media from.
|
||||||
///
|
///
|
||||||
/// example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
/// example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
||||||
///
|
///
|
||||||
|
@ -1412,7 +1410,7 @@ pub struct Config {
|
||||||
#[serde(default, with = "serde_regex")]
|
#[serde(default, with = "serde_regex")]
|
||||||
pub forbidden_remote_room_directory_server_names: RegexSet,
|
pub forbidden_remote_room_directory_server_names: RegexSet,
|
||||||
|
|
||||||
/// Vector list of regex patterns of server names that continuwuity will not
|
/// Vector list of regex patterns of server names that conduwuit will not
|
||||||
/// send messages to the client from.
|
/// send messages to the client from.
|
||||||
///
|
///
|
||||||
/// Note that there is no way for clients to receive messages once a server
|
/// Note that there is no way for clients to receive messages once a server
|
||||||
|
@ -1438,7 +1436,7 @@ pub struct Config {
|
||||||
pub send_messages_from_ignored_users_to_client: bool,
|
pub send_messages_from_ignored_users_to_client: bool,
|
||||||
|
|
||||||
/// Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
/// Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
||||||
/// do not want continuwuity to send outbound requests to. Defaults to
|
/// do not want conduwuit to send outbound requests to. Defaults to
|
||||||
/// RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
/// RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
||||||
/// security.
|
/// security.
|
||||||
///
|
///
|
||||||
|
@ -1606,26 +1604,26 @@ pub struct Config {
|
||||||
|
|
||||||
/// Allow admins to enter commands in rooms other than "#admins" (admin
|
/// Allow admins to enter commands in rooms other than "#admins" (admin
|
||||||
/// room) by prefixing your message with "\!admin" or "\\!admin" followed up
|
/// room) by prefixing your message with "\!admin" or "\\!admin" followed up
|
||||||
/// a normal continuwuity admin command. The reply will be publicly visible
|
/// a normal conduwuit admin command. The reply will be publicly visible to
|
||||||
/// to the room, originating from the sender.
|
/// the room, originating from the sender.
|
||||||
///
|
///
|
||||||
/// example: \\!admin debug ping puppygock.gay
|
/// example: \\!admin debug ping puppygock.gay
|
||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub admin_escape_commands: bool,
|
pub admin_escape_commands: bool,
|
||||||
|
|
||||||
/// Automatically activate the continuwuity admin room console / CLI on
|
/// Automatically activate the conduwuit admin room console / CLI on
|
||||||
/// startup. This option can also be enabled with `--console` continuwuity
|
/// startup. This option can also be enabled with `--console` conduwuit
|
||||||
/// argument.
|
/// argument.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub admin_console_automatic: bool,
|
pub admin_console_automatic: bool,
|
||||||
|
|
||||||
/// List of admin commands to execute on startup.
|
/// List of admin commands to execute on startup.
|
||||||
///
|
///
|
||||||
/// This option can also be configured with the `--execute` continuwuity
|
/// This option can also be configured with the `--execute` conduwuit
|
||||||
/// argument and can take standard shell commands and environment variables
|
/// argument and can take standard shell commands and environment variables
|
||||||
///
|
///
|
||||||
/// For example: `./continuwuity --execute "server admin-notice continuwuity
|
/// For example: `./conduwuit --execute "server admin-notice conduwuit has
|
||||||
/// has started up at $(date)"`
|
/// started up at $(date)"`
|
||||||
///
|
///
|
||||||
/// example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
/// example: admin_execute = ["debug ping puppygock.gay", "debug echo hi"]`
|
||||||
///
|
///
|
||||||
|
@ -1635,7 +1633,7 @@ pub struct Config {
|
||||||
|
|
||||||
/// Ignore errors in startup commands.
|
/// Ignore errors in startup commands.
|
||||||
///
|
///
|
||||||
/// If false, continuwuity will error and fail to start if an admin execute
|
/// If false, conduwuit will error and fail to start if an admin execute
|
||||||
/// command (`--execute` / `admin_execute`) fails.
|
/// command (`--execute` / `admin_execute`) fails.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub admin_execute_errors_ignore: bool,
|
pub admin_execute_errors_ignore: bool,
|
||||||
|
@ -1660,16 +1658,17 @@ pub struct Config {
|
||||||
/// The default room tag to apply on the admin room.
|
/// The default room tag to apply on the admin room.
|
||||||
///
|
///
|
||||||
/// On some clients like Element, the room tag "m.server_notice" is a
|
/// On some clients like Element, the room tag "m.server_notice" is a
|
||||||
/// special pinned room at the very bottom of your room list. The
|
/// special pinned room at the very bottom of your room list. The conduwuit
|
||||||
/// continuwuity admin room can be pinned here so you always have an
|
/// admin room can be pinned here so you always have an easy-to-access
|
||||||
/// easy-to-access shortcut dedicated to your admin room.
|
/// shortcut dedicated to your admin room.
|
||||||
///
|
///
|
||||||
/// default: "m.server_notice"
|
/// default: "m.server_notice"
|
||||||
#[serde(default = "default_admin_room_tag")]
|
#[serde(default = "default_admin_room_tag")]
|
||||||
pub admin_room_tag: String,
|
pub admin_room_tag: String,
|
||||||
|
|
||||||
/// Sentry.io crash/panic reporting, performance monitoring/metrics, etc.
|
/// Sentry.io crash/panic reporting, performance monitoring/metrics, etc.
|
||||||
/// This is NOT enabled by default.
|
/// This is NOT enabled by default. conduwuit's default Sentry reporting
|
||||||
|
/// endpoint domain is `o4506996327251968.ingest.us.sentry.io`.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub sentry: bool,
|
pub sentry: bool,
|
||||||
|
|
||||||
|
@ -1680,7 +1679,7 @@ pub struct Config {
|
||||||
#[serde(default = "default_sentry_endpoint")]
|
#[serde(default = "default_sentry_endpoint")]
|
||||||
pub sentry_endpoint: Option<Url>,
|
pub sentry_endpoint: Option<Url>,
|
||||||
|
|
||||||
/// Report your continuwuity server_name in Sentry.io crash reports and
|
/// Report your conduwuit server_name in Sentry.io crash reports and
|
||||||
/// metrics.
|
/// metrics.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub sentry_send_server_name: bool,
|
pub sentry_send_server_name: bool,
|
||||||
|
@ -1721,7 +1720,7 @@ pub struct Config {
|
||||||
/// Enable the tokio-console. This option is only relevant to developers.
|
/// Enable the tokio-console. This option is only relevant to developers.
|
||||||
///
|
///
|
||||||
/// For more information, see:
|
/// For more information, see:
|
||||||
/// https://continuwuity.org/development.html#debugging-with-tokio-console
|
/// https://conduwuit.puppyirl.gay/development.html#debugging-with-tokio-console
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub tokio_console: bool,
|
pub tokio_console: bool,
|
||||||
|
|
||||||
|
@ -1897,28 +1896,12 @@ pub struct WellKnownConfig {
|
||||||
/// example: "matrix.example.com:443"
|
/// example: "matrix.example.com:443"
|
||||||
pub server: Option<OwnedServerName>,
|
pub server: Option<OwnedServerName>,
|
||||||
|
|
||||||
/// URL to a support page for the server, which will be served as part of
|
|
||||||
/// the MSC1929 server support endpoint at /.well-known/matrix/support.
|
|
||||||
/// Will be included alongside any contact information
|
|
||||||
pub support_page: Option<Url>,
|
pub support_page: Option<Url>,
|
||||||
|
|
||||||
/// Role string for server support contacts, to be served as part of the
|
|
||||||
/// MSC1929 server support endpoint at /.well-known/matrix/support.
|
|
||||||
///
|
|
||||||
/// default: "m.role.admin"
|
|
||||||
pub support_role: Option<ContactRole>,
|
pub support_role: Option<ContactRole>,
|
||||||
|
|
||||||
/// Email address for server support contacts, to be served as part of the
|
|
||||||
/// MSC1929 server support endpoint.
|
|
||||||
/// This will be used along with support_mxid if specified.
|
|
||||||
pub support_email: Option<String>,
|
pub support_email: Option<String>,
|
||||||
|
|
||||||
/// Matrix ID for server support contacts, to be served as part of the
|
|
||||||
/// MSC1929 server support endpoint.
|
|
||||||
/// This will be used along with support_email if specified.
|
|
||||||
///
|
|
||||||
/// If no email or mxid is specified, all of the server's admins will be
|
|
||||||
/// listed.
|
|
||||||
pub support_mxid: Option<OwnedUserId>,
|
pub support_mxid: Option<OwnedUserId>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2059,41 +2042,41 @@ fn default_database_backups_to_keep() -> i16 { 1 }
|
||||||
|
|
||||||
fn default_db_write_buffer_capacity_mb() -> f64 { 48.0 + parallelism_scaled_f64(4.0) }
|
fn default_db_write_buffer_capacity_mb() -> f64 { 48.0 + parallelism_scaled_f64(4.0) }
|
||||||
|
|
||||||
fn default_db_cache_capacity_mb() -> f64 { 128.0 + parallelism_scaled_f64(64.0) }
|
fn default_db_cache_capacity_mb() -> f64 { 256.0 + parallelism_scaled_f64(256.0) }
|
||||||
|
|
||||||
fn default_pdu_cache_capacity() -> u32 { parallelism_scaled_u32(10_000).saturating_add(100_000) }
|
fn default_pdu_cache_capacity() -> u32 { parallelism_scaled_u32(25_000).saturating_add(200_000) }
|
||||||
|
|
||||||
fn default_cache_capacity_modifier() -> f64 { 1.0 }
|
fn default_cache_capacity_modifier() -> f64 { 1.0 }
|
||||||
|
|
||||||
fn default_auth_chain_cache_capacity() -> u32 {
|
fn default_auth_chain_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(10_000).saturating_add(100_000)
|
parallelism_scaled_u32(25_000).saturating_add(200_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_shorteventid_cache_capacity() -> u32 {
|
fn default_shorteventid_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(50_000).saturating_add(100_000)
|
parallelism_scaled_u32(50_000).saturating_add(200_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_eventidshort_cache_capacity() -> u32 {
|
fn default_eventidshort_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(25_000).saturating_add(100_000)
|
parallelism_scaled_u32(25_000).saturating_add(200_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_eventid_pdu_cache_capacity() -> u32 {
|
fn default_eventid_pdu_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(25_000).saturating_add(100_000)
|
parallelism_scaled_u32(25_000).saturating_add(200_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_shortstatekey_cache_capacity() -> u32 {
|
fn default_shortstatekey_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(10_000).saturating_add(100_000)
|
parallelism_scaled_u32(25_000).saturating_add(200_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_statekeyshort_cache_capacity() -> u32 {
|
fn default_statekeyshort_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(10_000).saturating_add(100_000)
|
parallelism_scaled_u32(25_000).saturating_add(200_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_servernameevent_data_cache_capacity() -> u32 {
|
fn default_servernameevent_data_cache_capacity() -> u32 {
|
||||||
parallelism_scaled_u32(100_000).saturating_add(500_000)
|
parallelism_scaled_u32(200_000).saturating_add(500_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_stateinfo_cache_capacity() -> u32 { parallelism_scaled_u32(100) }
|
fn default_stateinfo_cache_capacity() -> u32 { parallelism_scaled_u32(2000) }
|
||||||
|
|
||||||
fn default_roomid_spacehierarchy_cache_capacity() -> u32 { parallelism_scaled_u32(1000) }
|
fn default_roomid_spacehierarchy_cache_capacity() -> u32 { parallelism_scaled_u32(1000) }
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,6 @@ pub fn user_agent() -> &'static str { USER_AGENT.get_or_init(init_user_agent) }
|
||||||
fn init_user_agent() -> String { format!("{}/{}", name(), version()) }
|
fn init_user_agent() -> String { format!("{}/{}", name(), version()) }
|
||||||
|
|
||||||
fn init_version() -> String {
|
fn init_version() -> String {
|
||||||
conduwuit_build_metadata::version_tag()
|
conduwuit_build_metadata::VERSION_EXTRA
|
||||||
.map_or(SEMANTIC.to_owned(), |extra| format!("{SEMANTIC} ({extra})"))
|
.map_or(SEMANTIC.to_owned(), |extra| format!("{SEMANTIC} ({extra})"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -638,7 +638,7 @@ fn valid_membership_change(
|
||||||
warn!(?target_user_membership_event_id, "Banned user can't join");
|
warn!(?target_user_membership_event_id, "Banned user can't join");
|
||||||
false
|
false
|
||||||
} else if (join_rules == JoinRule::Invite
|
} else if (join_rules == JoinRule::Invite
|
||||||
|| room_version.allow_knocking && join_rules == JoinRule::Knock)
|
|| room_version.allow_knocking && (join_rules == JoinRule::Knock || matches!(join_rules, JoinRule::KnockRestricted(_))))
|
||||||
// If the join_rule is invite then allow if membership state is invite or join
|
// If the join_rule is invite then allow if membership state is invite or join
|
||||||
&& (target_user_current_membership == MembershipState::Join
|
&& (target_user_current_membership == MembershipState::Join
|
||||||
|| target_user_current_membership == MembershipState::Invite)
|
|| target_user_current_membership == MembershipState::Invite)
|
||||||
|
|
|
@ -29,7 +29,7 @@ fn descriptor_cf_options(
|
||||||
set_table_options(&mut opts, &desc, cache)?;
|
set_table_options(&mut opts, &desc, cache)?;
|
||||||
|
|
||||||
opts.set_min_write_buffer_number(1);
|
opts.set_min_write_buffer_number(1);
|
||||||
opts.set_max_write_buffer_number(2);
|
opts.set_max_write_buffer_number(3);
|
||||||
opts.set_write_buffer_size(desc.write_size);
|
opts.set_write_buffer_size(desc.write_size);
|
||||||
|
|
||||||
opts.set_target_file_size_base(desc.file_size);
|
opts.set_target_file_size_base(desc.file_size);
|
||||||
|
|
|
@ -4,7 +4,6 @@ mod execute;
|
||||||
mod grant;
|
mod grant;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
future::Future,
|
|
||||||
pin::Pin,
|
pin::Pin,
|
||||||
sync::{Arc, RwLock as StdRwLock, Weak},
|
sync::{Arc, RwLock as StdRwLock, Weak},
|
||||||
};
|
};
|
||||||
|
@ -14,7 +13,7 @@ use conduwuit::{
|
||||||
Error, PduEvent, Result, Server, debug, err, error, error::default_log, pdu::PduBuilder,
|
Error, PduEvent, Result, Server, debug, err, error, error::default_log, pdu::PduBuilder,
|
||||||
};
|
};
|
||||||
pub use create::create_admin_room;
|
pub use create::create_admin_room;
|
||||||
use futures::{FutureExt, TryFutureExt};
|
use futures::{Future, FutureExt, TryFutureExt};
|
||||||
use loole::{Receiver, Sender};
|
use loole::{Receiver, Sender};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
OwnedEventId, OwnedRoomId, RoomId, UserId,
|
OwnedEventId, OwnedRoomId, RoomId, UserId,
|
||||||
|
|
|
@ -306,14 +306,12 @@ impl super::Service {
|
||||||
|
|
||||||
#[tracing::instrument(name = "srv", level = "debug", skip(self))]
|
#[tracing::instrument(name = "srv", level = "debug", skip(self))]
|
||||||
async fn query_srv_record(&self, hostname: &'_ str) -> Result<Option<FedDest>> {
|
async fn query_srv_record(&self, hostname: &'_ str) -> Result<Option<FedDest>> {
|
||||||
let hostnames =
|
|
||||||
[format!("_matrix-fed._tcp.{hostname}."), format!("_matrix._tcp.{hostname}.")];
|
|
||||||
|
|
||||||
for hostname in hostnames {
|
|
||||||
self.services.server.check_running()?;
|
self.services.server.check_running()?;
|
||||||
|
|
||||||
debug!("querying SRV for {hostname:?}");
|
debug!("querying SRV for {hostname:?}");
|
||||||
let hostname = hostname.trim_end_matches('.');
|
|
||||||
|
let hostname_suffix = format!("_matrix-fed._tcp.{hostname}.");
|
||||||
|
let hostname = hostname_suffix.trim_end_matches('.');
|
||||||
match self.resolver.resolver.srv_lookup(hostname).await {
|
match self.resolver.resolver.srv_lookup(hostname).await {
|
||||||
| Err(e) => Self::handle_resolve_error(&e, hostname)?,
|
| Err(e) => Self::handle_resolve_error(&e, hostname)?,
|
||||||
| Ok(result) => {
|
| Ok(result) => {
|
||||||
|
@ -328,7 +326,6 @@ impl super::Service {
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ use axum::{
|
||||||
response::{Html, IntoResponse, Response},
|
response::{Html, IntoResponse, Response},
|
||||||
routing::get,
|
routing::get,
|
||||||
};
|
};
|
||||||
use conduwuit_build_metadata::{GIT_REMOTE_COMMIT_URL, GIT_REMOTE_WEB_URL, version_tag};
|
use conduwuit_build_metadata::{GIT_REMOTE_COMMIT_URL, GIT_REMOTE_WEB_URL, VERSION_EXTRA};
|
||||||
use conduwuit_service::state;
|
use conduwuit_service::state;
|
||||||
|
|
||||||
pub fn build() -> Router<state::State> {
|
pub fn build() -> Router<state::State> {
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
{%~ block footer ~%}
|
{%~ block footer ~%}
|
||||||
<footer>
|
<footer>
|
||||||
<p>Powered by <a href="https://continuwuity.org">Continuwuity</a>
|
<p>Powered by <a href="https://continuwuity.org">Continuwuity</a>
|
||||||
{%~ if let Some(version_info) = self::version_tag() ~%}
|
{%~ if let Some(version_info) = VERSION_EXTRA ~%}
|
||||||
{%~ if let Some(url) = GIT_REMOTE_COMMIT_URL.or(GIT_REMOTE_WEB_URL) ~%}
|
{%~ if let Some(url) = GIT_REMOTE_COMMIT_URL.or(GIT_REMOTE_WEB_URL) ~%}
|
||||||
(<a href="{{ url }}">{{ version_info }}</a>)
|
(<a href="{{ url }}">{{ version_info }}</a>)
|
||||||
{%~ else ~%}
|
{%~ else ~%}
|
||||||
|
|
Loading…
Add table
Reference in a new issue