8a5599adf9
This turned out to be quite hairy, mostly because we need to apply the config's log level filter to the actual logs (stdout and, optionally sentry), but do not want to filter out the tokio tracing events needed by the console_subscriber. I hit several edge cases in tracing getting this to work, and we now depend on a git version of tracing with a backported patch :(
646 lines
16 KiB
TOML
646 lines
16 KiB
TOML
[package]
|
|
# TODO: when can we rename to conduwuit?
|
|
name = "conduit"
|
|
description = "a very cool fork of Conduit, a Matrix homeserver written in Rust"
|
|
license = "Apache-2.0"
|
|
authors = [
|
|
"strawberry <strawberry@puppygock.gay>",
|
|
"timokoesters <timo@koesters.xyz>",
|
|
]
|
|
homepage = "https://conduwuit.puppyirl.gay/"
|
|
repository = "https://github.com/girlbossceo/conduwuit"
|
|
readme = "README.md"
|
|
version = "0.3.0"
|
|
edition = "2021"
|
|
|
|
# See also `rust-toolchain.toml`
|
|
rust-version = "1.75.0"
|
|
|
|
|
|
[dependencies]
|
|
console-subscriber = { version = "0.1", optional = true }
|
|
|
|
hot-lib-reloader = { version = "^0.6", optional = true }
|
|
|
|
# Used for secure identifiers
|
|
rand = "0.8.5"
|
|
|
|
# Used for conduit::Error type
|
|
thiserror = "1.0.59"
|
|
|
|
# Used to encode server public key
|
|
base64 = "0.22.0"
|
|
|
|
# Used when hashing the state
|
|
ring = "0.17.8"
|
|
|
|
# Used to find matching events for appservices
|
|
regex = "1.10.4"
|
|
|
|
# Used to load forbidden room/user regex from config
|
|
serde_regex = "1.1.0"
|
|
|
|
# Used to make working with iterators easier, was already a transitive depdendency
|
|
itertools = "0.12.1"
|
|
|
|
# jwt jsonwebtokens
|
|
jsonwebtoken = "9.3.0"
|
|
|
|
# Used for ruma wrapper
|
|
serde_html_form = "0.2.6"
|
|
|
|
# used for TURN server authentication
|
|
hmac = "0.12.1"
|
|
sha-1 = "0.10.1"
|
|
|
|
# used for checking if an IP is in specific subnets / CIDR ranges easier
|
|
ipaddress = "0.1.3"
|
|
|
|
# to encode/decode percent URIs when conduwuit is running without a reverse proxy
|
|
#urlencoding = "2.1.3"
|
|
|
|
# to get the client IP address of requests
|
|
#axum-client-ip = "0.4.2"
|
|
|
|
# to parse user-friendly time durations in admin commands
|
|
cyborgtime = "2.1.1"
|
|
|
|
# all the web/HTTP dependencies
|
|
# Used for the http request / response body type for Ruma endpoints used with reqwest
|
|
bytes = "1.6.0"
|
|
http = "1.1.0"
|
|
http-body-util = "0.1.1"
|
|
|
|
# used to replace the channels of the tokio runtime
|
|
loole = "0.3.0"
|
|
|
|
# Validating urls in config, was already a transitive dependency
|
|
url = { version = "2", features = ["serde"] }
|
|
|
|
async-trait = "0.1.80"
|
|
|
|
lru-cache = "0.1.2"
|
|
|
|
proc-macro2 = "=1.0.79"
|
|
|
|
# standard date and time tools
|
|
[dependencies.chrono]
|
|
version = "0.4.38"
|
|
features = ["alloc"]
|
|
default-features = false
|
|
|
|
# Web framework
|
|
[dependencies.axum]
|
|
version = "0.7.5"
|
|
default-features = false
|
|
features = ["form", "http1", "http2", "json", "matched-path"]
|
|
|
|
[dependencies.axum-extra]
|
|
version = "0.9.3"
|
|
default-features = false
|
|
features = ["typed-header"]
|
|
|
|
[dependencies.axum-server]
|
|
version = "0.6.0"
|
|
features = ["tls-rustls"]
|
|
|
|
[dependencies.tower]
|
|
version = "0.4.13"
|
|
features = ["util"]
|
|
|
|
[dependencies.tower-http]
|
|
version = "0.5.2"
|
|
features = [
|
|
"add-extension",
|
|
"cors",
|
|
"sensitive-headers",
|
|
"trace",
|
|
"util",
|
|
"catch-panic",
|
|
]
|
|
|
|
[dependencies.hyper]
|
|
version = "1.3.1"
|
|
features = ["server", "http1", "http2"]
|
|
|
|
[dependencies.hyper-util]
|
|
version = "0.1.3"
|
|
|
|
[dependencies.reqwest]
|
|
version = "0.12.4"
|
|
default-features = false
|
|
features = ["rustls-tls-native-roots", "socks", "hickory-dns"]
|
|
|
|
# all the serde stuff
|
|
# Used for pdu definition
|
|
[dependencies.serde]
|
|
version = "1.0.198"
|
|
features = ["rc"]
|
|
# Used for appservice registration files
|
|
[dependencies.serde_yaml]
|
|
version = "0.9.34"
|
|
# Used for ruma wrapper
|
|
[dependencies.serde_json]
|
|
version = "1.0.116"
|
|
features = ["raw_value"]
|
|
|
|
|
|
# Used for password hashing
|
|
[dependencies.argon2]
|
|
version = "0.5.3"
|
|
features = ["alloc", "rand"]
|
|
default-features = false
|
|
|
|
# Used to generate thumbnails for images
|
|
[dependencies.image]
|
|
version = "0.25.1"
|
|
default-features = false
|
|
features = ["jpeg", "png", "gif", "webp"]
|
|
|
|
# logging
|
|
[dependencies.log]
|
|
version = "0.4.21"
|
|
default-features = false
|
|
[dependencies.tracing]
|
|
version = "0.1.40"
|
|
default-features = false
|
|
[dependencies.tracing-subscriber]
|
|
version = "0.3.18"
|
|
features = ["env-filter"]
|
|
|
|
# optional SHA256 media keys feature
|
|
[dependencies.sha2]
|
|
version = "0.10.8"
|
|
optional = true
|
|
|
|
# optional opentelemetry, performance measurements, flamegraphs, etc for performance measurements and monitoring
|
|
[dependencies.opentelemetry]
|
|
version = "0.21.0"
|
|
optional = true
|
|
[dependencies.tracing-flame]
|
|
version = "0.2.0"
|
|
optional = true
|
|
[dependencies.tracing-opentelemetry]
|
|
version = "0.22.0"
|
|
optional = true
|
|
[dependencies.opentelemetry_sdk]
|
|
version = "0.21.2"
|
|
optional = true
|
|
features = ["rt-tokio"]
|
|
[dependencies.opentelemetry-jaeger]
|
|
version = "0.20.0"
|
|
optional = true
|
|
features = ["rt-tokio"]
|
|
|
|
# optional sentry metrics for crash/panic reporting
|
|
[dependencies.sentry]
|
|
version = "0.32.3"
|
|
optional = true
|
|
default-features = false
|
|
features = [
|
|
"backtrace",
|
|
"contexts",
|
|
"debug-images",
|
|
"panic",
|
|
"rustls",
|
|
"tower",
|
|
"tower-http",
|
|
"tracing",
|
|
"reqwest",
|
|
"log",
|
|
]
|
|
[dependencies.sentry-tracing]
|
|
version = "0.32.3"
|
|
optional = true
|
|
[dependencies.sentry-tower]
|
|
version = "0.32.3"
|
|
optional = true
|
|
|
|
# optional jemalloc usage
|
|
[dependencies.tikv-jemallocator]
|
|
version = "0.5.4"
|
|
optional = true
|
|
default-features = false
|
|
features = ["unprefixed_malloc_on_supported_platforms"]
|
|
[dependencies.tikv-jemalloc-ctl]
|
|
version = "0.5.4"
|
|
optional = true
|
|
default-features = false
|
|
features = ["use_std"]
|
|
|
|
# for URL previews
|
|
[dependencies.webpage]
|
|
version = "2.0"
|
|
default-features = false
|
|
|
|
# to support multiple variations of setting a config option
|
|
[dependencies.either]
|
|
version = "1.11.0"
|
|
features = ["serde"]
|
|
|
|
# to listen on both HTTP and HTTPS if listening on TLS dierctly from conduwuit for complement or sytest
|
|
[dependencies.axum-server-dual-protocol]
|
|
version = "0.6"
|
|
optional = true
|
|
|
|
# used for conduit's CLI and admin room command parsing
|
|
[dependencies.clap]
|
|
version = "4.5.4"
|
|
default-features = false
|
|
features = ["std", "derive", "help", "usage", "error-context", "string"]
|
|
|
|
[dependencies.futures-util]
|
|
version = "0.3.30"
|
|
default-features = false
|
|
|
|
# Used for reading the configuration from conduwuit.toml & environment variables
|
|
[dependencies.figment]
|
|
version = "0.10.18"
|
|
features = ["env", "toml"]
|
|
|
|
# Used for matrix spec type definitions and helpers
|
|
[dependencies.ruma]
|
|
git = "https://github.com/girlbossceo/ruma"
|
|
branch = "conduwuit-changes"
|
|
features = [
|
|
"compat",
|
|
"rand",
|
|
"appservice-api-c",
|
|
"client-api",
|
|
"federation-api",
|
|
"push-gateway-api-c",
|
|
"state-res",
|
|
"unstable-exhaustive-types",
|
|
"ring-compat",
|
|
"unstable-unspecified",
|
|
"unstable-msc2448",
|
|
"unstable-msc2666",
|
|
"unstable-msc2867",
|
|
"unstable-msc2870",
|
|
"unstable-msc3026",
|
|
"unstable-msc3061",
|
|
"unstable-msc3575",
|
|
"unstable-msc4121",
|
|
"unstable-msc4125",
|
|
"unstable-extensible-events",
|
|
]
|
|
|
|
[dependencies.ruma-identifiers-validation]
|
|
git = "https://github.com/girlbossceo/ruma"
|
|
branch = "conduwuit-changes"
|
|
|
|
[dependencies.hickory-resolver]
|
|
version = "0.24.1"
|
|
default-features = false
|
|
|
|
[dependencies.rust-rocksdb]
|
|
git = "https://github.com/zaidoon1/rust-rocksdb"
|
|
branch = "master"
|
|
optional = true
|
|
default-features = true
|
|
features = ["multi-threaded-cf", "zstd"]
|
|
|
|
[dependencies.rusqlite]
|
|
git = "https://github.com/rusqlite/rusqlite"
|
|
#branch = "master"
|
|
rev = "e00b626e2b1c67347d789fb7f600281705c89381"
|
|
optional = true
|
|
features = ["bundled"]
|
|
|
|
# used only by rusqlite
|
|
[dependencies.parking_lot]
|
|
version = "0.12.2"
|
|
optional = true
|
|
|
|
# used only by rusqlite
|
|
[dependencies.thread_local]
|
|
version = "1.1.8"
|
|
optional = true
|
|
|
|
# used only by rusqlite and rust-rocksdb
|
|
[dependencies.num_cpus]
|
|
version = "1.16.0"
|
|
|
|
[dependencies.tokio]
|
|
version = "1.37.0"
|
|
features = ["fs", "macros", "sync", "signal"]
|
|
|
|
# *nix-specific dependencies
|
|
[target.'cfg(unix)'.dependencies]
|
|
nix = { version = "0.28.0", features = ["resource"] }
|
|
sd-notify = { version = "0.4.1", optional = true } # systemd is only available/relevant on *nix platforms
|
|
|
|
|
|
[target.'cfg(all(not(target_env = "msvc"), target_os = "linux"))'.dependencies]
|
|
hardened_malloc-rs = { version = "0.1.2", optional = true, features = [
|
|
"static",
|
|
"gcc",
|
|
"light",
|
|
], default-features = false }
|
|
#hardened_malloc-rs = { optional = true, features = ["static","clang","light"], path = "../hardened_malloc-rs", default-features = false }
|
|
|
|
|
|
# backport of [https://github.com/tokio-rs/tracing/pull/2956] to the 0.1.x branch of tracing.
|
|
# we can switch back to upstream if #2956 is merged and backported in the upstream repo.
|
|
[patch.crates-io.tracing-subscriber]
|
|
git = "https://github.com/Benjamin-L/tracing"
|
|
branch = "tracing-subscriber/env-filter-clone-0.1.x-backport"
|
|
[patch.crates-io.tracing]
|
|
git = "https://github.com/Benjamin-L/tracing"
|
|
branch = "tracing-subscriber/env-filter-clone-0.1.x-backport"
|
|
[patch.crates-io.tracing-core]
|
|
git = "https://github.com/Benjamin-L/tracing"
|
|
branch = "tracing-subscriber/env-filter-clone-0.1.x-backport"
|
|
|
|
[features]
|
|
default = [
|
|
"backend_rocksdb",
|
|
"systemd",
|
|
"element_hacks",
|
|
"sentry_telemetry",
|
|
"gzip_compression",
|
|
"brotli_compression",
|
|
"zstd_compression",
|
|
"release_max_log_level",
|
|
]
|
|
backend_sqlite = ["sqlite"]
|
|
backend_rocksdb = ["rocksdb"]
|
|
rocksdb = ["rust-rocksdb"]
|
|
jemalloc = ["tikv-jemalloc-ctl", "tikv-jemallocator", "rust-rocksdb/jemalloc"]
|
|
sqlite = ["rusqlite", "parking_lot", "thread_local"]
|
|
systemd = ["sd-notify"]
|
|
sentry_telemetry = ["sentry", "sentry-tracing", "sentry-tower"]
|
|
|
|
gzip_compression = ["tower-http/compression-gzip", "reqwest/gzip"]
|
|
zstd_compression = ["tower-http/compression-zstd"]
|
|
brotli_compression = ["tower-http/compression-br", "reqwest/brotli"]
|
|
|
|
sha256_media = ["sha2"]
|
|
io_uring = ["rust-rocksdb/io-uring"]
|
|
axum_dual_protocol = ["axum-server-dual-protocol"]
|
|
|
|
perf_measurements = [
|
|
"opentelemetry",
|
|
"tracing-flame",
|
|
"tracing-opentelemetry",
|
|
"opentelemetry_sdk",
|
|
"opentelemetry-jaeger",
|
|
]
|
|
|
|
# enable the tokio_console server
|
|
# incompatible with release_max_log_level
|
|
tokio_console = ["console-subscriber", "tokio/tracing"]
|
|
|
|
hot_reload = ["dep:hot-lib-reloader"]
|
|
|
|
hardened_malloc = ["hardened_malloc-rs"]
|
|
|
|
# increases performance, reduces build times, and reduces binary size by not compiling or
|
|
# genreating code for log level filters that users will generally not use (debug and trace) only in release builds
|
|
#
|
|
# the expense is obviously losing those log level filters for usage at runtime. debug builds will still have all log levels
|
|
release_max_log_level = [
|
|
"tracing/max_level_trace",
|
|
"tracing/release_max_level_info",
|
|
"log/max_level_trace",
|
|
"log/release_max_level_info",
|
|
]
|
|
|
|
# developer feature useful only in debug builds.
|
|
dev_release_log_level = []
|
|
|
|
# client/server interopability hacks
|
|
#
|
|
## element has various non-spec compliant behaviour
|
|
element_hacks = []
|
|
|
|
|
|
[package.metadata.deb]
|
|
name = "conduwuit"
|
|
maintainer = "strawberry <strawberry@puppygock.gay>"
|
|
copyright = "2024, strawberry <strawberry@puppygock.gay>"
|
|
license-file = ["LICENSE", "3"]
|
|
depends = "$auto, ca-certificates"
|
|
extended-description = """\
|
|
a cool hard fork of Conduit, a Matrix homeserver written in Rust"""
|
|
section = "net"
|
|
priority = "optional"
|
|
assets = [
|
|
[
|
|
"debian/README.md",
|
|
"usr/share/doc/conduwuit/README.Debian",
|
|
"644",
|
|
],
|
|
[
|
|
"README.md",
|
|
"usr/share/doc/conduwuit/",
|
|
"644",
|
|
],
|
|
[
|
|
"target/release/conduit",
|
|
"usr/sbin/conduwuit",
|
|
"755",
|
|
],
|
|
[
|
|
"conduwuit-example.toml",
|
|
"etc/conduwuit/conduwuit.toml",
|
|
"640",
|
|
],
|
|
]
|
|
conf-files = ["/etc/conduwuit/conduwuit.toml"]
|
|
maintainer-scripts = "debian/"
|
|
systemd-units = { unit-name = "conduwuit" }
|
|
|
|
|
|
[profile.dev]
|
|
debug = 0
|
|
lto = 'off'
|
|
codegen-units = 512
|
|
incremental = true
|
|
# seems to speed up continuous debug compilations
|
|
[profile.dev.build-override]
|
|
opt-level = 3
|
|
[profile.dev.package."*"] # external dependencies
|
|
opt-level = 1
|
|
[profile.dev.package."tokio"]
|
|
opt-level = 3
|
|
|
|
# default release profile
|
|
[profile.release]
|
|
lto = 'thin'
|
|
incremental = false
|
|
opt-level = 3
|
|
overflow-checks = true
|
|
strip = "symbols"
|
|
control-flow-guard = true # Windows only
|
|
debug = 0
|
|
|
|
# release profile with debug symbols
|
|
[profile.release-debuginfo]
|
|
inherits = "release"
|
|
strip = "none"
|
|
debug = "full"
|
|
|
|
|
|
# high performance release profile which uses fat LTO across all crates, 1 codegen unit, max opt-level, and optimises across all crates
|
|
[profile.release-high-perf]
|
|
inherits = "release"
|
|
lto = 'fat'
|
|
codegen-units = 1
|
|
panic = "abort"
|
|
|
|
# For releases also try to max optimizations for dependencies:
|
|
[profile.release-high-perf.build-override]
|
|
debug = 0
|
|
opt-level = 3
|
|
codegen-units = 1
|
|
|
|
[profile.release-high-perf.package."*"]
|
|
debug = 0
|
|
opt-level = 3
|
|
codegen-units = 1
|
|
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[workspace.lints.rust]
|
|
missing_abi = "warn"
|
|
noop_method_call = "warn"
|
|
pointer_structural_match = "warn"
|
|
explicit_outlives_requirements = "warn"
|
|
unused_extern_crates = "warn"
|
|
unused_import_braces = "warn"
|
|
unused_lifetimes = "warn"
|
|
unused_qualifications = "warn"
|
|
unused_macro_rules = "warn"
|
|
dead_code = "warn"
|
|
elided_lifetimes_in_paths = "warn"
|
|
macro_use_extern_crate = "warn"
|
|
single_use_lifetimes = "warn"
|
|
unsafe_op_in_unsafe_fn = "warn"
|
|
unreachable_pub = "warn"
|
|
|
|
# not in rust 1.75.0 (doesn't break CI but won't check for it)
|
|
unit_bindings = "warn"
|
|
|
|
# this seems to suggest broken code and is not working correctly
|
|
unused_braces = "allow"
|
|
|
|
# some sadness
|
|
missing_docs = "allow"
|
|
|
|
|
|
[workspace.lints.clippy]
|
|
# pedantic = "warn"
|
|
|
|
suspicious = "warn" # assume deny in practice
|
|
perf = "warn" # assume deny in practice
|
|
|
|
redundant_clone = "warn"
|
|
cloned_instead_of_copied = "warn"
|
|
expl_impl_clone_on_copy = "warn"
|
|
unnecessary_cast = "warn"
|
|
cast_lossless = "warn"
|
|
ptr_as_ptr = "warn"
|
|
mut_mut = "warn"
|
|
char_lit_as_u8 = "warn"
|
|
dbg_macro = "warn"
|
|
empty_structs_with_brackets = "warn"
|
|
get_unwrap = "warn"
|
|
negative_feature_names = "warn"
|
|
pub_without_shorthand = "warn"
|
|
rc_buffer = "warn"
|
|
rc_mutex = "warn"
|
|
redundant_feature_names = "warn"
|
|
redundant_type_annotations = "warn"
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
str_to_string = "warn"
|
|
string_to_string = "warn"
|
|
tests_outside_test_module = "warn"
|
|
undocumented_unsafe_blocks = "warn"
|
|
unneeded_field_pattern = "warn"
|
|
unseparated_literal_suffix = "warn"
|
|
wildcard_dependencies = "warn"
|
|
or_fun_call = "warn"
|
|
unnecessary_lazy_evaluations = "warn"
|
|
assertions_on_result_states = "warn"
|
|
default_union_representation = "warn"
|
|
deref_by_slicing = "warn"
|
|
empty_drop = "warn"
|
|
exit = "warn"
|
|
filetype_is_file = "warn"
|
|
float_cmp_const = "warn"
|
|
format_push_string = "warn"
|
|
impl_trait_in_params = "warn"
|
|
ref_to_mut = "warn"
|
|
lossy_float_literal = "warn"
|
|
mem_forget = "warn"
|
|
missing_assert_message = "warn"
|
|
mutex_atomic = "warn"
|
|
semicolon_outside_block = "warn"
|
|
fn_to_numeric_cast = "warn"
|
|
fn_to_numeric_cast_with_truncation = "warn"
|
|
string_lit_chars_any = "warn"
|
|
suspicious_xor_used_as_pow = "warn"
|
|
try_err = "warn"
|
|
unnecessary_safety_comment = "warn"
|
|
unnecessary_safety_doc = "warn"
|
|
unnecessary_self_imports = "warn"
|
|
verbose_file_reads = "warn"
|
|
cast_possible_wrap = "warn"
|
|
redundant_closure_for_method_calls = "warn"
|
|
large_futures = "warn"
|
|
semicolon_if_nothing_returned = "warn"
|
|
match_bool = "warn"
|
|
struct_excessive_bools = "warn"
|
|
must_use_candidate = "warn"
|
|
collapsible_else_if = "warn"
|
|
inconsistent_struct_constructor = "warn"
|
|
manual_string_new = "warn"
|
|
zero_sized_map_values = "warn"
|
|
unnecessary_box_returns = "warn"
|
|
map_unwrap_or = "warn"
|
|
implicit_clone = "warn"
|
|
match_wildcard_for_single_variants = "warn"
|
|
unnecessary_wraps = "warn"
|
|
match_same_arms = "warn"
|
|
ignored_unit_patterns = "warn"
|
|
redundant_else = "warn"
|
|
explicit_into_iter_loop = "warn"
|
|
used_underscore_binding = "warn"
|
|
needless_pass_by_value = "warn"
|
|
too_many_lines = "warn"
|
|
let_underscore_untyped = "warn"
|
|
single_match = "warn"
|
|
single_match_else = "warn"
|
|
explicit_deref_methods = "warn"
|
|
explicit_iter_loop = "warn"
|
|
manual_let_else = "warn"
|
|
trivially_copy_pass_by_ref = "warn"
|
|
wildcard_imports = "warn"
|
|
checked_conversions = "warn"
|
|
|
|
# some sadness
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
module_name_repetitions = "allow"
|
|
if_not_else = "allow"
|
|
doc_markdown = "allow"
|
|
cast_possible_truncation = "allow"
|
|
cast_precision_loss = "allow"
|
|
cast_sign_loss = "allow"
|
|
same_name_method = "allow"
|
|
mod_module_files = "allow"
|
|
unwrap_used = "allow"
|
|
expect_used = "allow"
|
|
if_then_some_else_none = "allow"
|
|
let_underscore_must_use = "allow"
|
|
map_err_ignore = "allow"
|
|
missing_docs_in_private_items = "allow"
|
|
multiple_inherent_impl = "allow"
|
|
error_impl_error = "allow"
|
|
as_conversions = "allow"
|
|
string_add = "allow"
|
|
string_slice = "allow"
|
|
ref_patterns = "allow"
|