ips/pkg6depotd/Cargo.toml
Till Wegmueller 8f048f6b2a
Some checks are pending
Rust CI / Format (push) Waiting to run
Rust CI / Clippy (push) Waiting to run
Rust CI / Build (Linux) (push) Blocked by required conditions
Rust CI / Build (Illumos) (push) Blocked by required conditions
Rust CI / Test (push) Blocked by required conditions
Rust CI / End-to-End Tests (push) Blocked by required conditions
Rust CI / Documentation (push) Blocked by required conditions
feat: Add OIDC JWT authentication middleware for pkg6depotd
Implement Bearer token validation using jsonwebtoken with JWKS caching
and automatic key rotation handling. AuthState fetches keys from the
configured OIDC provider's jwks_uri at startup and refreshes on unknown
kid. Axum middleware (require_auth) protects write routes, injecting
AuthenticatedUser into request extensions. The auth_check admin endpoint
now performs real JWT validation when oauth2 is configured.

Includes architecture plan for the full publish API with RBAC at
docs/ai/plans/2026-04-09-publish-api-oidc.md.
2026-04-09 22:39:20 +02:00

71 lines
2.1 KiB
TOML

[package]
name = "pkg6depotd"
description.workspace = true
version.workspace = true
authors.workspace = true
edition.workspace = true
license-file.workspace = true
repository.workspace = true
readme.workspace = true
keywords.workspace = true
[dependencies]
# Async Runtime & Web Framework
tokio = { version = "1.47", features = ["full"] }
axum = { version = "0.8", features = ["macros"] }
hyper = { version = "1", features = ["full"] }
tower = { version = "0.5", features = ["util", "timeout", "limit", "load-shed"] }
tower-http = { version = "0.6", features = ["trace", "fs", "cors", "compression-full", "timeout", "request-id", "util"] }
rustls = "0.23"
tokio-rustls = "0.26"
axum-server = { version = "0.8", features = ["tls-rustls"] } # Simplifies TLS with Axum
socket2 = "0.6"
bytes = "1"
http-body-util = "0.1"
# CLI & Config
clap = { version = "4.5", features = ["derive", "env"] }
knuffel = "3.2.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
dirs = "6"
nix = { version = "0.30", features = ["signal", "process", "user", "fs"] }
sha1 = "0.10"
sha2 = "0.10"
rusqlite = { version = "0.31", default-features = false }
chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
flate2 = "1"
httpdate = "1"
urlencoding = "2"
# Authentication
jsonwebtoken = { version = "10", features = ["aws_lc_rs"] }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
# Telemetry
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
opentelemetry = "0.31"
opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"] }
opentelemetry-otlp = { version = "0.31", features = ["grpc-tonic"] } # Check compatibility with otel 0.22
tracing-opentelemetry = "0.32"
# Error Handling
thiserror = "2"
miette = { version = "7.6.0", features = ["fancy"] }
# Templating & Web UI
askama = "0.15"
# Project Dependencies
libips = { path = "../libips" }
[dev-dependencies]
reqwest = { version = "0.12", features = ["blocking", "json"] }
assert_cmd = "2"
predicates = "3"
tempfile = "3"
[features]
default = ["bundled-sqlite"]
bundled-sqlite = ["rusqlite/bundled"]