Cargo.toml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. [package]
  2. name = "d-oauth"
  3. version = "0.1.0"
  4. edition = "2024"
  5. description = "OAuth 2.1-only authorization server"
  6. license = "MIT OR Apache-2.0"
  7. [lib]
  8. name = "d_oauth"
  9. path = "src/lib.rs"
  10. [[bin]]
  11. name = "d-oauth-server"
  12. path = "src/main.rs"
  13. [dependencies]
  14. argon2 = "0.6.0"
  15. askama = "0.16.1"
  16. axum = "0.8"
  17. axum-extra = { version = "0.12.6", features = ["cookie"] }
  18. backon = "1.6.0"
  19. base32 = "0.5.1"
  20. base64 = "0.23.1"
  21. base64ct = "1.8.3"
  22. clap = { version = "4.6.7", features = ["derive"] }
  23. config = "0.15.27"
  24. hmac = "0.13.0"
  25. hyper = "1.11.1"
  26. hyper-util = { version = "0.1.21", features = ["server-auto", "tokio", "service"] }
  27. jsonwebtoken = { version = "11.1.0", features = ["rust_crypto"] }
  28. password-hash = "0.6.1"
  29. # TOTP enrollment QR: SVG-only (no `image` codecs), embedded inline in the
  30. # server-rendered setup page under a `script-src 'none'` policy.
  31. qrcode = { version = "0.14.1", default-features = false, features = ["svg"] }
  32. rand = { version = "0.10.3", features = ["std_rng"] }
  33. redis = { version = "1.7.1", features = ["tokio-comp", "connection-manager", "sentinel", "cluster-async", "tls-rustls", "tokio-rustls-comp", "tls-rustls-webpki-roots"] }
  34. # Task 22: the JAR validator fetches pre-registered `request_uri` objects
  35. # through an SSRF-guarded client (https-only, no redirects, size/timeout
  36. # caps). Pinned spec mirrors the existing dev entry; the dev copy is kept
  37. # so test-only users of reqwest keep compiling.
  38. reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-webpki-roots", "json"] }
  39. ring = "0.17"
  40. rustls = { version = "0.23.45", default-features = false, features = ["ring", "std", "tls12"] }
  41. rustls-pki-types = "1.15.1"
  42. secrecy = "0.10.3"
  43. serde = { version = "1.0.229", features = ["derive"] }
  44. serde_json = "1.0.151"
  45. sha2 = "0.11.0"
  46. sqlx = { version = "0.9", features = ["runtime-tokio", "postgres", "migrate", "macros", "uuid", "time", "tls-rustls-ring-webpki"] }
  47. subtle = "2.6.1"
  48. thiserror = "2.0.21"
  49. time = "0.3.55"
  50. tokio = { version = "1.53.2", features = ["full", "macros", "rt-multi-thread", "net", "signal", "time"] }
  51. tokio-rustls = { version = "0.26.6", default-features = false, features = ["ring", "tls12", "logging"] }
  52. totp-rs = "6.0.0"
  53. tower = { version = "0.5.3", features = ["util", "timeout", "limit", "load-shed"] }
  54. tower-http = { version = "0.7.1", features = ["cors", "limit"] }
  55. tracing = "0.1.44"
  56. tracing-subscriber = { version = "0.3.23", features = ["json", "env-filter"] }
  57. uuid = { version = "1.27.0", features = ["v4", "v7"] }
  58. validator = "0.21.0"
  59. x509-parser = "0.18.1"
  60. zeroize = "1.9.0"
  61. [dev-dependencies]
  62. http-body-util = "0.1.5"
  63. insta = "1.49.0"
  64. oauth2 = { version = "5.0.0", default-features = false, features = ["reqwest", "rustls-tls"] }
  65. proptest = "1.11.0"
  66. redis-test = "1.0.4"
  67. testcontainers = "0.27"
  68. testcontainers-modules = "0.15.0"
  69. tower = { version = "0.5.3", features = ["util"] }
  70. [lints.rust]
  71. unsafe_code = "forbid"
  72. [lints.clippy]
  73. unwrap_used = "deny"
  74. expect_used = "deny"
  75. panic = "deny"
  76. [profile.release]
  77. opt-level = 3
  78. lto = "thin"
  79. codegen-units = 1
  80. strip = "symbols"