Compare commits
24 Commits
20260223
...
renovate/t
| Author | SHA1 | Date | |
|---|---|---|---|
| 54320f476b | |||
| e83f12ebfb | |||
| fa275de29a | |||
| dfa3e64b2a | |||
| 67fc5224a1 | |||
| 7286333ce3 | |||
| 2a5814e51f | |||
| 366dc92c7f | |||
| 41ab93a760 | |||
| 6ec96d15a9 | |||
| 8e82497a6f | |||
| 111ef53052 | |||
| 6ef2efda7e | |||
| 4c8c50660c | |||
| 0482e1f0cc | |||
| 6fcfacfab2 | |||
| ddaf74739d | |||
| c538f01148 | |||
| 1c2cd39305 | |||
| 316e2bfaa5 | |||
| 1a92085d70 | |||
| 2268e7cbff | |||
| 4801ed7cf9 | |||
|
|
7391a4f488 |
163
Cargo.lock
generated
163
Cargo.lock
generated
@@ -75,7 +75,7 @@ dependencies = [
|
|||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"rand 0.9.2",
|
"rand 0.9.2",
|
||||||
"sha1",
|
"sha1 0.10.6",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
@@ -111,12 +111,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "actix-remote-ip"
|
name = "actix-remote-ip"
|
||||||
version = "0.1.0"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7629b357d4705cf3f1e31f989f48ecd56027112f7d52dcf06dd96ee197065f8e"
|
checksum = "0a9469cdaaafa2e5ade253b9a03b4913d4071a2fc937b747e712a4c9f4b84395"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-web",
|
"actix-web",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
"ipnet",
|
||||||
"log",
|
"log",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -363,9 +364,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstream"
|
name = "anstream"
|
||||||
version = "0.6.21"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
|
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"anstyle-parse",
|
"anstyle-parse",
|
||||||
@@ -384,9 +385,9 @@ checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle-parse"
|
name = "anstyle-parse"
|
||||||
version = "0.2.7"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
|
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"utf8parse",
|
"utf8parse",
|
||||||
]
|
]
|
||||||
@@ -446,9 +447,9 @@ checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "askama"
|
name = "askama"
|
||||||
version = "0.15.4"
|
version = "0.15.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08e1676b346cadfec169374f949d7490fd80a24193d37d2afce0c047cf695e57"
|
checksum = "9b8246bcbf8eb97abef10c2d92166449680d41d55c0fc6978a91dec2e3619608"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama_macros",
|
"askama_macros",
|
||||||
"itoa",
|
"itoa",
|
||||||
@@ -459,9 +460,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "askama_derive"
|
name = "askama_derive"
|
||||||
version = "0.15.4"
|
version = "0.15.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7661ff56517787343f376f75db037426facd7c8d3049cef8911f1e75016f3a37"
|
checksum = "2f9670bc84a28bb3da91821ef74226949ab63f1265aff7c751634f1dd0e6f97c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama_parser",
|
"askama_parser",
|
||||||
"basic-toml",
|
"basic-toml",
|
||||||
@@ -476,18 +477,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "askama_macros"
|
name = "askama_macros"
|
||||||
version = "0.15.4"
|
version = "0.15.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "713ee4dbfd1eb719c2dab859465b01fa1d21cb566684614a713a6b7a99a4e47b"
|
checksum = "f0756b45480437dded0565dfc568af62ccce146fb6cfe902e808ba86e445f44f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama_derive",
|
"askama_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "askama_parser"
|
name = "askama_parser"
|
||||||
version = "0.15.4"
|
version = "0.15.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1d62d674238a526418b30c0def480d5beadb9d8964e7f38d635b03bf639c704c"
|
checksum = "5d0af3691ba3af77949c0b5a3925444b85cb58a0184cc7fec16c68ba2e7be868"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -635,7 +636,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_yml",
|
"serde_yml",
|
||||||
"sha2 0.11.0-rc.5",
|
"sha2 0.11.0",
|
||||||
"totp_rfc6238",
|
"totp_rfc6238",
|
||||||
"url",
|
"url",
|
||||||
"urlencoding",
|
"urlencoding",
|
||||||
@@ -654,13 +655,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bcrypt"
|
name = "bcrypt"
|
||||||
version = "0.18.0"
|
version = "0.19.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9a0f5948f30df5f43ac29d310b7476793be97c50787e6ef4a63d960a0d0be827"
|
checksum = "523ab528ce3a7ada6597f8ccf5bd8d85ebe26d5edf311cad4d1d3cfb2d357ac6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"blowfish",
|
"blowfish",
|
||||||
"getrandom 0.3.4",
|
"getrandom 0.4.1",
|
||||||
"subtle",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
@@ -699,11 +700,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "block-buffer"
|
name = "block-buffer"
|
||||||
version = "0.11.0"
|
version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f"
|
checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hybrid-array",
|
"hybrid-array",
|
||||||
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -843,9 +845,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chrono"
|
name = "chrono"
|
||||||
version = "0.4.43"
|
version = "0.4.44"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118"
|
checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"iana-time-zone",
|
"iana-time-zone",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@@ -876,9 +878,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.60"
|
version = "4.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a"
|
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -886,9 +888,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.60"
|
version = "4.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876"
|
checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -898,9 +900,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "4.5.55"
|
version = "4.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
|
checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -914,6 +916,12 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
|
checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cmov"
|
||||||
|
version = "0.5.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "coarsetime"
|
name = "coarsetime"
|
||||||
version = "0.1.37"
|
version = "0.1.37"
|
||||||
@@ -981,7 +989,7 @@ dependencies = [
|
|||||||
"aes-gcm",
|
"aes-gcm",
|
||||||
"base64 0.20.0",
|
"base64 0.20.0",
|
||||||
"hkdf",
|
"hkdf",
|
||||||
"hmac",
|
"hmac 0.12.1",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"sha2 0.10.9",
|
"sha2 0.10.9",
|
||||||
@@ -1117,6 +1125,15 @@ dependencies = [
|
|||||||
"cipher 0.4.4",
|
"cipher 0.4.4",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ctutils"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e"
|
||||||
|
dependencies = [
|
||||||
|
"cmov",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "data-encoding"
|
name = "data-encoding"
|
||||||
version = "2.10.0"
|
version = "2.10.0"
|
||||||
@@ -1194,13 +1211,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "digest"
|
name = "digest"
|
||||||
version = "0.11.0"
|
version = "0.11.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f8bf3682cdec91817be507e4aa104314898b95b84d74f3d43882210101a545b6"
|
checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"block-buffer 0.11.0",
|
"block-buffer 0.12.0",
|
||||||
"const-oid 0.10.2",
|
"const-oid 0.10.2",
|
||||||
"crypto-common 0.2.0",
|
"crypto-common 0.2.0",
|
||||||
|
"ctutils",
|
||||||
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1280,9 +1299,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
version = "0.11.9"
|
version = "0.11.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d"
|
checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -1600,7 +1619,7 @@ version = "0.12.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
|
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hmac",
|
"hmac 0.12.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1612,6 +1631,15 @@ dependencies = [
|
|||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hmac"
|
||||||
|
version = "0.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
|
||||||
|
dependencies = [
|
||||||
|
"digest 0.11.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hmac-sha1-compact"
|
name = "hmac-sha1-compact"
|
||||||
version = "1.1.7"
|
version = "1.1.7"
|
||||||
@@ -1991,9 +2019,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ipnet"
|
name = "ipnet"
|
||||||
version = "2.11.0"
|
version = "2.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
|
checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iri-string"
|
name = "iri-string"
|
||||||
@@ -2019,9 +2047,9 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jiff"
|
name = "jiff"
|
||||||
version = "0.2.20"
|
version = "0.2.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543"
|
checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jiff-static",
|
"jiff-static",
|
||||||
"log",
|
"log",
|
||||||
@@ -2032,9 +2060,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jiff-static"
|
name = "jiff-static"
|
||||||
version = "0.2.20"
|
version = "0.2.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5"
|
checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2231,9 +2259,9 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mailchecker"
|
name = "mailchecker"
|
||||||
version = "6.0.19"
|
version = "6.0.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "abad4bc63045f04cfc55aa4c55d4ec0a890c377ce56463bfc2adc2bc059c4b84"
|
checksum = "e32897aec7dd28fa9a39f02a0a08e434f50e2761214e40cec745eb7c411cdb48"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fast_chemail",
|
"fast_chemail",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
@@ -2726,9 +2754,9 @@ checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.44"
|
version = "1.0.45"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
|
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
@@ -2947,7 +2975,7 @@ version = "0.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
|
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hmac",
|
"hmac 0.12.1",
|
||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3247,6 +3275,17 @@ dependencies = [
|
|||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha1"
|
||||||
|
version = "0.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"cpufeatures 0.3.0",
|
||||||
|
"digest 0.11.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha2"
|
name = "sha2"
|
||||||
version = "0.10.9"
|
version = "0.10.9"
|
||||||
@@ -3260,13 +3299,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha2"
|
name = "sha2"
|
||||||
version = "0.11.0-rc.5"
|
version = "0.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7c5f3b1e2dc8aad28310d8410bd4d7e180eca65fca176c52ab00d364475d0024"
|
checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cpufeatures 0.2.17",
|
"cpufeatures 0.3.0",
|
||||||
"digest 0.11.0",
|
"digest 0.11.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3390,9 +3429,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.116"
|
version = "2.0.117"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb"
|
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -3600,13 +3639,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "totp_rfc6238"
|
name = "totp_rfc6238"
|
||||||
version = "0.6.1"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1329a48ffb99a7257f792c0db25d989248c552dc15073dd24ab70752f74c5b1f"
|
checksum = "9323068d96a8e2ad76206dcae6986d658e08fb1d6194c341352b575f7789d606"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hmac",
|
"hmac 0.13.0",
|
||||||
"sha1",
|
"sha1 0.11.0",
|
||||||
"sha2 0.10.9",
|
"sha2 0.11.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3777,9 +3816,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "1.21.0"
|
version = "1.23.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb"
|
checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom 0.4.1",
|
"getrandom 0.4.1",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@@ -4240,9 +4279,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.7.14"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
|
checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|||||||
20
Cargo.toml
20
Cargo.toml
@@ -10,33 +10,33 @@ actix = "0.13.5"
|
|||||||
actix-identity = "0.9.0"
|
actix-identity = "0.9.0"
|
||||||
actix-web = "4.13.0"
|
actix-web = "4.13.0"
|
||||||
actix-session = { version = "0.11.0", features = ["cookie-session", "redis-session"] }
|
actix-session = { version = "0.11.0", features = ["cookie-session", "redis-session"] }
|
||||||
actix-remote-ip = "0.1.0"
|
actix-remote-ip = "1.0.0"
|
||||||
clap = { version = "4.5.60", features = ["derive", "env"] }
|
clap = { version = "4.6.0", features = ["derive", "env"] }
|
||||||
include_dir = "0.7.4"
|
include_dir = "0.7.4"
|
||||||
log = "0.4.29"
|
log = "0.4.29"
|
||||||
serde_json = "1.0.149"
|
serde_json = "1.0.149"
|
||||||
serde_yml = "0.0.12"
|
serde_yml = "0.0.12"
|
||||||
env_logger = "0.11.9"
|
env_logger = "0.11.10"
|
||||||
serde = { version = "1.0.228", features = ["derive"] }
|
serde = { version = "1.0.228", features = ["derive"] }
|
||||||
bcrypt = "0.18.0"
|
bcrypt = "0.19.0"
|
||||||
uuid = { version = "1.21.0", features = ["v4"] }
|
uuid = { version = "1.23.0", features = ["v4"] }
|
||||||
mime_guess = "2.0.5"
|
mime_guess = "2.0.5"
|
||||||
askama = "0.15.4"
|
askama = "0.15.6"
|
||||||
urlencoding = "2.1.3"
|
urlencoding = "2.1.3"
|
||||||
rand = "0.10.0"
|
rand = "0.10.0"
|
||||||
base64 = "0.22.1"
|
base64 = "0.22.1"
|
||||||
jwt-simple = { version = "0.12.14", default-features = false, features = ["pure-rust"] }
|
jwt-simple = { version = "0.12.14", default-features = false, features = ["pure-rust"] }
|
||||||
sha2 = "0.11.0-rc.5"
|
sha2 = "0.11.0"
|
||||||
lazy-regex = "3.6.0"
|
lazy-regex = "3.6.0"
|
||||||
totp_rfc6238 = "0.6.1"
|
totp_rfc6238 = "0.7.0"
|
||||||
base32 = "0.5.1"
|
base32 = "0.5.1"
|
||||||
qrcode-generator = "5.0.0"
|
qrcode-generator = "5.0.0"
|
||||||
webauthn-rs = { version = "0.5.4", features = ["danger-allow-state-serialisation"] }
|
webauthn-rs = { version = "0.5.4", features = ["danger-allow-state-serialisation"] }
|
||||||
url = "2.5.8"
|
url = "2.5.8"
|
||||||
light-openid = { version = "1.1.0", features = ["crypto-wrapper"] }
|
light-openid = { version = "1.1.0", features = ["crypto-wrapper"] }
|
||||||
rkyv = "0.8.15"
|
rkyv = "0.8.15"
|
||||||
chrono = "0.4.43"
|
chrono = "0.4.44"
|
||||||
mailchecker = "6.0.19"
|
mailchecker = "6.0.20"
|
||||||
httpdate = "1.0.3"
|
httpdate = "1.0.3"
|
||||||
build-time = "0.1.3"
|
build-time = "0.1.3"
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
@@ -39,6 +39,11 @@ You can configure a list of clients (Relying Parties) in a `clients.yaml` file w
|
|||||||
claims_id_token:
|
claims_id_token:
|
||||||
groups: ["group_{user}"]
|
groups: ["group_{user}"]
|
||||||
service: "auth"
|
service: "auth"
|
||||||
|
# Optional, claims to be added to the access token payload
|
||||||
|
# The placeholders of `claims_id_token` can also be used here
|
||||||
|
claims_access_token:
|
||||||
|
groups: ["group_{user}"]
|
||||||
|
service: "auth"
|
||||||
# Optional, claims to be added to the user info endpoint response
|
# Optional, claims to be added to the user info endpoint response
|
||||||
# The placeholders of `claims_id_token` can also be used here
|
# The placeholders of `claims_id_token` can also be used here
|
||||||
claims_user_info:
|
claims_user_info:
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ use actix::{Actor, AsyncContext, Context, Handler};
|
|||||||
use crate::constants::*;
|
use crate::constants::*;
|
||||||
use crate::data::access_token::AccessToken;
|
use crate::data::access_token::AccessToken;
|
||||||
use crate::data::app_config::AppConfig;
|
use crate::data::app_config::AppConfig;
|
||||||
use crate::data::client::ClientID;
|
use crate::data::client::{Client, ClientID};
|
||||||
use crate::data::code_challenge::CodeChallenge;
|
use crate::data::code_challenge::CodeChallenge;
|
||||||
use crate::data::jwt_signer::JWTSigner;
|
use crate::data::jwt_signer::JWTSigner;
|
||||||
use crate::data::user::UserID;
|
use crate::data::user::{User, UserID};
|
||||||
use crate::utils::err::Res;
|
use crate::utils::err::Res;
|
||||||
use crate::utils::string_utils::rand_str;
|
use crate::utils::string_utils::rand_str;
|
||||||
use crate::utils::time_utils::time;
|
use crate::utils::time_utils::time;
|
||||||
@@ -50,10 +50,13 @@ impl Session {
|
|||||||
&mut self,
|
&mut self,
|
||||||
app_config: &AppConfig,
|
app_config: &AppConfig,
|
||||||
jwt_signer: &JWTSigner,
|
jwt_signer: &JWTSigner,
|
||||||
|
user: &User,
|
||||||
|
client: &Client,
|
||||||
) -> Res {
|
) -> Res {
|
||||||
let access_token = AccessToken {
|
let access_token = AccessToken {
|
||||||
issuer: app_config.website_origin.to_string(),
|
issuer: app_config.website_origin.to_string(),
|
||||||
subject_identifier: self.user.clone().0,
|
user,
|
||||||
|
client,
|
||||||
issued_at: time(),
|
issued_at: time(),
|
||||||
exp_time: time() + OPEN_ID_ACCESS_TOKEN_TIMEOUT,
|
exp_time: time() + OPEN_ID_ACCESS_TOKEN_TIMEOUT,
|
||||||
rand_val: rand_str(OPEN_ID_ACCESS_TOKEN_LEN),
|
rand_val: rand_str(OPEN_ID_ACCESS_TOKEN_LEN),
|
||||||
|
|||||||
@@ -501,13 +501,7 @@ pub async fn token(
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
session.regenerate_access_and_refresh_tokens(AppConfig::get(), &jwt_signer)?;
|
// Get user information
|
||||||
|
|
||||||
sessions
|
|
||||||
.send(openid_sessions_actor::UpdateSession(session.clone()))
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let user: Option<User> = users
|
let user: Option<User> = users
|
||||||
.send(users_actor::GetUserRequest(session.user.clone()))
|
.send(users_actor::GetUserRequest(session.user.clone()))
|
||||||
.await
|
.await
|
||||||
@@ -518,6 +512,18 @@ pub async fn token(
|
|||||||
Some(u) => u,
|
Some(u) => u,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Refresh access and refresh tokens
|
||||||
|
session.regenerate_access_and_refresh_tokens(
|
||||||
|
AppConfig::get(),
|
||||||
|
&jwt_signer,
|
||||||
|
&user,
|
||||||
|
&client,
|
||||||
|
)?;
|
||||||
|
sessions
|
||||||
|
.send(openid_sessions_actor::UpdateSession(session.clone()))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
// Generate id token
|
// Generate id token
|
||||||
let id_token = IdToken {
|
let id_token = IdToken {
|
||||||
issuer: AppConfig::get().website_origin.to_string(),
|
issuer: AppConfig::get().website_origin.to_string(),
|
||||||
@@ -574,8 +580,24 @@ pub async fn token(
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
session.regenerate_access_and_refresh_tokens(AppConfig::get(), &jwt_signer)?;
|
// Get user information
|
||||||
|
let user: Option<User> = users
|
||||||
|
.send(users_actor::GetUserRequest(session.user.clone()))
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.0;
|
||||||
|
let user = match user {
|
||||||
|
None => return Ok(error_response(&query, "invalid_request", "User not found!")),
|
||||||
|
Some(u) => u,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Regenerate user session
|
||||||
|
session.regenerate_access_and_refresh_tokens(
|
||||||
|
AppConfig::get(),
|
||||||
|
&jwt_signer,
|
||||||
|
&user,
|
||||||
|
&client,
|
||||||
|
)?;
|
||||||
sessions
|
sessions
|
||||||
.send(openid_sessions_actor::UpdateSession(session.clone()))
|
.send(openid_sessions_actor::UpdateSession(session.clone()))
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
use crate::data::client::{AdditionalClaims, Client};
|
||||||
|
use crate::data::user::User;
|
||||||
use jwt_simple::claims::JWTClaims;
|
use jwt_simple::claims::JWTClaims;
|
||||||
use jwt_simple::prelude::Duration;
|
use jwt_simple::prelude::Duration;
|
||||||
|
|
||||||
pub struct AccessToken {
|
pub struct AccessToken<'a> {
|
||||||
pub issuer: String,
|
pub issuer: String,
|
||||||
pub subject_identifier: String,
|
pub user: &'a User,
|
||||||
|
pub client: &'a Client,
|
||||||
pub issued_at: u64,
|
pub issued_at: u64,
|
||||||
pub exp_time: u64,
|
pub exp_time: u64,
|
||||||
pub rand_val: String,
|
pub rand_val: String,
|
||||||
@@ -13,21 +16,26 @@ pub struct AccessToken {
|
|||||||
#[derive(serde::Serialize, serde::Deserialize)]
|
#[derive(serde::Serialize, serde::Deserialize)]
|
||||||
pub struct CustomAccessTokenClaims {
|
pub struct CustomAccessTokenClaims {
|
||||||
rand_val: String,
|
rand_val: String,
|
||||||
|
/// Additional claims
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
#[serde(flatten)]
|
||||||
|
pub additional_claims: Option<AdditionalClaims>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AccessToken {
|
impl<'a> AccessToken<'a> {
|
||||||
pub fn to_jwt_claims(self) -> JWTClaims<CustomAccessTokenClaims> {
|
pub fn to_jwt_claims(self) -> JWTClaims<CustomAccessTokenClaims> {
|
||||||
JWTClaims {
|
JWTClaims {
|
||||||
issued_at: Some(Duration::from_secs(self.issued_at)),
|
issued_at: Some(Duration::from_secs(self.issued_at)),
|
||||||
expires_at: Some(Duration::from_secs(self.exp_time)),
|
expires_at: Some(Duration::from_secs(self.exp_time)),
|
||||||
invalid_before: None,
|
invalid_before: None,
|
||||||
issuer: Some(self.issuer),
|
issuer: Some(self.issuer),
|
||||||
subject: Some(self.subject_identifier),
|
subject: Some(self.user.uid.0.to_string()),
|
||||||
audiences: None,
|
audiences: None,
|
||||||
jwt_id: None,
|
jwt_id: None,
|
||||||
nonce: self.nonce,
|
nonce: self.nonce,
|
||||||
custom: CustomAccessTokenClaims {
|
custom: CustomAccessTokenClaims {
|
||||||
rand_val: self.rand_val,
|
rand_val: self.rand_val,
|
||||||
|
additional_claims: self.client.claims_access_token(self.user),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ pub struct Client {
|
|||||||
/// Additional claims to return with the id token
|
/// Additional claims to return with the id token
|
||||||
claims_id_token: Option<AdditionalClaims>,
|
claims_id_token: Option<AdditionalClaims>,
|
||||||
|
|
||||||
|
/// Additional claims to return with the access token
|
||||||
|
claims_access_token: Option<AdditionalClaims>,
|
||||||
|
|
||||||
/// Additional claims to return through the user info endpoint
|
/// Additional claims to return through the user info endpoint
|
||||||
claims_user_info: Option<AdditionalClaims>,
|
claims_user_info: Option<AdditionalClaims>,
|
||||||
}
|
}
|
||||||
@@ -117,6 +120,11 @@ impl Client {
|
|||||||
self.process_additional_claims(user, &self.claims_id_token)
|
self.process_additional_claims(user, &self.claims_id_token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get additional claims for access_token for a successful authentication
|
||||||
|
pub fn claims_access_token(&self, user: &User) -> Option<AdditionalClaims> {
|
||||||
|
self.process_additional_claims(user, &self.claims_access_token)
|
||||||
|
}
|
||||||
|
|
||||||
/// Get additional claims for user info for a successful authentication
|
/// Get additional claims for user info for a successful authentication
|
||||||
pub fn claims_user_info(&self, user: &User) -> Option<AdditionalClaims> {
|
pub fn claims_user_info(&self, user: &User) -> Option<AdditionalClaims> {
|
||||||
self.process_additional_claims(user, &self.claims_user_info)
|
self.process_additional_claims(user, &self.claims_user_info)
|
||||||
|
|||||||
Reference in New Issue
Block a user