- Add OTP token management (oncp/src/token.rs) * Time-limited tokens with expiry (default 3 minutes) * One-time use validation (token deleted after use) * Automatic cleanup of expired tokens * Cryptographically secure random generation (10 chars) * Token masking in logs (XX****XX format) - Add dynamic IPAM (oncp/src/network.rs) * NetworkConfig for 10.X.0.0/16 subnet management * IpamPool with sequential IP allocation * Master node octet validation (0-255, excluding reserved) * IP release mechanism for rollback scenarios - Update enrollment flow * EnrollmentRequest requires OTP token field * Silent drop (HTTP 444) for invalid tokens * IP allocation during node approval * CLI command: 'node token --expiry 3' * Master CLI --network-octet parameter - Security enhancements * Two-factor enrollment: token + admin approval * Token enumeration prevention (no error responses) * Automatic token cleanup every 60 seconds * PSK + assigned IP returned on approval Tests: All 16 tests passing (4 token, 5 network, 7 existing)
27 lines
634 B
TOML
27 lines
634 B
TOML
[package]
|
|
name = "oncp"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
|
|
[dependencies]
|
|
tokio.workspace = true
|
|
rusqlite.workspace = true
|
|
anyhow.workspace = true
|
|
thiserror.workspace = true
|
|
tracing.workspace = true
|
|
uuid.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
chrono.workspace = true
|
|
ostp = { path = "../ostp" }
|
|
axum = "0.7"
|
|
tower = "0.4"
|
|
tower-http = { version = "0.5", features = ["cors", "trace"] }
|
|
hyper = { version = "1.0", features = ["full"] }
|
|
base64 = "0.21"
|
|
qrcode = "0.14"
|
|
image = { version = "0.24", default-features = false, features = ["png"] }
|
|
hex = "0.4"
|
|
rand = "0.8"
|
|
parking_lot = "0.12.5"
|