bindcar 0.7.0

HTTP REST API for managing BIND9 zones via rndc
[package]
name = "bindcar"
version = "0.7.0"
edition = "2021"
rust-version = "1.88"
authors = ["Erick Bourgeois <firestoned@firestoned.io>"]
license = "MIT"
description = "HTTP REST API for managing BIND9 zones via rndc"
repository = "https://github.com/firestoned/bindcar"
keywords = ["dns", "bind9", "rndc", "api", "kubernetes"]
categories = ["api-bindings", "network-programming", "web-programming::http-server"]
readme = "README.md"

# Library configuration
[lib]
name = "bindcar"
path = "src/lib.rs"

# Binary configuration
[[bin]]
name = "bindcar"
path = "src/main.rs"

[dependencies]
# HTTP server framework
axum = "0.8"
tower = "0.5"
tower-http = { version = "0.7", features = ["trace"] }

# Async runtime
tokio = { version = "1", features = ["full"] }

# Serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

# Date/Time
chrono = "0.4"

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }

# Error handling
anyhow = "1.0"
thiserror = "2.0"

# OpenAPI / Swagger
utoipa = { version = "5", features = ["axum_extras"] }
utoipa-swagger-ui = { version = "9", features = ["axum"] }

# Metrics
prometheus = "0.14"
lazy_static = "1.5"

# Rate limiting
tower_governor = "0.8"

# RNDC client
rndc = "0.1.5"

# CLI argument parsing
clap = { version = "4", features = ["derive"] }

# Parsing
nom = "8"

# Constant-time comparison for shared-secret API token (avoids timing side-channels)
subtle = "2.6"

# Secure temp files (0600) for passing the TSIG key to nsupdate via -k instead of argv
tempfile = "3"

# Kubernetes client (optional, for token validation)
kube = { version = "4.0", features = ["client", "rustls-tls"], optional = true }
k8s-openapi = { version = "0.28", default-features = false, optional = true }
sha2 = "0.10"

[features]
default = []
k8s-token-review = ["kube", "k8s-openapi"]

[dev-dependencies]
# Testing
serde_json = "1.0"
tower = { version = "0.5", features = ["util"] }
serial_test = "3.4"
tempfile = "3.27"

# Enable k8s-openapi version for tests and examples
k8s-openapi = { version = "0.28", features = ["v1_32"] }

[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true