mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-10-15 17:16:14 -08:00
* fix(config): preserve empty manual route mode in API conversion Treat present TOML routes as manual mode even when the list is empty. Both Core readback and Web normalization must distinguish routes=[] from automatic discovery; otherwise Web can skip a required overwrite and Core can report a different mode from its running configuration. Cover API/TOML round trips and receiver reconcile mode transitions. Verify default-feature tests, clippy, formatting and real system routes in three isolated Linux network namespaces. * fix(config): patch manual route mode and verify legacy readback Add an explicit manual-route mode to route patches and advertise typed readback support through GetConfig. Apply the mode and route edits in the existing route transaction without restarting the instance; keep released callers that omit the new field on their existing route semantics. Web gates route patches on the observed capability. For old clients with ambiguous empty routes, recover the actual mode from GetConfig TOML or instance-scoped ShowNodeInfo before acknowledging application. Supporting clients use typed readback directly. Keep capability evidence in the existing session cache and preserve its invalidation rules. Cover mode transitions, persistence failure, stable peer identity, legacy readback, compact clients, failed observations and cache capability gates. Document the runtime contract and compatibility boundary. * refactor(web): advertise route patch support in heartbeats Declare manual-route patch and typed readback support on the WebClient heartbeat alongside existing client capabilities. Select route updates and legacy readback from the current authenticated Session heartbeat, including when reconciliation reuses an observed configuration. Remove the unreleased GetConfig capability field and per-instance capability wrapper. Keep only observed configuration in the existing cache, and retain strict application confirmation after full Run. Cover the client declaration, legacy default and capability changes against the same cached configuration. Update the runtime contract. --------- Co-authored-by: Codex <codex@users.noreply.github.com>
108 lines
3.2 KiB
TOML
108 lines
3.2 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]
|
|
optionize.workspace = true
|
|
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
|
|
toml.workspace = true
|
|
uuid = { workspace = true, features = [
|
|
"v4",
|
|
"fast-rng",
|
|
"macro-diagnostics",
|
|
"serde",
|
|
] }
|
|
|
|
chrono = { workspace = true, features = ["serde"] }
|
|
# Keep the bundled reqwest 0.12 client disabled; use the official 0.13 adapter.
|
|
openidconnect = { version = "4.0", default-features = false, features = ["accept-rfc3339-timestamps"] }
|
|
# Pin the adapter until its API stabilizes.
|
|
oauth2-reqwest = "=0.1.0-alpha.3"
|
|
# 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"] }
|