├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── assets ├── images │ └── icons.svg └── index.html ├── jetbra.key ├── jetbra.pem ├── readme.md └── src └── main.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .idea -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "actix-codec" 7 | version = "0.5.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "617a8268e3537fe1d8c9ead925fca49ef6400927ee7bc26750e90ecee14ce4b8" 10 | dependencies = [ 11 | "bitflags 1.3.2", 12 | "bytes", 13 | "futures-core", 14 | "futures-sink", 15 | "memchr", 16 | "pin-project-lite", 17 | "tokio", 18 | "tokio-util", 19 | "tracing", 20 | ] 21 | 22 | [[package]] 23 | name = "actix-http" 24 | version = "3.5.1" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | checksum = "129d4c88e98860e1758c5de288d1632b07970a16d59bdf7b8d66053d582bb71f" 27 | dependencies = [ 28 | "actix-codec", 29 | "actix-rt", 30 | "actix-service", 31 | "actix-utils", 32 | "ahash", 33 | "base64", 34 | "bitflags 2.4.2", 35 | "brotli", 36 | "bytes", 37 | "bytestring", 38 | "derive_more", 39 | "encoding_rs", 40 | "flate2", 41 | "futures-core", 42 | "h2", 43 | "http", 44 | "httparse", 45 | "httpdate", 46 | "itoa", 47 | "language-tags", 48 | "local-channel", 49 | "mime", 50 | "percent-encoding", 51 | "pin-project-lite", 52 | "rand", 53 | "sha1", 54 | "smallvec", 55 | "tokio", 56 | "tokio-util", 57 | "tracing", 58 | "zstd", 59 | ] 60 | 61 | [[package]] 62 | name = "actix-macros" 63 | version = "0.2.4" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" 66 | dependencies = [ 67 | "quote", 68 | "syn 2.0.48", 69 | ] 70 | 71 | [[package]] 72 | name = "actix-router" 73 | version = "0.5.2" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "d22475596539443685426b6bdadb926ad0ecaefdfc5fb05e5e3441f15463c511" 76 | dependencies = [ 77 | "bytestring", 78 | "http", 79 | "regex", 80 | "serde", 81 | "tracing", 82 | ] 83 | 84 | [[package]] 85 | name = "actix-rt" 86 | version = "2.9.0" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d" 89 | dependencies = [ 90 | "futures-core", 91 | "tokio", 92 | ] 93 | 94 | [[package]] 95 | name = "actix-server" 96 | version = "2.3.0" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "3eb13e7eef0423ea6eab0e59f6c72e7cb46d33691ad56a726b3cd07ddec2c2d4" 99 | dependencies = [ 100 | "actix-rt", 101 | "actix-service", 102 | "actix-utils", 103 | "futures-core", 104 | "futures-util", 105 | "mio", 106 | "socket2", 107 | "tokio", 108 | "tracing", 109 | ] 110 | 111 | [[package]] 112 | name = "actix-service" 113 | version = "2.0.2" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" 116 | dependencies = [ 117 | "futures-core", 118 | "paste", 119 | "pin-project-lite", 120 | ] 121 | 122 | [[package]] 123 | name = "actix-utils" 124 | version = "3.0.1" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" 127 | dependencies = [ 128 | "local-waker", 129 | "pin-project-lite", 130 | ] 131 | 132 | [[package]] 133 | name = "actix-web" 134 | version = "4.4.1" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "e43428f3bf11dee6d166b00ec2df4e3aa8cc1606aaa0b7433c146852e2f4e03b" 137 | dependencies = [ 138 | "actix-codec", 139 | "actix-http", 140 | "actix-macros", 141 | "actix-router", 142 | "actix-rt", 143 | "actix-server", 144 | "actix-service", 145 | "actix-utils", 146 | "actix-web-codegen", 147 | "ahash", 148 | "bytes", 149 | "bytestring", 150 | "cfg-if", 151 | "cookie", 152 | "derive_more", 153 | "encoding_rs", 154 | "futures-core", 155 | "futures-util", 156 | "itoa", 157 | "language-tags", 158 | "log", 159 | "mime", 160 | "once_cell", 161 | "pin-project-lite", 162 | "regex", 163 | "serde", 164 | "serde_json", 165 | "serde_urlencoded", 166 | "smallvec", 167 | "socket2", 168 | "time", 169 | "url", 170 | ] 171 | 172 | [[package]] 173 | name = "actix-web-codegen" 174 | version = "4.2.2" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "eb1f50ebbb30eca122b188319a4398b3f7bb4a8cdf50ecfb73bfc6a3c3ce54f5" 177 | dependencies = [ 178 | "actix-router", 179 | "proc-macro2", 180 | "quote", 181 | "syn 2.0.48", 182 | ] 183 | 184 | [[package]] 185 | name = "addr2line" 186 | version = "0.21.0" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 189 | dependencies = [ 190 | "gimli", 191 | ] 192 | 193 | [[package]] 194 | name = "adler" 195 | version = "1.0.2" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 198 | 199 | [[package]] 200 | name = "aes" 201 | version = "0.8.3" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" 204 | dependencies = [ 205 | "cfg-if", 206 | "cipher", 207 | "cpufeatures", 208 | ] 209 | 210 | [[package]] 211 | name = "ahash" 212 | version = "0.8.7" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" 215 | dependencies = [ 216 | "cfg-if", 217 | "getrandom", 218 | "once_cell", 219 | "version_check", 220 | "zerocopy", 221 | ] 222 | 223 | [[package]] 224 | name = "aho-corasick" 225 | version = "1.1.2" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 228 | dependencies = [ 229 | "memchr", 230 | ] 231 | 232 | [[package]] 233 | name = "alloc-no-stdlib" 234 | version = "2.0.4" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 237 | 238 | [[package]] 239 | name = "alloc-stdlib" 240 | version = "0.2.2" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 243 | dependencies = [ 244 | "alloc-no-stdlib", 245 | ] 246 | 247 | [[package]] 248 | name = "asn1-rs" 249 | version = "0.5.2" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" 252 | dependencies = [ 253 | "asn1-rs-derive", 254 | "asn1-rs-impl", 255 | "displaydoc", 256 | "nom", 257 | "num-traits", 258 | "rusticata-macros", 259 | "thiserror", 260 | "time", 261 | ] 262 | 263 | [[package]] 264 | name = "asn1-rs-derive" 265 | version = "0.4.0" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" 268 | dependencies = [ 269 | "proc-macro2", 270 | "quote", 271 | "syn 1.0.109", 272 | "synstructure", 273 | ] 274 | 275 | [[package]] 276 | name = "asn1-rs-impl" 277 | version = "0.1.0" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" 280 | dependencies = [ 281 | "proc-macro2", 282 | "quote", 283 | "syn 1.0.109", 284 | ] 285 | 286 | [[package]] 287 | name = "autocfg" 288 | version = "1.1.0" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 291 | 292 | [[package]] 293 | name = "backtrace" 294 | version = "0.3.69" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 297 | dependencies = [ 298 | "addr2line", 299 | "cc", 300 | "cfg-if", 301 | "libc", 302 | "miniz_oxide", 303 | "object", 304 | "rustc-demangle", 305 | ] 306 | 307 | [[package]] 308 | name = "base64" 309 | version = "0.21.7" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 312 | 313 | [[package]] 314 | name = "base64ct" 315 | version = "1.6.0" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 318 | 319 | [[package]] 320 | name = "bitflags" 321 | version = "1.3.2" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 324 | 325 | [[package]] 326 | name = "bitflags" 327 | version = "2.4.2" 328 | source = "registry+https://github.com/rust-lang/crates.io-index" 329 | checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" 330 | 331 | [[package]] 332 | name = "block-buffer" 333 | version = "0.10.4" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 336 | dependencies = [ 337 | "generic-array", 338 | ] 339 | 340 | [[package]] 341 | name = "block-padding" 342 | version = "0.3.3" 343 | source = "registry+https://github.com/rust-lang/crates.io-index" 344 | checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" 345 | dependencies = [ 346 | "generic-array", 347 | ] 348 | 349 | [[package]] 350 | name = "brotli" 351 | version = "3.4.0" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" 354 | dependencies = [ 355 | "alloc-no-stdlib", 356 | "alloc-stdlib", 357 | "brotli-decompressor", 358 | ] 359 | 360 | [[package]] 361 | name = "brotli-decompressor" 362 | version = "2.5.1" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" 365 | dependencies = [ 366 | "alloc-no-stdlib", 367 | "alloc-stdlib", 368 | ] 369 | 370 | [[package]] 371 | name = "byteorder" 372 | version = "1.5.0" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 375 | 376 | [[package]] 377 | name = "bytes" 378 | version = "1.5.0" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" 381 | 382 | [[package]] 383 | name = "bytestring" 384 | version = "1.3.1" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" 387 | dependencies = [ 388 | "bytes", 389 | ] 390 | 391 | [[package]] 392 | name = "cbc" 393 | version = "0.1.2" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" 396 | dependencies = [ 397 | "cipher", 398 | ] 399 | 400 | [[package]] 401 | name = "cc" 402 | version = "1.0.83" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 405 | dependencies = [ 406 | "jobserver", 407 | "libc", 408 | ] 409 | 410 | [[package]] 411 | name = "cfg-if" 412 | version = "1.0.0" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 415 | 416 | [[package]] 417 | name = "cipher" 418 | version = "0.4.4" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 421 | dependencies = [ 422 | "crypto-common", 423 | "inout", 424 | ] 425 | 426 | [[package]] 427 | name = "const-oid" 428 | version = "0.9.6" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 431 | 432 | [[package]] 433 | name = "convert_case" 434 | version = "0.4.0" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 437 | 438 | [[package]] 439 | name = "cookie" 440 | version = "0.16.2" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" 443 | dependencies = [ 444 | "percent-encoding", 445 | "time", 446 | "version_check", 447 | ] 448 | 449 | [[package]] 450 | name = "cpufeatures" 451 | version = "0.2.12" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 454 | dependencies = [ 455 | "libc", 456 | ] 457 | 458 | [[package]] 459 | name = "crc32fast" 460 | version = "1.3.2" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 463 | dependencies = [ 464 | "cfg-if", 465 | ] 466 | 467 | [[package]] 468 | name = "crypto-common" 469 | version = "0.1.6" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 472 | dependencies = [ 473 | "generic-array", 474 | "typenum", 475 | ] 476 | 477 | [[package]] 478 | name = "data-encoding" 479 | version = "2.5.0" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" 482 | 483 | [[package]] 484 | name = "der" 485 | version = "0.7.8" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" 488 | dependencies = [ 489 | "const-oid", 490 | "pem-rfc7468", 491 | "zeroize", 492 | ] 493 | 494 | [[package]] 495 | name = "der-parser" 496 | version = "8.2.0" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" 499 | dependencies = [ 500 | "asn1-rs", 501 | "displaydoc", 502 | "nom", 503 | "num-bigint", 504 | "num-traits", 505 | "rusticata-macros", 506 | ] 507 | 508 | [[package]] 509 | name = "deranged" 510 | version = "0.3.11" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 513 | dependencies = [ 514 | "powerfmt", 515 | ] 516 | 517 | [[package]] 518 | name = "derive_more" 519 | version = "0.99.17" 520 | source = "registry+https://github.com/rust-lang/crates.io-index" 521 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 522 | dependencies = [ 523 | "convert_case", 524 | "proc-macro2", 525 | "quote", 526 | "rustc_version", 527 | "syn 1.0.109", 528 | ] 529 | 530 | [[package]] 531 | name = "digest" 532 | version = "0.10.7" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 535 | dependencies = [ 536 | "block-buffer", 537 | "const-oid", 538 | "crypto-common", 539 | "subtle", 540 | ] 541 | 542 | [[package]] 543 | name = "displaydoc" 544 | version = "0.2.4" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" 547 | dependencies = [ 548 | "proc-macro2", 549 | "quote", 550 | "syn 2.0.48", 551 | ] 552 | 553 | [[package]] 554 | name = "encoding_rs" 555 | version = "0.8.33" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" 558 | dependencies = [ 559 | "cfg-if", 560 | ] 561 | 562 | [[package]] 563 | name = "equivalent" 564 | version = "1.0.1" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 567 | 568 | [[package]] 569 | name = "flate2" 570 | version = "1.0.28" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" 573 | dependencies = [ 574 | "crc32fast", 575 | "miniz_oxide", 576 | ] 577 | 578 | [[package]] 579 | name = "fnv" 580 | version = "1.0.7" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 583 | 584 | [[package]] 585 | name = "form_urlencoded" 586 | version = "1.2.1" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 589 | dependencies = [ 590 | "percent-encoding", 591 | ] 592 | 593 | [[package]] 594 | name = "futures-core" 595 | version = "0.3.30" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 598 | 599 | [[package]] 600 | name = "futures-sink" 601 | version = "0.3.30" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 604 | 605 | [[package]] 606 | name = "futures-task" 607 | version = "0.3.30" 608 | source = "registry+https://github.com/rust-lang/crates.io-index" 609 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 610 | 611 | [[package]] 612 | name = "futures-util" 613 | version = "0.3.30" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 616 | dependencies = [ 617 | "futures-core", 618 | "futures-task", 619 | "pin-project-lite", 620 | "pin-utils", 621 | ] 622 | 623 | [[package]] 624 | name = "generic-array" 625 | version = "0.14.7" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 628 | dependencies = [ 629 | "typenum", 630 | "version_check", 631 | ] 632 | 633 | [[package]] 634 | name = "getrandom" 635 | version = "0.2.12" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" 638 | dependencies = [ 639 | "cfg-if", 640 | "libc", 641 | "wasi", 642 | ] 643 | 644 | [[package]] 645 | name = "gimli" 646 | version = "0.28.1" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 649 | 650 | [[package]] 651 | name = "h2" 652 | version = "0.3.24" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" 655 | dependencies = [ 656 | "bytes", 657 | "fnv", 658 | "futures-core", 659 | "futures-sink", 660 | "futures-util", 661 | "http", 662 | "indexmap", 663 | "slab", 664 | "tokio", 665 | "tokio-util", 666 | "tracing", 667 | ] 668 | 669 | [[package]] 670 | name = "hashbrown" 671 | version = "0.14.3" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 674 | 675 | [[package]] 676 | name = "hmac" 677 | version = "0.12.1" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 680 | dependencies = [ 681 | "digest", 682 | ] 683 | 684 | [[package]] 685 | name = "http" 686 | version = "0.2.11" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" 689 | dependencies = [ 690 | "bytes", 691 | "fnv", 692 | "itoa", 693 | ] 694 | 695 | [[package]] 696 | name = "httparse" 697 | version = "1.8.0" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 700 | 701 | [[package]] 702 | name = "httpdate" 703 | version = "1.0.3" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 706 | 707 | [[package]] 708 | name = "idna" 709 | version = "0.5.0" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 712 | dependencies = [ 713 | "unicode-bidi", 714 | "unicode-normalization", 715 | ] 716 | 717 | [[package]] 718 | name = "indexmap" 719 | version = "2.1.0" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" 722 | dependencies = [ 723 | "equivalent", 724 | "hashbrown", 725 | ] 726 | 727 | [[package]] 728 | name = "inout" 729 | version = "0.1.3" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 732 | dependencies = [ 733 | "block-padding", 734 | "generic-array", 735 | ] 736 | 737 | [[package]] 738 | name = "itoa" 739 | version = "1.0.10" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 742 | 743 | [[package]] 744 | name = "jetbra-server" 745 | version = "0.1.0" 746 | dependencies = [ 747 | "actix-web", 748 | "base64", 749 | "mime", 750 | "rand", 751 | "rsa", 752 | "serde", 753 | "serde_json", 754 | "sha1", 755 | "x509-parser", 756 | ] 757 | 758 | [[package]] 759 | name = "jobserver" 760 | version = "0.1.27" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" 763 | dependencies = [ 764 | "libc", 765 | ] 766 | 767 | [[package]] 768 | name = "language-tags" 769 | version = "0.3.2" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" 772 | 773 | [[package]] 774 | name = "lazy_static" 775 | version = "1.4.0" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 778 | dependencies = [ 779 | "spin", 780 | ] 781 | 782 | [[package]] 783 | name = "libc" 784 | version = "0.2.152" 785 | source = "registry+https://github.com/rust-lang/crates.io-index" 786 | checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" 787 | 788 | [[package]] 789 | name = "libm" 790 | version = "0.2.8" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" 793 | 794 | [[package]] 795 | name = "local-channel" 796 | version = "0.1.5" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" 799 | dependencies = [ 800 | "futures-core", 801 | "futures-sink", 802 | "local-waker", 803 | ] 804 | 805 | [[package]] 806 | name = "local-waker" 807 | version = "0.1.4" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" 810 | 811 | [[package]] 812 | name = "lock_api" 813 | version = "0.4.11" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" 816 | dependencies = [ 817 | "autocfg", 818 | "scopeguard", 819 | ] 820 | 821 | [[package]] 822 | name = "log" 823 | version = "0.4.20" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 826 | 827 | [[package]] 828 | name = "memchr" 829 | version = "2.7.1" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 832 | 833 | [[package]] 834 | name = "mime" 835 | version = "0.3.17" 836 | source = "registry+https://github.com/rust-lang/crates.io-index" 837 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 838 | 839 | [[package]] 840 | name = "minimal-lexical" 841 | version = "0.2.1" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 844 | 845 | [[package]] 846 | name = "miniz_oxide" 847 | version = "0.7.1" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 850 | dependencies = [ 851 | "adler", 852 | ] 853 | 854 | [[package]] 855 | name = "mio" 856 | version = "0.8.10" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" 859 | dependencies = [ 860 | "libc", 861 | "log", 862 | "wasi", 863 | "windows-sys", 864 | ] 865 | 866 | [[package]] 867 | name = "nom" 868 | version = "7.1.3" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 871 | dependencies = [ 872 | "memchr", 873 | "minimal-lexical", 874 | ] 875 | 876 | [[package]] 877 | name = "num-bigint" 878 | version = "0.4.4" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" 881 | dependencies = [ 882 | "autocfg", 883 | "num-integer", 884 | "num-traits", 885 | ] 886 | 887 | [[package]] 888 | name = "num-bigint-dig" 889 | version = "0.8.4" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 892 | dependencies = [ 893 | "byteorder", 894 | "lazy_static", 895 | "libm", 896 | "num-integer", 897 | "num-iter", 898 | "num-traits", 899 | "rand", 900 | "smallvec", 901 | "zeroize", 902 | ] 903 | 904 | [[package]] 905 | name = "num-integer" 906 | version = "0.1.45" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 909 | dependencies = [ 910 | "autocfg", 911 | "num-traits", 912 | ] 913 | 914 | [[package]] 915 | name = "num-iter" 916 | version = "0.1.43" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 919 | dependencies = [ 920 | "autocfg", 921 | "num-integer", 922 | "num-traits", 923 | ] 924 | 925 | [[package]] 926 | name = "num-traits" 927 | version = "0.2.17" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" 930 | dependencies = [ 931 | "autocfg", 932 | "libm", 933 | ] 934 | 935 | [[package]] 936 | name = "object" 937 | version = "0.32.2" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 940 | dependencies = [ 941 | "memchr", 942 | ] 943 | 944 | [[package]] 945 | name = "oid-registry" 946 | version = "0.6.1" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" 949 | dependencies = [ 950 | "asn1-rs", 951 | ] 952 | 953 | [[package]] 954 | name = "once_cell" 955 | version = "1.19.0" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 958 | 959 | [[package]] 960 | name = "parking_lot" 961 | version = "0.12.1" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 964 | dependencies = [ 965 | "lock_api", 966 | "parking_lot_core", 967 | ] 968 | 969 | [[package]] 970 | name = "parking_lot_core" 971 | version = "0.9.9" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" 974 | dependencies = [ 975 | "cfg-if", 976 | "libc", 977 | "redox_syscall", 978 | "smallvec", 979 | "windows-targets", 980 | ] 981 | 982 | [[package]] 983 | name = "paste" 984 | version = "1.0.14" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" 987 | 988 | [[package]] 989 | name = "pbkdf2" 990 | version = "0.12.2" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" 993 | dependencies = [ 994 | "digest", 995 | "hmac", 996 | ] 997 | 998 | [[package]] 999 | name = "pem-rfc7468" 1000 | version = "0.7.0" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 1003 | dependencies = [ 1004 | "base64ct", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "percent-encoding" 1009 | version = "2.3.1" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1012 | 1013 | [[package]] 1014 | name = "pin-project-lite" 1015 | version = "0.2.13" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 1018 | 1019 | [[package]] 1020 | name = "pin-utils" 1021 | version = "0.1.0" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1024 | 1025 | [[package]] 1026 | name = "pkcs1" 1027 | version = "0.7.5" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 1030 | dependencies = [ 1031 | "der", 1032 | "pkcs8", 1033 | "spki", 1034 | ] 1035 | 1036 | [[package]] 1037 | name = "pkcs5" 1038 | version = "0.7.1" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" 1041 | dependencies = [ 1042 | "aes", 1043 | "cbc", 1044 | "der", 1045 | "pbkdf2", 1046 | "scrypt", 1047 | "sha2", 1048 | "spki", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "pkcs8" 1053 | version = "0.10.2" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 1056 | dependencies = [ 1057 | "der", 1058 | "pkcs5", 1059 | "rand_core", 1060 | "spki", 1061 | ] 1062 | 1063 | [[package]] 1064 | name = "pkg-config" 1065 | version = "0.3.29" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" 1068 | 1069 | [[package]] 1070 | name = "powerfmt" 1071 | version = "0.2.0" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1074 | 1075 | [[package]] 1076 | name = "ppv-lite86" 1077 | version = "0.2.17" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1080 | 1081 | [[package]] 1082 | name = "proc-macro2" 1083 | version = "1.0.78" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" 1086 | dependencies = [ 1087 | "unicode-ident", 1088 | ] 1089 | 1090 | [[package]] 1091 | name = "quote" 1092 | version = "1.0.35" 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" 1094 | checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 1095 | dependencies = [ 1096 | "proc-macro2", 1097 | ] 1098 | 1099 | [[package]] 1100 | name = "rand" 1101 | version = "0.8.5" 1102 | source = "registry+https://github.com/rust-lang/crates.io-index" 1103 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1104 | dependencies = [ 1105 | "libc", 1106 | "rand_chacha", 1107 | "rand_core", 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "rand_chacha" 1112 | version = "0.3.1" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1115 | dependencies = [ 1116 | "ppv-lite86", 1117 | "rand_core", 1118 | ] 1119 | 1120 | [[package]] 1121 | name = "rand_core" 1122 | version = "0.6.4" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1125 | dependencies = [ 1126 | "getrandom", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "redox_syscall" 1131 | version = "0.4.1" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 1134 | dependencies = [ 1135 | "bitflags 1.3.2", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "regex" 1140 | version = "1.10.3" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" 1143 | dependencies = [ 1144 | "aho-corasick", 1145 | "memchr", 1146 | "regex-automata", 1147 | "regex-syntax", 1148 | ] 1149 | 1150 | [[package]] 1151 | name = "regex-automata" 1152 | version = "0.4.5" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" 1155 | dependencies = [ 1156 | "aho-corasick", 1157 | "memchr", 1158 | "regex-syntax", 1159 | ] 1160 | 1161 | [[package]] 1162 | name = "regex-syntax" 1163 | version = "0.8.2" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 1166 | 1167 | [[package]] 1168 | name = "rsa" 1169 | version = "0.9.6" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" 1172 | dependencies = [ 1173 | "const-oid", 1174 | "digest", 1175 | "num-bigint-dig", 1176 | "num-integer", 1177 | "num-traits", 1178 | "pkcs1", 1179 | "pkcs8", 1180 | "rand_core", 1181 | "sha1", 1182 | "signature", 1183 | "spki", 1184 | "subtle", 1185 | "zeroize", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "rustc-demangle" 1190 | version = "0.1.23" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 1193 | 1194 | [[package]] 1195 | name = "rustc_version" 1196 | version = "0.4.0" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1199 | dependencies = [ 1200 | "semver", 1201 | ] 1202 | 1203 | [[package]] 1204 | name = "rusticata-macros" 1205 | version = "4.1.0" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" 1208 | dependencies = [ 1209 | "nom", 1210 | ] 1211 | 1212 | [[package]] 1213 | name = "ryu" 1214 | version = "1.0.16" 1215 | source = "registry+https://github.com/rust-lang/crates.io-index" 1216 | checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" 1217 | 1218 | [[package]] 1219 | name = "salsa20" 1220 | version = "0.10.2" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" 1223 | dependencies = [ 1224 | "cipher", 1225 | ] 1226 | 1227 | [[package]] 1228 | name = "scopeguard" 1229 | version = "1.2.0" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1232 | 1233 | [[package]] 1234 | name = "scrypt" 1235 | version = "0.11.0" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" 1238 | dependencies = [ 1239 | "pbkdf2", 1240 | "salsa20", 1241 | "sha2", 1242 | ] 1243 | 1244 | [[package]] 1245 | name = "semver" 1246 | version = "1.0.21" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" 1249 | 1250 | [[package]] 1251 | name = "serde" 1252 | version = "1.0.196" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" 1255 | dependencies = [ 1256 | "serde_derive", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "serde_derive" 1261 | version = "1.0.196" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" 1264 | dependencies = [ 1265 | "proc-macro2", 1266 | "quote", 1267 | "syn 2.0.48", 1268 | ] 1269 | 1270 | [[package]] 1271 | name = "serde_json" 1272 | version = "1.0.112" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "4d1bd37ce2324cf3bf85e5a25f96eb4baf0d5aa6eba43e7ae8958870c4ec48ed" 1275 | dependencies = [ 1276 | "itoa", 1277 | "ryu", 1278 | "serde", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "serde_urlencoded" 1283 | version = "0.7.1" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1286 | dependencies = [ 1287 | "form_urlencoded", 1288 | "itoa", 1289 | "ryu", 1290 | "serde", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "sha1" 1295 | version = "0.10.6" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1298 | dependencies = [ 1299 | "cfg-if", 1300 | "cpufeatures", 1301 | "digest", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "sha2" 1306 | version = "0.10.8" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1309 | dependencies = [ 1310 | "cfg-if", 1311 | "cpufeatures", 1312 | "digest", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "signal-hook-registry" 1317 | version = "1.4.1" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 1320 | dependencies = [ 1321 | "libc", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "signature" 1326 | version = "2.2.0" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 1329 | dependencies = [ 1330 | "digest", 1331 | "rand_core", 1332 | ] 1333 | 1334 | [[package]] 1335 | name = "slab" 1336 | version = "0.4.9" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1339 | dependencies = [ 1340 | "autocfg", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "smallvec" 1345 | version = "1.13.1" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" 1348 | 1349 | [[package]] 1350 | name = "socket2" 1351 | version = "0.5.5" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 1354 | dependencies = [ 1355 | "libc", 1356 | "windows-sys", 1357 | ] 1358 | 1359 | [[package]] 1360 | name = "spin" 1361 | version = "0.5.2" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 1364 | 1365 | [[package]] 1366 | name = "spki" 1367 | version = "0.7.3" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 1370 | dependencies = [ 1371 | "base64ct", 1372 | "der", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "subtle" 1377 | version = "2.5.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 1380 | 1381 | [[package]] 1382 | name = "syn" 1383 | version = "1.0.109" 1384 | source = "registry+https://github.com/rust-lang/crates.io-index" 1385 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1386 | dependencies = [ 1387 | "proc-macro2", 1388 | "quote", 1389 | "unicode-ident", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "syn" 1394 | version = "2.0.48" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" 1397 | dependencies = [ 1398 | "proc-macro2", 1399 | "quote", 1400 | "unicode-ident", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "synstructure" 1405 | version = "0.12.6" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 1408 | dependencies = [ 1409 | "proc-macro2", 1410 | "quote", 1411 | "syn 1.0.109", 1412 | "unicode-xid", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "thiserror" 1417 | version = "1.0.56" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" 1420 | dependencies = [ 1421 | "thiserror-impl", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "thiserror-impl" 1426 | version = "1.0.56" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" 1429 | dependencies = [ 1430 | "proc-macro2", 1431 | "quote", 1432 | "syn 2.0.48", 1433 | ] 1434 | 1435 | [[package]] 1436 | name = "time" 1437 | version = "0.3.31" 1438 | source = "registry+https://github.com/rust-lang/crates.io-index" 1439 | checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" 1440 | dependencies = [ 1441 | "deranged", 1442 | "itoa", 1443 | "powerfmt", 1444 | "serde", 1445 | "time-core", 1446 | "time-macros", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "time-core" 1451 | version = "0.1.2" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1454 | 1455 | [[package]] 1456 | name = "time-macros" 1457 | version = "0.2.16" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" 1460 | dependencies = [ 1461 | "time-core", 1462 | ] 1463 | 1464 | [[package]] 1465 | name = "tinyvec" 1466 | version = "1.6.0" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1469 | dependencies = [ 1470 | "tinyvec_macros", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "tinyvec_macros" 1475 | version = "0.1.1" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1478 | 1479 | [[package]] 1480 | name = "tokio" 1481 | version = "1.35.1" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" 1484 | dependencies = [ 1485 | "backtrace", 1486 | "bytes", 1487 | "libc", 1488 | "mio", 1489 | "parking_lot", 1490 | "pin-project-lite", 1491 | "signal-hook-registry", 1492 | "socket2", 1493 | "windows-sys", 1494 | ] 1495 | 1496 | [[package]] 1497 | name = "tokio-util" 1498 | version = "0.7.10" 1499 | source = "registry+https://github.com/rust-lang/crates.io-index" 1500 | checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" 1501 | dependencies = [ 1502 | "bytes", 1503 | "futures-core", 1504 | "futures-sink", 1505 | "pin-project-lite", 1506 | "tokio", 1507 | "tracing", 1508 | ] 1509 | 1510 | [[package]] 1511 | name = "tracing" 1512 | version = "0.1.40" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1515 | dependencies = [ 1516 | "log", 1517 | "pin-project-lite", 1518 | "tracing-core", 1519 | ] 1520 | 1521 | [[package]] 1522 | name = "tracing-core" 1523 | version = "0.1.32" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1526 | dependencies = [ 1527 | "once_cell", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "typenum" 1532 | version = "1.17.0" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1535 | 1536 | [[package]] 1537 | name = "unicode-bidi" 1538 | version = "0.3.15" 1539 | source = "registry+https://github.com/rust-lang/crates.io-index" 1540 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1541 | 1542 | [[package]] 1543 | name = "unicode-ident" 1544 | version = "1.0.12" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1547 | 1548 | [[package]] 1549 | name = "unicode-normalization" 1550 | version = "0.1.22" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1553 | dependencies = [ 1554 | "tinyvec", 1555 | ] 1556 | 1557 | [[package]] 1558 | name = "unicode-xid" 1559 | version = "0.2.4" 1560 | source = "registry+https://github.com/rust-lang/crates.io-index" 1561 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 1562 | 1563 | [[package]] 1564 | name = "url" 1565 | version = "2.5.0" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 1568 | dependencies = [ 1569 | "form_urlencoded", 1570 | "idna", 1571 | "percent-encoding", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "version_check" 1576 | version = "0.9.4" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1579 | 1580 | [[package]] 1581 | name = "wasi" 1582 | version = "0.11.0+wasi-snapshot-preview1" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1585 | 1586 | [[package]] 1587 | name = "windows-sys" 1588 | version = "0.48.0" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1591 | dependencies = [ 1592 | "windows-targets", 1593 | ] 1594 | 1595 | [[package]] 1596 | name = "windows-targets" 1597 | version = "0.48.5" 1598 | source = "registry+https://github.com/rust-lang/crates.io-index" 1599 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1600 | dependencies = [ 1601 | "windows_aarch64_gnullvm", 1602 | "windows_aarch64_msvc", 1603 | "windows_i686_gnu", 1604 | "windows_i686_msvc", 1605 | "windows_x86_64_gnu", 1606 | "windows_x86_64_gnullvm", 1607 | "windows_x86_64_msvc", 1608 | ] 1609 | 1610 | [[package]] 1611 | name = "windows_aarch64_gnullvm" 1612 | version = "0.48.5" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1615 | 1616 | [[package]] 1617 | name = "windows_aarch64_msvc" 1618 | version = "0.48.5" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1621 | 1622 | [[package]] 1623 | name = "windows_i686_gnu" 1624 | version = "0.48.5" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1627 | 1628 | [[package]] 1629 | name = "windows_i686_msvc" 1630 | version = "0.48.5" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1633 | 1634 | [[package]] 1635 | name = "windows_x86_64_gnu" 1636 | version = "0.48.5" 1637 | source = "registry+https://github.com/rust-lang/crates.io-index" 1638 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1639 | 1640 | [[package]] 1641 | name = "windows_x86_64_gnullvm" 1642 | version = "0.48.5" 1643 | source = "registry+https://github.com/rust-lang/crates.io-index" 1644 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1645 | 1646 | [[package]] 1647 | name = "windows_x86_64_msvc" 1648 | version = "0.48.5" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1651 | 1652 | [[package]] 1653 | name = "x509-parser" 1654 | version = "0.15.1" 1655 | source = "registry+https://github.com/rust-lang/crates.io-index" 1656 | checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" 1657 | dependencies = [ 1658 | "asn1-rs", 1659 | "data-encoding", 1660 | "der-parser", 1661 | "lazy_static", 1662 | "nom", 1663 | "oid-registry", 1664 | "rusticata-macros", 1665 | "thiserror", 1666 | "time", 1667 | ] 1668 | 1669 | [[package]] 1670 | name = "zerocopy" 1671 | version = "0.7.32" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" 1674 | dependencies = [ 1675 | "zerocopy-derive", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "zerocopy-derive" 1680 | version = "0.7.32" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" 1683 | dependencies = [ 1684 | "proc-macro2", 1685 | "quote", 1686 | "syn 2.0.48", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "zeroize" 1691 | version = "1.7.0" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" 1694 | 1695 | [[package]] 1696 | name = "zstd" 1697 | version = "0.13.0" 1698 | source = "registry+https://github.com/rust-lang/crates.io-index" 1699 | checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" 1700 | dependencies = [ 1701 | "zstd-safe", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "zstd-safe" 1706 | version = "7.0.0" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" 1709 | dependencies = [ 1710 | "zstd-sys", 1711 | ] 1712 | 1713 | [[package]] 1714 | name = "zstd-sys" 1715 | version = "2.0.9+zstd.1.5.5" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" 1718 | dependencies = [ 1719 | "cc", 1720 | "pkg-config", 1721 | ] 1722 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "jetbra-server" 3 | version = "0.1.0" 4 | edition = "2021" 5 | authors = ["novice88"] 6 | 7 | 8 | [dependencies.actix-web] 9 | version = "4.4.1" 10 | 11 | [dependencies.base64] 12 | version = "0.21.7" 13 | 14 | 15 | [dependencies.sha1] 16 | version = "0.10.6" 17 | 18 | [dependencies.rsa] 19 | version = "0.9.6" 20 | features = ["pem", "sha1", "pkcs5", "std"] 21 | 22 | 23 | [dependencies.serde] 24 | version = "1.0.196" 25 | features = ["derive"] 26 | 27 | [dependencies.serde_json] 28 | version = "1.0.112" 29 | 30 | 31 | [dependencies.x509-parser] 32 | version = "0.15.1" 33 | 34 | [dependencies.rand] 35 | version = "0.8.1" 36 | 37 | [dependencies.mime] 38 | version= "0.3.17" 39 | 40 | 41 | [profile.release] 42 | lto = true 43 | strip = true 44 | codegen-units = 1 -------------------------------------------------------------------------------- /assets/images/icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | -------------------------------------------------------------------------------- /assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Get keys 8 | 126 | 506 | 507 | 508 |
509 |
510 |
511 |
512 |
513 | 514 |
515 |
516 |
517 |
518 |
519 |

IntelliJ 520 | IDEA

521 |

523 | ********************************************************************************************************************************************************* 524 |

525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 | 534 |
535 |
536 |
537 |
538 |
539 |

PhpStorm

540 |

542 | ********************************************************************************************************************************************************* 543 |

544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 | 553 |
554 |
555 |
556 |
557 |
558 |

AppCode

559 |

561 | ********************************************************************************************************************************************************* 562 |

563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 | 572 |
573 |
574 |
575 |
576 |
577 |

DataGrip

578 |

580 | ********************************************************************************************************************************************************* 581 |

582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 | 591 |
592 |
593 |
594 |
595 |
596 |

RubyMine

597 |

599 | ********************************************************************************************************************************************************* 600 |

601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 | 610 |
611 |
612 |
613 |
614 |
615 |

WebStorm

616 |

618 | ********************************************************************************************************************************************************* 619 |

620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 | 629 |
630 |
631 |
632 |
633 |
634 |

Rider

635 |

637 | ********************************************************************************************************************************************************* 638 |

639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 | 648 |
649 |
650 |
651 |
652 |
653 |

CLion

654 |

656 | ********************************************************************************************************************************************************* 657 |

658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 | 667 |
668 |
669 |
670 |
671 |
672 |

PyCharm

673 |

675 | ********************************************************************************************************************************************************* 676 |

677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 | 686 |
687 |
688 |
689 |
690 |
691 |

GoLand

692 |

694 | ********************************************************************************************************************************************************* 695 |

696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 | 705 |
706 |
707 |
708 |
709 |
710 |

DataSpell

711 |

713 | ********************************************************************************************************************************************************* 714 |

715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 | 724 |
725 |
726 |
727 |
728 |
729 |

dotCover

730 |

732 | ********************************************************************************************************************************************************* 733 |

734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 | 743 |
744 |
745 |
746 |
747 |
748 |

dotTrace

749 |

751 | ********************************************************************************************************************************************************* 752 |

753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 | 762 |
763 |
764 |
765 |
766 |
767 |

dotMemory

768 |

770 | ********************************************************************************************************************************************************* 771 |

772 |
773 |
774 |
775 |
776 |
777 | 781 | 782 | 804 | 805 | 806 | 825 | 826 | 870 | 871 | 872 | -------------------------------------------------------------------------------- /jetbra.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | 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 51 | -----END RSA PRIVATE KEY----- 52 | -------------------------------------------------------------------------------- /jetbra.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEtTCCAp2gAwIBAgIUDyuccmylba71lZQAQic5TJiAhwwwDQYJKoZIhvcNAQEL 3 | BQAwGDEWMBQGA1UEAwwNSmV0UHJvZmlsZSBDQTAeFw0yMzA5MjkxNDA2MTJaFw0z 4 | MzA5MjcxNDA2MTJaMBExDzANBgNVBAMMBk5vdmljZTCCAiIwDQYJKoZIhvcNAQEB 5 | BQADggIPADCCAgoCggIBALenqcGP2ZxGkYqmKA9c4Hzf8+YD1smvmOxKjd+bmTLr 6 | utM/hXv1cj1rW3/lqyDtdDk7K6W8/TDq1CRrEt+Do6l30DxhAiC34aH8DmGwgq77 7 | xEoLimvH5LpePxflF+tbB1RZtFgFDOIYLdSQaKFH2JDgVKxhLiV3S6jniPhkCtWW 8 | rTs+E6vq4N15Bm3NnM5AJILqjtUbOjNfaxVq6RrOoTc0R3Fqqo6yvxo/+JYa2UnH 9 | IC+r2dbKuDLMUrtgnydEUdJNX0zH9FtcdELvr48uc9mY038TWUsZUK1pnQbxA2bP 10 | yA4qnYJ9IvUgO6LtLXvGFm137YQMS1N41AHDBOrwoNI8UoDX+qI3rM96biFOFvn7 11 | Edky7rByzybt3H+zxdojfjvpL1E0NO98BT9zfufHAaAxZtlmDOu5LDJe3CGurnyR 12 | MRExbtc+Qjl1mUh6tG4lakAwdsoxry0GdG72yaYyb9it53kaFks/T/s7Z7bRJzVF 13 | zQDV1Y4bzUtk43vKm2vztBVlQkBkZY5f2Jbe5Ig3b8swQzBnOT0mrL5SPUhwmQ6I 14 | xkEWztj55OEujBMmRr92oESuq9ZYMaeLidKWVR3/++HA8BRZaRGEKtSHZCbFEFdi 15 | hDxxJv9Xh6NuT/ewJ6HYp+0NQpFnUnJ72n8wV+tudpam7aKcdzVmz7cNwOhG2Ls7 16 | AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIdeaQfKni7tXtcywC3zJvGzaaj242pS 17 | WB1y40HW8jub0uHjTLsBPX27iA/5rb+rNXtUWX/f2K+DU4IgaIiiHhkDrMsw7piv 18 | azqwA9h7/uA0A5nepmTYf/HY4W6P2stbeqInNsFRZXS7Jg4Q5LgEtHKo/H8USjtV 19 | w9apmE3BCElkXRuelXMsSllpR/JEVv/8NPLmnHSY02q4KMVW2ozXtaAxSYQmZswy 20 | P1YnBcnRukoI4igobpcKQXwGoQCIUlec8LbFXYM9V2eNCwgABqd4r67m7QJq31Y/ 21 | 1TJysQdMH+hoPFy9rqNCxSq3ptpuzcYAk6qVf58PrrYH/6bHwiYPAayvvdzNPOhM 22 | 9OCwomfcazhK3y7HyS8aBLntTQYFf7vYzZxPMDybYTvJM+ClCNnVD7Q9fttIJ6eM 23 | XFsXb8YK1uGNjQW8Y4WHk1MCHuD9ZumWu/CtAhBn6tllTQWwNMaPOQvKf1kr1Kt5 24 | etrONY+B6O+Oi75SZbDuGz7PIF9nMPy4WB/8XgKdVFtKJ7/zLIPHgY8IKgbx/VTz 25 | 6uBhYo8wOf3xzzweMnn06UcfV3JGNvtMuV4vlkZNNxXeifsgzHugCvJX0nybhfBh 26 | fIqVyfK6t0eKJqrvp54XFEtJGR+lf3pBfTdcOI6QFEPKGZKoQz8Ck+BC/WBDtbjc 27 | /uYKczZ8DKZu 28 | -----END CERTIFICATE----- 29 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # jetbra-server-rust 2 | write jetbra-server using rust -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::error::Error; 2 | 3 | use actix_web::{App, HttpResponse, HttpServer, web}; 4 | use base64::Engine; 5 | use base64::engine::general_purpose; 6 | use mime; 7 | use rand::Rng; 8 | use rsa::pkcs1::DecodeRsaPrivateKey; 9 | use rsa::pkcs1v15::SigningKey; 10 | use rsa::RsaPrivateKey; 11 | use rsa::signature::{SignatureEncoding, Signer}; 12 | use serde::{Deserialize, Serialize}; 13 | use serde_json::json; 14 | use sha1::Sha1; 15 | use x509_parser::pem::parse_x509_pem; 16 | 17 | const INDEX_HTML: &[u8] = include_bytes!("../assets/index.html"); 18 | const ICONS: &[u8] = include_bytes!("../assets/images/icons.svg"); 19 | 20 | const CRT_PEM: &[u8] = include_bytes!("../jetbra.pem"); 21 | const RSA_PRIVATE_KEY: &'static str = include_str!("../jetbra.key"); 22 | 23 | const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 24 | 25 | pub async fn generate_license(web::Json(mut license): web::Json) -> Result> { 26 | 27 | // 1 generate license id 28 | let mut rng = rand::thread_rng(); 29 | let license_id: String = (0..10) 30 | .map(|_| { 31 | let idx = rng.gen_range(0..CHARSET.len()); 32 | CHARSET[idx] as char 33 | }) 34 | .collect(); 35 | license.license_id = Some(license_id.clone()); 36 | 37 | // 2 generate license_part_base64 38 | let license_part = serde_json::to_string(&license)?; 39 | let license_part_base64 = general_purpose::STANDARD.encode(license_part.as_bytes()); 40 | 41 | 42 | // 3 generate sigResultsBase64 43 | let private_key = RsaPrivateKey::from_pkcs1_pem(RSA_PRIVATE_KEY)?; 44 | let signing_key = SigningKey::::new(private_key); 45 | let signature = signing_key.try_sign(license_part.as_bytes())?; 46 | let sig_results_base64 = general_purpose::STANDARD.encode(signature.to_bytes()); 47 | 48 | 49 | // 4 generate cert base64 50 | let (_, pem) = parse_x509_pem(CRT_PEM)?; 51 | let cert_base64 = general_purpose::STANDARD.encode(pem.contents); 52 | 53 | // 5 combine license 54 | let license = format!("{}-{}-{}-{}", license_id, license_part_base64, sig_results_base64, cert_base64); 55 | 56 | Ok(HttpResponse::Ok().content_type(mime::APPLICATION_JSON).body(json!({"license": license}).to_string())) 57 | } 58 | 59 | #[actix_web::main] 60 | async fn main() -> std::io::Result<()> { 61 | HttpServer::new(|| { 62 | App::new() 63 | .route("/", web::get().to(|| async { HttpResponse::Ok().content_type(mime::TEXT_HTML_UTF_8).body(INDEX_HTML) })) 64 | .route("/index.html", web::get().to(|| async { HttpResponse::Ok().content_type(mime::TEXT_HTML_UTF_8).body(INDEX_HTML) })) 65 | .route("/images/icons.svg", web::get().to(|| async { HttpResponse::Ok().content_type(mime::IMAGE_SVG).body(ICONS) })) 66 | .route("/generateLicense", web::post().to(generate_license)) 67 | }) 68 | .bind(("127.0.0.1", 8080))? 69 | .run() 70 | .await 71 | } 72 | 73 | 74 | #[derive(Debug, Serialize, Deserialize)] 75 | pub struct License { 76 | #[serde(rename = "licenseId")] 77 | license_id: Option, 78 | 79 | #[serde(default = "default_licensee_name",rename = "licenseeName")] 80 | licensee_name: String, 81 | 82 | #[serde(default = "default_empty_str",rename = "assigneeName")] 83 | assignee_name: String, 84 | 85 | #[serde(default = "default_empty_str",rename = "assigneeEmail")] 86 | assignee_email: String, 87 | 88 | #[serde(default = "default_empty_str",rename = "licenseRestriction")] 89 | license_restriction: String, 90 | 91 | #[serde(default = "default_false",rename = "checkConcurrentUse")] 92 | check_concurrent_use: bool, 93 | 94 | products: Vec, 95 | 96 | #[serde(default = "default_metadata")] 97 | metadata: String, 98 | 99 | #[serde(default = "default_hash")] 100 | hash: String, 101 | 102 | #[serde(default = "default_grace_period_days",rename = "gracePeriodDays")] 103 | grace_period_days: i32, 104 | 105 | #[serde(default = "default_true",rename = "autoProlongated")] 106 | auto_prolongated: bool, 107 | 108 | #[serde(default = "default_true",rename = "isAutoProlongated")] 109 | is_auto_prolongated: bool, 110 | } 111 | 112 | #[derive(Debug, Serialize, Deserialize)] 113 | pub struct Product { 114 | code: String, 115 | #[serde(default = "default_expire_date",rename = "fallbackDate")] 116 | fallback_date: String, 117 | #[serde(default = "default_expire_date",rename = "paidUpTo")] 118 | paid_up_to: String, 119 | #[serde(default = "default_true")] 120 | extended: bool, 121 | } 122 | 123 | 124 | fn default_licensee_name() -> String { 125 | String::from("for test only") 126 | } 127 | 128 | fn default_empty_str() -> String { 129 | String::from("") 130 | } 131 | 132 | fn default_false() -> bool { 133 | false 134 | } 135 | 136 | fn default_true() -> bool { 137 | true 138 | } 139 | 140 | fn default_metadata() -> String { 141 | "0120230102PPAA013009".into() 142 | } 143 | 144 | fn default_hash() -> String { 145 | "41472961/0:1563609451".into() 146 | } 147 | 148 | fn default_grace_period_days() -> i32 { 149 | 7 150 | } 151 | 152 | fn default_expire_date() -> String { 153 | "2030-12-31".into() 154 | } --------------------------------------------------------------------------------