hephaestus/Cargo.toml

65 lines
1.9 KiB
TOML
Raw Permalink Normal View History

[workspace]
resolver = "2"
members = [
"crates/heph-core",
"crates/hephd",
"crates/heph",
"crates/heph-tui",
"crates/heph-quickadd",
]
[workspace.package]
edition = "2021"
version = "0.0.0"
license = "LicenseRef-Proprietary"
publish = false
authors = ["Erich Blume <blume.erich@gmail.com>"]
rust-version = "1.89"
[workspace.dependencies]
rusqlite = { version = "0.40", features = ["bundled"] }
ulid = "1"
thiserror = "2"
anyhow = "1"
pulldown-cmark = { version = "0.13", default-features = false }
rrule = "0.14"
yrs = "0.27"
chrono = { version = "0.4", default-features = false, features = ["clock"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = [
"rt-multi-thread",
"net",
"io-util",
"macros",
"sync",
"time",
] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
clap = { version = "4", features = ["derive"] }
ratatui = "0.30"
axum = "0.8"
hephd: OIDC hub authentication — verification side (auth 10a) Authenticate op exchange at the network boundary (tech-spec §13). The hub now requires a valid OIDC bearer token on /sync/* and /rpc; local mode is unchanged (no auth). - heph-core: Store::authorize_owner_sub — single-tenant gate that claims the owner's oidc_sub on first sight, then authorizes only that sub (403 for any other identity). LocalStore impl over users.oidc_sub; RemoteStore stub. - hephd auth module: TokenVerifier trait (mockable seam) + OidcVerifier (jsonwebtoken, rust_crypto). Strict validation: RS256 pinned, exact iss + aud, exp/nbf, required sub; JWKS discovered + cached, refetched on unknown kid (rotation). Claims/AuthError. - Hub router takes Option<verifier>; an axum middleware on every route extracts the Bearer token, verifies it off the async worker, and runs the owner gate — 401 missing/invalid, 403 wrong identity, 503 IdP-unreachable. Open (no auth) when unconfigured, for local dev. - main: --oidc-issuer/--oidc-audience enable the hub verifier (server mode). - Security tests, all offline: stub-verifier middleware (missing/bad/valid + owner gate) and an adversarial battery driving OidcVerifier against an in-process mock IdP — rejects expired, wrong iss/aud, unknown kid, tampered signature, alg confusion (HS256/none), and missing sub. The RSA key + JWKS are generated at runtime (rsa/rand/base64 dev-deps) so no key is committed. - tech-spec: add an end-of-v1 dependency-refresh pass to the roadmap. 108 tests green; clippy -D warnings + fmt + prek clean. Next: client-side device-code login + keyring (10b). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 15:58:20 -07:00
jsonwebtoken = { version = "10", features = ["rust_crypto"] }
# keyring 4's `keyring` meta-crate compiles *every* platform credential backend
# for the target (on Linux: the zbus + libdbus secret-service stacks, keyutils,
# and a sqlite/zstd db-keystore — ~290 crates). We use exactly one backend per
# platform, so depend on keyring-core (the API) + a single store crate per OS.
keyring-core = "1"
apple-native-keyring-store = { version = "1", features = ["keychain"] }
# vendored: build libdbus from bundled source so the build needs no system
# libdbus-1-dev (the CI rust:1-bookworm image has none). crypto-rust: pure-Rust
# session crypto, no OpenSSL.
dbus-secret-service-keyring-store = { version = "1", features = [
"crypto-rust",
"vendored",
] }
ureq = { version = "3", features = ["json"] }
reqwest = { version = "0.13", default-features = false, features = [
"json",
"query",
] }
semver = "1"
[profile.release]
lto = "thin"