Your locally hosted lumina server for IDAPro

Compare changes

Choose any two refs to compare.

-4
CHANGELOG.md
··· 2 2 3 3 ## [Unreleased] - _TBD_ 4 4 5 - ### Added 6 - 7 - - User management 8 - 9 5 ## [v0.4.0] - 2024-03-19 10 6 11 7 ### Added
+803 -549
Cargo.lock
··· 1 1 # This file is automatically @generated by Cargo. 2 2 # It is not intended for manual editing. 3 - version = 3 3 + version = 4 4 4 5 5 [[package]] 6 6 name = "addr2line" 7 - version = "0.21.0" 7 + version = "0.24.2" 8 8 source = "registry+https://github.com/rust-lang/crates.io-index" 9 - checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 9 + checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 10 dependencies = [ 11 11 "gimli", 12 12 ] 13 13 14 14 [[package]] 15 - name = "adler" 16 - version = "1.0.2" 15 + name = "adler2" 16 + version = "2.0.0" 17 17 source = "registry+https://github.com/rust-lang/crates.io-index" 18 - checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 18 + checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 19 20 20 [[package]] 21 21 name = "aho-corasick" ··· 28 28 29 29 [[package]] 30 30 name = "anstream" 31 - version = "0.6.13" 31 + version = "0.6.19" 32 32 source = "registry+https://github.com/rust-lang/crates.io-index" 33 - checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" 33 + checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" 34 34 dependencies = [ 35 35 "anstyle", 36 36 "anstyle-parse", 37 37 "anstyle-query", 38 38 "anstyle-wincon", 39 39 "colorchoice", 40 + "is_terminal_polyfill", 40 41 "utf8parse", 41 42 ] 42 43 43 44 [[package]] 44 45 name = "anstyle" 45 - version = "1.0.6" 46 + version = "1.0.11" 46 47 source = "registry+https://github.com/rust-lang/crates.io-index" 47 - checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" 48 + checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 48 49 49 50 [[package]] 50 51 name = "anstyle-parse" 51 - version = "0.2.3" 52 + version = "0.2.7" 52 53 source = "registry+https://github.com/rust-lang/crates.io-index" 53 - checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" 54 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 54 55 dependencies = [ 55 56 "utf8parse", 56 57 ] 57 58 58 59 [[package]] 59 60 name = "anstyle-query" 60 - version = "1.0.2" 61 + version = "1.1.3" 61 62 source = "registry+https://github.com/rust-lang/crates.io-index" 62 - checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" 63 + checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" 63 64 dependencies = [ 64 - "windows-sys 0.52.0", 65 + "windows-sys 0.59.0", 65 66 ] 66 67 67 68 [[package]] 68 69 name = "anstyle-wincon" 69 - version = "3.0.2" 70 + version = "3.0.9" 70 71 source = "registry+https://github.com/rust-lang/crates.io-index" 71 - checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" 72 + checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" 72 73 dependencies = [ 73 74 "anstyle", 74 - "windows-sys 0.52.0", 75 + "once_cell_polyfill", 76 + "windows-sys 0.59.0", 75 77 ] 76 78 77 79 [[package]] 78 80 name = "anyhow" 79 - version = "1.0.81" 81 + version = "1.0.98" 80 82 source = "registry+https://github.com/rust-lang/crates.io-index" 81 - checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" 83 + checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 82 84 83 85 [[package]] 84 86 name = "async-trait" 85 - version = "0.1.78" 87 + version = "0.1.88" 86 88 source = "registry+https://github.com/rust-lang/crates.io-index" 87 - checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" 89 + checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 88 90 dependencies = [ 89 91 "proc-macro2", 90 92 "quote", ··· 93 95 94 96 [[package]] 95 97 name = "autocfg" 96 - version = "1.1.0" 98 + version = "1.4.0" 97 99 source = "registry+https://github.com/rust-lang/crates.io-index" 98 - checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 100 + checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 99 101 100 102 [[package]] 101 103 name = "backtrace" 102 - version = "0.3.70" 104 + version = "0.3.75" 103 105 source = "registry+https://github.com/rust-lang/crates.io-index" 104 - checksum = "95d8e92cac0961e91dbd517496b00f7e9b92363dbe6d42c3198268323798860c" 106 + checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 105 107 dependencies = [ 106 108 "addr2line", 107 - "cc", 108 109 "cfg-if", 109 110 "libc", 110 111 "miniz_oxide", 111 112 "object", 112 113 "rustc-demangle", 114 + "windows-targets", 113 115 ] 114 116 115 117 [[package]] ··· 119 121 checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 120 122 121 123 [[package]] 124 + name = "base64" 125 + version = "0.22.1" 126 + source = "registry+https://github.com/rust-lang/crates.io-index" 127 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 128 + 129 + [[package]] 122 130 name = "bb8" 123 - version = "0.8.3" 131 + version = "0.8.6" 124 132 source = "registry+https://github.com/rust-lang/crates.io-index" 125 - checksum = "df7c2093d15d6a1d33b1f972e1c5ea3177748742b97a5f392aa83a65262c6780" 133 + checksum = "d89aabfae550a5c44b43ab941844ffcd2e993cb6900b342debf59e9ea74acdb8" 126 134 dependencies = [ 127 135 "async-trait", 128 - "futures-channel", 129 136 "futures-util", 130 137 "parking_lot", 131 138 "tokio", ··· 139 146 140 147 [[package]] 141 148 name = "bitflags" 142 - version = "1.3.2" 149 + version = "2.9.1" 143 150 source = "registry+https://github.com/rust-lang/crates.io-index" 144 - checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 145 - 146 - [[package]] 147 - name = "bitflags" 148 - version = "2.5.0" 149 - source = "registry+https://github.com/rust-lang/crates.io-index" 150 - checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 151 + checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 151 152 152 153 [[package]] 153 154 name = "block-buffer" ··· 160 161 161 162 [[package]] 162 163 name = "bumpalo" 163 - version = "3.15.4" 164 + version = "3.18.1" 164 165 source = "registry+https://github.com/rust-lang/crates.io-index" 165 - checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" 166 + checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" 166 167 167 168 [[package]] 168 169 name = "byteorder" ··· 172 173 173 174 [[package]] 174 175 name = "bytes" 175 - version = "1.5.0" 176 + version = "1.10.1" 176 177 source = "registry+https://github.com/rust-lang/crates.io-index" 177 - checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" 178 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 178 179 179 180 [[package]] 180 181 name = "cc" 181 - version = "1.0.90" 182 + version = "1.2.26" 182 183 source = "registry+https://github.com/rust-lang/crates.io-index" 183 - checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" 184 + checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" 185 + dependencies = [ 186 + "shlex", 187 + ] 184 188 185 189 [[package]] 186 190 name = "cfg-if" ··· 190 194 191 195 [[package]] 192 196 name = "clap" 193 - version = "4.5.3" 197 + version = "4.5.39" 194 198 source = "registry+https://github.com/rust-lang/crates.io-index" 195 - checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813" 199 + checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" 196 200 dependencies = [ 197 201 "clap_builder", 198 202 ] 199 203 200 204 [[package]] 201 205 name = "clap_builder" 202 - version = "4.5.2" 206 + version = "4.5.39" 203 207 source = "registry+https://github.com/rust-lang/crates.io-index" 204 - checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" 208 + checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" 205 209 dependencies = [ 206 210 "anstream", 207 211 "anstyle", ··· 211 215 212 216 [[package]] 213 217 name = "clap_lex" 214 - version = "0.7.0" 218 + version = "0.7.4" 215 219 source = "registry+https://github.com/rust-lang/crates.io-index" 216 - checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 220 + checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 217 221 218 222 [[package]] 219 223 name = "colorchoice" 220 - version = "1.0.0" 224 + version = "1.0.4" 221 225 source = "registry+https://github.com/rust-lang/crates.io-index" 222 - checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 226 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 223 227 224 228 [[package]] 225 229 name = "common" ··· 232 236 "futures-util", 233 237 "log", 234 238 "native-tls", 235 - "pbkdf2", 236 239 "postgres-native-tls", 237 240 "prometheus-client", 238 - "rand", 239 241 "serde", 240 - "sha2", 241 242 "time", 242 243 "tokio", 243 244 "tokio-postgres", ··· 257 258 258 259 [[package]] 259 260 name = "core-foundation-sys" 260 - version = "0.8.6" 261 + version = "0.8.7" 261 262 source = "registry+https://github.com/rust-lang/crates.io-index" 262 - checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 263 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 263 264 264 265 [[package]] 265 266 name = "cpufeatures" 266 - version = "0.2.12" 267 + version = "0.2.17" 267 268 source = "registry+https://github.com/rust-lang/crates.io-index" 268 - checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 269 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 269 270 dependencies = [ 270 271 "libc", 271 272 ] ··· 281 282 ] 282 283 283 284 [[package]] 285 + name = "darling" 286 + version = "0.20.11" 287 + source = "registry+https://github.com/rust-lang/crates.io-index" 288 + checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 289 + dependencies = [ 290 + "darling_core", 291 + "darling_macro", 292 + ] 293 + 294 + [[package]] 295 + name = "darling_core" 296 + version = "0.20.11" 297 + source = "registry+https://github.com/rust-lang/crates.io-index" 298 + checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 299 + dependencies = [ 300 + "fnv", 301 + "ident_case", 302 + "proc-macro2", 303 + "quote", 304 + "strsim", 305 + "syn", 306 + ] 307 + 308 + [[package]] 309 + name = "darling_macro" 310 + version = "0.20.11" 311 + source = "registry+https://github.com/rust-lang/crates.io-index" 312 + checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 313 + dependencies = [ 314 + "darling_core", 315 + "quote", 316 + "syn", 317 + ] 318 + 319 + [[package]] 284 320 name = "data-encoding" 285 - version = "2.5.0" 321 + version = "2.9.0" 286 322 source = "registry+https://github.com/rust-lang/crates.io-index" 287 - checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" 323 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 288 324 289 325 [[package]] 290 326 name = "deranged" 291 - version = "0.3.11" 327 + version = "0.4.0" 292 328 source = "registry+https://github.com/rust-lang/crates.io-index" 293 - checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 329 + checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 294 330 dependencies = [ 295 331 "powerfmt", 296 332 ] 297 333 298 334 [[package]] 299 335 name = "diesel" 300 - version = "2.1.5" 336 + version = "2.2.10" 301 337 source = "registry+https://github.com/rust-lang/crates.io-index" 302 - checksum = "03fc05c17098f21b89bc7d98fe1dd3cce2c11c2ad8e145f2a44fe08ed28eb559" 338 + checksum = "ff3e1edb1f37b4953dd5176916347289ed43d7119cc2e6c7c3f7849ff44ea506" 303 339 dependencies = [ 304 - "bitflags 2.5.0", 340 + "bitflags", 305 341 "byteorder", 306 342 "diesel_derives", 307 343 "itoa", ··· 310 346 311 347 [[package]] 312 348 name = "diesel-async" 313 - version = "0.4.1" 349 + version = "0.5.2" 314 350 source = "registry+https://github.com/rust-lang/crates.io-index" 315 - checksum = "acada1517534c92d3f382217b485db8a8638f111b0e3f2a2a8e26165050f77be" 351 + checksum = "51a307ac00f7c23f526a04a77761a0519b9f0eb2838ebf5b905a58580095bdcb" 316 352 dependencies = [ 317 353 "async-trait", 318 354 "bb8", ··· 325 361 326 362 [[package]] 327 363 name = "diesel_derives" 328 - version = "2.1.3" 364 + version = "2.2.5" 329 365 source = "registry+https://github.com/rust-lang/crates.io-index" 330 - checksum = "5d02eecb814ae714ffe61ddc2db2dd03e6c49a42e269b5001355500d431cce0c" 366 + checksum = "68d4216021b3ea446fd2047f5c8f8fe6e98af34508a254a01e4d6bc1e844f84d" 331 367 dependencies = [ 332 368 "diesel_table_macro_syntax", 369 + "dsl_auto_type", 333 370 "proc-macro2", 334 371 "quote", 335 372 "syn", ··· 337 374 338 375 [[package]] 339 376 name = "diesel_table_macro_syntax" 340 - version = "0.1.0" 377 + version = "0.2.0" 341 378 source = "registry+https://github.com/rust-lang/crates.io-index" 342 - checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5" 379 + checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" 343 380 dependencies = [ 344 381 "syn", 345 382 ] ··· 356 393 ] 357 394 358 395 [[package]] 396 + name = "displaydoc" 397 + version = "0.2.5" 398 + source = "registry+https://github.com/rust-lang/crates.io-index" 399 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 400 + dependencies = [ 401 + "proc-macro2", 402 + "quote", 403 + "syn", 404 + ] 405 + 406 + [[package]] 407 + name = "dsl_auto_type" 408 + version = "0.1.3" 409 + source = "registry+https://github.com/rust-lang/crates.io-index" 410 + checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" 411 + dependencies = [ 412 + "darling", 413 + "either", 414 + "heck", 415 + "proc-macro2", 416 + "quote", 417 + "syn", 418 + ] 419 + 420 + [[package]] 359 421 name = "dtoa" 360 - version = "1.0.9" 422 + version = "1.0.10" 423 + source = "registry+https://github.com/rust-lang/crates.io-index" 424 + checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" 425 + 426 + [[package]] 427 + name = "either" 428 + version = "1.15.0" 361 429 source = "registry+https://github.com/rust-lang/crates.io-index" 362 - checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" 430 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 363 431 364 432 [[package]] 365 433 name = "encoding_rs" 366 - version = "0.8.33" 434 + version = "0.8.35" 367 435 source = "registry+https://github.com/rust-lang/crates.io-index" 368 - checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" 436 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 369 437 dependencies = [ 370 438 "cfg-if", 371 439 ] ··· 385 453 386 454 [[package]] 387 455 name = "equivalent" 388 - version = "1.0.1" 456 + version = "1.0.2" 389 457 source = "registry+https://github.com/rust-lang/crates.io-index" 390 - checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 458 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 391 459 392 460 [[package]] 393 461 name = "errno" 394 - version = "0.3.8" 462 + version = "0.3.12" 395 463 source = "registry+https://github.com/rust-lang/crates.io-index" 396 - checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" 464 + checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" 397 465 dependencies = [ 398 466 "libc", 399 - "windows-sys 0.52.0", 467 + "windows-sys 0.59.0", 400 468 ] 401 469 402 470 [[package]] ··· 407 475 408 476 [[package]] 409 477 name = "fastrand" 410 - version = "2.0.1" 411 - source = "registry+https://github.com/rust-lang/crates.io-index" 412 - checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" 413 - 414 - [[package]] 415 - name = "finl_unicode" 416 - version = "1.2.0" 478 + version = "2.3.0" 417 479 source = "registry+https://github.com/rust-lang/crates.io-index" 418 - checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" 480 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 419 481 420 482 [[package]] 421 483 name = "fnv" ··· 448 510 ] 449 511 450 512 [[package]] 451 - name = "futures" 452 - version = "0.3.30" 453 - source = "registry+https://github.com/rust-lang/crates.io-index" 454 - checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 455 - dependencies = [ 456 - "futures-channel", 457 - "futures-core", 458 - "futures-executor", 459 - "futures-io", 460 - "futures-sink", 461 - "futures-task", 462 - "futures-util", 463 - ] 464 - 465 - [[package]] 466 513 name = "futures-channel" 467 - version = "0.3.30" 514 + version = "0.3.31" 468 515 source = "registry+https://github.com/rust-lang/crates.io-index" 469 - checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 516 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 470 517 dependencies = [ 471 518 "futures-core", 472 519 "futures-sink", ··· 474 521 475 522 [[package]] 476 523 name = "futures-core" 477 - version = "0.3.30" 478 - source = "registry+https://github.com/rust-lang/crates.io-index" 479 - checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 480 - 481 - [[package]] 482 - name = "futures-executor" 483 - version = "0.3.30" 484 - source = "registry+https://github.com/rust-lang/crates.io-index" 485 - checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 486 - dependencies = [ 487 - "futures-core", 488 - "futures-task", 489 - "futures-util", 490 - ] 491 - 492 - [[package]] 493 - name = "futures-io" 494 - version = "0.3.30" 524 + version = "0.3.31" 495 525 source = "registry+https://github.com/rust-lang/crates.io-index" 496 - checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 526 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 497 527 498 528 [[package]] 499 529 name = "futures-macro" 500 - version = "0.3.30" 530 + version = "0.3.31" 501 531 source = "registry+https://github.com/rust-lang/crates.io-index" 502 - checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 532 + checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 503 533 dependencies = [ 504 534 "proc-macro2", 505 535 "quote", ··· 508 538 509 539 [[package]] 510 540 name = "futures-sink" 511 - version = "0.3.30" 541 + version = "0.3.31" 512 542 source = "registry+https://github.com/rust-lang/crates.io-index" 513 - checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 543 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 514 544 515 545 [[package]] 516 546 name = "futures-task" 517 - version = "0.3.30" 547 + version = "0.3.31" 518 548 source = "registry+https://github.com/rust-lang/crates.io-index" 519 - checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 549 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 520 550 521 551 [[package]] 522 552 name = "futures-util" 523 - version = "0.3.30" 553 + version = "0.3.31" 524 554 source = "registry+https://github.com/rust-lang/crates.io-index" 525 - checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 555 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 526 556 dependencies = [ 527 - "futures-channel", 528 557 "futures-core", 529 - "futures-io", 530 558 "futures-macro", 531 559 "futures-sink", 532 560 "futures-task", 533 - "memchr", 534 561 "pin-project-lite", 535 562 "pin-utils", 536 563 "slab", ··· 548 575 549 576 [[package]] 550 577 name = "getrandom" 551 - version = "0.2.12" 578 + version = "0.2.16" 579 + source = "registry+https://github.com/rust-lang/crates.io-index" 580 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 581 + dependencies = [ 582 + "cfg-if", 583 + "libc", 584 + "wasi 0.11.0+wasi-snapshot-preview1", 585 + ] 586 + 587 + [[package]] 588 + name = "getrandom" 589 + version = "0.3.3" 552 590 source = "registry+https://github.com/rust-lang/crates.io-index" 553 - checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" 591 + checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 554 592 dependencies = [ 555 593 "cfg-if", 556 594 "libc", 557 - "wasi", 595 + "r-efi", 596 + "wasi 0.14.2+wasi-0.2.4", 558 597 ] 559 598 560 599 [[package]] 561 600 name = "gimli" 562 - version = "0.28.1" 601 + version = "0.31.1" 563 602 source = "registry+https://github.com/rust-lang/crates.io-index" 564 - checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 603 + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 565 604 566 605 [[package]] 567 606 name = "h2" 568 - version = "0.3.25" 607 + version = "0.3.26" 569 608 source = "registry+https://github.com/rust-lang/crates.io-index" 570 - checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" 609 + checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 571 610 dependencies = [ 572 611 "bytes", 573 612 "fnv", 574 613 "futures-core", 575 614 "futures-sink", 576 615 "futures-util", 577 - "http", 616 + "http 0.2.12", 578 617 "indexmap", 579 618 "slab", 580 619 "tokio", ··· 584 623 585 624 [[package]] 586 625 name = "hashbrown" 587 - version = "0.14.3" 626 + version = "0.15.4" 588 627 source = "registry+https://github.com/rust-lang/crates.io-index" 589 - checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 628 + checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 590 629 591 630 [[package]] 592 631 name = "headers" ··· 594 633 source = "registry+https://github.com/rust-lang/crates.io-index" 595 634 checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" 596 635 dependencies = [ 597 - "base64", 636 + "base64 0.21.7", 598 637 "bytes", 599 638 "headers-core", 600 - "http", 639 + "http 0.2.12", 601 640 "httpdate", 602 641 "mime", 603 642 "sha1", ··· 609 648 source = "registry+https://github.com/rust-lang/crates.io-index" 610 649 checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" 611 650 dependencies = [ 612 - "http", 651 + "http 0.2.12", 613 652 ] 614 653 615 654 [[package]] 655 + name = "heck" 656 + version = "0.5.0" 657 + source = "registry+https://github.com/rust-lang/crates.io-index" 658 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 659 + 660 + [[package]] 616 661 name = "hermit-abi" 617 - version = "0.3.9" 662 + version = "0.5.1" 618 663 source = "registry+https://github.com/rust-lang/crates.io-index" 619 - checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 664 + checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" 620 665 621 666 [[package]] 622 667 name = "hmac" ··· 639 684 ] 640 685 641 686 [[package]] 687 + name = "http" 688 + version = "1.3.1" 689 + source = "registry+https://github.com/rust-lang/crates.io-index" 690 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 691 + dependencies = [ 692 + "bytes", 693 + "fnv", 694 + "itoa", 695 + ] 696 + 697 + [[package]] 642 698 name = "http-body" 643 699 version = "0.4.6" 644 700 source = "registry+https://github.com/rust-lang/crates.io-index" 645 701 checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 646 702 dependencies = [ 647 703 "bytes", 648 - "http", 704 + "http 0.2.12", 649 705 "pin-project-lite", 650 706 ] 651 707 652 708 [[package]] 653 709 name = "httparse" 654 - version = "1.8.0" 710 + version = "1.10.1" 655 711 source = "registry+https://github.com/rust-lang/crates.io-index" 656 - checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 712 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 657 713 658 714 [[package]] 659 715 name = "httpdate" ··· 663 719 664 720 [[package]] 665 721 name = "humantime" 666 - version = "2.1.0" 722 + version = "2.2.0" 667 723 source = "registry+https://github.com/rust-lang/crates.io-index" 668 - checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 724 + checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" 669 725 670 726 [[package]] 671 727 name = "hyper" 672 - version = "0.14.28" 728 + version = "0.14.32" 673 729 source = "registry+https://github.com/rust-lang/crates.io-index" 674 - checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" 730 + checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" 675 731 dependencies = [ 676 732 "bytes", 677 733 "futures-channel", 678 734 "futures-core", 679 735 "futures-util", 680 736 "h2", 681 - "http", 737 + "http 0.2.12", 682 738 "http-body", 683 739 "httparse", 684 740 "httpdate", ··· 692 748 ] 693 749 694 750 [[package]] 751 + name = "icu_collections" 752 + version = "2.0.0" 753 + source = "registry+https://github.com/rust-lang/crates.io-index" 754 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 755 + dependencies = [ 756 + "displaydoc", 757 + "potential_utf", 758 + "yoke", 759 + "zerofrom", 760 + "zerovec", 761 + ] 762 + 763 + [[package]] 764 + name = "icu_locale_core" 765 + version = "2.0.0" 766 + source = "registry+https://github.com/rust-lang/crates.io-index" 767 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 768 + dependencies = [ 769 + "displaydoc", 770 + "litemap", 771 + "tinystr", 772 + "writeable", 773 + "zerovec", 774 + ] 775 + 776 + [[package]] 777 + name = "icu_normalizer" 778 + version = "2.0.0" 779 + source = "registry+https://github.com/rust-lang/crates.io-index" 780 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 781 + dependencies = [ 782 + "displaydoc", 783 + "icu_collections", 784 + "icu_normalizer_data", 785 + "icu_properties", 786 + "icu_provider", 787 + "smallvec", 788 + "zerovec", 789 + ] 790 + 791 + [[package]] 792 + name = "icu_normalizer_data" 793 + version = "2.0.0" 794 + source = "registry+https://github.com/rust-lang/crates.io-index" 795 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 796 + 797 + [[package]] 798 + name = "icu_properties" 799 + version = "2.0.1" 800 + source = "registry+https://github.com/rust-lang/crates.io-index" 801 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 802 + dependencies = [ 803 + "displaydoc", 804 + "icu_collections", 805 + "icu_locale_core", 806 + "icu_properties_data", 807 + "icu_provider", 808 + "potential_utf", 809 + "zerotrie", 810 + "zerovec", 811 + ] 812 + 813 + [[package]] 814 + name = "icu_properties_data" 815 + version = "2.0.1" 816 + source = "registry+https://github.com/rust-lang/crates.io-index" 817 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 818 + 819 + [[package]] 820 + name = "icu_provider" 821 + version = "2.0.0" 822 + source = "registry+https://github.com/rust-lang/crates.io-index" 823 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 824 + dependencies = [ 825 + "displaydoc", 826 + "icu_locale_core", 827 + "stable_deref_trait", 828 + "tinystr", 829 + "writeable", 830 + "yoke", 831 + "zerofrom", 832 + "zerotrie", 833 + "zerovec", 834 + ] 835 + 836 + [[package]] 837 + name = "ident_case" 838 + version = "1.0.1" 839 + source = "registry+https://github.com/rust-lang/crates.io-index" 840 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 841 + 842 + [[package]] 695 843 name = "idna" 696 - version = "0.5.0" 844 + version = "1.0.3" 845 + source = "registry+https://github.com/rust-lang/crates.io-index" 846 + checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 847 + dependencies = [ 848 + "idna_adapter", 849 + "smallvec", 850 + "utf8_iter", 851 + ] 852 + 853 + [[package]] 854 + name = "idna_adapter" 855 + version = "1.2.1" 697 856 source = "registry+https://github.com/rust-lang/crates.io-index" 698 - checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 857 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 699 858 dependencies = [ 700 - "unicode-bidi", 701 - "unicode-normalization", 859 + "icu_normalizer", 860 + "icu_properties", 702 861 ] 703 862 704 863 [[package]] 705 864 name = "indexmap" 706 - version = "2.2.5" 865 + version = "2.9.0" 707 866 source = "registry+https://github.com/rust-lang/crates.io-index" 708 - checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" 867 + checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 709 868 dependencies = [ 710 869 "equivalent", 711 870 "hashbrown", ··· 713 872 714 873 [[package]] 715 874 name = "is-terminal" 716 - version = "0.4.12" 875 + version = "0.4.16" 717 876 source = "registry+https://github.com/rust-lang/crates.io-index" 718 - checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" 877 + checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" 719 878 dependencies = [ 720 879 "hermit-abi", 721 880 "libc", 722 - "windows-sys 0.52.0", 881 + "windows-sys 0.59.0", 723 882 ] 724 883 725 884 [[package]] 885 + name = "is_terminal_polyfill" 886 + version = "1.70.1" 887 + source = "registry+https://github.com/rust-lang/crates.io-index" 888 + checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 889 + 890 + [[package]] 726 891 name = "itoa" 727 - version = "1.0.10" 892 + version = "1.0.15" 728 893 source = "registry+https://github.com/rust-lang/crates.io-index" 729 - checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 894 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 730 895 731 896 [[package]] 732 897 name = "js-sys" 733 - version = "0.3.69" 898 + version = "0.3.77" 734 899 source = "registry+https://github.com/rust-lang/crates.io-index" 735 - checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 900 + checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 736 901 dependencies = [ 902 + "once_cell", 737 903 "wasm-bindgen", 738 904 ] 739 905 740 906 [[package]] 741 - name = "lazy_static" 742 - version = "1.4.0" 907 + name = "libc" 908 + version = "0.2.172" 743 909 source = "registry+https://github.com/rust-lang/crates.io-index" 744 - checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 910 + checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 745 911 746 912 [[package]] 747 - name = "libc" 748 - version = "0.2.153" 913 + name = "linux-raw-sys" 914 + version = "0.9.4" 749 915 source = "registry+https://github.com/rust-lang/crates.io-index" 750 - checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" 916 + checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 751 917 752 918 [[package]] 753 - name = "linux-raw-sys" 754 - version = "0.4.13" 919 + name = "litemap" 920 + version = "0.8.0" 755 921 source = "registry+https://github.com/rust-lang/crates.io-index" 756 - checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" 922 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 757 923 758 924 [[package]] 759 925 name = "lock_api" 760 - version = "0.4.11" 926 + version = "0.4.13" 761 927 source = "registry+https://github.com/rust-lang/crates.io-index" 762 - checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" 928 + checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 763 929 dependencies = [ 764 930 "autocfg", 765 931 "scopeguard", ··· 767 933 768 934 [[package]] 769 935 name = "log" 770 - version = "0.4.21" 936 + version = "0.4.27" 771 937 source = "registry+https://github.com/rust-lang/crates.io-index" 772 - checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 938 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 773 939 774 940 [[package]] 775 941 name = "lumen" ··· 781 947 "native-tls", 782 948 "pretty_env_logger", 783 949 "prometheus-client", 784 - "rpassword", 785 950 "tokio", 786 951 "tokio-native-tls", 787 952 "warp", ··· 799 964 800 965 [[package]] 801 966 name = "memchr" 802 - version = "2.7.1" 967 + version = "2.7.4" 803 968 source = "registry+https://github.com/rust-lang/crates.io-index" 804 - checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 969 + checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 805 970 806 971 [[package]] 807 972 name = "mime" ··· 811 976 812 977 [[package]] 813 978 name = "mime_guess" 814 - version = "2.0.4" 979 + version = "2.0.5" 815 980 source = "registry+https://github.com/rust-lang/crates.io-index" 816 - checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" 981 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 817 982 dependencies = [ 818 983 "mime", 819 984 "unicase", ··· 821 986 822 987 [[package]] 823 988 name = "miniz_oxide" 824 - version = "0.7.2" 989 + version = "0.8.8" 825 990 source = "registry+https://github.com/rust-lang/crates.io-index" 826 - checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" 991 + checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 827 992 dependencies = [ 828 - "adler", 993 + "adler2", 829 994 ] 830 995 831 996 [[package]] 832 997 name = "mio" 833 - version = "0.8.11" 998 + version = "1.0.4" 834 999 source = "registry+https://github.com/rust-lang/crates.io-index" 835 - checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 1000 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 836 1001 dependencies = [ 837 1002 "libc", 838 - "wasi", 839 - "windows-sys 0.48.0", 1003 + "wasi 0.11.0+wasi-snapshot-preview1", 1004 + "windows-sys 0.59.0", 840 1005 ] 841 1006 842 1007 [[package]] ··· 848 1013 "bytes", 849 1014 "encoding_rs", 850 1015 "futures-util", 851 - "http", 1016 + "http 0.2.12", 852 1017 "httparse", 853 1018 "log", 854 1019 "memchr", ··· 859 1024 860 1025 [[package]] 861 1026 name = "native-tls" 862 - version = "0.2.11" 1027 + version = "0.2.14" 863 1028 source = "registry+https://github.com/rust-lang/crates.io-index" 864 - checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" 1029 + checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 865 1030 dependencies = [ 866 - "lazy_static", 867 1031 "libc", 868 1032 "log", 869 1033 "openssl", ··· 882 1046 checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 883 1047 884 1048 [[package]] 885 - name = "num_cpus" 886 - version = "1.16.0" 887 - source = "registry+https://github.com/rust-lang/crates.io-index" 888 - checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 889 - dependencies = [ 890 - "hermit-abi", 891 - "libc", 892 - ] 893 - 894 - [[package]] 895 1049 name = "object" 896 - version = "0.32.2" 1050 + version = "0.36.7" 897 1051 source = "registry+https://github.com/rust-lang/crates.io-index" 898 - checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 1052 + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 899 1053 dependencies = [ 900 1054 "memchr", 901 1055 ] 902 1056 903 1057 [[package]] 904 1058 name = "once_cell" 905 - version = "1.19.0" 1059 + version = "1.21.3" 1060 + source = "registry+https://github.com/rust-lang/crates.io-index" 1061 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1062 + 1063 + [[package]] 1064 + name = "once_cell_polyfill" 1065 + version = "1.70.1" 906 1066 source = "registry+https://github.com/rust-lang/crates.io-index" 907 - checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 1067 + checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 908 1068 909 1069 [[package]] 910 1070 name = "openssl" 911 - version = "0.10.64" 1071 + version = "0.10.73" 912 1072 source = "registry+https://github.com/rust-lang/crates.io-index" 913 - checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 1073 + checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 914 1074 dependencies = [ 915 - "bitflags 2.5.0", 1075 + "bitflags", 916 1076 "cfg-if", 917 1077 "foreign-types", 918 1078 "libc", ··· 934 1094 935 1095 [[package]] 936 1096 name = "openssl-probe" 937 - version = "0.1.5" 1097 + version = "0.1.6" 938 1098 source = "registry+https://github.com/rust-lang/crates.io-index" 939 - checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1099 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 940 1100 941 1101 [[package]] 942 1102 name = "openssl-sys" 943 - version = "0.9.101" 1103 + version = "0.9.109" 944 1104 source = "registry+https://github.com/rust-lang/crates.io-index" 945 - checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" 1105 + checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 946 1106 dependencies = [ 947 1107 "cc", 948 1108 "libc", ··· 952 1112 953 1113 [[package]] 954 1114 name = "parking_lot" 955 - version = "0.12.1" 1115 + version = "0.12.4" 956 1116 source = "registry+https://github.com/rust-lang/crates.io-index" 957 - checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1117 + checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 958 1118 dependencies = [ 959 1119 "lock_api", 960 1120 "parking_lot_core", ··· 962 1122 963 1123 [[package]] 964 1124 name = "parking_lot_core" 965 - version = "0.9.9" 1125 + version = "0.9.11" 966 1126 source = "registry+https://github.com/rust-lang/crates.io-index" 967 - checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" 1127 + checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 968 1128 dependencies = [ 969 1129 "cfg-if", 970 1130 "libc", 971 1131 "redox_syscall", 972 1132 "smallvec", 973 - "windows-targets 0.48.5", 974 - ] 975 - 976 - [[package]] 977 - name = "pbkdf2" 978 - version = "0.12.2" 979 - source = "registry+https://github.com/rust-lang/crates.io-index" 980 - checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" 981 - dependencies = [ 982 - "digest", 983 - "hmac", 1133 + "windows-targets", 984 1134 ] 985 1135 986 1136 [[package]] ··· 991 1141 992 1142 [[package]] 993 1143 name = "phf" 994 - version = "0.11.2" 1144 + version = "0.11.3" 995 1145 source = "registry+https://github.com/rust-lang/crates.io-index" 996 - checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 1146 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 997 1147 dependencies = [ 998 1148 "phf_shared", 999 1149 ] 1000 1150 1001 1151 [[package]] 1002 1152 name = "phf_shared" 1003 - version = "0.11.2" 1153 + version = "0.11.3" 1004 1154 source = "registry+https://github.com/rust-lang/crates.io-index" 1005 - checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 1155 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 1006 1156 dependencies = [ 1007 1157 "siphasher", 1008 1158 ] 1009 1159 1010 1160 [[package]] 1011 1161 name = "pin-project" 1012 - version = "1.1.5" 1162 + version = "1.1.10" 1013 1163 source = "registry+https://github.com/rust-lang/crates.io-index" 1014 - checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 1164 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 1015 1165 dependencies = [ 1016 1166 "pin-project-internal", 1017 1167 ] 1018 1168 1019 1169 [[package]] 1020 1170 name = "pin-project-internal" 1021 - version = "1.1.5" 1171 + version = "1.1.10" 1022 1172 source = "registry+https://github.com/rust-lang/crates.io-index" 1023 - checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 1173 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 1024 1174 dependencies = [ 1025 1175 "proc-macro2", 1026 1176 "quote", ··· 1029 1179 1030 1180 [[package]] 1031 1181 name = "pin-project-lite" 1032 - version = "0.2.13" 1182 + version = "0.2.16" 1033 1183 source = "registry+https://github.com/rust-lang/crates.io-index" 1034 - checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 1184 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1035 1185 1036 1186 [[package]] 1037 1187 name = "pin-utils" ··· 1041 1191 1042 1192 [[package]] 1043 1193 name = "pkg-config" 1044 - version = "0.3.30" 1194 + version = "0.3.32" 1045 1195 source = "registry+https://github.com/rust-lang/crates.io-index" 1046 - checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 1196 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1047 1197 1048 1198 [[package]] 1049 1199 name = "postgres-native-tls" 1050 - version = "0.5.0" 1200 + version = "0.5.1" 1051 1201 source = "registry+https://github.com/rust-lang/crates.io-index" 1052 - checksum = "2d442770e2b1e244bb5eb03b31c79b65bb2568f413b899eaba850fa945a65954" 1202 + checksum = "a1f39498473c92f7b6820ae970382c1d83178a3454c618161cb772e8598d9f6f" 1053 1203 dependencies = [ 1054 - "futures", 1055 1204 "native-tls", 1056 1205 "tokio", 1057 1206 "tokio-native-tls", ··· 1060 1209 1061 1210 [[package]] 1062 1211 name = "postgres-protocol" 1063 - version = "0.6.6" 1212 + version = "0.6.8" 1064 1213 source = "registry+https://github.com/rust-lang/crates.io-index" 1065 - checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520" 1214 + checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" 1066 1215 dependencies = [ 1067 - "base64", 1216 + "base64 0.22.1", 1068 1217 "byteorder", 1069 1218 "bytes", 1070 1219 "fallible-iterator", 1071 1220 "hmac", 1072 1221 "md-5", 1073 1222 "memchr", 1074 - "rand", 1223 + "rand 0.9.1", 1075 1224 "sha2", 1076 1225 "stringprep", 1077 1226 ] 1078 1227 1079 1228 [[package]] 1080 1229 name = "postgres-types" 1081 - version = "0.2.6" 1230 + version = "0.2.9" 1082 1231 source = "registry+https://github.com/rust-lang/crates.io-index" 1083 - checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" 1232 + checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" 1084 1233 dependencies = [ 1085 1234 "bytes", 1086 1235 "fallible-iterator", ··· 1088 1237 ] 1089 1238 1090 1239 [[package]] 1240 + name = "potential_utf" 1241 + version = "0.1.2" 1242 + source = "registry+https://github.com/rust-lang/crates.io-index" 1243 + checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 1244 + dependencies = [ 1245 + "zerovec", 1246 + ] 1247 + 1248 + [[package]] 1091 1249 name = "powerfmt" 1092 1250 version = "0.2.0" 1093 1251 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1095 1253 1096 1254 [[package]] 1097 1255 name = "ppv-lite86" 1098 - version = "0.2.17" 1256 + version = "0.2.21" 1099 1257 source = "registry+https://github.com/rust-lang/crates.io-index" 1100 - checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1258 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1259 + dependencies = [ 1260 + "zerocopy", 1261 + ] 1101 1262 1102 1263 [[package]] 1103 1264 name = "pretty_env_logger" ··· 1111 1272 1112 1273 [[package]] 1113 1274 name = "proc-macro2" 1114 - version = "1.0.79" 1275 + version = "1.0.95" 1115 1276 source = "registry+https://github.com/rust-lang/crates.io-index" 1116 - checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" 1277 + checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 1117 1278 dependencies = [ 1118 1279 "unicode-ident", 1119 1280 ] 1120 1281 1121 1282 [[package]] 1122 1283 name = "prometheus-client" 1123 - version = "0.22.2" 1284 + version = "0.22.3" 1124 1285 source = "registry+https://github.com/rust-lang/crates.io-index" 1125 - checksum = "c1ca959da22a332509f2a73ae9e5f23f9dcfc31fd3a54d71f159495bd5909baa" 1286 + checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" 1126 1287 dependencies = [ 1127 1288 "dtoa", 1128 1289 "itoa", ··· 1143 1304 1144 1305 [[package]] 1145 1306 name = "quote" 1146 - version = "1.0.35" 1307 + version = "1.0.40" 1147 1308 source = "registry+https://github.com/rust-lang/crates.io-index" 1148 - checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 1309 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1149 1310 dependencies = [ 1150 1311 "proc-macro2", 1151 1312 ] 1152 1313 1153 1314 [[package]] 1315 + name = "r-efi" 1316 + version = "5.2.0" 1317 + source = "registry+https://github.com/rust-lang/crates.io-index" 1318 + checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 1319 + 1320 + [[package]] 1154 1321 name = "rand" 1155 1322 version = "0.8.5" 1156 1323 source = "registry+https://github.com/rust-lang/crates.io-index" 1157 1324 checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1158 1325 dependencies = [ 1159 1326 "libc", 1160 - "rand_chacha", 1161 - "rand_core", 1327 + "rand_chacha 0.3.1", 1328 + "rand_core 0.6.4", 1329 + ] 1330 + 1331 + [[package]] 1332 + name = "rand" 1333 + version = "0.9.1" 1334 + source = "registry+https://github.com/rust-lang/crates.io-index" 1335 + checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" 1336 + dependencies = [ 1337 + "rand_chacha 0.9.0", 1338 + "rand_core 0.9.3", 1162 1339 ] 1163 1340 1164 1341 [[package]] ··· 1168 1345 checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1169 1346 dependencies = [ 1170 1347 "ppv-lite86", 1171 - "rand_core", 1348 + "rand_core 0.6.4", 1349 + ] 1350 + 1351 + [[package]] 1352 + name = "rand_chacha" 1353 + version = "0.9.0" 1354 + source = "registry+https://github.com/rust-lang/crates.io-index" 1355 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 1356 + dependencies = [ 1357 + "ppv-lite86", 1358 + "rand_core 0.9.3", 1172 1359 ] 1173 1360 1174 1361 [[package]] ··· 1177 1364 source = "registry+https://github.com/rust-lang/crates.io-index" 1178 1365 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1179 1366 dependencies = [ 1180 - "getrandom", 1367 + "getrandom 0.2.16", 1368 + ] 1369 + 1370 + [[package]] 1371 + name = "rand_core" 1372 + version = "0.9.3" 1373 + source = "registry+https://github.com/rust-lang/crates.io-index" 1374 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 1375 + dependencies = [ 1376 + "getrandom 0.3.3", 1181 1377 ] 1182 1378 1183 1379 [[package]] 1184 1380 name = "redox_syscall" 1185 - version = "0.4.1" 1381 + version = "0.5.12" 1186 1382 source = "registry+https://github.com/rust-lang/crates.io-index" 1187 - checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 1383 + checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" 1188 1384 dependencies = [ 1189 - "bitflags 1.3.2", 1385 + "bitflags", 1190 1386 ] 1191 1387 1192 1388 [[package]] 1193 1389 name = "regex" 1194 - version = "1.10.3" 1390 + version = "1.11.1" 1195 1391 source = "registry+https://github.com/rust-lang/crates.io-index" 1196 - checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" 1392 + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1197 1393 dependencies = [ 1198 1394 "aho-corasick", 1199 1395 "memchr", ··· 1203 1399 1204 1400 [[package]] 1205 1401 name = "regex-automata" 1206 - version = "0.4.6" 1402 + version = "0.4.9" 1207 1403 source = "registry+https://github.com/rust-lang/crates.io-index" 1208 - checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" 1404 + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1209 1405 dependencies = [ 1210 1406 "aho-corasick", 1211 1407 "memchr", ··· 1214 1410 1215 1411 [[package]] 1216 1412 name = "regex-syntax" 1217 - version = "0.8.2" 1413 + version = "0.8.5" 1218 1414 source = "registry+https://github.com/rust-lang/crates.io-index" 1219 - checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 1220 - 1221 - [[package]] 1222 - name = "rpassword" 1223 - version = "7.3.1" 1224 - source = "registry+https://github.com/rust-lang/crates.io-index" 1225 - checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" 1226 - dependencies = [ 1227 - "libc", 1228 - "rtoolbox", 1229 - "windows-sys 0.48.0", 1230 - ] 1231 - 1232 - [[package]] 1233 - name = "rtoolbox" 1234 - version = "0.0.2" 1235 - source = "registry+https://github.com/rust-lang/crates.io-index" 1236 - checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" 1237 - dependencies = [ 1238 - "libc", 1239 - "windows-sys 0.48.0", 1240 - ] 1415 + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1241 1416 1242 1417 [[package]] 1243 1418 name = "rustc-demangle" 1244 - version = "0.1.23" 1419 + version = "0.1.24" 1245 1420 source = "registry+https://github.com/rust-lang/crates.io-index" 1246 - checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 1421 + checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1247 1422 1248 1423 [[package]] 1249 1424 name = "rustix" 1250 - version = "0.38.32" 1425 + version = "1.0.7" 1251 1426 source = "registry+https://github.com/rust-lang/crates.io-index" 1252 - checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" 1427 + checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 1253 1428 dependencies = [ 1254 - "bitflags 2.5.0", 1429 + "bitflags", 1255 1430 "errno", 1256 1431 "libc", 1257 1432 "linux-raw-sys", 1258 - "windows-sys 0.52.0", 1259 - ] 1260 - 1261 - [[package]] 1262 - name = "rustls-pemfile" 1263 - version = "1.0.4" 1264 - source = "registry+https://github.com/rust-lang/crates.io-index" 1265 - checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 1266 - dependencies = [ 1267 - "base64", 1433 + "windows-sys 0.59.0", 1268 1434 ] 1269 1435 1270 1436 [[package]] 1271 1437 name = "ryu" 1272 - version = "1.0.17" 1438 + version = "1.0.20" 1273 1439 source = "registry+https://github.com/rust-lang/crates.io-index" 1274 - checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" 1440 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1275 1441 1276 1442 [[package]] 1277 1443 name = "schannel" 1278 - version = "0.1.23" 1444 + version = "0.1.27" 1279 1445 source = "registry+https://github.com/rust-lang/crates.io-index" 1280 - checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 1446 + checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 1281 1447 dependencies = [ 1282 - "windows-sys 0.52.0", 1448 + "windows-sys 0.59.0", 1283 1449 ] 1284 1450 1285 1451 [[package]] 1286 1452 name = "scoped-futures" 1287 - version = "0.1.3" 1453 + version = "0.1.4" 1288 1454 source = "registry+https://github.com/rust-lang/crates.io-index" 1289 - checksum = "b1473e24c637950c9bd38763220bea91ec3e095a89f672bbd7a10d03e77ba467" 1455 + checksum = "1b24aae2d0636530f359e9d5ef0c04669d11c5e756699b27a6a6d845d8329091" 1290 1456 dependencies = [ 1291 - "cfg-if", 1292 - "pin-utils", 1457 + "pin-project-lite", 1293 1458 ] 1294 1459 1295 1460 [[package]] ··· 1306 1471 1307 1472 [[package]] 1308 1473 name = "security-framework" 1309 - version = "2.9.2" 1474 + version = "2.11.1" 1310 1475 source = "registry+https://github.com/rust-lang/crates.io-index" 1311 - checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" 1476 + checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1312 1477 dependencies = [ 1313 - "bitflags 1.3.2", 1478 + "bitflags", 1314 1479 "core-foundation", 1315 1480 "core-foundation-sys", 1316 1481 "libc", ··· 1319 1484 1320 1485 [[package]] 1321 1486 name = "security-framework-sys" 1322 - version = "2.9.1" 1487 + version = "2.14.0" 1323 1488 source = "registry+https://github.com/rust-lang/crates.io-index" 1324 - checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" 1489 + checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 1325 1490 dependencies = [ 1326 1491 "core-foundation-sys", 1327 1492 "libc", ··· 1329 1494 1330 1495 [[package]] 1331 1496 name = "serde" 1332 - version = "1.0.197" 1497 + version = "1.0.219" 1333 1498 source = "registry+https://github.com/rust-lang/crates.io-index" 1334 - checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" 1499 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1335 1500 dependencies = [ 1336 1501 "serde_derive", 1337 1502 ] 1338 1503 1339 1504 [[package]] 1340 1505 name = "serde_derive" 1341 - version = "1.0.197" 1506 + version = "1.0.219" 1342 1507 source = "registry+https://github.com/rust-lang/crates.io-index" 1343 - checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" 1508 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1344 1509 dependencies = [ 1345 1510 "proc-macro2", 1346 1511 "quote", ··· 1349 1514 1350 1515 [[package]] 1351 1516 name = "serde_json" 1352 - version = "1.0.114" 1517 + version = "1.0.140" 1353 1518 source = "registry+https://github.com/rust-lang/crates.io-index" 1354 - checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" 1519 + checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1355 1520 dependencies = [ 1356 1521 "itoa", 1522 + "memchr", 1357 1523 "ryu", 1358 1524 "serde", 1359 1525 ] 1360 1526 1361 1527 [[package]] 1362 1528 name = "serde_spanned" 1363 - version = "0.6.5" 1529 + version = "0.6.9" 1364 1530 source = "registry+https://github.com/rust-lang/crates.io-index" 1365 - checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" 1531 + checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" 1366 1532 dependencies = [ 1367 1533 "serde", 1368 1534 ] ··· 1392 1558 1393 1559 [[package]] 1394 1560 name = "sha2" 1395 - version = "0.10.8" 1561 + version = "0.10.9" 1396 1562 source = "registry+https://github.com/rust-lang/crates.io-index" 1397 - checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1563 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1398 1564 dependencies = [ 1399 1565 "cfg-if", 1400 1566 "cpufeatures", ··· 1402 1568 ] 1403 1569 1404 1570 [[package]] 1571 + name = "shlex" 1572 + version = "1.3.0" 1573 + source = "registry+https://github.com/rust-lang/crates.io-index" 1574 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1575 + 1576 + [[package]] 1405 1577 name = "signal-hook-registry" 1406 - version = "1.4.1" 1578 + version = "1.4.5" 1407 1579 source = "registry+https://github.com/rust-lang/crates.io-index" 1408 - checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 1580 + checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 1409 1581 dependencies = [ 1410 1582 "libc", 1411 1583 ] 1412 1584 1413 1585 [[package]] 1414 1586 name = "siphasher" 1415 - version = "0.3.11" 1587 + version = "1.0.1" 1416 1588 source = "registry+https://github.com/rust-lang/crates.io-index" 1417 - checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 1589 + checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 1418 1590 1419 1591 [[package]] 1420 1592 name = "slab" ··· 1427 1599 1428 1600 [[package]] 1429 1601 name = "smallvec" 1430 - version = "1.13.2" 1602 + version = "1.15.1" 1431 1603 source = "registry+https://github.com/rust-lang/crates.io-index" 1432 - checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1604 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1433 1605 1434 1606 [[package]] 1435 1607 name = "socket2" 1436 - version = "0.5.6" 1608 + version = "0.5.10" 1437 1609 source = "registry+https://github.com/rust-lang/crates.io-index" 1438 - checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" 1610 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 1439 1611 dependencies = [ 1440 1612 "libc", 1441 1613 "windows-sys 0.52.0", ··· 1448 1620 checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1449 1621 1450 1622 [[package]] 1623 + name = "stable_deref_trait" 1624 + version = "1.2.0" 1625 + source = "registry+https://github.com/rust-lang/crates.io-index" 1626 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1627 + 1628 + [[package]] 1451 1629 name = "stringprep" 1452 - version = "0.1.4" 1630 + version = "0.1.5" 1453 1631 source = "registry+https://github.com/rust-lang/crates.io-index" 1454 - checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" 1632 + checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 1455 1633 dependencies = [ 1456 - "finl_unicode", 1457 1634 "unicode-bidi", 1458 1635 "unicode-normalization", 1636 + "unicode-properties", 1459 1637 ] 1460 1638 1461 1639 [[package]] 1462 1640 name = "strsim" 1463 - version = "0.11.0" 1641 + version = "0.11.1" 1464 1642 source = "registry+https://github.com/rust-lang/crates.io-index" 1465 - checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" 1643 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1466 1644 1467 1645 [[package]] 1468 1646 name = "subtle" 1469 - version = "2.5.0" 1647 + version = "2.6.1" 1470 1648 source = "registry+https://github.com/rust-lang/crates.io-index" 1471 - checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 1649 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1472 1650 1473 1651 [[package]] 1474 1652 name = "syn" 1475 - version = "2.0.53" 1653 + version = "2.0.101" 1476 1654 source = "registry+https://github.com/rust-lang/crates.io-index" 1477 - checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" 1655 + checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 1478 1656 dependencies = [ 1479 1657 "proc-macro2", 1480 1658 "quote", ··· 1482 1660 ] 1483 1661 1484 1662 [[package]] 1663 + name = "synstructure" 1664 + version = "0.13.2" 1665 + source = "registry+https://github.com/rust-lang/crates.io-index" 1666 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1667 + dependencies = [ 1668 + "proc-macro2", 1669 + "quote", 1670 + "syn", 1671 + ] 1672 + 1673 + [[package]] 1485 1674 name = "tempfile" 1486 - version = "3.10.1" 1675 + version = "3.20.0" 1487 1676 source = "registry+https://github.com/rust-lang/crates.io-index" 1488 - checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 1677 + checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 1489 1678 dependencies = [ 1490 - "cfg-if", 1491 1679 "fastrand", 1680 + "getrandom 0.3.3", 1681 + "once_cell", 1492 1682 "rustix", 1493 - "windows-sys 0.52.0", 1683 + "windows-sys 0.59.0", 1494 1684 ] 1495 1685 1496 1686 [[package]] ··· 1504 1694 1505 1695 [[package]] 1506 1696 name = "thiserror" 1507 - version = "1.0.58" 1697 + version = "1.0.69" 1508 1698 source = "registry+https://github.com/rust-lang/crates.io-index" 1509 - checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" 1699 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 1510 1700 dependencies = [ 1511 1701 "thiserror-impl", 1512 1702 ] 1513 1703 1514 1704 [[package]] 1515 1705 name = "thiserror-impl" 1516 - version = "1.0.58" 1706 + version = "1.0.69" 1517 1707 source = "registry+https://github.com/rust-lang/crates.io-index" 1518 - checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" 1708 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 1519 1709 dependencies = [ 1520 1710 "proc-macro2", 1521 1711 "quote", ··· 1524 1714 1525 1715 [[package]] 1526 1716 name = "time" 1527 - version = "0.3.34" 1717 + version = "0.3.41" 1528 1718 source = "registry+https://github.com/rust-lang/crates.io-index" 1529 - checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" 1719 + checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 1530 1720 dependencies = [ 1531 1721 "deranged", 1532 1722 "num-conv", ··· 1538 1728 1539 1729 [[package]] 1540 1730 name = "time-core" 1541 - version = "0.1.2" 1731 + version = "0.1.4" 1542 1732 source = "registry+https://github.com/rust-lang/crates.io-index" 1543 - checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1733 + checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 1544 1734 1545 1735 [[package]] 1546 1736 name = "time-macros" 1547 - version = "0.2.17" 1737 + version = "0.2.22" 1548 1738 source = "registry+https://github.com/rust-lang/crates.io-index" 1549 - checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" 1739 + checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 1550 1740 dependencies = [ 1551 1741 "num-conv", 1552 1742 "time-core", 1553 1743 ] 1554 1744 1555 1745 [[package]] 1746 + name = "tinystr" 1747 + version = "0.8.1" 1748 + source = "registry+https://github.com/rust-lang/crates.io-index" 1749 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 1750 + dependencies = [ 1751 + "displaydoc", 1752 + "zerovec", 1753 + ] 1754 + 1755 + [[package]] 1556 1756 name = "tinyvec" 1557 - version = "1.6.0" 1757 + version = "1.9.0" 1558 1758 source = "registry+https://github.com/rust-lang/crates.io-index" 1559 - checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1759 + checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 1560 1760 dependencies = [ 1561 1761 "tinyvec_macros", 1562 1762 ] ··· 1569 1769 1570 1770 [[package]] 1571 1771 name = "tokio" 1572 - version = "1.36.0" 1772 + version = "1.45.1" 1573 1773 source = "registry+https://github.com/rust-lang/crates.io-index" 1574 - checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" 1774 + checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" 1575 1775 dependencies = [ 1576 1776 "backtrace", 1577 1777 "bytes", 1578 1778 "libc", 1579 1779 "mio", 1580 - "num_cpus", 1581 1780 "parking_lot", 1582 1781 "pin-project-lite", 1583 1782 "signal-hook-registry", 1584 1783 "socket2", 1585 1784 "tokio-macros", 1586 - "windows-sys 0.48.0", 1785 + "windows-sys 0.52.0", 1587 1786 ] 1588 1787 1589 1788 [[package]] 1590 1789 name = "tokio-macros" 1591 - version = "2.2.0" 1790 + version = "2.5.0" 1592 1791 source = "registry+https://github.com/rust-lang/crates.io-index" 1593 - checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 1792 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1594 1793 dependencies = [ 1595 1794 "proc-macro2", 1596 1795 "quote", ··· 1609 1808 1610 1809 [[package]] 1611 1810 name = "tokio-postgres" 1612 - version = "0.7.10" 1811 + version = "0.7.13" 1613 1812 source = "registry+https://github.com/rust-lang/crates.io-index" 1614 - checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8" 1813 + checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" 1615 1814 dependencies = [ 1616 1815 "async-trait", 1617 1816 "byteorder", ··· 1626 1825 "pin-project-lite", 1627 1826 "postgres-protocol", 1628 1827 "postgres-types", 1629 - "rand", 1828 + "rand 0.9.1", 1630 1829 "socket2", 1631 1830 "tokio", 1632 1831 "tokio-util", 1633 1832 "whoami", 1634 - ] 1635 - 1636 - [[package]] 1637 - name = "tokio-stream" 1638 - version = "0.1.15" 1639 - source = "registry+https://github.com/rust-lang/crates.io-index" 1640 - checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" 1641 - dependencies = [ 1642 - "futures-core", 1643 - "pin-project-lite", 1644 - "tokio", 1645 1833 ] 1646 1834 1647 1835 [[package]] 1648 1836 name = "tokio-tungstenite" 1649 - version = "0.20.1" 1837 + version = "0.21.0" 1650 1838 source = "registry+https://github.com/rust-lang/crates.io-index" 1651 - checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" 1839 + checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" 1652 1840 dependencies = [ 1653 1841 "futures-util", 1654 1842 "log", ··· 1658 1846 1659 1847 [[package]] 1660 1848 name = "tokio-util" 1661 - version = "0.7.10" 1849 + version = "0.7.15" 1662 1850 source = "registry+https://github.com/rust-lang/crates.io-index" 1663 - checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" 1851 + checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 1664 1852 dependencies = [ 1665 1853 "bytes", 1666 1854 "futures-core", 1667 1855 "futures-sink", 1668 1856 "pin-project-lite", 1669 1857 "tokio", 1670 - "tracing", 1671 1858 ] 1672 1859 1673 1860 [[package]] 1674 1861 name = "toml" 1675 - version = "0.8.12" 1862 + version = "0.8.23" 1676 1863 source = "registry+https://github.com/rust-lang/crates.io-index" 1677 - checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" 1864 + checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" 1678 1865 dependencies = [ 1679 1866 "serde", 1680 1867 "serde_spanned", ··· 1684 1871 1685 1872 [[package]] 1686 1873 name = "toml_datetime" 1687 - version = "0.6.5" 1874 + version = "0.6.11" 1688 1875 source = "registry+https://github.com/rust-lang/crates.io-index" 1689 - checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" 1876 + checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" 1690 1877 dependencies = [ 1691 1878 "serde", 1692 1879 ] 1693 1880 1694 1881 [[package]] 1695 1882 name = "toml_edit" 1696 - version = "0.22.9" 1883 + version = "0.22.27" 1697 1884 source = "registry+https://github.com/rust-lang/crates.io-index" 1698 - checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" 1885 + checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 1699 1886 dependencies = [ 1700 1887 "indexmap", 1701 1888 "serde", 1702 1889 "serde_spanned", 1703 1890 "toml_datetime", 1891 + "toml_write", 1704 1892 "winnow", 1705 1893 ] 1706 1894 1707 1895 [[package]] 1896 + name = "toml_write" 1897 + version = "0.1.2" 1898 + source = "registry+https://github.com/rust-lang/crates.io-index" 1899 + checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" 1900 + 1901 + [[package]] 1708 1902 name = "tower-service" 1709 - version = "0.3.2" 1903 + version = "0.3.3" 1710 1904 source = "registry+https://github.com/rust-lang/crates.io-index" 1711 - checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1905 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1712 1906 1713 1907 [[package]] 1714 1908 name = "tracing" 1715 - version = "0.1.40" 1909 + version = "0.1.41" 1716 1910 source = "registry+https://github.com/rust-lang/crates.io-index" 1717 - checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1911 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 1718 1912 dependencies = [ 1719 1913 "log", 1720 1914 "pin-project-lite", ··· 1723 1917 1724 1918 [[package]] 1725 1919 name = "tracing-core" 1726 - version = "0.1.32" 1920 + version = "0.1.34" 1727 1921 source = "registry+https://github.com/rust-lang/crates.io-index" 1728 - checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1922 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 1729 1923 dependencies = [ 1730 1924 "once_cell", 1731 1925 ] ··· 1738 1932 1739 1933 [[package]] 1740 1934 name = "tungstenite" 1741 - version = "0.20.1" 1935 + version = "0.21.0" 1742 1936 source = "registry+https://github.com/rust-lang/crates.io-index" 1743 - checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" 1937 + checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" 1744 1938 dependencies = [ 1745 1939 "byteorder", 1746 1940 "bytes", 1747 1941 "data-encoding", 1748 - "http", 1942 + "http 1.3.1", 1749 1943 "httparse", 1750 1944 "log", 1751 - "rand", 1945 + "rand 0.8.5", 1752 1946 "sha1", 1753 1947 "thiserror", 1754 1948 "url", ··· 1757 1951 1758 1952 [[package]] 1759 1953 name = "typenum" 1760 - version = "1.17.0" 1954 + version = "1.18.0" 1761 1955 source = "registry+https://github.com/rust-lang/crates.io-index" 1762 - checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1956 + checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 1763 1957 1764 1958 [[package]] 1765 1959 name = "unicase" 1766 - version = "2.7.0" 1960 + version = "2.8.1" 1767 1961 source = "registry+https://github.com/rust-lang/crates.io-index" 1768 - checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 1769 - dependencies = [ 1770 - "version_check", 1771 - ] 1962 + checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 1772 1963 1773 1964 [[package]] 1774 1965 name = "unicode-bidi" 1775 - version = "0.3.15" 1966 + version = "0.3.18" 1776 1967 source = "registry+https://github.com/rust-lang/crates.io-index" 1777 - checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1968 + checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 1778 1969 1779 1970 [[package]] 1780 1971 name = "unicode-ident" 1781 - version = "1.0.12" 1972 + version = "1.0.18" 1782 1973 source = "registry+https://github.com/rust-lang/crates.io-index" 1783 - checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1974 + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 1784 1975 1785 1976 [[package]] 1786 1977 name = "unicode-normalization" 1787 - version = "0.1.23" 1978 + version = "0.1.24" 1788 1979 source = "registry+https://github.com/rust-lang/crates.io-index" 1789 - checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 1980 + checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 1790 1981 dependencies = [ 1791 1982 "tinyvec", 1792 1983 ] 1793 1984 1794 1985 [[package]] 1986 + name = "unicode-properties" 1987 + version = "0.1.3" 1988 + source = "registry+https://github.com/rust-lang/crates.io-index" 1989 + checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 1990 + 1991 + [[package]] 1795 1992 name = "url" 1796 - version = "2.5.0" 1993 + version = "2.5.4" 1797 1994 source = "registry+https://github.com/rust-lang/crates.io-index" 1798 - checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 1995 + checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 1799 1996 dependencies = [ 1800 1997 "form_urlencoded", 1801 1998 "idna", ··· 1809 2006 checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 1810 2007 1811 2008 [[package]] 2009 + name = "utf8_iter" 2010 + version = "1.0.4" 2011 + source = "registry+https://github.com/rust-lang/crates.io-index" 2012 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2013 + 2014 + [[package]] 1812 2015 name = "utf8parse" 1813 - version = "0.2.1" 2016 + version = "0.2.2" 1814 2017 source = "registry+https://github.com/rust-lang/crates.io-index" 1815 - checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 2018 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1816 2019 1817 2020 [[package]] 1818 2021 name = "vcpkg" ··· 1822 2025 1823 2026 [[package]] 1824 2027 name = "version_check" 1825 - version = "0.9.4" 2028 + version = "0.9.5" 1826 2029 source = "registry+https://github.com/rust-lang/crates.io-index" 1827 - checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2030 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1828 2031 1829 2032 [[package]] 1830 2033 name = "want" ··· 1837 2040 1838 2041 [[package]] 1839 2042 name = "warp" 1840 - version = "0.3.6" 2043 + version = "0.3.7" 1841 2044 source = "registry+https://github.com/rust-lang/crates.io-index" 1842 - checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169" 2045 + checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" 1843 2046 dependencies = [ 1844 2047 "bytes", 1845 2048 "futures-channel", 1846 2049 "futures-util", 1847 2050 "headers", 1848 - "http", 2051 + "http 0.2.12", 1849 2052 "hyper", 1850 2053 "log", 1851 2054 "mime", ··· 1853 2056 "multer", 1854 2057 "percent-encoding", 1855 2058 "pin-project", 1856 - "rustls-pemfile", 1857 2059 "scoped-tls", 1858 2060 "serde", 1859 2061 "serde_json", 1860 2062 "serde_urlencoded", 1861 2063 "tokio", 1862 - "tokio-stream", 1863 2064 "tokio-tungstenite", 1864 2065 "tokio-util", 1865 2066 "tower-service", ··· 1873 2074 checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1874 2075 1875 2076 [[package]] 2077 + name = "wasi" 2078 + version = "0.14.2+wasi-0.2.4" 2079 + source = "registry+https://github.com/rust-lang/crates.io-index" 2080 + checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2081 + dependencies = [ 2082 + "wit-bindgen-rt", 2083 + ] 2084 + 2085 + [[package]] 1876 2086 name = "wasite" 1877 2087 version = "0.1.0" 1878 2088 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1880 2090 1881 2091 [[package]] 1882 2092 name = "wasm-bindgen" 1883 - version = "0.2.92" 2093 + version = "0.2.100" 1884 2094 source = "registry+https://github.com/rust-lang/crates.io-index" 1885 - checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 2095 + checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 1886 2096 dependencies = [ 1887 2097 "cfg-if", 2098 + "once_cell", 1888 2099 "wasm-bindgen-macro", 1889 2100 ] 1890 2101 1891 2102 [[package]] 1892 2103 name = "wasm-bindgen-backend" 1893 - version = "0.2.92" 2104 + version = "0.2.100" 1894 2105 source = "registry+https://github.com/rust-lang/crates.io-index" 1895 - checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 2106 + checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 1896 2107 dependencies = [ 1897 2108 "bumpalo", 1898 2109 "log", 1899 - "once_cell", 1900 2110 "proc-macro2", 1901 2111 "quote", 1902 2112 "syn", ··· 1905 2115 1906 2116 [[package]] 1907 2117 name = "wasm-bindgen-macro" 1908 - version = "0.2.92" 2118 + version = "0.2.100" 1909 2119 source = "registry+https://github.com/rust-lang/crates.io-index" 1910 - checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 2120 + checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 1911 2121 dependencies = [ 1912 2122 "quote", 1913 2123 "wasm-bindgen-macro-support", ··· 1915 2125 1916 2126 [[package]] 1917 2127 name = "wasm-bindgen-macro-support" 1918 - version = "0.2.92" 2128 + version = "0.2.100" 1919 2129 source = "registry+https://github.com/rust-lang/crates.io-index" 1920 - checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 2130 + checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 1921 2131 dependencies = [ 1922 2132 "proc-macro2", 1923 2133 "quote", ··· 1928 2138 1929 2139 [[package]] 1930 2140 name = "wasm-bindgen-shared" 1931 - version = "0.2.92" 2141 + version = "0.2.100" 1932 2142 source = "registry+https://github.com/rust-lang/crates.io-index" 1933 - checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 2143 + checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2144 + dependencies = [ 2145 + "unicode-ident", 2146 + ] 1934 2147 1935 2148 [[package]] 1936 2149 name = "web-sys" 1937 - version = "0.3.69" 2150 + version = "0.3.77" 1938 2151 source = "registry+https://github.com/rust-lang/crates.io-index" 1939 - checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 2152 + checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 1940 2153 dependencies = [ 1941 2154 "js-sys", 1942 2155 "wasm-bindgen", ··· 1944 2157 1945 2158 [[package]] 1946 2159 name = "whoami" 1947 - version = "1.5.1" 2160 + version = "1.6.0" 1948 2161 source = "registry+https://github.com/rust-lang/crates.io-index" 1949 - checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" 2162 + checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" 1950 2163 dependencies = [ 1951 2164 "redox_syscall", 1952 2165 "wasite", ··· 1954 2167 ] 1955 2168 1956 2169 [[package]] 1957 - name = "winapi" 1958 - version = "0.3.9" 2170 + name = "winapi-util" 2171 + version = "0.1.9" 1959 2172 source = "registry+https://github.com/rust-lang/crates.io-index" 1960 - checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2173 + checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 1961 2174 dependencies = [ 1962 - "winapi-i686-pc-windows-gnu", 1963 - "winapi-x86_64-pc-windows-gnu", 2175 + "windows-sys 0.59.0", 1964 2176 ] 1965 2177 1966 2178 [[package]] 1967 - name = "winapi-i686-pc-windows-gnu" 1968 - version = "0.4.0" 2179 + name = "windows-sys" 2180 + version = "0.52.0" 1969 2181 source = "registry+https://github.com/rust-lang/crates.io-index" 1970 - checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2182 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2183 + dependencies = [ 2184 + "windows-targets", 2185 + ] 1971 2186 1972 2187 [[package]] 1973 - name = "winapi-util" 1974 - version = "0.1.6" 2188 + name = "windows-sys" 2189 + version = "0.59.0" 1975 2190 source = "registry+https://github.com/rust-lang/crates.io-index" 1976 - checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" 2191 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1977 2192 dependencies = [ 1978 - "winapi", 2193 + "windows-targets", 1979 2194 ] 1980 2195 1981 2196 [[package]] 1982 - name = "winapi-x86_64-pc-windows-gnu" 1983 - version = "0.4.0" 2197 + name = "windows-targets" 2198 + version = "0.52.6" 1984 2199 source = "registry+https://github.com/rust-lang/crates.io-index" 1985 - checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2200 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2201 + dependencies = [ 2202 + "windows_aarch64_gnullvm", 2203 + "windows_aarch64_msvc", 2204 + "windows_i686_gnu", 2205 + "windows_i686_gnullvm", 2206 + "windows_i686_msvc", 2207 + "windows_x86_64_gnu", 2208 + "windows_x86_64_gnullvm", 2209 + "windows_x86_64_msvc", 2210 + ] 1986 2211 1987 2212 [[package]] 1988 - name = "windows-sys" 1989 - version = "0.48.0" 2213 + name = "windows_aarch64_gnullvm" 2214 + version = "0.52.6" 1990 2215 source = "registry+https://github.com/rust-lang/crates.io-index" 1991 - checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1992 - dependencies = [ 1993 - "windows-targets 0.48.5", 1994 - ] 2216 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1995 2217 1996 2218 [[package]] 1997 - name = "windows-sys" 1998 - version = "0.52.0" 2219 + name = "windows_aarch64_msvc" 2220 + version = "0.52.6" 1999 2221 source = "registry+https://github.com/rust-lang/crates.io-index" 2000 - checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2001 - dependencies = [ 2002 - "windows-targets 0.52.4", 2003 - ] 2222 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2004 2223 2005 2224 [[package]] 2006 - name = "windows-targets" 2007 - version = "0.48.5" 2225 + name = "windows_i686_gnu" 2226 + version = "0.52.6" 2008 2227 source = "registry+https://github.com/rust-lang/crates.io-index" 2009 - checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2010 - dependencies = [ 2011 - "windows_aarch64_gnullvm 0.48.5", 2012 - "windows_aarch64_msvc 0.48.5", 2013 - "windows_i686_gnu 0.48.5", 2014 - "windows_i686_msvc 0.48.5", 2015 - "windows_x86_64_gnu 0.48.5", 2016 - "windows_x86_64_gnullvm 0.48.5", 2017 - "windows_x86_64_msvc 0.48.5", 2018 - ] 2228 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2019 2229 2020 2230 [[package]] 2021 - name = "windows-targets" 2022 - version = "0.52.4" 2231 + name = "windows_i686_gnullvm" 2232 + version = "0.52.6" 2023 2233 source = "registry+https://github.com/rust-lang/crates.io-index" 2024 - checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" 2025 - dependencies = [ 2026 - "windows_aarch64_gnullvm 0.52.4", 2027 - "windows_aarch64_msvc 0.52.4", 2028 - "windows_i686_gnu 0.52.4", 2029 - "windows_i686_msvc 0.52.4", 2030 - "windows_x86_64_gnu 0.52.4", 2031 - "windows_x86_64_gnullvm 0.52.4", 2032 - "windows_x86_64_msvc 0.52.4", 2033 - ] 2234 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2235 + 2236 + [[package]] 2237 + name = "windows_i686_msvc" 2238 + version = "0.52.6" 2239 + source = "registry+https://github.com/rust-lang/crates.io-index" 2240 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2034 2241 2035 2242 [[package]] 2036 - name = "windows_aarch64_gnullvm" 2037 - version = "0.48.5" 2243 + name = "windows_x86_64_gnu" 2244 + version = "0.52.6" 2038 2245 source = "registry+https://github.com/rust-lang/crates.io-index" 2039 - checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2246 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2040 2247 2041 2248 [[package]] 2042 - name = "windows_aarch64_gnullvm" 2043 - version = "0.52.4" 2249 + name = "windows_x86_64_gnullvm" 2250 + version = "0.52.6" 2044 2251 source = "registry+https://github.com/rust-lang/crates.io-index" 2045 - checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" 2252 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2046 2253 2047 2254 [[package]] 2048 - name = "windows_aarch64_msvc" 2049 - version = "0.48.5" 2255 + name = "windows_x86_64_msvc" 2256 + version = "0.52.6" 2050 2257 source = "registry+https://github.com/rust-lang/crates.io-index" 2051 - checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2258 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2052 2259 2053 2260 [[package]] 2054 - name = "windows_aarch64_msvc" 2055 - version = "0.52.4" 2261 + name = "winnow" 2262 + version = "0.7.10" 2056 2263 source = "registry+https://github.com/rust-lang/crates.io-index" 2057 - checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" 2264 + checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" 2265 + dependencies = [ 2266 + "memchr", 2267 + ] 2058 2268 2059 2269 [[package]] 2060 - name = "windows_i686_gnu" 2061 - version = "0.48.5" 2270 + name = "wit-bindgen-rt" 2271 + version = "0.39.0" 2062 2272 source = "registry+https://github.com/rust-lang/crates.io-index" 2063 - checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2273 + checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 2274 + dependencies = [ 2275 + "bitflags", 2276 + ] 2064 2277 2065 2278 [[package]] 2066 - name = "windows_i686_gnu" 2067 - version = "0.52.4" 2279 + name = "writeable" 2280 + version = "0.6.1" 2068 2281 source = "registry+https://github.com/rust-lang/crates.io-index" 2069 - checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" 2282 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 2070 2283 2071 2284 [[package]] 2072 - name = "windows_i686_msvc" 2073 - version = "0.48.5" 2285 + name = "yoke" 2286 + version = "0.8.0" 2074 2287 source = "registry+https://github.com/rust-lang/crates.io-index" 2075 - checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2288 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 2289 + dependencies = [ 2290 + "serde", 2291 + "stable_deref_trait", 2292 + "yoke-derive", 2293 + "zerofrom", 2294 + ] 2076 2295 2077 2296 [[package]] 2078 - name = "windows_i686_msvc" 2079 - version = "0.52.4" 2297 + name = "yoke-derive" 2298 + version = "0.8.0" 2080 2299 source = "registry+https://github.com/rust-lang/crates.io-index" 2081 - checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" 2300 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 2301 + dependencies = [ 2302 + "proc-macro2", 2303 + "quote", 2304 + "syn", 2305 + "synstructure", 2306 + ] 2082 2307 2083 2308 [[package]] 2084 - name = "windows_x86_64_gnu" 2085 - version = "0.48.5" 2309 + name = "zerocopy" 2310 + version = "0.8.25" 2086 2311 source = "registry+https://github.com/rust-lang/crates.io-index" 2087 - checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2312 + checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 2313 + dependencies = [ 2314 + "zerocopy-derive", 2315 + ] 2088 2316 2089 2317 [[package]] 2090 - name = "windows_x86_64_gnu" 2091 - version = "0.52.4" 2318 + name = "zerocopy-derive" 2319 + version = "0.8.25" 2092 2320 source = "registry+https://github.com/rust-lang/crates.io-index" 2093 - checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" 2321 + checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 2322 + dependencies = [ 2323 + "proc-macro2", 2324 + "quote", 2325 + "syn", 2326 + ] 2094 2327 2095 2328 [[package]] 2096 - name = "windows_x86_64_gnullvm" 2097 - version = "0.48.5" 2329 + name = "zerofrom" 2330 + version = "0.1.6" 2098 2331 source = "registry+https://github.com/rust-lang/crates.io-index" 2099 - checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2332 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2333 + dependencies = [ 2334 + "zerofrom-derive", 2335 + ] 2100 2336 2101 2337 [[package]] 2102 - name = "windows_x86_64_gnullvm" 2103 - version = "0.52.4" 2338 + name = "zerofrom-derive" 2339 + version = "0.1.6" 2104 2340 source = "registry+https://github.com/rust-lang/crates.io-index" 2105 - checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" 2341 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2342 + dependencies = [ 2343 + "proc-macro2", 2344 + "quote", 2345 + "syn", 2346 + "synstructure", 2347 + ] 2106 2348 2107 2349 [[package]] 2108 - name = "windows_x86_64_msvc" 2109 - version = "0.48.5" 2350 + name = "zerotrie" 2351 + version = "0.2.2" 2110 2352 source = "registry+https://github.com/rust-lang/crates.io-index" 2111 - checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 2353 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 2354 + dependencies = [ 2355 + "displaydoc", 2356 + "yoke", 2357 + "zerofrom", 2358 + ] 2112 2359 2113 2360 [[package]] 2114 - name = "windows_x86_64_msvc" 2115 - version = "0.52.4" 2361 + name = "zerovec" 2362 + version = "0.11.2" 2116 2363 source = "registry+https://github.com/rust-lang/crates.io-index" 2117 - checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" 2364 + checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 2365 + dependencies = [ 2366 + "yoke", 2367 + "zerofrom", 2368 + "zerovec-derive", 2369 + ] 2118 2370 2119 2371 [[package]] 2120 - name = "winnow" 2121 - version = "0.6.5" 2372 + name = "zerovec-derive" 2373 + version = "0.11.1" 2122 2374 source = "registry+https://github.com/rust-lang/crates.io-index" 2123 - checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" 2375 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 2124 2376 dependencies = [ 2125 - "memchr", 2377 + "proc-macro2", 2378 + "quote", 2379 + "syn", 2126 2380 ]
+5 -6
Dockerfile
··· 1 - FROM rust:1.74.1-slim-buster 1 + FROM rust:1.87.0-slim-bookworm 2 2 ARG DEBIAN_FRONTEND=noninteractive 3 3 RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests ca-certificates pkg-config libssl-dev libpq-dev 4 4 ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse 5 5 6 6 RUN --mount=type=cache,target=$CARGO_HOME/registry \ 7 - cargo install diesel_cli --version 2.1.1 --no-default-features --features postgres 7 + cargo install diesel_cli --version 2.2.10 --no-default-features --features postgres 8 8 9 9 COPY common /lumen/common 10 10 COPY lumen /lumen/lumen 11 11 COPY Cargo.toml /lumen/ 12 12 RUN --mount=type=cache,target=$CARGO_HOME/registry,target=/lumen/target \ 13 - cd /lumen && cargo build --release && cp /lumen/target/release/lumen /root/ 13 + cd /lumen && cargo build --release && cp /lumen/target/release/lumen /root/ 14 14 15 - FROM debian:buster-slim 15 + FROM debian:bookworm-slim 16 16 ARG DEBIAN_FRONTEND=noninteractive 17 17 RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests openssl libpq5 && \ 18 - sed -i -e 's,\[ v3_req \],\[ v3_req \]\nextendedKeyUsage = serverAuth,' /etc/ssl/openssl.cnf 18 + sed -i -e 's,\[ v3_req \],\[ v3_req \]\nextendedKeyUsage = serverAuth,' /etc/ssl/openssl.cnf 19 19 RUN mkdir /usr/lib/lumen/ 20 20 21 21 COPY --from=0 /usr/local/cargo/bin/diesel /usr/bin/diesel ··· 26 26 COPY config-example.toml docker-init.sh /lumen/ 27 27 RUN chmod a+x /lumen/docker-init.sh && chmod a+x /usr/bin/lumen 28 28 WORKDIR /lumen 29 - STOPSIGNAL SIGINT 30 29 CMD /lumen/docker-init.sh
+26 -15
common/Cargo.toml
··· 7 7 publish = false 8 8 9 9 [dependencies] 10 - tokio = {version = "1.32", features = ["full"], optional = true} 11 - log = {version = "0.4", features = ["release_max_level_debug"]} 12 - serde = {version = "1.0", features = ["derive"]} 13 - postgres-native-tls = {version = "0.5", optional = true} 14 - native-tls = {version = "0.2", optional = true} 10 + tokio = { version = "1.39", features = ["full"], optional = true } 11 + log = { version = "0.4", features = ["release_max_level_debug"] } 12 + serde = { version = "1.0", features = ["derive"] } 13 + postgres-native-tls = { version = "0.5", optional = true } 14 + native-tls = { version = "0.2", optional = true } 15 15 futures-util = "0.3" 16 16 toml = "0.8" 17 - warp = {version = "0.3", optional = true} 17 + warp = { version = "0.3", optional = true } 18 18 binascii = "0.1" 19 19 20 - tokio-postgres = {version = "0.7", default-features = false, optional = true} 21 - diesel = {version = "2.1", optional = true, default-features = false, features = ["postgres_backend", "time"]} 22 - time = {version = "0.3.31", optional = true} 23 - diesel-async = {version = "0.4.1", optional = true, features = ["postgres", "bb8"]} 20 + tokio-postgres = { version = "0.7", default-features = false, optional = true } 21 + diesel = { version = "2.2", optional = true, default-features = false, features = [ 22 + "postgres_backend", 23 + "time", 24 + ] } 25 + time = { version = "0.3.36", optional = true } 26 + diesel-async = { version = "0.5", optional = true, features = [ 27 + "postgres", 28 + "bb8", 29 + ] } 24 30 anyhow = "1.0" 25 - prometheus-client = "0.22.0" 26 - pbkdf2 = { version = "0.12.2" } 27 - sha2 = "0.10.8" 28 - rand = "0.8.5" 31 + prometheus-client = "0.22" 29 32 30 33 [features] 31 34 default = ["web", "db"] 32 35 web = ["warp"] 33 - db = ["tokio", "postgres-native-tls", "native-tls", "diesel", "diesel-async", "tokio-postgres", "time"] 36 + db = [ 37 + "tokio", 38 + "postgres-native-tls", 39 + "native-tls", 40 + "diesel", 41 + "diesel-async", 42 + "tokio-postgres", 43 + "time", 44 + ]
-21
common/migrations/2024-01-20-215809_users/down.sql
··· 1 - -- don't allow table to be modified until we're done... 2 - LOCK TABLE users; 3 - 4 - -- delete funcs that belong to users 5 - DELETE FROM funcs USING dbs, users 6 - WHERE dbs.id=funcs.db_id 7 - AND users.id=dbs.user_id 8 - AND users.cred_id IS NOT NULL; 9 - 10 - -- delete dbs that belong to users 11 - DELETE FROM dbs USING users WHERE dbs.user_id=users.id AND users.cred_id IS NOT NULL; 12 - 13 - -- delete all users with creds... 14 - DELETE FROM users WHERE cred_id is NOT NULL; 15 - DROP TABLE creds CASCADE; 16 - 17 - CREATE UNIQUE INDEX IF NOT EXISTS user_rec ON users(lic_id,lic_data,hostname); 18 - CREATE UNIQUE INDEX IF NOT EXISTS user_hn_null ON users (lic_id,lic_data, (hostname IS NULL)) WHERE hostname is NULL; 19 - DROP INDEX user_cred_idx; 20 - 21 - ALTER TABLE users DROP COLUMN cred_id;
-22
common/migrations/2024-01-20-215809_users/up.sql
··· 1 - CREATE TABLE creds ( 2 - id SERIAL PRIMARY KEY, 3 - 4 - username VARCHAR(256) UNIQUE NOT NULL, 5 - email VARCHAR(256) UNIQUE NOT NULL, 6 - 7 - passwd_salt bytea, 8 - passwd_iters INTEGER NOT NULL DEFAULT 10000, 9 - passwd_hash bytea, 10 - 11 - last_active TIMESTAMPTZ, 12 - creation_dt TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL, 13 - 14 - is_admin BOOLEAN NOT NULL DEFAULT FALSE, 15 - is_enabled BOOLEAN NOT NULL DEFAULT TRUE 16 - ); 17 - 18 - ALTER TABLE users ADD COLUMN cred_id INTEGER REFERENCES creds(id) ON DELETE CASCADE; 19 - 20 - CREATE UNIQUE INDEX user_cred_idx ON users(lic_id,lic_data,hostname,cred_id) NULLS NOT DISTINCT; 21 - DROP INDEX user_hn_null; 22 - DROP INDEX user_rec;
+3 -36
common/src/config.rs
··· 1 1 use serde::Deserialize; 2 - use std::num::NonZeroU32; 3 2 use std::time::Duration; 4 3 use std::{net::SocketAddr, path::PathBuf}; 5 4 use toml::from_str; ··· 10 9 } 11 10 12 11 #[derive(Deserialize)] 13 - #[serde(default)] 14 12 pub struct LuminaServer { 15 13 pub bind_addr: SocketAddr, 16 - pub use_tls: bool, 14 + pub use_tls: Option<bool>, 17 15 pub tls: Option<TlsIdentity>, 18 16 pub server_name: Option<String>, 19 - pub allow_deletes: bool, 17 + pub allow_deletes: Option<bool>, 20 18 21 19 /// limit of function histories to return per function. 22 20 /// `None`, or `Some(0)` will disable the feature on the server. 23 - pub get_history_limit: NonZeroU32, 24 - } 25 - impl Default for LuminaServer { 26 - fn default() -> Self { 27 - Self { 28 - bind_addr: "0.0.0.0:1234".parse().unwrap(), 29 - use_tls: false, 30 - tls: None, 31 - server_name: None, 32 - allow_deletes: false, 33 - get_history_limit: NonZeroU32::new(50).unwrap(), 34 - } 35 - } 21 + pub get_history_limit: Option<u32>, 36 22 } 37 23 38 24 #[derive(Deserialize)] ··· 77 63 } 78 64 79 65 #[derive(Deserialize)] 80 - #[serde(default)] 81 - pub struct Users { 82 - /// Sets if guests are allowed to login. required for IDA<8.1 83 - pub allow_guests: bool, 84 - 85 - /// PBKDF2 iterations for newly set passwords. 86 - pub pbkdf2_iterations: NonZeroU32, 87 - } 88 - 89 - impl Default for Users { 90 - fn default() -> Self { 91 - Self { allow_guests: true, pbkdf2_iterations: NonZeroU32::new(120_000).unwrap() } 92 - } 93 - } 94 - 95 - #[derive(Deserialize)] 96 66 pub struct Config { 97 67 pub lumina: LuminaServer, 98 68 pub api_server: Option<WebServer>, ··· 100 70 101 71 #[serde(default)] 102 72 pub limits: Limits, 103 - 104 - #[serde(default)] 105 - pub users: Users, 106 73 } 107 74 108 75 pub trait HasConfig {
+17 -131
common/src/db/mod.rs
··· 1 - use crate::{ 2 - async_drop::{AsyncDropGuard, AsyncDropper}, 3 - db::schema::Creds, 4 - }; 1 + use crate::async_drop::{AsyncDropGuard, AsyncDropper}; 5 2 use log::*; 6 3 use postgres_native_tls::MakeTlsConnector; 7 4 use serde::Serialize; ··· 15 12 query_builder::{Query, QueryFragment}, 16 13 sql_types::{Array, Binary, Integer, VarChar}, 17 14 upsert::excluded, 18 - ExpressionMethods, NullableExpressionMethods, QueryDsl, SelectableHelper, 15 + ExpressionMethods, NullableExpressionMethods, QueryDsl, 19 16 }; 20 17 use diesel_async::{pooled_connection::ManagerConfig, RunQueryDsl}; 21 - 22 - use self::schema::creds; 23 18 24 19 pub type DynConfig = dyn crate::config::HasConfig + Send + Sync; 25 20 ··· 140 135 } 141 136 142 137 pub async fn get_funcs( 143 - &self, funcs: &[crate::rpc::PatternId<'_>], 138 + &self, funcs: &[crate::rpc::PullMetadataFunc<'_>], 144 139 ) -> Result<Vec<Option<FunctionInfo>>, anyhow::Error> { 145 - let chksums: Vec<&[u8]> = funcs.iter().map(|v| v.data).collect(); 140 + let chksums: Vec<&[u8]> = funcs.iter().map(|v| v.mb_hash).collect(); 146 141 147 142 let rows: Vec<(String, i32, Vec<u8>, Vec<u8>)> = { 148 143 let conn = &mut self.diesel.get().await?; ··· 174 169 } 175 170 176 171 pub async fn get_or_create_user<'a>( 177 - &self, user: &'a crate::rpc::RpcHello<'a>, cred_id: Option<i32>, hostname: &str, 172 + &self, user: &'a crate::rpc::RpcHello<'a>, hostname: &str, 178 173 ) -> Result<i32, anyhow::Error> { 179 174 use schema::users; 180 175 ··· 184 179 let lic_data = user.license_data; 185 180 186 181 let get_user = || { 187 - let query = users::table 188 - .into_boxed() 182 + users::table 189 183 .select(users::id) 190 184 .filter(users::lic_data.eq(lic_data)) 191 185 .filter(users::lic_id.eq(lic_id)) 192 - .filter(users::hostname.eq(hostname)); 193 - 194 - if let Some(cred_id) = cred_id { 195 - query.filter(users::cred_id.eq(cred_id)) 196 - } else { 197 - query.filter(users::cred_id.is_null()) 198 - } 186 + .filter(users::hostname.eq(hostname)) 199 187 }; 200 188 201 189 match get_user().get_result::<i32>(conn).await { ··· 209 197 users::lic_id.eq(lic_id), 210 198 users::lic_data.eq(lic_data), 211 199 users::hostname.eq(hostname), 212 - users::cred_id.eq(cred_id), 213 200 )]) 214 201 .returning(users::id) // xmax = 0 if the row is new 215 202 .get_result::<i32>(conn) ··· 231 218 ) -> Result<i32, anyhow::Error> { 232 219 use schema::files::{chksum, id, table as files}; 233 220 234 - let hash = &funcs.input_md5[..]; 221 + let hash = &funcs.md5[..]; 235 222 236 223 let conn = &mut self.diesel.get().await?; 237 224 ··· 260 247 } 261 248 262 249 async fn get_or_create_db<'a>( 263 - &self, user: &'a crate::rpc::RpcHello<'a>, cred_id: Option<i32>, 264 - funcs: &'a crate::rpc::PushMetadata<'a>, 250 + &self, user: &'a crate::rpc::RpcHello<'a>, funcs: &'a crate::rpc::PushMetadata<'a>, 265 251 ) -> Result<i32, anyhow::Error> { 266 252 use schema::dbs::{ 267 253 file_id as db_file_id, file_path, id as db_id, idb_path, table as dbs, ··· 269 255 }; 270 256 271 257 let file_id = self.get_or_create_file(funcs); 272 - let user_id = self.get_or_create_user(user, cred_id, funcs.hostname); 258 + let user_id = self.get_or_create_user(user, funcs.hostname); 273 259 274 260 let (file_id, user_id): (i32, i32) = futures_util::try_join!(file_id, user_id)?; 275 261 ··· 279 265 dbs.select(db_id) 280 266 .filter(db_user.eq(user_id)) 281 267 .filter(db_file_id.eq(file_id)) 282 - .filter(file_path.eq(funcs.input_path)) 268 + .filter(file_path.eq(funcs.file_path)) 283 269 .filter(idb_path.eq(funcs.idb_path)) 284 270 }; 285 271 ··· 293 279 .values(vec![( 294 280 db_user.eq(user_id), 295 281 db_file_id.eq(file_id), 296 - file_path.eq(funcs.input_path), 282 + file_path.eq(funcs.file_path), 297 283 idb_path.eq(funcs.idb_path), 298 284 )]) 299 285 .returning(db_id) ··· 311 297 } 312 298 313 299 pub async fn push_funcs<'a, 'b>( 314 - &'b self, user: &'a crate::rpc::RpcHello<'a>, cred_id: Option<i32>, 315 - funcs: &'a crate::rpc::PushMetadata<'a>, scores: &[u32], 300 + &'b self, user: &'a crate::rpc::RpcHello<'a>, funcs: &'a crate::rpc::PushMetadata<'a>, 301 + scores: &[u32], 316 302 ) -> Result<Vec<bool>, anyhow::Error> { 317 303 use futures_util::TryStreamExt; 318 304 319 305 // postgres has a limitation of binding per statement (i16::MAX). Split large push requests into smaller chunks. 320 306 const PUSH_FUNC_CHUNK_SIZE: usize = 3000; 321 307 322 - let db_id = self.get_or_create_db(user, cred_id, funcs).await?; 308 + let db_id = self.get_or_create_db(user, funcs).await?; 323 309 324 310 let mut rows = Vec::with_capacity(funcs.funcs.len().min(PUSH_FUNC_CHUNK_SIZE)); 325 311 let mut is_new = Vec::with_capacity(funcs.funcs.len()); ··· 329 315 for (idx, (func, &score)) in funcs.funcs.iter().zip(scores.iter()).enumerate() { 330 316 let name = func.name; 331 317 let len = func.func_len as i32; 332 - let chksum = func.pattern_id.data; 318 + let chksum = func.hash; 333 319 let md = func.func_data; 334 320 let score = score as i32; 335 321 ··· 432 418 ) -> Result<(), anyhow::Error> { 433 419 use schema::funcs::{chksum, table as funcs}; 434 420 435 - let chksums = req.calcrel_hashes.iter().map(|v| v.as_slice()).collect::<Vec<_>>(); 421 + let chksums = req.funcs.iter().map(|v| v.as_slice()).collect::<Vec<_>>(); 436 422 437 423 let conn = &mut self.diesel.get().await?; 438 424 let rows_modified = ··· 459 445 .get_results::<(time::OffsetDateTime, String, Vec<u8>)>(conn) 460 446 .await?; 461 447 Ok(rows) 462 - } 463 - 464 - pub async fn get_users(&self) -> Result<Vec<(i32, String, String, bool, bool)>, anyhow::Error> { 465 - let db = &mut self.diesel.get().await?; 466 - 467 - creds::table 468 - .select(( 469 - creds::id, 470 - creds::username, 471 - creds::email, 472 - creds::is_admin, 473 - creds::passwd_hash.is_not_null(), 474 - )) 475 - .get_results::<(i32, String, String, bool, bool)>(db) 476 - .await 477 - .map_err(|v| v.into()) 478 - } 479 - 480 - pub async fn delete_user(&self, username: &str) -> Result<(), anyhow::Error> { 481 - let db = &mut self.diesel.get().await?; 482 - 483 - let changes = 484 - diesel::delete(creds::table.filter(creds::username.eq(username))).execute(db).await?; 485 - if changes != 1 { 486 - return Err(anyhow::anyhow!("expected a single row deletion, got {changes}")); 487 - } 488 - Ok(()) 489 - } 490 - 491 - pub async fn set_password( 492 - &self, username: &str, password: String, iters: u32, 493 - ) -> Result<(), anyhow::Error> { 494 - let (salt, hash) = 495 - tokio::task::spawn_blocking(move || Creds::generate_creds(&password, iters)).await?; 496 - 497 - let db = &mut self.diesel.get().await?; 498 - let rows = diesel::update(creds::table) 499 - .filter(creds::username.eq(username)) 500 - .set(( 501 - creds::passwd_iters.eq(iters as i32), 502 - creds::passwd_salt.eq(&salt[..]), 503 - creds::passwd_hash.eq(&hash[..]), 504 - )) 505 - .execute(db) 506 - .await?; 507 - if rows != 1 { 508 - return Err(anyhow::anyhow!("updated {rows} rows, expected to update 1")); 509 - } 510 - Ok(()) 511 - } 512 - 513 - pub async fn add_user( 514 - &self, username: &str, email: &str, is_admin: bool, 515 - ) -> Result<u32, anyhow::Error> { 516 - let db = &mut self.diesel.get().await?; 517 - 518 - diesel::insert_into(creds::table) 519 - .values(&Creds { 520 - username: username.into(), 521 - email: email.into(), 522 - passwd_salt: None, 523 - passwd_iters: 10_000, 524 - passwd_hash: None, 525 - last_active: None, 526 - is_enabled: true, 527 - is_admin, 528 - }) 529 - .returning(creds::id) 530 - .get_result::<i32>(db) 531 - .await 532 - .map_err(|v| v.into()) 533 - .map(|v| v as u32) 534 - } 535 - 536 - pub async fn get_user_by_username( 537 - &self, username: &str, 538 - ) -> Result<(i32, Creds), anyhow::Error> { 539 - let db = &mut self.diesel.get().await?; 540 - 541 - Ok(creds::table 542 - .select((creds::id, Creds::as_select())) 543 - .filter(creds::username.eq(username)) 544 - .get_result::<(i32, Creds)>(db) 545 - .await?) 546 - } 547 - 548 - pub async fn get_user_by_id(&self, id: i32) -> Result<Creds, anyhow::Error> { 549 - let db = &mut self.diesel.get().await?; 550 - 551 - Ok(creds::table.select(Creds::as_select()).filter(creds::id.eq(id)).get_result(db).await?) 552 - } 553 - 554 - pub async fn update_last_active(&self, user_id: i32) -> Result<(), anyhow::Error> { 555 - let mut db = self.diesel.get().await?; 556 - diesel::update(schema::creds::table) 557 - .filter(schema::creds::id.eq(user_id)) 558 - .set((schema::creds::last_active.eq(time::OffsetDateTime::now_utc()),)) 559 - .execute(&mut db) 560 - .await?; 561 - Ok(()) 562 448 } 563 449 } 564 450
-78
common/src/db/schema.rs
··· 1 - use std::borrow::Cow; 2 - 3 - use diesel::{Insertable, Queryable, Selectable}; 4 - use log::error; 5 - use pbkdf2::{hmac::Hmac, pbkdf2}; 6 - use sha2::Sha256; 7 - 8 1 pub use super::schema_auto::*; 9 2 10 3 diesel::table! { ··· 22 15 } 23 16 24 17 diesel::joinable!(func_ranks -> dbs (id)); 25 - 26 - #[derive(Insertable, Queryable, Selectable, Default)] 27 - #[diesel(table_name = creds)] 28 - pub struct Creds<'a> { 29 - pub username: Cow<'a, str>, 30 - pub email: Cow<'a, str>, 31 - 32 - pub passwd_salt: Option<Cow<'a, [u8]>>, 33 - pub passwd_iters: i32, 34 - pub passwd_hash: Option<Cow<'a, [u8]>>, 35 - 36 - pub last_active: Option<time::OffsetDateTime>, 37 - 38 - pub is_admin: bool, 39 - pub is_enabled: bool, 40 - } 41 - 42 - impl<'a> Creds<'a> { 43 - pub fn verify_password(&self, password: &str) -> bool { 44 - let salt = if let Some(v) = self.passwd_salt.as_ref() { 45 - v 46 - } else { 47 - return false; 48 - }; 49 - let current_hash = if let Some(v) = self.passwd_hash.as_ref() { 50 - v 51 - } else { 52 - return false; 53 - }; 54 - if self.passwd_iters <= 0 { 55 - return false; 56 - } 57 - 58 - let mut hash = vec![0u8; 32]; 59 - if pbkdf2::<Hmac<Sha256>>(password.as_bytes(), salt, self.passwd_iters as u32, &mut hash) 60 - .is_err() 61 - { 62 - error!("invalid output digest length"); 63 - return false; 64 - } 65 - 66 - hash == current_hash.as_ref() 67 - } 68 - 69 - pub(crate) fn generate_creds(password: &str, iters: u32) -> ([u8; 4], [u8; 32]) { 70 - let salt: [u8; 4] = rand::random(); 71 - let mut res = [0u8; 32]; 72 - pbkdf2::pbkdf2::<Hmac<Sha256>>(password.as_bytes(), &salt, iters, &mut res) 73 - .expect("failed to perform pbkdf2_hmac_sha256"); 74 - (salt, res) 75 - } 76 - } 77 - 78 - #[cfg(test)] 79 - mod tests { 80 - use super::*; 81 - 82 - #[test] 83 - fn generate_and_verify_password() { 84 - let password = "MyPassword1$"; 85 - let iters = 10_000; 86 - let (salt, hash) = Creds::generate_creds(password, iters); 87 - let creds = Creds { 88 - passwd_hash: Some((&hash[..]).into()), 89 - passwd_salt: Some((&salt[..]).into()), 90 - passwd_iters: iters as i32, 91 - ..Default::default() 92 - }; 93 - assert!(creds.verify_password(password), "failed to verify password"); 94 - } 95 - }
+1 -29
common/src/db/schema_auto.rs
··· 1 1 // @generated automatically by Diesel CLI. 2 2 3 3 diesel::table! { 4 - creds (id) { 5 - id -> Int4, 6 - #[max_length = 256] 7 - username -> Varchar, 8 - #[max_length = 256] 9 - email -> Varchar, 10 - passwd_salt -> Nullable<Bytea>, 11 - passwd_iters -> Int4, 12 - passwd_hash -> Nullable<Bytea>, 13 - last_active -> Nullable<Timestamptz>, 14 - creation_dt -> Timestamptz, 15 - is_admin -> Bool, 16 - is_enabled -> Bool, 17 - } 18 - } 19 - 20 - diesel::table! { 21 4 dbs (id) { 22 5 id -> Int4, 23 - #[max_length = 260] 24 6 file_path -> Nullable<Varchar>, 25 - #[max_length = 260] 26 7 idb_path -> Nullable<Varchar>, 27 8 file_id -> Nullable<Int4>, 28 9 user_id -> Nullable<Int4>, ··· 55 36 id -> Int4, 56 37 lic_id -> Nullable<Bytea>, 57 38 lic_data -> Nullable<Bytea>, 58 - #[max_length = 260] 59 39 hostname -> Nullable<Varchar>, 60 40 first_seen -> Nullable<Timestamptz>, 61 - cred_id -> Nullable<Int4>, 62 41 } 63 42 } 64 43 65 44 diesel::joinable!(dbs -> files (file_id)); 66 45 diesel::joinable!(dbs -> users (user_id)); 67 46 diesel::joinable!(funcs -> dbs (db_id)); 68 - diesel::joinable!(users -> creds (cred_id)); 69 47 70 - diesel::allow_tables_to_appear_in_same_query!( 71 - creds, 72 - dbs, 73 - files, 74 - funcs, 75 - users, 76 - ); 48 + diesel::allow_tables_to_appear_in_same_query!(dbs, files, funcs, users,);
+38 -35
common/src/rpc/messages.rs
··· 3 3 4 4 #[derive(Deserialize, Serialize)] 5 5 pub struct RpcFail<'a> { 6 - pub result: u32, 7 - pub error: &'a str, 6 + pub code: u32, 7 + pub message: &'a str, 8 8 } 9 9 10 10 #[derive(Serialize, Deserialize)] 11 11 pub struct RpcNotify<'a> { 12 - pub ty: u32, 13 - pub text: &'a str, 12 + pub code: u32, 13 + pub msg: &'a str, 14 14 } 15 15 16 16 #[derive(Serialize, Deserialize, Debug)] ··· 21 21 22 22 #[derive(Serialize, Deserialize)] 23 23 pub struct RpcHello<'a> { 24 - pub client_version: u32, 24 + pub protocol_version: u32, 25 25 pub license_data: &'a [u8], 26 26 pub lic_number: [u8; 6], 27 - pub record_conv: u32, 27 + pub unk2: u32, 28 28 } 29 29 30 30 #[derive(Debug, Deserialize, Serialize, Clone)] 31 - pub struct PatternId<'a> { 32 - pub ty: u32, 33 - pub data: &'a [u8], 31 + pub struct PullMetadataFunc<'a> { 32 + pub unk0: u32, 33 + pub mb_hash: &'a [u8], 34 34 } 35 35 36 36 #[derive(Deserialize, Serialize)] 37 37 pub struct PullMetadata<'a> { 38 - pub flags: u32, 39 - pub keys: Cow<'a, [u32]>, 38 + pub unk0: u32, 39 + pub unk1: Cow<'a, [u32]>, 40 40 41 41 #[serde(borrow)] 42 - pub pattern_ids: Cow<'a, [PatternId<'a>]>, 42 + pub funcs: Cow<'a, [PullMetadataFunc<'a>]>, 43 43 } 44 44 45 45 #[derive(Deserialize, Serialize, Clone)] ··· 52 52 53 53 #[derive(Deserialize, Serialize)] 54 54 pub struct PullMetadataResult<'a> { 55 - pub codes: Cow<'a, [u32]>, 55 + pub unk0: Cow<'a, [u32]>, 56 56 #[serde(borrow)] 57 57 pub funcs: Cow<'a, [PullMetadataResultFunc<'a>]>, 58 58 } ··· 62 62 pub name: &'a str, 63 63 pub func_len: u32, 64 64 pub func_data: &'a [u8], 65 - pub pattern_id: PatternId<'a>, 65 + 66 + // PullMetadata's fields (tuple 'unk2') are similar to these two 67 + pub unk2: u32, 68 + pub hash: &'a [u8], 66 69 } 67 70 68 71 #[derive(Deserialize, Serialize)] 69 72 pub struct PushMetadata<'a> { 70 - pub flags: u32, 73 + pub unk0: u32, 71 74 pub idb_path: &'a str, 72 - pub input_path: &'a str, 73 - pub input_md5: [u8; 16], 75 + pub file_path: &'a str, 76 + pub md5: [u8; 16], 74 77 pub hostname: &'a str, 75 78 pub funcs: Cow<'a, [PushMetadataFunc<'a>]>, 76 - pub ea64s: Cow<'a, [u64]>, 79 + pub unk1: Cow<'a, [u64]>, 77 80 } 78 81 79 82 #[derive(Deserialize, Serialize)] ··· 84 87 85 88 #[derive(Debug, Deserialize, Serialize)] 86 89 pub struct DelHistory<'a> { 87 - pub flags: u32, // =0x08 88 - pub license_ids: Cow<'a, [Cow<'a, str>]>, 89 - pub time_ranges: Cow<'a, [[u64; 2]]>, 90 - pub history_id_ranges: Cow<'a, [[u64; 2]]>, 91 - pub idbs: Cow<'a, [Cow<'a, str>]>, 92 - pub inputs: Cow<'a, [Cow<'a, str>]>, 93 - pub funcs: Cow<'a, [Cow<'a, str>]>, // funcs 94 - pub usernames: Cow<'a, [Cow<'a, str>]>, 95 - pub input_hashes: Cow<'a, [Cow<'a, [u8; 16]>]>, 96 - pub calcrel_hashes: Cow<'a, [Cow<'a, [u8; 16]>]>, 97 - pub push_id_ranges: Cow<'a, [[u64; 2]]>, 98 - pub max_entries: u64, 90 + pub unk0: u32, // =0x08 91 + pub unk1: Cow<'a, [Cow<'a, str>]>, 92 + pub unk2: Cow<'a, [[u64; 2]]>, 93 + pub unk3: Cow<'a, [[u64; 2]]>, 94 + pub unk4: Cow<'a, [Cow<'a, str>]>, 95 + pub unk5: Cow<'a, [Cow<'a, str>]>, 96 + pub unk6: Cow<'a, [Cow<'a, str>]>, 97 + pub unk7: Cow<'a, [Cow<'a, str>]>, 98 + pub unk8: Cow<'a, [Cow<'a, [u8; 16]>]>, 99 + pub funcs: Cow<'a, [Cow<'a, [u8; 16]>]>, 100 + pub unk10: Cow<'a, [[u64; 2]]>, 101 + pub unk11: u64, 99 102 } 100 103 101 104 #[derive(Deserialize, Serialize)] 102 105 pub struct DelHistoryResult { 103 - pub ndeleted: u32, 106 + pub deleted_mds: u32, 104 107 } 105 108 106 109 #[derive(Debug, Deserialize, Serialize, Default)] ··· 122 125 #[derive(Debug, Deserialize, Serialize)] 123 126 pub struct GetFuncHistories<'a> { 124 127 #[serde(borrow)] 125 - pub funcs: Cow<'a, [PatternId<'a>]>, 126 - pub flags: u32, 128 + pub funcs: Cow<'a, [PullMetadataFunc<'a>]>, 129 + pub unk0: u32, 127 130 } 128 131 129 132 #[derive(Debug, Deserialize, Serialize, Clone)] ··· 148 151 pub status: Cow<'a, [u32]>, 149 152 #[serde(borrow)] 150 153 pub funcs: Cow<'a, [FunctionHistories<'a>]>, 151 - pub authors: Cow<'a, [Cow<'a, str>]>, 152 - pub idb_paths: Cow<'a, [Cow<'a, str>]>, 154 + pub users: Cow<'a, [Cow<'a, str>]>, 155 + pub dbs: Cow<'a, [Cow<'a, str>]>, 153 156 }
+21 -45
common/src/rpc/mod.rs
··· 63 63 } 64 64 } 65 65 66 - pub struct PacketHeader { 67 - code: u8, 68 - size: usize, 69 - } 70 - 71 - pub async fn read_packet_header<R: AsyncRead + Unpin>( 72 - mut reader: R, 73 - ) -> Result<PacketHeader, Error> { 66 + pub async fn read_packet<R: AsyncRead + Unpin>(mut reader: R) -> Result<Vec<u8>, Error> { 74 67 let mut head = [0u8; 5]; 75 68 match reader.read_exact(&mut head).await { 76 69 Ok(_) => {}, ··· 90 83 .into()); 91 84 } 92 85 93 - Ok(PacketHeader { code, size: buf_len }) 94 - } 95 - 96 - impl PacketHeader { 97 - pub async fn read<R: AsyncRead + Unpin>(self, mut reader: R) -> Result<Vec<u8>, Error> { 98 - trace!("expecting {} bytes...", self.size); 99 - let buf_len = self.size + 1; 100 - 101 - let max_len = get_code_maxlen(self.code); 102 - if self.size > max_len { 103 - info!("maxium size exceeded: code={}: max={}; req={}", self.code, max_len, self.size); 104 - return Err(std::io::Error::new( 105 - std::io::ErrorKind::InvalidData, 106 - "request length exceeded maximum limit", 107 - ) 108 - .into()); 109 - } 110 - 111 - let mut data = Vec::new(); 112 - data.try_reserve_exact(buf_len)?; 113 - data.resize(buf_len, 0); 114 - data[0] = self.code; 115 - reader.read_exact(&mut data[1..]).await?; 86 + let max_len = get_code_maxlen(code); 116 87 117 - Ok(data) 88 + if buf_len > max_len { 89 + info!("maxium size exceeded: code={}: max={}; req={}", code, max_len, buf_len); 90 + return Err(std::io::Error::new( 91 + std::io::ErrorKind::InvalidData, 92 + "request length exceeded maximum limit", 93 + ) 94 + .into()); 118 95 } 119 96 120 - // returns true if this could be an http request. 121 - pub fn is_http(&self) -> bool { 122 - let mut sz = (self.size as u32).to_be_bytes(); 123 - sz.make_ascii_uppercase(); 124 - let sz = &sz[..]; 97 + // the additional byte is for the RPC code 98 + trace!("expecting {} bytes...", buf_len); 99 + let buf_len = buf_len + 1; 100 + 101 + let mut data = Vec::new(); 102 + data.try_reserve_exact(buf_len)?; 103 + data.resize(buf_len, 0); 104 + data[0] = code; 105 + reader.read_exact(&mut data[1..]).await?; 125 106 126 - match sz { 127 - b"GET " | b"PUT " if self.code == b'/' => true, 128 - b"POST" | b"HEAD" if self.code == b' ' => true, 129 - _ => false, 130 - } 131 - } 107 + Ok(data) 132 108 } 133 109 134 110 async fn write_packet<W: AsyncWrite + Unpin>(mut w: W, data: &[u8]) -> Result<(), std::io::Error> { ··· 217 193 0x0c => RpcMessage::Notify(Self::deserialize_check(payload)?), 218 194 0x0d => { 219 195 let (hello, consumed) = de::from_slice::<messages::RpcHello>(payload)?; 220 - let creds = if payload.len() > consumed && hello.client_version > 2 { 196 + let creds = if payload.len() > consumed && hello.protocol_version > 2 { 221 197 let payload = &payload[consumed..]; 222 198 let (creds, consumed) = de::from_slice::<Creds>(payload)?; 223 199 if payload.len() != consumed { ··· 225 201 } 226 202 Some(creds) 227 203 } else { 228 - if hello.client_version > 2 || payload.len() != consumed { 204 + if hello.protocol_version > 2 || payload.len() != consumed { 229 205 trace!("Unexpected Hello msg: {payload:02x?}"); 230 206 } 231 207 None
+1 -1
common/src/web/api.rs
··· 111 111 in_files: &'a [Md5], 112 112 } 113 113 114 - let funcs = [crate::rpc::PatternId { ty: 1, data: &md5.0 }]; 114 + let funcs = [crate::rpc::PullMetadataFunc { unk0: 1, mb_hash: &md5.0 }]; 115 115 116 116 let files_with = state.db.get_files_with_func(&md5.0[..]); 117 117 let files_info = state.db.get_funcs(&funcs);
+2 -8
config-example.toml
··· 7 7 server_name = "lumen" 8 8 9 9 # Allow clients to delete metadata from the database? 10 - allow_deletes = true 10 + allow_deletes = false 11 11 # How many function histories should we return? 0=Disabled. 12 12 get_history_limit = 50 13 13 14 - [users] 15 - # Enable guest accounts? disabling this will only allow IDA 8.1+ to connect. 16 - allow_guests = true 17 - # sets the amount of PBKDF2 iterations for storing passwords. 18 - pbkdf2_iterations = 120000 19 - 20 14 # only required when `use_tls` is set to true. 21 15 [lumina.tls] 22 - # Specify the server's certificate. 16 + # Specify the server's certificate. 23 17 # Clients connecting to the server must match this certificate. 24 18 # If the certificate is password protected, the password can be specified in the `PKCSPASSWD` environment variable. 25 19 server_cert = "path/to/server_crt"
+3 -4
lumen/Cargo.toml
··· 8 8 9 9 [dependencies] 10 10 common = { path = "../common" } 11 - tokio = { version = "1.32", features = ["full"] } 11 + tokio = { version = "1.39", features = ["full"] } 12 12 log = { version = "0.4", features = ["release_max_level_debug"] } 13 13 pretty_env_logger = "0.5" 14 - clap = "4.3" 14 + clap = "4.5" 15 15 tokio-native-tls = "0.3" 16 16 native-tls = { version = "0.2" } 17 17 warp = "0.3" 18 - prometheus-client = "0.22.0" 19 - rpassword = "7.3.1" 18 + prometheus-client = "0.22"
+6 -62
lumen/src/main.rs
··· 4 4 #![warn(unused_crate_dependencies)] 5 5 #![deny(clippy::all)] 6 6 7 - use clap::{builder::BoolishValueParser, Arg, Command}; 7 + use clap::Arg; 8 8 use log::*; 9 9 use server::do_lumen; 10 10 use std::sync::Arc; 11 - use users::UserMgmt; 12 11 13 12 mod server; 14 - mod users; 15 13 mod web; 16 14 15 + use common::config; 16 + 17 17 fn setup_logger() { 18 18 if std::env::var("RUST_LOG").is_err() { 19 19 std::env::set_var("RUST_LOG", concat!(env!("CARGO_PKG_NAME"), "=info")); ··· 23 23 24 24 #[tokio::main] 25 25 async fn main() { 26 + setup_logger(); 26 27 let matches = clap::Command::new("lumen") 27 28 .version(env!("CARGO_PKG_VERSION")) 28 29 .about("lumen is a private Lumina server for IDA.\nVisit https://github.com/naim94a/lumen/ for updates.") ··· 33 34 .default_value("config.toml") 34 35 .help("Configuration file path") 35 36 ) 36 - .subcommand( 37 - Command::new("users") 38 - .about("User Management") 39 - .subcommand( 40 - Command::new("add") 41 - .about("Adds a user") 42 - .arg( 43 - Arg::new("username") 44 - .required(true) 45 - ) 46 - .arg( 47 - Arg::new("email") 48 - .required(true) 49 - ) 50 - .arg( 51 - Arg::new("is_admin") 52 - .required(false) 53 - .default_value("no") 54 - .value_parser(BoolishValueParser::new()) 55 - ) 56 - ) 57 - .subcommand( 58 - Command::new("del") 59 - .about("Deletes a user") 60 - .arg(Arg::new("username")) 61 - ) 62 - ) 63 - .subcommand(Command::new("passwd").about("Set user password").arg(Arg::new("username").required(true))) 64 37 .get_matches(); 65 38 66 39 let config = { 67 - common::config::load_config( 40 + config::load_config( 68 41 std::fs::File::open(matches.get_one::<String>("config").unwrap()) 69 42 .expect("failed to read config"), 70 43 ) 71 44 }; 72 45 let config = Arc::new(config); 73 46 74 - match matches.subcommand() { 75 - Some(("users", m)) => { 76 - let users = UserMgmt::new(&config).await; 77 - match m.subcommand() { 78 - None => users.list_users().await, 79 - Some(("add", m)) => { 80 - let username = m.get_one::<String>("username").unwrap(); 81 - let email = m.get_one::<String>("email").unwrap(); 82 - let is_admin = *m.get_one::<bool>("is_admin").unwrap_or(&false); 83 - users.add_user(username, email, is_admin).await; 84 - }, 85 - Some(("del", m)) => { 86 - let username = m.get_one::<String>("username").unwrap(); 87 - users.delete_user(username).await; 88 - }, 89 - _ => unreachable!(), 90 - }; 91 - }, 92 - Some(("passwd", m)) => { 93 - let username = m.get_one::<String>("username").unwrap(); 94 - let password = rpassword::prompt_password("New Password: ").unwrap(); 95 - let users = UserMgmt::new(&config).await; 96 - users.set_password(username, &password).await; 97 - }, 98 - Some(_) => unreachable!(), 99 - None => { 100 - setup_logger(); 101 - do_lumen(config).await 102 - }, 103 - }; 47 + do_lumen(config).await; 104 48 }
+102 -240
lumen/src/server.rs
··· 1 1 use std::{ 2 - borrow::Cow, 3 - collections::HashMap, 4 - mem::discriminant, 5 - process::exit, 6 - sync::Arc, 7 - time::{Duration, Instant}, 2 + borrow::Cow, collections::HashMap, mem::discriminant, process::exit, sync::Arc, time::Instant, 8 3 }; 9 4 10 5 use common::{ 11 6 async_drop::AsyncDropper, 12 7 config::Config, 13 - db::{self, Database}, 8 + db::Database, 14 9 make_pretty_hex, md, 15 10 metrics::LuminaVersion, 16 - rpc::{self, Creds, Error, HelloResult, RpcFail, RpcHello, RpcMessage}, 11 + rpc::{self, Error, HelloResult, RpcFail, RpcHello, RpcMessage}, 17 12 SharedState, SharedState_, 18 13 }; 19 14 use log::{debug, error, info, trace, warn}; ··· 26 21 27 22 use crate::web; 28 23 29 - struct Session<'a> { 30 - state: &'a SharedState_, 31 - hello_msg: RpcHello<'a>, 32 - _creds: db::schema::Creds<'a>, 33 - creds_id: Option<i32>, 34 - last_cred_check: Instant, 35 - } 36 - impl<'a> Session<'a> { 37 - /// Check if the user changed in the database. 38 - pub async fn is_valid(&mut self) -> bool { 39 - let db = &self.state.db; 40 - if let Some(cred_id) = self.creds_id { 41 - if self.last_cred_check.elapsed() > Duration::from_secs(60 * 5) { 42 - match db.get_user_by_id(cred_id).await { 43 - Ok(v) => { 44 - if !v.is_enabled 45 - || v.is_admin != self._creds.is_admin 46 - || v.passwd_salt != self._creds.passwd_salt 47 - { 48 - // user changed, force them to login again. 49 - return false; 50 - } 51 - self.last_cred_check = Instant::now(); 52 - return true; 53 - }, 54 - Err(err) => { 55 - error!("db error: {err}"); 56 - return false; 57 - }, 58 - } 59 - } 60 - } 61 - true 62 - } 63 - } 64 - 65 24 async fn handle_transaction<'a, S: AsyncRead + AsyncWrite + Unpin>( 66 - session: &mut Session<'a>, mut stream: S, 25 + state: &SharedState, user: &'a RpcHello<'a>, mut stream: S, 67 26 ) -> Result<(), Error> { 68 - let state = session.state; 69 27 let db = &state.db; 70 28 let server_name = state.server_name.as_str(); 71 29 72 30 trace!("waiting for command.."); 73 - let rpkt = async { 74 - let hdr = rpc::read_packet_header(&mut stream).await?; 75 - // we don't want to read a whole request just to find out the user was revoked... 76 - if !session.is_valid().await { 77 - return Err(Error::Timeout); 78 - } 79 - hdr.read(&mut stream).await 80 - }; 81 - let req = match timeout(Duration::from_secs(3600), rpkt).await { 82 - Ok(res) => match res { 83 - Ok(v) => v, 84 - Err(e) => return Err(e), 85 - }, 86 - Err(_) => { 87 - _ = RpcMessage::Fail(RpcFail { 88 - result: 0, 89 - error: &format!("{server_name} client idle for too long.\n"), 90 - }) 91 - .async_write(&mut stream) 92 - .await; 93 - return Err(Error::Timeout); 94 - }, 95 - }; 31 + let req = 32 + match timeout(state.config.limits.command_timeout, rpc::read_packet(&mut stream)).await { 33 + Ok(res) => match res { 34 + Ok(v) => v, 35 + Err(e) => return Err(e), 36 + }, 37 + Err(_) => { 38 + _ = RpcMessage::Fail(RpcFail { 39 + code: 0, 40 + message: &format!("{server_name} client idle for too long.\n"), 41 + }) 42 + .async_write(&mut stream) 43 + .await; 44 + return Err(Error::Timeout); 45 + }, 46 + }; 96 47 trace!("got command!"); 97 - 98 - if !session.is_valid().await { 99 - return Err(Error::Timeout); 100 - } 101 - 102 48 let req = match RpcMessage::deserialize(&req) { 103 49 Ok(v) => v, 104 50 Err(err) => { 105 51 warn!("bad message: \n{}\n", make_pretty_hex(&req)); 106 52 error!("failed to process rpc message: {}", err); 107 53 let resp = rpc::RpcFail { 108 - result: 0, 109 - error: &format!("{server_name}: error: invalid data.\n"), 54 + code: 0, 55 + message: &format!("{server_name}: error: invalid data.\n"), 110 56 }; 111 57 let resp = RpcMessage::Fail(resp); 112 58 resp.async_write(&mut stream).await?; ··· 117 63 match req { 118 64 RpcMessage::PullMetadata(md) => { 119 65 let start = Instant::now(); 120 - let funcs = match timeout(Duration::from_secs(4 * 60), db.get_funcs(&md.pattern_ids)) 121 - .await 122 - { 123 - Ok(r) => match r { 124 - Ok(v) => v, 125 - Err(e) => { 126 - error!("pull failed, db: {}", e); 127 - rpc::RpcMessage::Fail(rpc::RpcFail { 128 - result: 0, 129 - error: &format!("{server_name}: db error; please try again later..\n"), 66 + let funcs = 67 + match timeout(state.config.limits.pull_md_timeout, db.get_funcs(&md.funcs)).await { 68 + Ok(r) => match r { 69 + Ok(v) => v, 70 + Err(e) => { 71 + error!("pull failed, db: {}", e); 72 + rpc::RpcMessage::Fail(rpc::RpcFail { 73 + code: 0, 74 + message: &format!( 75 + "{server_name}: db error; please try again later..\n" 76 + ), 77 + }) 78 + .async_write(&mut stream) 79 + .await?; 80 + return Ok(()); 81 + }, 82 + }, 83 + Err(_) => { 84 + RpcMessage::Fail(RpcFail { 85 + code: 0, 86 + message: &format!("{server_name}: query took too long to execute.\n"), 130 87 }) 131 88 .async_write(&mut stream) 132 89 .await?; 133 - return Ok(()); 90 + debug!("pull query timeout"); 91 + return Err(Error::Timeout); 134 92 }, 135 - }, 136 - Err(_) => { 137 - RpcMessage::Fail(RpcFail { 138 - result: 0, 139 - error: &format!("{server_name}: query took too long to execute.\n"), 140 - }) 141 - .async_write(&mut stream) 142 - .await?; 143 - debug!("pull query timeout"); 144 - return Err(Error::Timeout); 145 - }, 146 - }; 93 + }; 147 94 let pulled_funcs = funcs.iter().filter(|v| v.is_some()).count(); 148 95 state.metrics.pulls.inc_by(pulled_funcs as _); 149 - state.metrics.queried_funcs.inc_by(md.pattern_ids.len() as _); 96 + state.metrics.queried_funcs.inc_by(md.funcs.len() as _); 150 97 debug!( 151 98 "pull {pulled_funcs}/{} funcs ended after {:?}", 152 - md.pattern_ids.len(), 99 + md.funcs.len(), 153 100 start.elapsed() 154 101 ); 155 102 ··· 166 113 .collect(); 167 114 168 115 RpcMessage::PullMetadataResult(rpc::PullMetadataResult { 169 - codes: Cow::Owned(statuses), 116 + unk0: Cow::Owned(statuses), 170 117 funcs: Cow::Owned(found), 171 118 }) 172 119 .async_write(&mut stream) ··· 177 124 let start = Instant::now(); 178 125 let scores: Vec<u32> = mds.funcs.iter().map(md::get_score).collect(); 179 126 180 - let status = 181 - match db.push_funcs(&session.hello_msg, session.creds_id, &mds, &scores).await { 182 - Ok(v) => v.into_iter().map(u32::from).collect::<Vec<u32>>(), 183 - Err(err) => { 184 - log::error!("push failed, db: {}", err); 185 - rpc::RpcMessage::Fail(rpc::RpcFail { 186 - result: 0, 187 - error: &format!("{server_name}: db error; please try again later.\n"), 188 - }) 189 - .async_write(&mut stream) 190 - .await?; 191 - return Ok(()); 192 - }, 193 - }; 127 + let status = match db.push_funcs(user, &mds, &scores).await { 128 + Ok(v) => v.into_iter().map(u32::from).collect::<Vec<u32>>(), 129 + Err(err) => { 130 + log::error!("push failed, db: {}", err); 131 + rpc::RpcMessage::Fail(rpc::RpcFail { 132 + code: 0, 133 + message: &format!("{server_name}: db error; please try again later.\n"), 134 + }) 135 + .async_write(&mut stream) 136 + .await?; 137 + return Ok(()); 138 + }, 139 + }; 194 140 state.metrics.pushes.inc_by(status.len() as _); 195 141 let new_funcs = 196 142 status.iter().fold(0u64, |counter, &v| if v > 0 { counter + 1 } else { counter }); ··· 209 155 let is_delete_allowed = state.config.lumina.allow_deletes.unwrap_or(false); 210 156 if !is_delete_allowed { 211 157 RpcMessage::Fail(rpc::RpcFail { 212 - result: 2, 213 - error: &format!("{server_name}: Delete command is disabled on this server."), 158 + code: 2, 159 + message: &format!("{server_name}: Delete command is disabled on this server."), 214 160 }) 215 161 .async_write(&mut stream) 216 162 .await?; ··· 218 164 if let Err(err) = db.delete_metadata(&req).await { 219 165 error!("delete failed. db: {err}"); 220 166 RpcMessage::Fail(rpc::RpcFail { 221 - result: 3, 222 - error: &format!("{server_name}: db error, please try again later."), 167 + code: 3, 168 + message: &format!("{server_name}: db error, please try again later."), 223 169 }) 224 170 .async_write(&mut stream) 225 171 .await?; 226 172 return Ok(()); 227 173 } 228 174 RpcMessage::DelHistoryResult(rpc::DelHistoryResult { 229 - ndeleted: req.calcrel_hashes.len() as u32, 175 + deleted_mds: req.funcs.len() as u32, 230 176 }) 231 177 .async_write(&mut stream) 232 178 .await?; ··· 237 183 238 184 if limit == 0 { 239 185 RpcMessage::Fail(rpc::RpcFail { 240 - result: 4, 241 - error: &format!( 186 + code: 4, 187 + message: &format!( 242 188 "{server_name}: function histories are disabled on this server." 243 189 ), 244 190 }) ··· 249 195 250 196 let mut statuses = vec![]; 251 197 let mut res = vec![]; 252 - for chksum in req.funcs.iter().map(|v| v.data) { 198 + for chksum in req.funcs.iter().map(|v| v.mb_hash) { 253 199 let history = match db.get_func_histories(chksum, limit).await { 254 200 Ok(v) => v, 255 201 Err(err) => { 256 202 error!("failed to get function histories: {err:?}"); 257 203 RpcMessage::Fail(rpc::RpcFail { 258 - result: 3, 259 - error: &format!("{server_name}: db error, please try again later."), 204 + code: 3, 205 + message: &format!("{server_name}: db error, please try again later."), 260 206 }) 261 207 .async_write(&mut stream) 262 208 .await?; ··· 288 234 RpcMessage::GetFuncHistoriesResult(rpc::GetFuncHistoriesResult { 289 235 status: statuses.into(), 290 236 funcs: Cow::Owned(res), 291 - authors: vec![].into(), 292 - idb_paths: vec![].into(), 237 + users: vec![].into(), 238 + dbs: vec![].into(), 293 239 }) 294 240 .async_write(&mut stream) 295 241 .await?; 296 242 }, 297 243 _ => { 298 244 RpcMessage::Fail(rpc::RpcFail { 299 - result: 0, 300 - error: &format!("{server_name}: invalid data.\n"), 245 + code: 0, 246 + message: &format!("{server_name}: invalid data.\n"), 301 247 }) 302 248 .async_write(&mut stream) 303 249 .await?; ··· 306 252 Ok(()) 307 253 } 308 254 309 - async fn http_reply<W: AsyncRead + AsyncWrite + Unpin>(mut stream: W) { 310 - use tokio::io::AsyncWriteExt; 311 - 312 - const HTTP_REPLY: &str = concat!( 313 - "HTTP/1.1 400 bad request\r\n", 314 - "Refresh: 2; URL=https://github.com/naim94a/lumen\r\n", 315 - "Server: lumen\r\n", 316 - "Connection: close\r\n", 317 - "Content-Type: text/html\r\n", 318 - "", 319 - "\r\n", 320 - "<pre>This is not an HTTP server. <br />Redirecting to <a href=\"https://github.com/naim94a/lumen\">lumen</a> ...</pre>\n", 321 - ); 322 - 323 - let _ = stream.write_all(HTTP_REPLY.as_bytes()).await; 324 - } 325 - 326 255 async fn handle_client<S: AsyncRead + AsyncWrite + Unpin>( 327 256 state: &SharedState, mut stream: S, 328 257 ) -> Result<(), rpc::Error> { 329 258 let server_name = &state.server_name; 330 - let rpkt = async { 331 - let hdr = rpc::read_packet_header(&mut stream).await?; 332 - if hdr.is_http() { 333 - // looks like someone is using a browser instead of IDA, what a fool. 334 - debug!("ignoring http request..."); 335 - http_reply(&mut stream).await; 336 - return Err(Error::Eof); 337 - } 338 - hdr.read(&mut stream).await 339 - }; 340 - let hello = match timeout(Duration::from_secs(15), rpkt).await { 341 - Ok(v) => v?, 342 - Err(_) => { 343 - debug!("didn't get hello in time."); 344 - return Ok(()); 345 - }, 346 - }; 259 + let hello = 260 + match timeout(state.config.limits.hello_timeout, rpc::read_packet(&mut stream)).await { 261 + Ok(v) => v?, 262 + Err(_) => { 263 + debug!("didn't get hello in time."); 264 + return Ok(()); 265 + }, 266 + }; 347 267 348 268 let (hello, creds) = match RpcMessage::deserialize(&hello) { 349 269 Ok(RpcMessage::Hello(v, creds)) => { 350 - debug!("hello protocol={}, login creds: {creds:?}", v.client_version); 270 + debug!("hello protocol={}, login creds: {creds:?}", v.protocol_version); 351 271 (v, creds) 352 272 }, 353 273 _ => { 354 274 // send error 355 275 error!("got bad hello message"); 356 276 357 - let resp = rpc::RpcFail { result: 0, error: &format!("{server_name}: bad sequence.") }; 277 + let resp = rpc::RpcFail { code: 0, message: &format!("{server_name}: bad sequence.") }; 358 278 let resp = rpc::RpcMessage::Fail(resp); 359 279 resp.async_write(&mut stream).await?; 360 280 ··· 364 284 state 365 285 .metrics 366 286 .lumina_version 367 - .get_or_create(&LuminaVersion { protocol_version: hello.client_version }) 287 + .get_or_create(&LuminaVersion { protocol_version: hello.protocol_version }) 368 288 .inc(); 369 289 370 - let creds = creds.unwrap_or(Creds { username: "guest", password: "guest" }); 371 - 372 - let user = if creds.username != "guest" { 373 - match state.db.get_user_by_username(creds.username).await { 374 - Ok((user_id, db_creds)) if db_creds.verify_password(creds.password) => { 375 - let _ = state.db.update_last_active(user_id).await; 376 - info!("{} logged in successfully.", db_creds.username); 377 - (user_id, db_creds) 378 - }, 379 - Ok(_) => { 380 - rpc::RpcMessage::Fail(rpc::RpcFail { 381 - result: 1, 382 - error: &format!("{server_name}: invalid username or password."), 383 - }) 384 - .async_write(&mut stream) 385 - .await?; 386 - return Ok(()); 387 - }, 388 - Err(err) => { 389 - error!("error while fetching user information: {err}"); 390 - rpc::RpcMessage::Fail(rpc::RpcFail { 391 - result: 1, 392 - error: &format!("{server_name}: internal error, please try again later."), 393 - }) 394 - .async_write(&mut stream) 395 - .await?; 396 - return Ok(()); 397 - }, 290 + if let Some(ref creds) = creds { 291 + if creds.username != "guest" { 292 + // Only allow "guest" to connect for now. 293 + rpc::RpcMessage::Fail(rpc::RpcFail { 294 + code: 1, 295 + message: &format!("{server_name}: invalid username or password. Try logging in with `guest` instead."), 296 + }).async_write(&mut stream).await?; 297 + return Ok(()); 398 298 } 399 - } else { 400 - ( 401 - -1, 402 - db::schema::Creds { 403 - username: creds.username.into(), 404 - is_enabled: state.config.users.allow_guests, 405 - ..Default::default() 406 - }, 407 - ) 408 - }; 409 - 410 - if !user.1.is_enabled { 411 - info!("attempt to login to disabled account [{}].", user.1.username); 412 - rpc::RpcMessage::Fail(rpc::RpcFail { 413 - result: 1, 414 - error: &format!("{server_name}: account disabled."), 415 - }) 416 - .async_write(&mut stream) 417 - .await?; 418 - return Ok(()); 419 299 } 420 300 421 - let resp = match hello.client_version { 301 + let resp = match hello.protocol_version { 422 302 0..=4 => rpc::RpcMessage::Ok(()), 423 303 424 304 // starting IDA 8.3 425 305 5.. => { 426 306 let mut features = 0; 427 307 428 - if user.1.is_admin { 429 - features |= 0x01; 430 - } 431 - 432 - if user.0 != -1 && state.config.lumina.allow_deletes.unwrap_or(false) { 308 + if state.config.lumina.allow_deletes.unwrap_or(false) { 433 309 features |= 0x02; 434 310 } 435 311 436 - let last_active = user.1.last_active.map_or(0, |v| v.unix_timestamp() as u64); 437 - 438 - rpc::RpcMessage::HelloResult(HelloResult { 439 - username: Cow::Borrowed(&user.1.username), 440 - last_active, 441 - features, 442 - ..Default::default() 443 - }) 312 + rpc::RpcMessage::HelloResult(HelloResult { features, ..Default::default() }) 444 313 }, 445 314 }; 446 315 resp.async_write(&mut stream).await?; 447 316 448 - let creds_id = if user.0 == -1 { None } else { Some(user.0) }; 449 - let mut session = Session { 450 - state, 451 - hello_msg: hello, 452 - _creds: user.1, 453 - creds_id, 454 - last_cred_check: Instant::now(), 455 - }; 456 - 457 317 loop { 458 - handle_transaction(&mut session, &mut stream).await?; 318 + handle_transaction(state, &hello, &mut stream).await?; 459 319 } 460 320 } 461 321 ··· 532 392 debug!("Connection from {:?}{}: {} active connections", &addr, protocol, count); 533 393 match accpt { 534 394 Some(accpt) => { 535 - match timeout(Duration::from_secs(10), accpt.accept(client)).await { 395 + match timeout(state.config.limits.tls_handshake_timeout, accpt.accept(client)) 396 + .await 397 + { 536 398 Ok(r) => match r { 537 399 Ok(s) => { 538 400 handle_connection(&state, s).await;
-43
lumen/src/users.rs
··· 1 - use std::process::exit; 2 - 3 - use common::{config::Config, db::Database}; 4 - 5 - pub struct UserMgmt { 6 - db: Database, 7 - pbkd2_iters: u32, 8 - } 9 - 10 - impl UserMgmt { 11 - pub async fn new(cfg: &Config) -> Self { 12 - let db = match Database::open(&cfg.database).await { 13 - Ok(v) => v, 14 - Err(err) => { 15 - eprintln!("failed to open database: {}", err); 16 - exit(1); 17 - }, 18 - }; 19 - 20 - Self { db, pbkd2_iters: cfg.users.pbkdf2_iterations.get() } 21 - } 22 - 23 - pub async fn list_users(&self) { 24 - let users = self.db.get_users().await.expect("failed to retreive users from database"); 25 - println!("{users:?}"); 26 - } 27 - 28 - pub async fn set_password(&self, username: &str, password: &str) { 29 - self.db 30 - .set_password(username, password.to_owned(), self.pbkd2_iters) 31 - .await 32 - .expect("failed to set user's password") 33 - } 34 - 35 - pub async fn add_user(&self, username: &str, email: &str, is_admin: bool) { 36 - let id = self.db.add_user(username, email, is_admin).await.expect("failed to add user"); 37 - println!("{username}'s id is {id}.") 38 - } 39 - 40 - pub async fn delete_user(&self, username: &str) { 41 - self.db.delete_user(username).await.expect("failed to delete user"); 42 - } 43 - }