新增 dashmap 依赖。create_backup 探测 pg_dump 优先(含 schema,签名头前置)、
不可用回退纯 SQL(COPY TO STDOUT 逐表,按表精确进度)。restore_backup 校验
签名头(仅本系统备份)+ 路径穿越防护 + 二次确认,探测 psql 执行。
list_backups/delete_backup 管理备份,GET /api/database/backups/{name} 下载
(admin 鉴权 + 白名单)。tasks.rs DashMap 进度表(1h 惰性 GC),前端每 1.5s
轮询 get_task_progress 显示进度条/stage,完成后刷新列表。
backups/ gitignored 不直接暴露。AGENTS.md 同步新增 CodeMirror 子项目与
数据库管理章节。
100 lines
3.8 KiB
TOML
100 lines
3.8 KiB
TOML
[package]
|
||
name = "yggdrasil"
|
||
version = "0.3.0"
|
||
edition = "2021"
|
||
|
||
[dependencies]
|
||
dioxus = { version = "0.7.9", features = ["fullstack", "router"] }
|
||
serde = { version = "1.0", features = ["derive"] }
|
||
tokio = { version = "1.52", features = ["rt-multi-thread", "macros", "fs", "time", "sync"], optional = true }
|
||
tokio-postgres = { version = "0.7", features = ["with-chrono-0_4"], optional = true }
|
||
deadpool-postgres = { version = "0.14", optional = true }
|
||
argon2 = { version = "0.5", optional = true }
|
||
uuid = { version = "1", features = ["v4"], optional = true }
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
regex = { version = "1.12", optional = true }
|
||
pulldown-cmark = { version = "0.13", optional = true }
|
||
dotenvy = { version = "0.15", optional = true }
|
||
tracing = { version = "0.1", optional = true, features = ["release_max_level_info"] }
|
||
tracing-subscriber = { version = "0.3", optional = true }
|
||
|
||
rand = { version = "0.8", features = ["getrandom"], optional = true }
|
||
http = { version = "1", optional = true }
|
||
axum = { version = "0.8", optional = true, features = ["multipart"] }
|
||
tower-http = { version = "0.6", optional = true, features = ["compression-full", "timeout", "trace"] }
|
||
|
||
serde_json = "1.0"
|
||
sha2 = { version = "0.10", optional = true }
|
||
hex = { version = "0.4", optional = true }
|
||
lol_html = { version = "2", optional = true }
|
||
syntect = { version = "5", default-features = false, features = ["default-syntaxes", "default-themes", "default-fancy", "html", "parsing", "dump-load", "yaml-load"], optional = true }
|
||
# NOTE: WebP decoder is intentionally excluded from the image crate.
|
||
# We use zenwebp for both encoding and decoding to ensure consistency.
|
||
# Do NOT add "webp" to the features list without updating src/webp.rs.
|
||
image = { version = "0.25", optional = true, default-features = false, features = ["jpeg", "png", "gif"] }
|
||
zenwebp = { version = "0.3", optional = true }
|
||
moka = { version = "0.12", features = ["future", "sync"], optional = true }
|
||
governor = { version = "0.8", optional = true }
|
||
sysinfo = { version = "0.34", optional = true }
|
||
sqlparser = { version = "0.45", optional = true }
|
||
dashmap = { version = "6.2", optional = true }
|
||
md-5 = { version = "0.10", optional = true }
|
||
futures = { version = "0.3", optional = true }
|
||
bytes = { version = "1", optional = true }
|
||
|
||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||
web-sys = { version = "0.3", features = ["Document", "Window", "Storage", "Element", "HtmlElement", "DomTokenList", "MediaQueryList", "HtmlImageElement", "MouseEvent", "KeyboardEvent", "Node", "EventTarget", "Navigator", "File", "FileList", "FormData", "Request", "RequestInit", "Response", "Headers", "ClipboardEvent", "DataTransfer", "HtmlInputElement"] }
|
||
wasm-bindgen = "0.2"
|
||
wasm-bindgen-futures = "0.4"
|
||
js-sys = "0.3"
|
||
|
||
[dev-dependencies]
|
||
tokio = { version = "1.52", features = ["rt-multi-thread", "macros", "fs", "time", "sync"] }
|
||
serial_test = "3"
|
||
|
||
[profile.release]
|
||
debug = false
|
||
opt-level = 3
|
||
lto = "thin"
|
||
codegen-units = 1
|
||
strip = "symbols"
|
||
# panic 直接终止:WASM 去掉 unwind 元数据以减小体积;server 端错误处理走
|
||
# Result + ?(见 src/api/error.rs),不依赖 panic unwind,进程级崩溃由
|
||
# systemd/k8s 拉起。这是 Dioxus 官方 optimizing 指南推荐的 WASM 瘦身项。
|
||
panic = "abort"
|
||
|
||
[features]
|
||
default = ["web", "server"]
|
||
web = ["dioxus/web"]
|
||
server = [
|
||
"dioxus/server",
|
||
"dep:tokio",
|
||
"dep:tokio-postgres",
|
||
"dep:deadpool-postgres",
|
||
"dep:argon2",
|
||
"dep:uuid",
|
||
"dep:regex",
|
||
"dep:pulldown-cmark",
|
||
"dep:rand",
|
||
"dep:http",
|
||
"dep:sha2",
|
||
"dep:hex",
|
||
"dep:dotenvy",
|
||
"dep:tracing",
|
||
"dep:tracing-subscriber",
|
||
"dep:lol_html",
|
||
"dep:syntect",
|
||
"dep:axum",
|
||
"dep:tower-http",
|
||
"dep:image",
|
||
"dep:zenwebp",
|
||
"dep:moka",
|
||
"dep:governor",
|
||
"dep:sysinfo",
|
||
"dep:sqlparser",
|
||
"dep:dashmap",
|
||
"dep:md-5",
|
||
"dep:futures",
|
||
"dep:bytes",
|
||
]
|