Files
EasyTier/easytier-web/Cargo.toml
T
KKRainbow 6154b550c1 fix(tls): select ring explicitly across application entry points
Building easytier and easytier-web together enabled both ring and aws-lc
through reqwest 0.13. HTTPS endpoint discovery used rustls automatic
provider selection and could panic before sending a ClientHello.

Use reqwest rustls-no-provider to share ring, and explicitly install the
process default before starting CLI, GUI and web services. Initialize it
for standalone webhook construction too, retaining any provider already
selected by the host.

Pass ring directly to HTTPS discovery and WebSocket TLS builders so
library use is independent of application initialization order. Keep
existing certificate verification, SNI and protocol settings.

Add a duplex-stream regression that reproduces the original panic with
both backends enabled, and run it in CI. Explain provider selection and
feature-unification constraints next to the relevant code.

Validation: the new regression fails before the fix and passes after it.
Docker tests pass: 10 discovery, 13 webhook, 2 WebSocket, WSS three-node
AES-GCM relay, and WSS credential connectivity. Clippy with warnings
denied and fmt pass. GUI, browser, WASI, minimal native, endpoint-only
and WebSocket-only compile checks pass. Linux and Windows release
dependency trees contain only the ring runtime backend.

Fixes #2607
2026-10-08 23:14:40 +08:00

103 lines
3.0 KiB
TOML

[package]
name = "easytier-web"
version = "2.7.0"
edition.workspace = true
rust-version.workspace = true
description = "Config server for easytier. easytier-core gets config from this and web frontend use it as restful api server."
[dependencies]
easytier = { workspace = true, default-features = true }
easytier-core = { workspace = true, default-features = true }
tracing.workspace = true
anyhow.workspace = true
thiserror.workspace = true
tokio = { workspace = true, default-features = true, features = ["full"] }
tokio-util = { workspace = true, features = ["rt"] }
dashmap.workspace = true
url.workspace = true
async-trait.workspace = true
futures = { workspace = true, features = ["default"] }
prost.workspace = true
maxminddb = "0.32"
axum = { workspace = true, features = ["macros"] }
axum-login = { version = "0.18" }
password-auth = { version = "1.0.0" }
axum-messages = "0.8.0"
axum-embed = { version = "0.1.0", optional = true }
tower-sessions-sqlx-store = { version = "0.15.0", features = ["sqlite"] }
# Match axum-login 0.18 and the SQLx session store.
tower-sessions = { version = "0.14.0", default-features = false, features = [
"signed",
"axum-core",
] }
tower-http = { workspace = true, features = ["cors", "compression-full"] }
sqlx = { workspace = true, features = ["sqlite"] }
sea-orm = { workspace = true, features = [
"sqlx-sqlite",
"runtime-tokio-rustls",
"macros",
] }
sea-orm-migration.workspace = true
# for captcha
rust-embed = { version = "8.12.0", features = ["debug-embed", "include-exclude"] }
base64.workspace = true
cidr.workspace = true
rand.workspace = true
sha2.workspace = true
x25519-dalek = { workspace = true, features = ["static_secrets"] }
easytier-proto.workspace = true
image = { version = "0.25", default-features = false, features = ["png"] }
ab_glyph = "0.2.32"
imageproc = { version = "0.27.0", default-features = false, features = ["text"] }
rust-i18n.workspace = true
sys-locale.workspace = true
clap = { workspace = true, features = [
"string",
"unicode",
"derive",
"wrap_help",
"env",
] }
serde = { workspace = true, features = ["derive"] }
serde_json.workspace = true
uuid = { workspace = true, features = [
"v4",
"fast-rng",
"macro-diagnostics",
"serde",
] }
chrono = { workspace = true, features = ["serde"] }
openidconnect = { version = "4.0", default-features = false, features = ["accept-rfc3339-timestamps", "reqwest"] }
# Reuse EasyTier's ring provider. reqwest 0.13's rustls feature adds aws-lc,
# making rustls backend selection ambiguous when core/web are built together.
# Initialize the process provider before constructing a reqwest client.
reqwest = { workspace = true, features = ["json", "rustls-no-provider"] }
subtle = "2.6"
mimalloc.workspace = true
[build-dependencies]
thunk-rs = { workspace = true, features = [
"win7",
] }
[features]
default = []
embed = ["dep:axum-embed"]
[package.metadata.cargo-machete]
ignored = [
# Windows-only build.rs setup calls thunk::thunk().
"thunk-rs",
]
[dev-dependencies]
tower = { version = "0.5", features = ["util"] }