├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── config.example.toml └── src ├── config.rs ├── database.rs ├── ipinfo.rs ├── logger.rs ├── main.rs ├── packet.rs └── webhook.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | config.toml 3 | database.json 4 | -------------------------------------------------------------------------------- /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 = "addr2line" 7 | version = "0.17.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.8.1" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "bfe0133578c0986e1fe3dfcd4af1cc5b2dd6c3dbf534d69916ce16a2701d40ba" 25 | dependencies = [ 26 | "cfg-if 1.0.0", 27 | "cipher", 28 | "cpufeatures", 29 | ] 30 | 31 | [[package]] 32 | name = "ahash" 33 | version = "0.7.6" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 36 | dependencies = [ 37 | "getrandom", 38 | "once_cell", 39 | "version_check", 40 | ] 41 | 42 | [[package]] 43 | name = "ahash" 44 | version = "0.8.0" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "57e6e951cfbb2db8de1828d49073a113a29fd7117b1596caa781a258c7e38d72" 47 | dependencies = [ 48 | "cfg-if 1.0.0", 49 | "getrandom", 50 | "once_cell", 51 | "version_check", 52 | ] 53 | 54 | [[package]] 55 | name = "anyhow" 56 | version = "1.0.63" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "a26fa4d7e3f2eebadf743988fc8aec9fa9a9e82611acafd77c1462ed6262440a" 59 | 60 | [[package]] 61 | name = "async-channel" 62 | version = "1.7.1" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" 65 | dependencies = [ 66 | "concurrent-queue", 67 | "event-listener", 68 | "futures-core", 69 | ] 70 | 71 | [[package]] 72 | name = "async-compression" 73 | version = "0.3.14" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "345fd392ab01f746c717b1357165b76f0b67a60192007b234058c9045fdcf695" 76 | dependencies = [ 77 | "flate2", 78 | "futures-core", 79 | "memchr", 80 | "pin-project-lite", 81 | "tokio 1.20.1", 82 | ] 83 | 84 | [[package]] 85 | name = "async-recursion" 86 | version = "1.0.0" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "2cda8f4bcc10624c4e85bc66b3f452cca98cfa5ca002dc83a16aad2367641bea" 89 | dependencies = [ 90 | "proc-macro2", 91 | "quote", 92 | "syn", 93 | ] 94 | 95 | [[package]] 96 | name = "async-trait" 97 | version = "0.1.57" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" 100 | dependencies = [ 101 | "proc-macro2", 102 | "quote", 103 | "syn", 104 | ] 105 | 106 | [[package]] 107 | name = "atty" 108 | version = "0.2.14" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 111 | dependencies = [ 112 | "hermit-abi", 113 | "libc", 114 | "winapi 0.3.9", 115 | ] 116 | 117 | [[package]] 118 | name = "autocfg" 119 | version = "0.1.8" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" 122 | dependencies = [ 123 | "autocfg 1.1.0", 124 | ] 125 | 126 | [[package]] 127 | name = "autocfg" 128 | version = "1.1.0" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 131 | 132 | [[package]] 133 | name = "azalea-auth" 134 | version = "0.1.0" 135 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 136 | dependencies = [ 137 | "azalea-buf", 138 | "uuid 1.1.2", 139 | ] 140 | 141 | [[package]] 142 | name = "azalea-block" 143 | version = "0.1.0" 144 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 145 | dependencies = [ 146 | "azalea-block-macros", 147 | ] 148 | 149 | [[package]] 150 | name = "azalea-block-macros" 151 | version = "0.1.0" 152 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 153 | dependencies = [ 154 | "proc-macro2", 155 | "quote", 156 | "syn", 157 | ] 158 | 159 | [[package]] 160 | name = "azalea-brigadier" 161 | version = "0.1.0" 162 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 163 | 164 | [[package]] 165 | name = "azalea-buf" 166 | version = "0.1.0" 167 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 168 | dependencies = [ 169 | "azalea-buf-macros", 170 | "byteorder", 171 | "serde_json", 172 | "thiserror", 173 | "tokio 1.20.1", 174 | "uuid 1.1.2", 175 | ] 176 | 177 | [[package]] 178 | name = "azalea-buf-macros" 179 | version = "0.1.0" 180 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 181 | dependencies = [ 182 | "proc-macro2", 183 | "quote", 184 | "syn", 185 | ] 186 | 187 | [[package]] 188 | name = "azalea-chat" 189 | version = "0.1.0" 190 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 191 | dependencies = [ 192 | "azalea-buf", 193 | "azalea-language", 194 | "lazy_static", 195 | "serde", 196 | "serde_json", 197 | ] 198 | 199 | [[package]] 200 | name = "azalea-core" 201 | version = "0.1.0" 202 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 203 | dependencies = [ 204 | "azalea-buf", 205 | "azalea-chat", 206 | "azalea-nbt", 207 | "uuid 1.1.2", 208 | ] 209 | 210 | [[package]] 211 | name = "azalea-crypto" 212 | version = "0.1.0" 213 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 214 | dependencies = [ 215 | "aes", 216 | "azalea-buf", 217 | "cfb8", 218 | "num-bigint", 219 | "rand 0.8.5", 220 | "rsa_public_encrypt_pkcs1", 221 | "sha-1", 222 | "uuid 1.1.2", 223 | ] 224 | 225 | [[package]] 226 | name = "azalea-language" 227 | version = "0.1.0" 228 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 229 | dependencies = [ 230 | "lazy_static", 231 | "serde", 232 | "serde_json", 233 | ] 234 | 235 | [[package]] 236 | name = "azalea-nbt" 237 | version = "0.1.0" 238 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 239 | dependencies = [ 240 | "ahash 0.8.0", 241 | "azalea-buf", 242 | "byteorder", 243 | "flate2", 244 | "num-derive", 245 | "num-traits", 246 | ] 247 | 248 | [[package]] 249 | name = "azalea-protocol" 250 | version = "0.1.0" 251 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 252 | dependencies = [ 253 | "async-compression", 254 | "async-recursion", 255 | "azalea-auth", 256 | "azalea-brigadier", 257 | "azalea-buf", 258 | "azalea-chat", 259 | "azalea-core", 260 | "azalea-crypto", 261 | "azalea-nbt", 262 | "azalea-world", 263 | "byteorder", 264 | "bytes 1.2.1", 265 | "flate2", 266 | "packet-macros", 267 | "serde", 268 | "serde_json", 269 | "thiserror", 270 | "tokio 1.20.1", 271 | "tokio-util 0.6.10", 272 | "trust-dns-resolver", 273 | "uuid 1.1.2", 274 | ] 275 | 276 | [[package]] 277 | name = "azalea-world" 278 | version = "0.1.0" 279 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 280 | dependencies = [ 281 | "azalea-block", 282 | "azalea-buf", 283 | "azalea-chat", 284 | "azalea-core", 285 | "azalea-nbt", 286 | "log", 287 | "nohash-hasher", 288 | "thiserror", 289 | "uuid 1.1.2", 290 | ] 291 | 292 | [[package]] 293 | name = "backtrace" 294 | version = "0.3.66" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" 297 | dependencies = [ 298 | "addr2line", 299 | "cc", 300 | "cfg-if 1.0.0", 301 | "libc", 302 | "miniz_oxide", 303 | "object", 304 | "rustc-demangle", 305 | ] 306 | 307 | [[package]] 308 | name = "base64" 309 | version = "0.10.1" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 312 | dependencies = [ 313 | "byteorder", 314 | ] 315 | 316 | [[package]] 317 | name = "base64" 318 | version = "0.13.0" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 321 | 322 | [[package]] 323 | name = "bitflags" 324 | version = "1.3.2" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 327 | 328 | [[package]] 329 | name = "block-buffer" 330 | version = "0.10.2" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 333 | dependencies = [ 334 | "generic-array", 335 | ] 336 | 337 | [[package]] 338 | name = "bumpalo" 339 | version = "3.11.0" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" 342 | 343 | [[package]] 344 | name = "byteorder" 345 | version = "1.4.3" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 348 | 349 | [[package]] 350 | name = "bytes" 351 | version = "0.4.12" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" 354 | dependencies = [ 355 | "byteorder", 356 | "either", 357 | "iovec", 358 | ] 359 | 360 | [[package]] 361 | name = "bytes" 362 | version = "1.2.1" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" 365 | 366 | [[package]] 367 | name = "cache-padded" 368 | version = "1.2.0" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" 371 | 372 | [[package]] 373 | name = "castaway" 374 | version = "0.1.2" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" 377 | 378 | [[package]] 379 | name = "cc" 380 | version = "1.0.73" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 383 | 384 | [[package]] 385 | name = "cfb8" 386 | version = "0.8.1" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "014c0a0e1ad0dae6a86c082db2f9bd7fe8c2c734227047d0d8b4d4a3a094a1e1" 389 | dependencies = [ 390 | "cipher", 391 | ] 392 | 393 | [[package]] 394 | name = "cfg-if" 395 | version = "0.1.10" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 398 | 399 | [[package]] 400 | name = "cfg-if" 401 | version = "1.0.0" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 404 | 405 | [[package]] 406 | name = "chrono" 407 | version = "0.4.22" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" 410 | dependencies = [ 411 | "num-integer", 412 | "num-traits", 413 | ] 414 | 415 | [[package]] 416 | name = "cipher" 417 | version = "0.4.3" 418 | source = "registry+https://github.com/rust-lang/crates.io-index" 419 | checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" 420 | dependencies = [ 421 | "crypto-common", 422 | "inout", 423 | ] 424 | 425 | [[package]] 426 | name = "clap" 427 | version = "3.2.20" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "23b71c3ce99b7611011217b366d923f1d0a7e07a92bb2dbf1e84508c673ca3bd" 430 | dependencies = [ 431 | "atty", 432 | "bitflags", 433 | "clap_derive", 434 | "clap_lex", 435 | "indexmap", 436 | "once_cell", 437 | "strsim", 438 | "termcolor", 439 | "textwrap", 440 | ] 441 | 442 | [[package]] 443 | name = "clap_derive" 444 | version = "3.2.18" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" 447 | dependencies = [ 448 | "heck", 449 | "proc-macro-error", 450 | "proc-macro2", 451 | "quote", 452 | "syn", 453 | ] 454 | 455 | [[package]] 456 | name = "clap_lex" 457 | version = "0.2.4" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" 460 | dependencies = [ 461 | "os_str_bytes", 462 | ] 463 | 464 | [[package]] 465 | name = "cloudabi" 466 | version = "0.0.3" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 469 | dependencies = [ 470 | "bitflags", 471 | ] 472 | 473 | [[package]] 474 | name = "concurrent-queue" 475 | version = "1.2.4" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" 478 | dependencies = [ 479 | "cache-padded", 480 | ] 481 | 482 | [[package]] 483 | name = "console" 484 | version = "0.15.1" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | checksum = "89eab4d20ce20cea182308bca13088fecea9c05f6776cf287205d41a0ed3c847" 487 | dependencies = [ 488 | "encode_unicode", 489 | "libc", 490 | "once_cell", 491 | "terminal_size", 492 | "unicode-width", 493 | "winapi 0.3.9", 494 | ] 495 | 496 | [[package]] 497 | name = "cookie" 498 | version = "0.12.0" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" 501 | dependencies = [ 502 | "time 0.1.44", 503 | "url 1.7.2", 504 | ] 505 | 506 | [[package]] 507 | name = "cookie_store" 508 | version = "0.7.0" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" 511 | dependencies = [ 512 | "cookie", 513 | "failure", 514 | "idna 0.1.5", 515 | "log", 516 | "publicsuffix", 517 | "serde", 518 | "serde_json", 519 | "time 0.1.44", 520 | "try_from", 521 | "url 1.7.2", 522 | ] 523 | 524 | [[package]] 525 | name = "core-foundation" 526 | version = "0.9.3" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 529 | dependencies = [ 530 | "core-foundation-sys", 531 | "libc", 532 | ] 533 | 534 | [[package]] 535 | name = "core-foundation-sys" 536 | version = "0.8.3" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 539 | 540 | [[package]] 541 | name = "cpufeatures" 542 | version = "0.2.4" 543 | source = "registry+https://github.com/rust-lang/crates.io-index" 544 | checksum = "dc948ebb96241bb40ab73effeb80d9f93afaad49359d159a5e61be51619fe813" 545 | dependencies = [ 546 | "libc", 547 | ] 548 | 549 | [[package]] 550 | name = "crc32fast" 551 | version = "1.3.2" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 554 | dependencies = [ 555 | "cfg-if 1.0.0", 556 | ] 557 | 558 | [[package]] 559 | name = "crossbeam-deque" 560 | version = "0.7.4" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" 563 | dependencies = [ 564 | "crossbeam-epoch", 565 | "crossbeam-utils 0.7.2", 566 | "maybe-uninit", 567 | ] 568 | 569 | [[package]] 570 | name = "crossbeam-epoch" 571 | version = "0.8.2" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" 574 | dependencies = [ 575 | "autocfg 1.1.0", 576 | "cfg-if 0.1.10", 577 | "crossbeam-utils 0.7.2", 578 | "lazy_static", 579 | "maybe-uninit", 580 | "memoffset", 581 | "scopeguard", 582 | ] 583 | 584 | [[package]] 585 | name = "crossbeam-queue" 586 | version = "0.2.3" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" 589 | dependencies = [ 590 | "cfg-if 0.1.10", 591 | "crossbeam-utils 0.7.2", 592 | "maybe-uninit", 593 | ] 594 | 595 | [[package]] 596 | name = "crossbeam-utils" 597 | version = "0.7.2" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" 600 | dependencies = [ 601 | "autocfg 1.1.0", 602 | "cfg-if 0.1.10", 603 | "lazy_static", 604 | ] 605 | 606 | [[package]] 607 | name = "crossbeam-utils" 608 | version = "0.8.11" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" 611 | dependencies = [ 612 | "cfg-if 1.0.0", 613 | "once_cell", 614 | ] 615 | 616 | [[package]] 617 | name = "crypto-common" 618 | version = "0.1.6" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 621 | dependencies = [ 622 | "generic-array", 623 | "typenum", 624 | ] 625 | 626 | [[package]] 627 | name = "curl" 628 | version = "0.4.44" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" 631 | dependencies = [ 632 | "curl-sys", 633 | "libc", 634 | "openssl-probe", 635 | "openssl-sys", 636 | "schannel", 637 | "socket2 0.4.7", 638 | "winapi 0.3.9", 639 | ] 640 | 641 | [[package]] 642 | name = "curl-sys" 643 | version = "0.4.56+curl-7.83.1" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "6093e169dd4de29e468fa649fbae11cdcd5551c81fe5bf1b0677adad7ef3d26f" 646 | dependencies = [ 647 | "cc", 648 | "libc", 649 | "libnghttp2-sys", 650 | "libz-sys", 651 | "openssl-sys", 652 | "pkg-config", 653 | "vcpkg", 654 | "winapi 0.3.9", 655 | ] 656 | 657 | [[package]] 658 | name = "data-encoding" 659 | version = "2.3.2" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" 662 | 663 | [[package]] 664 | name = "digest" 665 | version = "0.10.3" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 668 | dependencies = [ 669 | "block-buffer", 670 | "crypto-common", 671 | ] 672 | 673 | [[package]] 674 | name = "downloader" 675 | version = "0.2.6" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "074093edfa907e8203c17c5111b04e114e03bde5ccdfa21a388fa4f34dabad96" 678 | dependencies = [ 679 | "futures 0.3.24", 680 | "indicatif", 681 | "rand 0.8.5", 682 | "reqwest 0.11.11", 683 | "thiserror", 684 | "tokio 1.20.1", 685 | ] 686 | 687 | [[package]] 688 | name = "dtoa" 689 | version = "0.4.8" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" 692 | 693 | [[package]] 694 | name = "either" 695 | version = "1.8.0" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" 698 | 699 | [[package]] 700 | name = "encode_unicode" 701 | version = "0.3.6" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 704 | 705 | [[package]] 706 | name = "encoding_rs" 707 | version = "0.8.31" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" 710 | dependencies = [ 711 | "cfg-if 1.0.0", 712 | ] 713 | 714 | [[package]] 715 | name = "enum-as-inner" 716 | version = "0.3.4" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" 719 | dependencies = [ 720 | "heck", 721 | "proc-macro2", 722 | "quote", 723 | "syn", 724 | ] 725 | 726 | [[package]] 727 | name = "event-listener" 728 | version = "2.5.3" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 731 | 732 | [[package]] 733 | name = "failure" 734 | version = "0.1.8" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" 737 | dependencies = [ 738 | "backtrace", 739 | "failure_derive", 740 | ] 741 | 742 | [[package]] 743 | name = "failure_derive" 744 | version = "0.1.8" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" 747 | dependencies = [ 748 | "proc-macro2", 749 | "quote", 750 | "syn", 751 | "synstructure", 752 | ] 753 | 754 | [[package]] 755 | name = "fastrand" 756 | version = "1.8.0" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" 759 | dependencies = [ 760 | "instant", 761 | ] 762 | 763 | [[package]] 764 | name = "flate2" 765 | version = "1.0.24" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" 768 | dependencies = [ 769 | "crc32fast", 770 | "miniz_oxide", 771 | ] 772 | 773 | [[package]] 774 | name = "fnv" 775 | version = "1.0.7" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 778 | 779 | [[package]] 780 | name = "foreign-types" 781 | version = "0.3.2" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 784 | dependencies = [ 785 | "foreign-types-shared", 786 | ] 787 | 788 | [[package]] 789 | name = "foreign-types-shared" 790 | version = "0.1.1" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 793 | 794 | [[package]] 795 | name = "form_urlencoded" 796 | version = "1.0.1" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 799 | dependencies = [ 800 | "matches", 801 | "percent-encoding 2.1.0", 802 | ] 803 | 804 | [[package]] 805 | name = "fuchsia-cprng" 806 | version = "0.1.1" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 809 | 810 | [[package]] 811 | name = "fuchsia-zircon" 812 | version = "0.3.3" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 815 | dependencies = [ 816 | "bitflags", 817 | "fuchsia-zircon-sys", 818 | ] 819 | 820 | [[package]] 821 | name = "fuchsia-zircon-sys" 822 | version = "0.3.3" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 825 | 826 | [[package]] 827 | name = "futures" 828 | version = "0.1.31" 829 | source = "registry+https://github.com/rust-lang/crates.io-index" 830 | checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" 831 | 832 | [[package]] 833 | name = "futures" 834 | version = "0.3.24" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" 837 | dependencies = [ 838 | "futures-channel", 839 | "futures-core", 840 | "futures-executor", 841 | "futures-io", 842 | "futures-sink", 843 | "futures-task", 844 | "futures-util", 845 | ] 846 | 847 | [[package]] 848 | name = "futures-channel" 849 | version = "0.3.24" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" 852 | dependencies = [ 853 | "futures-core", 854 | "futures-sink", 855 | ] 856 | 857 | [[package]] 858 | name = "futures-core" 859 | version = "0.3.24" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" 862 | 863 | [[package]] 864 | name = "futures-cpupool" 865 | version = "0.1.8" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 868 | dependencies = [ 869 | "futures 0.1.31", 870 | "num_cpus", 871 | ] 872 | 873 | [[package]] 874 | name = "futures-executor" 875 | version = "0.3.24" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" 878 | dependencies = [ 879 | "futures-core", 880 | "futures-task", 881 | "futures-util", 882 | ] 883 | 884 | [[package]] 885 | name = "futures-io" 886 | version = "0.3.24" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" 889 | 890 | [[package]] 891 | name = "futures-lite" 892 | version = "1.12.0" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" 895 | dependencies = [ 896 | "fastrand", 897 | "futures-core", 898 | "futures-io", 899 | "memchr", 900 | "parking", 901 | "pin-project-lite", 902 | "waker-fn", 903 | ] 904 | 905 | [[package]] 906 | name = "futures-macro" 907 | version = "0.3.24" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" 910 | dependencies = [ 911 | "proc-macro2", 912 | "quote", 913 | "syn", 914 | ] 915 | 916 | [[package]] 917 | name = "futures-sink" 918 | version = "0.3.24" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" 921 | 922 | [[package]] 923 | name = "futures-task" 924 | version = "0.3.24" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" 927 | 928 | [[package]] 929 | name = "futures-util" 930 | version = "0.3.24" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" 933 | dependencies = [ 934 | "futures-channel", 935 | "futures-core", 936 | "futures-io", 937 | "futures-macro", 938 | "futures-sink", 939 | "futures-task", 940 | "memchr", 941 | "pin-project-lite", 942 | "pin-utils", 943 | "slab", 944 | ] 945 | 946 | [[package]] 947 | name = "generic-array" 948 | version = "0.14.6" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 951 | dependencies = [ 952 | "typenum", 953 | "version_check", 954 | ] 955 | 956 | [[package]] 957 | name = "getrandom" 958 | version = "0.2.7" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 961 | dependencies = [ 962 | "cfg-if 1.0.0", 963 | "libc", 964 | "wasi 0.11.0+wasi-snapshot-preview1", 965 | ] 966 | 967 | [[package]] 968 | name = "gimli" 969 | version = "0.26.2" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" 972 | 973 | [[package]] 974 | name = "h2" 975 | version = "0.1.26" 976 | source = "registry+https://github.com/rust-lang/crates.io-index" 977 | checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" 978 | dependencies = [ 979 | "byteorder", 980 | "bytes 0.4.12", 981 | "fnv", 982 | "futures 0.1.31", 983 | "http 0.1.21", 984 | "indexmap", 985 | "log", 986 | "slab", 987 | "string", 988 | "tokio-io", 989 | ] 990 | 991 | [[package]] 992 | name = "h2" 993 | version = "0.3.14" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" 996 | dependencies = [ 997 | "bytes 1.2.1", 998 | "fnv", 999 | "futures-core", 1000 | "futures-sink", 1001 | "futures-util", 1002 | "http 0.2.8", 1003 | "indexmap", 1004 | "slab", 1005 | "tokio 1.20.1", 1006 | "tokio-util 0.7.3", 1007 | "tracing", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "hashbrown" 1012 | version = "0.11.2" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 1015 | dependencies = [ 1016 | "ahash 0.7.6", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "hashbrown" 1021 | version = "0.12.3" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1024 | 1025 | [[package]] 1026 | name = "heck" 1027 | version = "0.4.0" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 1030 | 1031 | [[package]] 1032 | name = "hermit-abi" 1033 | version = "0.1.19" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1036 | dependencies = [ 1037 | "libc", 1038 | ] 1039 | 1040 | [[package]] 1041 | name = "hostname" 1042 | version = "0.3.1" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 1045 | dependencies = [ 1046 | "libc", 1047 | "match_cfg", 1048 | "winapi 0.3.9", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "http" 1053 | version = "0.1.21" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" 1056 | dependencies = [ 1057 | "bytes 0.4.12", 1058 | "fnv", 1059 | "itoa 0.4.8", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "http" 1064 | version = "0.2.8" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" 1067 | dependencies = [ 1068 | "bytes 1.2.1", 1069 | "fnv", 1070 | "itoa 1.0.3", 1071 | ] 1072 | 1073 | [[package]] 1074 | name = "http-body" 1075 | version = "0.1.0" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" 1078 | dependencies = [ 1079 | "bytes 0.4.12", 1080 | "futures 0.1.31", 1081 | "http 0.1.21", 1082 | "tokio-buf", 1083 | ] 1084 | 1085 | [[package]] 1086 | name = "http-body" 1087 | version = "0.4.5" 1088 | source = "registry+https://github.com/rust-lang/crates.io-index" 1089 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 1090 | dependencies = [ 1091 | "bytes 1.2.1", 1092 | "http 0.2.8", 1093 | "pin-project-lite", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "httparse" 1098 | version = "1.8.0" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 1101 | 1102 | [[package]] 1103 | name = "httpdate" 1104 | version = "1.0.2" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 1107 | 1108 | [[package]] 1109 | name = "hyper" 1110 | version = "0.12.36" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52" 1113 | dependencies = [ 1114 | "bytes 0.4.12", 1115 | "futures 0.1.31", 1116 | "futures-cpupool", 1117 | "h2 0.1.26", 1118 | "http 0.1.21", 1119 | "http-body 0.1.0", 1120 | "httparse", 1121 | "iovec", 1122 | "itoa 0.4.8", 1123 | "log", 1124 | "net2", 1125 | "rustc_version", 1126 | "time 0.1.44", 1127 | "tokio 0.1.22", 1128 | "tokio-buf", 1129 | "tokio-executor", 1130 | "tokio-io", 1131 | "tokio-reactor", 1132 | "tokio-tcp", 1133 | "tokio-threadpool", 1134 | "tokio-timer", 1135 | "want 0.2.0", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "hyper" 1140 | version = "0.14.20" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" 1143 | dependencies = [ 1144 | "bytes 1.2.1", 1145 | "futures-channel", 1146 | "futures-core", 1147 | "futures-util", 1148 | "h2 0.3.14", 1149 | "http 0.2.8", 1150 | "http-body 0.4.5", 1151 | "httparse", 1152 | "httpdate", 1153 | "itoa 1.0.3", 1154 | "pin-project-lite", 1155 | "socket2 0.4.7", 1156 | "tokio 1.20.1", 1157 | "tower-service", 1158 | "tracing", 1159 | "want 0.3.0", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "hyper-tls" 1164 | version = "0.3.2" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" 1167 | dependencies = [ 1168 | "bytes 0.4.12", 1169 | "futures 0.1.31", 1170 | "hyper 0.12.36", 1171 | "native-tls", 1172 | "tokio-io", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "hyper-tls" 1177 | version = "0.5.0" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 1180 | dependencies = [ 1181 | "bytes 1.2.1", 1182 | "hyper 0.14.20", 1183 | "native-tls", 1184 | "tokio 1.20.1", 1185 | "tokio-native-tls", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "idna" 1190 | version = "0.1.5" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1193 | dependencies = [ 1194 | "matches", 1195 | "unicode-bidi", 1196 | "unicode-normalization", 1197 | ] 1198 | 1199 | [[package]] 1200 | name = "idna" 1201 | version = "0.2.3" 1202 | source = "registry+https://github.com/rust-lang/crates.io-index" 1203 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 1204 | dependencies = [ 1205 | "matches", 1206 | "unicode-bidi", 1207 | "unicode-normalization", 1208 | ] 1209 | 1210 | [[package]] 1211 | name = "indexmap" 1212 | version = "1.9.1" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" 1215 | dependencies = [ 1216 | "autocfg 1.1.0", 1217 | "hashbrown 0.12.3", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "indicatif" 1222 | version = "0.15.0" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4" 1225 | dependencies = [ 1226 | "console", 1227 | "lazy_static", 1228 | "number_prefix", 1229 | "regex", 1230 | ] 1231 | 1232 | [[package]] 1233 | name = "inout" 1234 | version = "0.1.3" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 1237 | dependencies = [ 1238 | "generic-array", 1239 | ] 1240 | 1241 | [[package]] 1242 | name = "instant" 1243 | version = "0.1.12" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1246 | dependencies = [ 1247 | "cfg-if 1.0.0", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "iovec" 1252 | version = "0.1.4" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 1255 | dependencies = [ 1256 | "libc", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "ipconfig" 1261 | version = "0.2.2" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" 1264 | dependencies = [ 1265 | "socket2 0.3.19", 1266 | "widestring", 1267 | "winapi 0.3.9", 1268 | "winreg 0.6.2", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "ipinfo" 1273 | version = "0.3.1" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "f7dafc77f178cd9c1e36c6ac260e0196d6924e874c666ceb2f481c37e34f49fd" 1276 | dependencies = [ 1277 | "lru", 1278 | "reqwest 0.9.24", 1279 | "serde", 1280 | "serde_json", 1281 | ] 1282 | 1283 | [[package]] 1284 | name = "ipnet" 1285 | version = "2.5.0" 1286 | source = "registry+https://github.com/rust-lang/crates.io-index" 1287 | checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" 1288 | 1289 | [[package]] 1290 | name = "isahc" 1291 | version = "1.7.2" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" 1294 | dependencies = [ 1295 | "async-channel", 1296 | "castaway", 1297 | "crossbeam-utils 0.8.11", 1298 | "curl", 1299 | "curl-sys", 1300 | "encoding_rs", 1301 | "event-listener", 1302 | "futures-lite", 1303 | "http 0.2.8", 1304 | "log", 1305 | "mime", 1306 | "once_cell", 1307 | "polling", 1308 | "serde", 1309 | "serde_json", 1310 | "slab", 1311 | "sluice", 1312 | "tracing", 1313 | "tracing-futures", 1314 | "url 2.2.2", 1315 | "waker-fn", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "itoa" 1320 | version = "0.4.8" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 1323 | 1324 | [[package]] 1325 | name = "itoa" 1326 | version = "1.0.3" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" 1329 | 1330 | [[package]] 1331 | name = "js-sys" 1332 | version = "0.3.59" 1333 | source = "registry+https://github.com/rust-lang/crates.io-index" 1334 | checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" 1335 | dependencies = [ 1336 | "wasm-bindgen", 1337 | ] 1338 | 1339 | [[package]] 1340 | name = "kernel32-sys" 1341 | version = "0.2.2" 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" 1343 | checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1344 | dependencies = [ 1345 | "winapi 0.2.8", 1346 | "winapi-build", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "lazy_static" 1351 | version = "1.4.0" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1354 | 1355 | [[package]] 1356 | name = "libc" 1357 | version = "0.2.132" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" 1360 | 1361 | [[package]] 1362 | name = "libnghttp2-sys" 1363 | version = "0.1.7+1.45.0" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f" 1366 | dependencies = [ 1367 | "cc", 1368 | "libc", 1369 | ] 1370 | 1371 | [[package]] 1372 | name = "libz-sys" 1373 | version = "1.1.8" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" 1376 | dependencies = [ 1377 | "cc", 1378 | "libc", 1379 | "pkg-config", 1380 | "vcpkg", 1381 | ] 1382 | 1383 | [[package]] 1384 | name = "linked-hash-map" 1385 | version = "0.5.6" 1386 | source = "registry+https://github.com/rust-lang/crates.io-index" 1387 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1388 | 1389 | [[package]] 1390 | name = "lock_api" 1391 | version = "0.3.4" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" 1394 | dependencies = [ 1395 | "scopeguard", 1396 | ] 1397 | 1398 | [[package]] 1399 | name = "lock_api" 1400 | version = "0.4.8" 1401 | source = "registry+https://github.com/rust-lang/crates.io-index" 1402 | checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" 1403 | dependencies = [ 1404 | "autocfg 1.1.0", 1405 | "scopeguard", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "log" 1410 | version = "0.4.17" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1413 | dependencies = [ 1414 | "cfg-if 1.0.0", 1415 | ] 1416 | 1417 | [[package]] 1418 | name = "lru" 1419 | version = "0.6.6" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "7ea2d928b485416e8908cff2d97d621db22b27f7b3b6729e438bcf42c671ba91" 1422 | dependencies = [ 1423 | "hashbrown 0.11.2", 1424 | ] 1425 | 1426 | [[package]] 1427 | name = "lru-cache" 1428 | version = "0.1.2" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" 1431 | dependencies = [ 1432 | "linked-hash-map", 1433 | ] 1434 | 1435 | [[package]] 1436 | name = "match_cfg" 1437 | version = "0.1.0" 1438 | source = "registry+https://github.com/rust-lang/crates.io-index" 1439 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1440 | 1441 | [[package]] 1442 | name = "matches" 1443 | version = "0.1.9" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 1446 | 1447 | [[package]] 1448 | name = "maybe-uninit" 1449 | version = "2.0.0" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 1452 | 1453 | [[package]] 1454 | name = "memchr" 1455 | version = "2.5.0" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1458 | 1459 | [[package]] 1460 | name = "memoffset" 1461 | version = "0.5.6" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" 1464 | dependencies = [ 1465 | "autocfg 1.1.0", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "mime" 1470 | version = "0.3.16" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1473 | 1474 | [[package]] 1475 | name = "mime_guess" 1476 | version = "2.0.4" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" 1479 | dependencies = [ 1480 | "mime", 1481 | "unicase", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "miniz_oxide" 1486 | version = "0.5.3" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" 1489 | dependencies = [ 1490 | "adler", 1491 | ] 1492 | 1493 | [[package]] 1494 | name = "mio" 1495 | version = "0.6.23" 1496 | source = "registry+https://github.com/rust-lang/crates.io-index" 1497 | checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" 1498 | dependencies = [ 1499 | "cfg-if 0.1.10", 1500 | "fuchsia-zircon", 1501 | "fuchsia-zircon-sys", 1502 | "iovec", 1503 | "kernel32-sys", 1504 | "libc", 1505 | "log", 1506 | "miow", 1507 | "net2", 1508 | "slab", 1509 | "winapi 0.2.8", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "mio" 1514 | version = "0.8.4" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" 1517 | dependencies = [ 1518 | "libc", 1519 | "log", 1520 | "wasi 0.11.0+wasi-snapshot-preview1", 1521 | "windows-sys", 1522 | ] 1523 | 1524 | [[package]] 1525 | name = "miow" 1526 | version = "0.2.2" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" 1529 | dependencies = [ 1530 | "kernel32-sys", 1531 | "net2", 1532 | "winapi 0.2.8", 1533 | "ws2_32-sys", 1534 | ] 1535 | 1536 | [[package]] 1537 | name = "native-tls" 1538 | version = "0.2.10" 1539 | source = "registry+https://github.com/rust-lang/crates.io-index" 1540 | checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" 1541 | dependencies = [ 1542 | "lazy_static", 1543 | "libc", 1544 | "log", 1545 | "openssl", 1546 | "openssl-probe", 1547 | "openssl-sys", 1548 | "schannel", 1549 | "security-framework", 1550 | "security-framework-sys", 1551 | "tempfile", 1552 | ] 1553 | 1554 | [[package]] 1555 | name = "net2" 1556 | version = "0.2.37" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" 1559 | dependencies = [ 1560 | "cfg-if 0.1.10", 1561 | "libc", 1562 | "winapi 0.3.9", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "nohash-hasher" 1567 | version = "0.2.0" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1570 | 1571 | [[package]] 1572 | name = "num" 1573 | version = "0.4.0" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" 1576 | dependencies = [ 1577 | "num-bigint", 1578 | "num-complex", 1579 | "num-integer", 1580 | "num-iter", 1581 | "num-rational", 1582 | "num-traits", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "num-bigint" 1587 | version = "0.4.3" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 1590 | dependencies = [ 1591 | "autocfg 1.1.0", 1592 | "num-integer", 1593 | "num-traits", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "num-complex" 1598 | version = "0.4.2" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" 1601 | dependencies = [ 1602 | "num-traits", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "num-derive" 1607 | version = "0.3.3" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 1610 | dependencies = [ 1611 | "proc-macro2", 1612 | "quote", 1613 | "syn", 1614 | ] 1615 | 1616 | [[package]] 1617 | name = "num-integer" 1618 | version = "0.1.45" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1621 | dependencies = [ 1622 | "autocfg 1.1.0", 1623 | "num-traits", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "num-iter" 1628 | version = "0.1.43" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 1631 | dependencies = [ 1632 | "autocfg 1.1.0", 1633 | "num-integer", 1634 | "num-traits", 1635 | ] 1636 | 1637 | [[package]] 1638 | name = "num-rational" 1639 | version = "0.4.1" 1640 | source = "registry+https://github.com/rust-lang/crates.io-index" 1641 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 1642 | dependencies = [ 1643 | "autocfg 1.1.0", 1644 | "num-bigint", 1645 | "num-integer", 1646 | "num-traits", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "num-traits" 1651 | version = "0.2.15" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1654 | dependencies = [ 1655 | "autocfg 1.1.0", 1656 | ] 1657 | 1658 | [[package]] 1659 | name = "num_cpus" 1660 | version = "1.13.1" 1661 | source = "registry+https://github.com/rust-lang/crates.io-index" 1662 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 1663 | dependencies = [ 1664 | "hermit-abi", 1665 | "libc", 1666 | ] 1667 | 1668 | [[package]] 1669 | name = "num_threads" 1670 | version = "0.1.6" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" 1673 | dependencies = [ 1674 | "libc", 1675 | ] 1676 | 1677 | [[package]] 1678 | name = "number_prefix" 1679 | version = "0.3.0" 1680 | source = "registry+https://github.com/rust-lang/crates.io-index" 1681 | checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a" 1682 | 1683 | [[package]] 1684 | name = "object" 1685 | version = "0.29.0" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" 1688 | dependencies = [ 1689 | "memchr", 1690 | ] 1691 | 1692 | [[package]] 1693 | name = "once_cell" 1694 | version = "1.13.1" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" 1697 | 1698 | [[package]] 1699 | name = "openssl" 1700 | version = "0.10.41" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" 1703 | dependencies = [ 1704 | "bitflags", 1705 | "cfg-if 1.0.0", 1706 | "foreign-types", 1707 | "libc", 1708 | "once_cell", 1709 | "openssl-macros", 1710 | "openssl-sys", 1711 | ] 1712 | 1713 | [[package]] 1714 | name = "openssl-macros" 1715 | version = "0.1.0" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" 1718 | dependencies = [ 1719 | "proc-macro2", 1720 | "quote", 1721 | "syn", 1722 | ] 1723 | 1724 | [[package]] 1725 | name = "openssl-probe" 1726 | version = "0.1.5" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1729 | 1730 | [[package]] 1731 | name = "openssl-sys" 1732 | version = "0.9.75" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" 1735 | dependencies = [ 1736 | "autocfg 1.1.0", 1737 | "cc", 1738 | "libc", 1739 | "pkg-config", 1740 | "vcpkg", 1741 | ] 1742 | 1743 | [[package]] 1744 | name = "os_str_bytes" 1745 | version = "6.3.0" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" 1748 | 1749 | [[package]] 1750 | name = "owo-colors" 1751 | version = "3.5.0" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" 1754 | 1755 | [[package]] 1756 | name = "packet-macros" 1757 | version = "0.1.0" 1758 | source = "git+https://github.com/mat-1/azalea#32458d743f757da3193717fe5554f490703640c0" 1759 | dependencies = [ 1760 | "proc-macro2", 1761 | "quote", 1762 | "syn", 1763 | ] 1764 | 1765 | [[package]] 1766 | name = "parking" 1767 | version = "2.0.0" 1768 | source = "registry+https://github.com/rust-lang/crates.io-index" 1769 | checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" 1770 | 1771 | [[package]] 1772 | name = "parking_lot" 1773 | version = "0.9.0" 1774 | source = "registry+https://github.com/rust-lang/crates.io-index" 1775 | checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" 1776 | dependencies = [ 1777 | "lock_api 0.3.4", 1778 | "parking_lot_core 0.6.2", 1779 | "rustc_version", 1780 | ] 1781 | 1782 | [[package]] 1783 | name = "parking_lot" 1784 | version = "0.11.2" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1787 | dependencies = [ 1788 | "instant", 1789 | "lock_api 0.4.8", 1790 | "parking_lot_core 0.8.5", 1791 | ] 1792 | 1793 | [[package]] 1794 | name = "parking_lot" 1795 | version = "0.12.1" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1798 | dependencies = [ 1799 | "lock_api 0.4.8", 1800 | "parking_lot_core 0.9.3", 1801 | ] 1802 | 1803 | [[package]] 1804 | name = "parking_lot_core" 1805 | version = "0.6.2" 1806 | source = "registry+https://github.com/rust-lang/crates.io-index" 1807 | checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" 1808 | dependencies = [ 1809 | "cfg-if 0.1.10", 1810 | "cloudabi", 1811 | "libc", 1812 | "redox_syscall 0.1.57", 1813 | "rustc_version", 1814 | "smallvec 0.6.14", 1815 | "winapi 0.3.9", 1816 | ] 1817 | 1818 | [[package]] 1819 | name = "parking_lot_core" 1820 | version = "0.8.5" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 1823 | dependencies = [ 1824 | "cfg-if 1.0.0", 1825 | "instant", 1826 | "libc", 1827 | "redox_syscall 0.2.16", 1828 | "smallvec 1.9.0", 1829 | "winapi 0.3.9", 1830 | ] 1831 | 1832 | [[package]] 1833 | name = "parking_lot_core" 1834 | version = "0.9.3" 1835 | source = "registry+https://github.com/rust-lang/crates.io-index" 1836 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 1837 | dependencies = [ 1838 | "cfg-if 1.0.0", 1839 | "libc", 1840 | "redox_syscall 0.2.16", 1841 | "smallvec 1.9.0", 1842 | "windows-sys", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "percent-encoding" 1847 | version = "1.0.1" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1850 | 1851 | [[package]] 1852 | name = "percent-encoding" 1853 | version = "2.1.0" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1856 | 1857 | [[package]] 1858 | name = "pin-project" 1859 | version = "1.0.12" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" 1862 | dependencies = [ 1863 | "pin-project-internal", 1864 | ] 1865 | 1866 | [[package]] 1867 | name = "pin-project-internal" 1868 | version = "1.0.12" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" 1871 | dependencies = [ 1872 | "proc-macro2", 1873 | "quote", 1874 | "syn", 1875 | ] 1876 | 1877 | [[package]] 1878 | name = "pin-project-lite" 1879 | version = "0.2.9" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1882 | 1883 | [[package]] 1884 | name = "pin-utils" 1885 | version = "0.1.0" 1886 | source = "registry+https://github.com/rust-lang/crates.io-index" 1887 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1888 | 1889 | [[package]] 1890 | name = "pkg-config" 1891 | version = "0.3.25" 1892 | source = "registry+https://github.com/rust-lang/crates.io-index" 1893 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 1894 | 1895 | [[package]] 1896 | name = "polling" 1897 | version = "2.3.0" 1898 | source = "registry+https://github.com/rust-lang/crates.io-index" 1899 | checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" 1900 | dependencies = [ 1901 | "autocfg 1.1.0", 1902 | "cfg-if 1.0.0", 1903 | "libc", 1904 | "log", 1905 | "wepoll-ffi", 1906 | "winapi 0.3.9", 1907 | ] 1908 | 1909 | [[package]] 1910 | name = "ppv-lite86" 1911 | version = "0.2.16" 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" 1913 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 1914 | 1915 | [[package]] 1916 | name = "proc-macro-error" 1917 | version = "1.0.4" 1918 | source = "registry+https://github.com/rust-lang/crates.io-index" 1919 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1920 | dependencies = [ 1921 | "proc-macro-error-attr", 1922 | "proc-macro2", 1923 | "quote", 1924 | "syn", 1925 | "version_check", 1926 | ] 1927 | 1928 | [[package]] 1929 | name = "proc-macro-error-attr" 1930 | version = "1.0.4" 1931 | source = "registry+https://github.com/rust-lang/crates.io-index" 1932 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1933 | dependencies = [ 1934 | "proc-macro2", 1935 | "quote", 1936 | "version_check", 1937 | ] 1938 | 1939 | [[package]] 1940 | name = "proc-macro2" 1941 | version = "1.0.43" 1942 | source = "registry+https://github.com/rust-lang/crates.io-index" 1943 | checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" 1944 | dependencies = [ 1945 | "unicode-ident", 1946 | ] 1947 | 1948 | [[package]] 1949 | name = "proxypot" 1950 | version = "0.2.5" 1951 | dependencies = [ 1952 | "anyhow", 1953 | "azalea-buf", 1954 | "azalea-crypto", 1955 | "azalea-protocol", 1956 | "bytes 1.2.1", 1957 | "clap", 1958 | "downloader", 1959 | "futures 0.3.24", 1960 | "ipinfo", 1961 | "isahc", 1962 | "owo-colors", 1963 | "rand 0.8.5", 1964 | "serde", 1965 | "serde_json", 1966 | "time 0.3.14", 1967 | "tokio 1.20.1", 1968 | "tokio-util 0.7.3", 1969 | "toml", 1970 | "uuid 1.1.2", 1971 | "webhook", 1972 | ] 1973 | 1974 | [[package]] 1975 | name = "publicsuffix" 1976 | version = "1.5.6" 1977 | source = "registry+https://github.com/rust-lang/crates.io-index" 1978 | checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f" 1979 | dependencies = [ 1980 | "idna 0.2.3", 1981 | "url 2.2.2", 1982 | ] 1983 | 1984 | [[package]] 1985 | name = "quick-error" 1986 | version = "1.2.3" 1987 | source = "registry+https://github.com/rust-lang/crates.io-index" 1988 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 1989 | 1990 | [[package]] 1991 | name = "quote" 1992 | version = "1.0.21" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 1995 | dependencies = [ 1996 | "proc-macro2", 1997 | ] 1998 | 1999 | [[package]] 2000 | name = "rand" 2001 | version = "0.6.5" 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" 2003 | checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 2004 | dependencies = [ 2005 | "autocfg 0.1.8", 2006 | "libc", 2007 | "rand_chacha 0.1.1", 2008 | "rand_core 0.4.2", 2009 | "rand_hc", 2010 | "rand_isaac", 2011 | "rand_jitter", 2012 | "rand_os", 2013 | "rand_pcg", 2014 | "rand_xorshift", 2015 | "winapi 0.3.9", 2016 | ] 2017 | 2018 | [[package]] 2019 | name = "rand" 2020 | version = "0.8.5" 2021 | source = "registry+https://github.com/rust-lang/crates.io-index" 2022 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2023 | dependencies = [ 2024 | "libc", 2025 | "rand_chacha 0.3.1", 2026 | "rand_core 0.6.3", 2027 | ] 2028 | 2029 | [[package]] 2030 | name = "rand_chacha" 2031 | version = "0.1.1" 2032 | source = "registry+https://github.com/rust-lang/crates.io-index" 2033 | checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 2034 | dependencies = [ 2035 | "autocfg 0.1.8", 2036 | "rand_core 0.3.1", 2037 | ] 2038 | 2039 | [[package]] 2040 | name = "rand_chacha" 2041 | version = "0.3.1" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2044 | dependencies = [ 2045 | "ppv-lite86", 2046 | "rand_core 0.6.3", 2047 | ] 2048 | 2049 | [[package]] 2050 | name = "rand_core" 2051 | version = "0.3.1" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 2054 | dependencies = [ 2055 | "rand_core 0.4.2", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "rand_core" 2060 | version = "0.4.2" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 2063 | 2064 | [[package]] 2065 | name = "rand_core" 2066 | version = "0.6.3" 2067 | source = "registry+https://github.com/rust-lang/crates.io-index" 2068 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 2069 | dependencies = [ 2070 | "getrandom", 2071 | ] 2072 | 2073 | [[package]] 2074 | name = "rand_hc" 2075 | version = "0.1.0" 2076 | source = "registry+https://github.com/rust-lang/crates.io-index" 2077 | checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 2078 | dependencies = [ 2079 | "rand_core 0.3.1", 2080 | ] 2081 | 2082 | [[package]] 2083 | name = "rand_isaac" 2084 | version = "0.1.1" 2085 | source = "registry+https://github.com/rust-lang/crates.io-index" 2086 | checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 2087 | dependencies = [ 2088 | "rand_core 0.3.1", 2089 | ] 2090 | 2091 | [[package]] 2092 | name = "rand_jitter" 2093 | version = "0.1.4" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 2096 | dependencies = [ 2097 | "libc", 2098 | "rand_core 0.4.2", 2099 | "winapi 0.3.9", 2100 | ] 2101 | 2102 | [[package]] 2103 | name = "rand_os" 2104 | version = "0.1.3" 2105 | source = "registry+https://github.com/rust-lang/crates.io-index" 2106 | checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 2107 | dependencies = [ 2108 | "cloudabi", 2109 | "fuchsia-cprng", 2110 | "libc", 2111 | "rand_core 0.4.2", 2112 | "rdrand", 2113 | "winapi 0.3.9", 2114 | ] 2115 | 2116 | [[package]] 2117 | name = "rand_pcg" 2118 | version = "0.1.2" 2119 | source = "registry+https://github.com/rust-lang/crates.io-index" 2120 | checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 2121 | dependencies = [ 2122 | "autocfg 0.1.8", 2123 | "rand_core 0.4.2", 2124 | ] 2125 | 2126 | [[package]] 2127 | name = "rand_xorshift" 2128 | version = "0.1.1" 2129 | source = "registry+https://github.com/rust-lang/crates.io-index" 2130 | checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 2131 | dependencies = [ 2132 | "rand_core 0.3.1", 2133 | ] 2134 | 2135 | [[package]] 2136 | name = "rdrand" 2137 | version = "0.4.0" 2138 | source = "registry+https://github.com/rust-lang/crates.io-index" 2139 | checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 2140 | dependencies = [ 2141 | "rand_core 0.3.1", 2142 | ] 2143 | 2144 | [[package]] 2145 | name = "redox_syscall" 2146 | version = "0.1.57" 2147 | source = "registry+https://github.com/rust-lang/crates.io-index" 2148 | checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" 2149 | 2150 | [[package]] 2151 | name = "redox_syscall" 2152 | version = "0.2.16" 2153 | source = "registry+https://github.com/rust-lang/crates.io-index" 2154 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2155 | dependencies = [ 2156 | "bitflags", 2157 | ] 2158 | 2159 | [[package]] 2160 | name = "regex" 2161 | version = "1.6.0" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 2164 | dependencies = [ 2165 | "regex-syntax", 2166 | ] 2167 | 2168 | [[package]] 2169 | name = "regex-syntax" 2170 | version = "0.6.27" 2171 | source = "registry+https://github.com/rust-lang/crates.io-index" 2172 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 2173 | 2174 | [[package]] 2175 | name = "remove_dir_all" 2176 | version = "0.5.3" 2177 | source = "registry+https://github.com/rust-lang/crates.io-index" 2178 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 2179 | dependencies = [ 2180 | "winapi 0.3.9", 2181 | ] 2182 | 2183 | [[package]] 2184 | name = "reqwest" 2185 | version = "0.9.24" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" 2188 | dependencies = [ 2189 | "base64 0.10.1", 2190 | "bytes 0.4.12", 2191 | "cookie", 2192 | "cookie_store", 2193 | "encoding_rs", 2194 | "flate2", 2195 | "futures 0.1.31", 2196 | "http 0.1.21", 2197 | "hyper 0.12.36", 2198 | "hyper-tls 0.3.2", 2199 | "log", 2200 | "mime", 2201 | "mime_guess", 2202 | "native-tls", 2203 | "serde", 2204 | "serde_json", 2205 | "serde_urlencoded 0.5.5", 2206 | "time 0.1.44", 2207 | "tokio 0.1.22", 2208 | "tokio-executor", 2209 | "tokio-io", 2210 | "tokio-threadpool", 2211 | "tokio-timer", 2212 | "url 1.7.2", 2213 | "uuid 0.7.4", 2214 | "winreg 0.6.2", 2215 | ] 2216 | 2217 | [[package]] 2218 | name = "reqwest" 2219 | version = "0.11.11" 2220 | source = "registry+https://github.com/rust-lang/crates.io-index" 2221 | checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" 2222 | dependencies = [ 2223 | "base64 0.13.0", 2224 | "bytes 1.2.1", 2225 | "encoding_rs", 2226 | "futures-core", 2227 | "futures-util", 2228 | "h2 0.3.14", 2229 | "http 0.2.8", 2230 | "http-body 0.4.5", 2231 | "hyper 0.14.20", 2232 | "hyper-tls 0.5.0", 2233 | "ipnet", 2234 | "js-sys", 2235 | "lazy_static", 2236 | "log", 2237 | "mime", 2238 | "native-tls", 2239 | "percent-encoding 2.1.0", 2240 | "pin-project-lite", 2241 | "serde", 2242 | "serde_json", 2243 | "serde_urlencoded 0.7.1", 2244 | "tokio 1.20.1", 2245 | "tokio-native-tls", 2246 | "tower-service", 2247 | "url 2.2.2", 2248 | "wasm-bindgen", 2249 | "wasm-bindgen-futures", 2250 | "web-sys", 2251 | "winreg 0.10.1", 2252 | ] 2253 | 2254 | [[package]] 2255 | name = "resolv-conf" 2256 | version = "0.7.0" 2257 | source = "registry+https://github.com/rust-lang/crates.io-index" 2258 | checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" 2259 | dependencies = [ 2260 | "hostname", 2261 | "quick-error", 2262 | ] 2263 | 2264 | [[package]] 2265 | name = "rsa_public_encrypt_pkcs1" 2266 | version = "0.4.0" 2267 | source = "registry+https://github.com/rust-lang/crates.io-index" 2268 | checksum = "b3e9243a1f8b312c5535c09de102cc061416515201b194ee4f0a9a76da20ebf4" 2269 | dependencies = [ 2270 | "num", 2271 | "rand 0.8.5", 2272 | "simple_asn1", 2273 | ] 2274 | 2275 | [[package]] 2276 | name = "rustc-demangle" 2277 | version = "0.1.21" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" 2280 | 2281 | [[package]] 2282 | name = "rustc_version" 2283 | version = "0.2.3" 2284 | source = "registry+https://github.com/rust-lang/crates.io-index" 2285 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 2286 | dependencies = [ 2287 | "semver", 2288 | ] 2289 | 2290 | [[package]] 2291 | name = "ryu" 2292 | version = "1.0.11" 2293 | source = "registry+https://github.com/rust-lang/crates.io-index" 2294 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" 2295 | 2296 | [[package]] 2297 | name = "schannel" 2298 | version = "0.1.20" 2299 | source = "registry+https://github.com/rust-lang/crates.io-index" 2300 | checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" 2301 | dependencies = [ 2302 | "lazy_static", 2303 | "windows-sys", 2304 | ] 2305 | 2306 | [[package]] 2307 | name = "scopeguard" 2308 | version = "1.1.0" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2311 | 2312 | [[package]] 2313 | name = "security-framework" 2314 | version = "2.7.0" 2315 | source = "registry+https://github.com/rust-lang/crates.io-index" 2316 | checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" 2317 | dependencies = [ 2318 | "bitflags", 2319 | "core-foundation", 2320 | "core-foundation-sys", 2321 | "libc", 2322 | "security-framework-sys", 2323 | ] 2324 | 2325 | [[package]] 2326 | name = "security-framework-sys" 2327 | version = "2.6.1" 2328 | source = "registry+https://github.com/rust-lang/crates.io-index" 2329 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 2330 | dependencies = [ 2331 | "core-foundation-sys", 2332 | "libc", 2333 | ] 2334 | 2335 | [[package]] 2336 | name = "semver" 2337 | version = "0.9.0" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 2340 | dependencies = [ 2341 | "semver-parser", 2342 | ] 2343 | 2344 | [[package]] 2345 | name = "semver-parser" 2346 | version = "0.7.0" 2347 | source = "registry+https://github.com/rust-lang/crates.io-index" 2348 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 2349 | 2350 | [[package]] 2351 | name = "serde" 2352 | version = "1.0.144" 2353 | source = "registry+https://github.com/rust-lang/crates.io-index" 2354 | checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" 2355 | dependencies = [ 2356 | "serde_derive", 2357 | ] 2358 | 2359 | [[package]] 2360 | name = "serde_derive" 2361 | version = "1.0.144" 2362 | source = "registry+https://github.com/rust-lang/crates.io-index" 2363 | checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" 2364 | dependencies = [ 2365 | "proc-macro2", 2366 | "quote", 2367 | "syn", 2368 | ] 2369 | 2370 | [[package]] 2371 | name = "serde_json" 2372 | version = "1.0.85" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" 2375 | dependencies = [ 2376 | "itoa 1.0.3", 2377 | "ryu", 2378 | "serde", 2379 | ] 2380 | 2381 | [[package]] 2382 | name = "serde_urlencoded" 2383 | version = "0.5.5" 2384 | source = "registry+https://github.com/rust-lang/crates.io-index" 2385 | checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" 2386 | dependencies = [ 2387 | "dtoa", 2388 | "itoa 0.4.8", 2389 | "serde", 2390 | "url 1.7.2", 2391 | ] 2392 | 2393 | [[package]] 2394 | name = "serde_urlencoded" 2395 | version = "0.7.1" 2396 | source = "registry+https://github.com/rust-lang/crates.io-index" 2397 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2398 | dependencies = [ 2399 | "form_urlencoded", 2400 | "itoa 1.0.3", 2401 | "ryu", 2402 | "serde", 2403 | ] 2404 | 2405 | [[package]] 2406 | name = "sha-1" 2407 | version = "0.10.0" 2408 | source = "registry+https://github.com/rust-lang/crates.io-index" 2409 | checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" 2410 | dependencies = [ 2411 | "cfg-if 1.0.0", 2412 | "cpufeatures", 2413 | "digest", 2414 | ] 2415 | 2416 | [[package]] 2417 | name = "signal-hook-registry" 2418 | version = "1.4.0" 2419 | source = "registry+https://github.com/rust-lang/crates.io-index" 2420 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 2421 | dependencies = [ 2422 | "libc", 2423 | ] 2424 | 2425 | [[package]] 2426 | name = "simple_asn1" 2427 | version = "0.5.4" 2428 | source = "registry+https://github.com/rust-lang/crates.io-index" 2429 | checksum = "8eb4ea60fb301dc81dfc113df680571045d375ab7345d171c5dc7d7e13107a80" 2430 | dependencies = [ 2431 | "chrono", 2432 | "num-bigint", 2433 | "num-traits", 2434 | "thiserror", 2435 | ] 2436 | 2437 | [[package]] 2438 | name = "slab" 2439 | version = "0.4.7" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" 2442 | dependencies = [ 2443 | "autocfg 1.1.0", 2444 | ] 2445 | 2446 | [[package]] 2447 | name = "sluice" 2448 | version = "0.5.5" 2449 | source = "registry+https://github.com/rust-lang/crates.io-index" 2450 | checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" 2451 | dependencies = [ 2452 | "async-channel", 2453 | "futures-core", 2454 | "futures-io", 2455 | ] 2456 | 2457 | [[package]] 2458 | name = "smallvec" 2459 | version = "0.6.14" 2460 | source = "registry+https://github.com/rust-lang/crates.io-index" 2461 | checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" 2462 | dependencies = [ 2463 | "maybe-uninit", 2464 | ] 2465 | 2466 | [[package]] 2467 | name = "smallvec" 2468 | version = "1.9.0" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 2471 | 2472 | [[package]] 2473 | name = "socket2" 2474 | version = "0.3.19" 2475 | source = "registry+https://github.com/rust-lang/crates.io-index" 2476 | checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" 2477 | dependencies = [ 2478 | "cfg-if 1.0.0", 2479 | "libc", 2480 | "winapi 0.3.9", 2481 | ] 2482 | 2483 | [[package]] 2484 | name = "socket2" 2485 | version = "0.4.7" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 2488 | dependencies = [ 2489 | "libc", 2490 | "winapi 0.3.9", 2491 | ] 2492 | 2493 | [[package]] 2494 | name = "string" 2495 | version = "0.2.1" 2496 | source = "registry+https://github.com/rust-lang/crates.io-index" 2497 | checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" 2498 | dependencies = [ 2499 | "bytes 0.4.12", 2500 | ] 2501 | 2502 | [[package]] 2503 | name = "strsim" 2504 | version = "0.10.0" 2505 | source = "registry+https://github.com/rust-lang/crates.io-index" 2506 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2507 | 2508 | [[package]] 2509 | name = "syn" 2510 | version = "1.0.99" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" 2513 | dependencies = [ 2514 | "proc-macro2", 2515 | "quote", 2516 | "unicode-ident", 2517 | ] 2518 | 2519 | [[package]] 2520 | name = "synstructure" 2521 | version = "0.12.6" 2522 | source = "registry+https://github.com/rust-lang/crates.io-index" 2523 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 2524 | dependencies = [ 2525 | "proc-macro2", 2526 | "quote", 2527 | "syn", 2528 | "unicode-xid", 2529 | ] 2530 | 2531 | [[package]] 2532 | name = "tempfile" 2533 | version = "3.3.0" 2534 | source = "registry+https://github.com/rust-lang/crates.io-index" 2535 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 2536 | dependencies = [ 2537 | "cfg-if 1.0.0", 2538 | "fastrand", 2539 | "libc", 2540 | "redox_syscall 0.2.16", 2541 | "remove_dir_all", 2542 | "winapi 0.3.9", 2543 | ] 2544 | 2545 | [[package]] 2546 | name = "termcolor" 2547 | version = "1.1.3" 2548 | source = "registry+https://github.com/rust-lang/crates.io-index" 2549 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 2550 | dependencies = [ 2551 | "winapi-util", 2552 | ] 2553 | 2554 | [[package]] 2555 | name = "terminal_size" 2556 | version = "0.1.17" 2557 | source = "registry+https://github.com/rust-lang/crates.io-index" 2558 | checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" 2559 | dependencies = [ 2560 | "libc", 2561 | "winapi 0.3.9", 2562 | ] 2563 | 2564 | [[package]] 2565 | name = "textwrap" 2566 | version = "0.15.0" 2567 | source = "registry+https://github.com/rust-lang/crates.io-index" 2568 | checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" 2569 | 2570 | [[package]] 2571 | name = "thiserror" 2572 | version = "1.0.33" 2573 | source = "registry+https://github.com/rust-lang/crates.io-index" 2574 | checksum = "3d0a539a918745651435ac7db7a18761589a94cd7e94cd56999f828bf73c8a57" 2575 | dependencies = [ 2576 | "thiserror-impl", 2577 | ] 2578 | 2579 | [[package]] 2580 | name = "thiserror-impl" 2581 | version = "1.0.33" 2582 | source = "registry+https://github.com/rust-lang/crates.io-index" 2583 | checksum = "c251e90f708e16c49a16f4917dc2131e75222b72edfa9cb7f7c58ae56aae0c09" 2584 | dependencies = [ 2585 | "proc-macro2", 2586 | "quote", 2587 | "syn", 2588 | ] 2589 | 2590 | [[package]] 2591 | name = "time" 2592 | version = "0.1.44" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" 2595 | dependencies = [ 2596 | "libc", 2597 | "wasi 0.10.0+wasi-snapshot-preview1", 2598 | "winapi 0.3.9", 2599 | ] 2600 | 2601 | [[package]] 2602 | name = "time" 2603 | version = "0.3.14" 2604 | source = "registry+https://github.com/rust-lang/crates.io-index" 2605 | checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" 2606 | dependencies = [ 2607 | "itoa 1.0.3", 2608 | "libc", 2609 | "num_threads", 2610 | "serde", 2611 | ] 2612 | 2613 | [[package]] 2614 | name = "tinyvec" 2615 | version = "1.6.0" 2616 | source = "registry+https://github.com/rust-lang/crates.io-index" 2617 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2618 | dependencies = [ 2619 | "tinyvec_macros", 2620 | ] 2621 | 2622 | [[package]] 2623 | name = "tinyvec_macros" 2624 | version = "0.1.0" 2625 | source = "registry+https://github.com/rust-lang/crates.io-index" 2626 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 2627 | 2628 | [[package]] 2629 | name = "tokio" 2630 | version = "0.1.22" 2631 | source = "registry+https://github.com/rust-lang/crates.io-index" 2632 | checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" 2633 | dependencies = [ 2634 | "bytes 0.4.12", 2635 | "futures 0.1.31", 2636 | "mio 0.6.23", 2637 | "num_cpus", 2638 | "tokio-current-thread", 2639 | "tokio-executor", 2640 | "tokio-io", 2641 | "tokio-reactor", 2642 | "tokio-tcp", 2643 | "tokio-threadpool", 2644 | "tokio-timer", 2645 | ] 2646 | 2647 | [[package]] 2648 | name = "tokio" 2649 | version = "1.20.1" 2650 | source = "registry+https://github.com/rust-lang/crates.io-index" 2651 | checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" 2652 | dependencies = [ 2653 | "autocfg 1.1.0", 2654 | "bytes 1.2.1", 2655 | "libc", 2656 | "memchr", 2657 | "mio 0.8.4", 2658 | "num_cpus", 2659 | "once_cell", 2660 | "parking_lot 0.12.1", 2661 | "pin-project-lite", 2662 | "signal-hook-registry", 2663 | "socket2 0.4.7", 2664 | "tokio-macros", 2665 | "winapi 0.3.9", 2666 | ] 2667 | 2668 | [[package]] 2669 | name = "tokio-buf" 2670 | version = "0.1.1" 2671 | source = "registry+https://github.com/rust-lang/crates.io-index" 2672 | checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" 2673 | dependencies = [ 2674 | "bytes 0.4.12", 2675 | "either", 2676 | "futures 0.1.31", 2677 | ] 2678 | 2679 | [[package]] 2680 | name = "tokio-current-thread" 2681 | version = "0.1.7" 2682 | source = "registry+https://github.com/rust-lang/crates.io-index" 2683 | checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" 2684 | dependencies = [ 2685 | "futures 0.1.31", 2686 | "tokio-executor", 2687 | ] 2688 | 2689 | [[package]] 2690 | name = "tokio-executor" 2691 | version = "0.1.10" 2692 | source = "registry+https://github.com/rust-lang/crates.io-index" 2693 | checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" 2694 | dependencies = [ 2695 | "crossbeam-utils 0.7.2", 2696 | "futures 0.1.31", 2697 | ] 2698 | 2699 | [[package]] 2700 | name = "tokio-io" 2701 | version = "0.1.13" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" 2704 | dependencies = [ 2705 | "bytes 0.4.12", 2706 | "futures 0.1.31", 2707 | "log", 2708 | ] 2709 | 2710 | [[package]] 2711 | name = "tokio-macros" 2712 | version = "1.8.0" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" 2715 | dependencies = [ 2716 | "proc-macro2", 2717 | "quote", 2718 | "syn", 2719 | ] 2720 | 2721 | [[package]] 2722 | name = "tokio-native-tls" 2723 | version = "0.3.0" 2724 | source = "registry+https://github.com/rust-lang/crates.io-index" 2725 | checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" 2726 | dependencies = [ 2727 | "native-tls", 2728 | "tokio 1.20.1", 2729 | ] 2730 | 2731 | [[package]] 2732 | name = "tokio-reactor" 2733 | version = "0.1.12" 2734 | source = "registry+https://github.com/rust-lang/crates.io-index" 2735 | checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" 2736 | dependencies = [ 2737 | "crossbeam-utils 0.7.2", 2738 | "futures 0.1.31", 2739 | "lazy_static", 2740 | "log", 2741 | "mio 0.6.23", 2742 | "num_cpus", 2743 | "parking_lot 0.9.0", 2744 | "slab", 2745 | "tokio-executor", 2746 | "tokio-io", 2747 | "tokio-sync", 2748 | ] 2749 | 2750 | [[package]] 2751 | name = "tokio-sync" 2752 | version = "0.1.8" 2753 | source = "registry+https://github.com/rust-lang/crates.io-index" 2754 | checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" 2755 | dependencies = [ 2756 | "fnv", 2757 | "futures 0.1.31", 2758 | ] 2759 | 2760 | [[package]] 2761 | name = "tokio-tcp" 2762 | version = "0.1.4" 2763 | source = "registry+https://github.com/rust-lang/crates.io-index" 2764 | checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" 2765 | dependencies = [ 2766 | "bytes 0.4.12", 2767 | "futures 0.1.31", 2768 | "iovec", 2769 | "mio 0.6.23", 2770 | "tokio-io", 2771 | "tokio-reactor", 2772 | ] 2773 | 2774 | [[package]] 2775 | name = "tokio-threadpool" 2776 | version = "0.1.18" 2777 | source = "registry+https://github.com/rust-lang/crates.io-index" 2778 | checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" 2779 | dependencies = [ 2780 | "crossbeam-deque", 2781 | "crossbeam-queue", 2782 | "crossbeam-utils 0.7.2", 2783 | "futures 0.1.31", 2784 | "lazy_static", 2785 | "log", 2786 | "num_cpus", 2787 | "slab", 2788 | "tokio-executor", 2789 | ] 2790 | 2791 | [[package]] 2792 | name = "tokio-timer" 2793 | version = "0.2.13" 2794 | source = "registry+https://github.com/rust-lang/crates.io-index" 2795 | checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" 2796 | dependencies = [ 2797 | "crossbeam-utils 0.7.2", 2798 | "futures 0.1.31", 2799 | "slab", 2800 | "tokio-executor", 2801 | ] 2802 | 2803 | [[package]] 2804 | name = "tokio-util" 2805 | version = "0.6.10" 2806 | source = "registry+https://github.com/rust-lang/crates.io-index" 2807 | checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" 2808 | dependencies = [ 2809 | "bytes 1.2.1", 2810 | "futures-core", 2811 | "futures-sink", 2812 | "log", 2813 | "pin-project-lite", 2814 | "tokio 1.20.1", 2815 | ] 2816 | 2817 | [[package]] 2818 | name = "tokio-util" 2819 | version = "0.7.3" 2820 | source = "registry+https://github.com/rust-lang/crates.io-index" 2821 | checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" 2822 | dependencies = [ 2823 | "bytes 1.2.1", 2824 | "futures-core", 2825 | "futures-sink", 2826 | "pin-project-lite", 2827 | "tokio 1.20.1", 2828 | "tracing", 2829 | ] 2830 | 2831 | [[package]] 2832 | name = "toml" 2833 | version = "0.5.9" 2834 | source = "registry+https://github.com/rust-lang/crates.io-index" 2835 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 2836 | dependencies = [ 2837 | "serde", 2838 | ] 2839 | 2840 | [[package]] 2841 | name = "tower-service" 2842 | version = "0.3.2" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 2845 | 2846 | [[package]] 2847 | name = "tracing" 2848 | version = "0.1.36" 2849 | source = "registry+https://github.com/rust-lang/crates.io-index" 2850 | checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" 2851 | dependencies = [ 2852 | "cfg-if 1.0.0", 2853 | "log", 2854 | "pin-project-lite", 2855 | "tracing-attributes", 2856 | "tracing-core", 2857 | ] 2858 | 2859 | [[package]] 2860 | name = "tracing-attributes" 2861 | version = "0.1.22" 2862 | source = "registry+https://github.com/rust-lang/crates.io-index" 2863 | checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" 2864 | dependencies = [ 2865 | "proc-macro2", 2866 | "quote", 2867 | "syn", 2868 | ] 2869 | 2870 | [[package]] 2871 | name = "tracing-core" 2872 | version = "0.1.29" 2873 | source = "registry+https://github.com/rust-lang/crates.io-index" 2874 | checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" 2875 | dependencies = [ 2876 | "once_cell", 2877 | ] 2878 | 2879 | [[package]] 2880 | name = "tracing-futures" 2881 | version = "0.2.5" 2882 | source = "registry+https://github.com/rust-lang/crates.io-index" 2883 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 2884 | dependencies = [ 2885 | "pin-project", 2886 | "tracing", 2887 | ] 2888 | 2889 | [[package]] 2890 | name = "trust-dns-proto" 2891 | version = "0.20.4" 2892 | source = "registry+https://github.com/rust-lang/crates.io-index" 2893 | checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31" 2894 | dependencies = [ 2895 | "async-trait", 2896 | "cfg-if 1.0.0", 2897 | "data-encoding", 2898 | "enum-as-inner", 2899 | "futures-channel", 2900 | "futures-io", 2901 | "futures-util", 2902 | "idna 0.2.3", 2903 | "ipnet", 2904 | "lazy_static", 2905 | "log", 2906 | "rand 0.8.5", 2907 | "smallvec 1.9.0", 2908 | "thiserror", 2909 | "tinyvec", 2910 | "tokio 1.20.1", 2911 | "url 2.2.2", 2912 | ] 2913 | 2914 | [[package]] 2915 | name = "trust-dns-resolver" 2916 | version = "0.20.4" 2917 | source = "registry+https://github.com/rust-lang/crates.io-index" 2918 | checksum = "ecae383baad9995efaa34ce8e57d12c3f305e545887472a492b838f4b5cfb77a" 2919 | dependencies = [ 2920 | "cfg-if 1.0.0", 2921 | "futures-util", 2922 | "ipconfig", 2923 | "lazy_static", 2924 | "log", 2925 | "lru-cache", 2926 | "parking_lot 0.11.2", 2927 | "resolv-conf", 2928 | "smallvec 1.9.0", 2929 | "thiserror", 2930 | "tokio 1.20.1", 2931 | "trust-dns-proto", 2932 | ] 2933 | 2934 | [[package]] 2935 | name = "try-lock" 2936 | version = "0.2.3" 2937 | source = "registry+https://github.com/rust-lang/crates.io-index" 2938 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" 2939 | 2940 | [[package]] 2941 | name = "try_from" 2942 | version = "0.3.2" 2943 | source = "registry+https://github.com/rust-lang/crates.io-index" 2944 | checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" 2945 | dependencies = [ 2946 | "cfg-if 0.1.10", 2947 | ] 2948 | 2949 | [[package]] 2950 | name = "typenum" 2951 | version = "1.15.0" 2952 | source = "registry+https://github.com/rust-lang/crates.io-index" 2953 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 2954 | 2955 | [[package]] 2956 | name = "unicase" 2957 | version = "2.6.0" 2958 | source = "registry+https://github.com/rust-lang/crates.io-index" 2959 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 2960 | dependencies = [ 2961 | "version_check", 2962 | ] 2963 | 2964 | [[package]] 2965 | name = "unicode-bidi" 2966 | version = "0.3.8" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 2969 | 2970 | [[package]] 2971 | name = "unicode-ident" 2972 | version = "1.0.3" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" 2975 | 2976 | [[package]] 2977 | name = "unicode-normalization" 2978 | version = "0.1.21" 2979 | source = "registry+https://github.com/rust-lang/crates.io-index" 2980 | checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" 2981 | dependencies = [ 2982 | "tinyvec", 2983 | ] 2984 | 2985 | [[package]] 2986 | name = "unicode-width" 2987 | version = "0.1.9" 2988 | source = "registry+https://github.com/rust-lang/crates.io-index" 2989 | checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" 2990 | 2991 | [[package]] 2992 | name = "unicode-xid" 2993 | version = "0.2.3" 2994 | source = "registry+https://github.com/rust-lang/crates.io-index" 2995 | checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" 2996 | 2997 | [[package]] 2998 | name = "url" 2999 | version = "1.7.2" 3000 | source = "registry+https://github.com/rust-lang/crates.io-index" 3001 | checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 3002 | dependencies = [ 3003 | "idna 0.1.5", 3004 | "matches", 3005 | "percent-encoding 1.0.1", 3006 | ] 3007 | 3008 | [[package]] 3009 | name = "url" 3010 | version = "2.2.2" 3011 | source = "registry+https://github.com/rust-lang/crates.io-index" 3012 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 3013 | dependencies = [ 3014 | "form_urlencoded", 3015 | "idna 0.2.3", 3016 | "matches", 3017 | "percent-encoding 2.1.0", 3018 | ] 3019 | 3020 | [[package]] 3021 | name = "uuid" 3022 | version = "0.7.4" 3023 | source = "registry+https://github.com/rust-lang/crates.io-index" 3024 | checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" 3025 | dependencies = [ 3026 | "rand 0.6.5", 3027 | ] 3028 | 3029 | [[package]] 3030 | name = "uuid" 3031 | version = "1.1.2" 3032 | source = "registry+https://github.com/rust-lang/crates.io-index" 3033 | checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" 3034 | dependencies = [ 3035 | "getrandom", 3036 | "rand 0.8.5", 3037 | "serde", 3038 | ] 3039 | 3040 | [[package]] 3041 | name = "vcpkg" 3042 | version = "0.2.15" 3043 | source = "registry+https://github.com/rust-lang/crates.io-index" 3044 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3045 | 3046 | [[package]] 3047 | name = "version_check" 3048 | version = "0.9.4" 3049 | source = "registry+https://github.com/rust-lang/crates.io-index" 3050 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 3051 | 3052 | [[package]] 3053 | name = "waker-fn" 3054 | version = "1.1.0" 3055 | source = "registry+https://github.com/rust-lang/crates.io-index" 3056 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 3057 | 3058 | [[package]] 3059 | name = "want" 3060 | version = "0.2.0" 3061 | source = "registry+https://github.com/rust-lang/crates.io-index" 3062 | checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" 3063 | dependencies = [ 3064 | "futures 0.1.31", 3065 | "log", 3066 | "try-lock", 3067 | ] 3068 | 3069 | [[package]] 3070 | name = "want" 3071 | version = "0.3.0" 3072 | source = "registry+https://github.com/rust-lang/crates.io-index" 3073 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 3074 | dependencies = [ 3075 | "log", 3076 | "try-lock", 3077 | ] 3078 | 3079 | [[package]] 3080 | name = "wasi" 3081 | version = "0.10.0+wasi-snapshot-preview1" 3082 | source = "registry+https://github.com/rust-lang/crates.io-index" 3083 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 3084 | 3085 | [[package]] 3086 | name = "wasi" 3087 | version = "0.11.0+wasi-snapshot-preview1" 3088 | source = "registry+https://github.com/rust-lang/crates.io-index" 3089 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3090 | 3091 | [[package]] 3092 | name = "wasm-bindgen" 3093 | version = "0.2.82" 3094 | source = "registry+https://github.com/rust-lang/crates.io-index" 3095 | checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" 3096 | dependencies = [ 3097 | "cfg-if 1.0.0", 3098 | "wasm-bindgen-macro", 3099 | ] 3100 | 3101 | [[package]] 3102 | name = "wasm-bindgen-backend" 3103 | version = "0.2.82" 3104 | source = "registry+https://github.com/rust-lang/crates.io-index" 3105 | checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" 3106 | dependencies = [ 3107 | "bumpalo", 3108 | "log", 3109 | "once_cell", 3110 | "proc-macro2", 3111 | "quote", 3112 | "syn", 3113 | "wasm-bindgen-shared", 3114 | ] 3115 | 3116 | [[package]] 3117 | name = "wasm-bindgen-futures" 3118 | version = "0.4.32" 3119 | source = "registry+https://github.com/rust-lang/crates.io-index" 3120 | checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" 3121 | dependencies = [ 3122 | "cfg-if 1.0.0", 3123 | "js-sys", 3124 | "wasm-bindgen", 3125 | "web-sys", 3126 | ] 3127 | 3128 | [[package]] 3129 | name = "wasm-bindgen-macro" 3130 | version = "0.2.82" 3131 | source = "registry+https://github.com/rust-lang/crates.io-index" 3132 | checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" 3133 | dependencies = [ 3134 | "quote", 3135 | "wasm-bindgen-macro-support", 3136 | ] 3137 | 3138 | [[package]] 3139 | name = "wasm-bindgen-macro-support" 3140 | version = "0.2.82" 3141 | source = "registry+https://github.com/rust-lang/crates.io-index" 3142 | checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" 3143 | dependencies = [ 3144 | "proc-macro2", 3145 | "quote", 3146 | "syn", 3147 | "wasm-bindgen-backend", 3148 | "wasm-bindgen-shared", 3149 | ] 3150 | 3151 | [[package]] 3152 | name = "wasm-bindgen-shared" 3153 | version = "0.2.82" 3154 | source = "registry+https://github.com/rust-lang/crates.io-index" 3155 | checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" 3156 | 3157 | [[package]] 3158 | name = "web-sys" 3159 | version = "0.3.59" 3160 | source = "registry+https://github.com/rust-lang/crates.io-index" 3161 | checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" 3162 | dependencies = [ 3163 | "js-sys", 3164 | "wasm-bindgen", 3165 | ] 3166 | 3167 | [[package]] 3168 | name = "webhook" 3169 | version = "2.0.0" 3170 | source = "git+https://github.com/cleonyc/webhook-rs?branch=fix-embed-field-check#be2e75109d8b8ac290a6c8042be26e95c48ca71b" 3171 | dependencies = [ 3172 | "hyper 0.14.20", 3173 | "hyper-tls 0.5.0", 3174 | "serde", 3175 | "serde_json", 3176 | ] 3177 | 3178 | [[package]] 3179 | name = "wepoll-ffi" 3180 | version = "0.1.2" 3181 | source = "registry+https://github.com/rust-lang/crates.io-index" 3182 | checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" 3183 | dependencies = [ 3184 | "cc", 3185 | ] 3186 | 3187 | [[package]] 3188 | name = "widestring" 3189 | version = "0.4.3" 3190 | source = "registry+https://github.com/rust-lang/crates.io-index" 3191 | checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" 3192 | 3193 | [[package]] 3194 | name = "winapi" 3195 | version = "0.2.8" 3196 | source = "registry+https://github.com/rust-lang/crates.io-index" 3197 | checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 3198 | 3199 | [[package]] 3200 | name = "winapi" 3201 | version = "0.3.9" 3202 | source = "registry+https://github.com/rust-lang/crates.io-index" 3203 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3204 | dependencies = [ 3205 | "winapi-i686-pc-windows-gnu", 3206 | "winapi-x86_64-pc-windows-gnu", 3207 | ] 3208 | 3209 | [[package]] 3210 | name = "winapi-build" 3211 | version = "0.1.1" 3212 | source = "registry+https://github.com/rust-lang/crates.io-index" 3213 | checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 3214 | 3215 | [[package]] 3216 | name = "winapi-i686-pc-windows-gnu" 3217 | version = "0.4.0" 3218 | source = "registry+https://github.com/rust-lang/crates.io-index" 3219 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3220 | 3221 | [[package]] 3222 | name = "winapi-util" 3223 | version = "0.1.5" 3224 | source = "registry+https://github.com/rust-lang/crates.io-index" 3225 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 3226 | dependencies = [ 3227 | "winapi 0.3.9", 3228 | ] 3229 | 3230 | [[package]] 3231 | name = "winapi-x86_64-pc-windows-gnu" 3232 | version = "0.4.0" 3233 | source = "registry+https://github.com/rust-lang/crates.io-index" 3234 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3235 | 3236 | [[package]] 3237 | name = "windows-sys" 3238 | version = "0.36.1" 3239 | source = "registry+https://github.com/rust-lang/crates.io-index" 3240 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 3241 | dependencies = [ 3242 | "windows_aarch64_msvc", 3243 | "windows_i686_gnu", 3244 | "windows_i686_msvc", 3245 | "windows_x86_64_gnu", 3246 | "windows_x86_64_msvc", 3247 | ] 3248 | 3249 | [[package]] 3250 | name = "windows_aarch64_msvc" 3251 | version = "0.36.1" 3252 | source = "registry+https://github.com/rust-lang/crates.io-index" 3253 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 3254 | 3255 | [[package]] 3256 | name = "windows_i686_gnu" 3257 | version = "0.36.1" 3258 | source = "registry+https://github.com/rust-lang/crates.io-index" 3259 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 3260 | 3261 | [[package]] 3262 | name = "windows_i686_msvc" 3263 | version = "0.36.1" 3264 | source = "registry+https://github.com/rust-lang/crates.io-index" 3265 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 3266 | 3267 | [[package]] 3268 | name = "windows_x86_64_gnu" 3269 | version = "0.36.1" 3270 | source = "registry+https://github.com/rust-lang/crates.io-index" 3271 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 3272 | 3273 | [[package]] 3274 | name = "windows_x86_64_msvc" 3275 | version = "0.36.1" 3276 | source = "registry+https://github.com/rust-lang/crates.io-index" 3277 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 3278 | 3279 | [[package]] 3280 | name = "winreg" 3281 | version = "0.6.2" 3282 | source = "registry+https://github.com/rust-lang/crates.io-index" 3283 | checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" 3284 | dependencies = [ 3285 | "winapi 0.3.9", 3286 | ] 3287 | 3288 | [[package]] 3289 | name = "winreg" 3290 | version = "0.10.1" 3291 | source = "registry+https://github.com/rust-lang/crates.io-index" 3292 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" 3293 | dependencies = [ 3294 | "winapi 0.3.9", 3295 | ] 3296 | 3297 | [[package]] 3298 | name = "ws2_32-sys" 3299 | version = "0.2.1" 3300 | source = "registry+https://github.com/rust-lang/crates.io-index" 3301 | checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 3302 | dependencies = [ 3303 | "winapi 0.2.8", 3304 | "winapi-build", 3305 | ] 3306 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "proxypot" 3 | version = "0.2.5" 4 | edition = "2021" 5 | description = "Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json file and discord webhook." 6 | license = "GPL-3.0-or-later" 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | futures = "0.3.23" 11 | tokio = { version = "1", features = ["full"] } 12 | toml = "0.5" 13 | serde = "1.0.144" 14 | serde_json = "1.0.85" 15 | time = {version = "0.3.14", features = ["serde", "formatting"]} 16 | ipinfo = "0.3.1" 17 | owo-colors = "3.5.0" 18 | anyhow = "1.0.62" 19 | clap = { version = "3.2.18", features = ["derive"] } 20 | webhook = { git = "https://github.com/cleonyc/webhook-rs", branch = "fix-embed-field-check" } 21 | isahc = { version = "1.7.2", features = ["json"]} 22 | azalea-protocol = { git = "https://github.com/mat-1/azalea"} 23 | azalea-crypto = { git = "https://github.com/mat-1/azalea"} 24 | azalea-buf = { git = "https://github.com/mat-1/azalea"} 25 | uuid = { version = "1.1.2", features = ["v4", "fast-rng", "serde"] } 26 | rand = "0.8.5" 27 | tokio-util = "0.7.3" 28 | bytes = "1.2.1" 29 | downloader = { version = "0.2.6", features = ["tui"] } 30 | 31 | [profile.release] 32 | lto = true 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # minecraft-honeypot 2 | 3 | Proxies all incoming connections to a minecraft server of your choosing, while also logging all ping and login requests to a json file and discord webhook. Originally built for the liveoverflow server, but do with it whatever you want (provided u follow the license). 4 | 5 | im too lazy to make a readme. 6 | 7 | # run 8 | 9 | ```bash 10 | cargo run -- 11 | 12 | # or download binary and run: 13 | 14 | ./proxypot 15 | 16 | ``` 17 | # credits 18 | 19 | HUGE thanks to mat (mat#1592), who wrote [this](https://github.com/mat-1/azalea) whole library and listened to my nonsense the entire time I was building this. Super cool dude, you should give him your entire life savings. -------------------------------------------------------------------------------- /config.example.toml: -------------------------------------------------------------------------------- 1 | database = "database.json" 2 | webhook_url= "" # set this 3 | summary_webhook_url = "" # set this 4 | summary_message_ids = [] # leave unset, will be set automatically 5 | bind = "0.0.0.0:25565" 6 | server = "" # set this to the server you want to proxy to : -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | // minecraft honeypot does honeypot things for minecraft and proxies which is cool 2 | // Copyright (C) 2022 cleonyc 3 | 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | use std::path::{Path, PathBuf}; 17 | 18 | use serde::{Deserialize, Serialize}; 19 | use tokio::{ 20 | fs::{File, OpenOptions}, 21 | io::{AsyncReadExt, AsyncWriteExt, BufReader}, 22 | }; 23 | 24 | #[derive(Serialize, Deserialize, Clone)] 25 | pub struct Config { 26 | pub webhook_url: String, 27 | pub summary_webhook_url: String, 28 | pub summary_message_ids: Vec, 29 | pub bind: String, 30 | pub server: String, 31 | pub database: PathBuf, 32 | } 33 | impl Config { 34 | pub async fn open(path: impl AsRef) -> anyhow::Result { 35 | let mut file = File::open(&path).await?; 36 | let mut buf_reader = BufReader::new(&mut file); 37 | let mut content = String::new(); 38 | buf_reader.read_to_string(&mut content).await?; 39 | 40 | Ok(toml::from_str(&content)?) 41 | } 42 | pub async fn save(&self, path: impl AsRef) -> anyhow::Result<()> { 43 | let mut file = OpenOptions::new() 44 | .write(true) 45 | .truncate(true) 46 | .open(path) 47 | .await?; 48 | // let mut buf_writer = BufWriter::new(&mut file); 49 | file.write_all(toml::to_string_pretty(&self)?.as_bytes()) 50 | .await?; 51 | Ok(()) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/database.rs: -------------------------------------------------------------------------------- 1 | // minecraft honeypot does honeypot things for minecraft and proxies which is cool 2 | // Copyright (C) 2022 cleonyc 3 | 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | use std::{path::PathBuf, str::FromStr}; 17 | 18 | use isahc::{AsyncReadResponseExt, Request}; 19 | use serde::{Deserialize, Serialize}; 20 | use serde_json::Value; 21 | use time::OffsetDateTime; 22 | use tokio::{ 23 | fs::{File, OpenOptions}, 24 | io::{AsyncReadExt, AsyncWriteExt, BufReader}, 25 | }; 26 | use uuid::Uuid; 27 | 28 | #[derive(Clone)] 29 | pub struct Database { 30 | path: PathBuf, 31 | pub data: Vec, 32 | } 33 | impl Database { 34 | pub async fn open(path: PathBuf) -> anyhow::Result { 35 | let mut file = File::open(&path).await?; 36 | let mut buf_reader = BufReader::new(&mut file); 37 | let mut content = String::new(); 38 | buf_reader.read_to_string(&mut content).await?; 39 | if content.is_empty() { 40 | content = "[]".to_string() 41 | } 42 | let data: Vec = serde_json::from_str(&content)?; 43 | Ok(Self { path, data }) 44 | } 45 | pub async fn save(&self) -> anyhow::Result<()> { 46 | let mut file = OpenOptions::new() 47 | .write(true) 48 | .truncate(true) 49 | .create(true) 50 | .open(&self.path) 51 | .await?; 52 | file.write_all(serde_json::to_string(&self.data)?.as_bytes()) 53 | .await?; 54 | Ok(()) 55 | } 56 | pub async fn handle_ping( 57 | &mut self, 58 | ip: &str, 59 | target: String, 60 | ) -> anyhow::Result<(Client, Ping)> { 61 | let client = match self.data.iter_mut().find(|client| client.ip == ip) { 62 | Some(client) => client, 63 | None => { 64 | let client = Client { 65 | ip: ip.to_string(), 66 | logins: vec![], 67 | pings: vec![], 68 | ipinfo: get_ipinfo(ip).await.unwrap_or_else(|_| "".to_string()), 69 | }; 70 | self.data.push(client); 71 | self.data.iter_mut().find(|c| c.ip == ip).unwrap() 72 | } 73 | }; 74 | let ping = Ping { 75 | target, 76 | time: OffsetDateTime::now_utc(), 77 | }; 78 | client.pings.push(ping.clone()); 79 | let cloned = client.clone(); 80 | self.save().await?; 81 | Ok((cloned, ping)) 82 | } 83 | pub async fn handle_login( 84 | &mut self, 85 | ip: &str, 86 | mut username: String, 87 | ) -> anyhow::Result<(Client, Login)> { 88 | let mut resp = isahc::get_async(format!( 89 | "https://api.mojang.com/users/profiles/minecraft/{}", 90 | username 91 | )) 92 | .await?; 93 | let uuid = if resp.status() != 200 { 94 | username += " [Cracked]"; 95 | None 96 | } else { 97 | let json: Value = resp.json().await?; 98 | match json["id"].as_str() { 99 | Some(uuid) => Some(uuid::Uuid::from_str(uuid)?), 100 | None => { 101 | username += " [Cracked]"; 102 | None 103 | } 104 | } 105 | }; 106 | let client = match self.data.iter_mut().find(|client| client.ip == ip) { 107 | Some(client) => { 108 | if client.ipinfo.is_empty() { 109 | client.ipinfo = get_ipinfo(&client.ip).await? 110 | } 111 | client 112 | } 113 | None => { 114 | let client = Client { 115 | ip: ip.to_string(), 116 | logins: vec![], 117 | pings: vec![], 118 | ipinfo: get_ipinfo(ip).await.unwrap_or_else(|_| "".to_string()), 119 | }; 120 | self.data.push(client); 121 | self.data.iter_mut().find(|c| c.ip == ip).unwrap() 122 | } 123 | }; 124 | let login = Login { 125 | username, 126 | uuid, 127 | time: OffsetDateTime::now_utc(), 128 | }; 129 | client.logins.push(login.clone()); 130 | let cloned = client.clone(); 131 | 132 | self.save().await?; 133 | Ok((cloned, login)) 134 | } 135 | } 136 | impl Default for Database { 137 | fn default() -> Self { 138 | Self { 139 | path: "./database.json".into(), 140 | data: vec![], 141 | } 142 | } 143 | } 144 | 145 | #[derive(Serialize, Deserialize, Clone, Debug)] 146 | pub struct Client { 147 | pub logins: Vec, 148 | pub pings: Vec, 149 | pub ip: String, 150 | pub ipinfo: String, 151 | } 152 | #[derive(Serialize, Deserialize, Clone, Debug)] 153 | pub struct Login { 154 | pub username: String, 155 | pub uuid: Option, 156 | pub time: OffsetDateTime, 157 | } 158 | #[derive(Serialize, Deserialize, Clone, Debug)] 159 | 160 | pub struct Ping { 161 | pub time: OffsetDateTime, 162 | pub target: String, 163 | } 164 | async fn get_ipinfo(ip: &str) -> anyhow::Result { 165 | let request = Request::get(format!("https://ipinfo.io/widget/demo/{}", ip)) 166 | .header("referer", "https://ipinfo.io/") 167 | .body("")?; 168 | let mut r = isahc::send_async(request).await?; 169 | let json: Value = r.json().await?; 170 | Ok(format!( 171 | "Company: {}, Location: {}, {}", 172 | json["data"]["company"]["name"] 173 | .as_str() 174 | .unwrap_or("Unknown"), 175 | json["data"]["region"].as_str().unwrap_or("Unknown"), 176 | json["data"]["country"].as_str().unwrap_or("Unknown") 177 | )) 178 | } 179 | 180 | #[tokio::test] 181 | async fn test_get_ipinfo() { 182 | let ipinfo = get_ipinfo("89.45.224.142").await.unwrap(); 183 | assert_eq!( 184 | ipinfo, 185 | "Company: M247 LTD New York Infrastructure, Location: New York, US".to_string() 186 | ) 187 | } 188 | -------------------------------------------------------------------------------- /src/ipinfo.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cleonyc/proxypot/83eb2ad85ce864bf4a48d2bf4b935b7ca46b59f3/src/ipinfo.rs -------------------------------------------------------------------------------- /src/logger.rs: -------------------------------------------------------------------------------- 1 | // minecraft honeypot does honeypot things for minecraft and proxies which is cool 2 | // Copyright (C) 2022 cleonyc 3 | 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | use std::path::PathBuf; 17 | 18 | use crate::{ 19 | config::Config, 20 | database::Database, 21 | packet::PossiblePacket, 22 | webhook::{ConWebhook, SummaryWebhook}, 23 | }; 24 | pub struct Logger { 25 | pub database: Database, 26 | pub config: Config, 27 | config_path: PathBuf, 28 | pub summary_webhook: SummaryWebhook, 29 | pub webhook: ConWebhook, 30 | } 31 | impl Logger { 32 | pub async fn new(config_path: PathBuf) -> anyhow::Result { 33 | let mut config = Config::open(config_path.clone()) 34 | .await 35 | .expect("Invalid config file specified"); 36 | let database = Database::open(config.clone().database) 37 | .await 38 | .unwrap_or_default(); 39 | database.save().await?; 40 | let summary_webhook = SummaryWebhook::new( 41 | config.clone().summary_webhook_url, 42 | config.clone().summary_message_ids, 43 | database.clone(), 44 | ) 45 | .await?; 46 | config.summary_message_ids = summary_webhook.clone().message_ids; 47 | config.save(config_path.clone()).await?; 48 | // if config.summary_message_id.is_none() { 49 | // config.summary_message_id = Some(summary_webhook.message_id); 50 | // config.save(config_path).await?; 51 | // } 52 | let webhook = ConWebhook::new(config.clone().webhook_url); 53 | 54 | Ok(Self { 55 | config_path, 56 | database, 57 | config, 58 | summary_webhook, 59 | webhook, 60 | }) 61 | } 62 | pub async fn handle_connect(&mut self, packet: PossiblePacket, ip: &str) -> anyhow::Result<()> { 63 | match packet { 64 | PossiblePacket::LoginStart { packet } => { 65 | match packet { 66 | azalea_protocol::packets::login::ServerboundLoginPacket::ServerboundHelloPacket(packet) => { 67 | let (client, login) = self.database.handle_login(ip, packet.username).await?; 68 | self.summary_webhook.update(self.database.clone()).await?; 69 | self.webhook.handle_login(client, login).await?; 70 | self.config.summary_message_ids = self.summary_webhook.clone().message_ids; 71 | self.config.save(self.config_path.clone()).await?; 72 | }, 73 | azalea_protocol::packets::login::ServerboundLoginPacket::ServerboundKeyPacket(_) => {}, 74 | azalea_protocol::packets::login::ServerboundLoginPacket::ServerboundCustomQueryPacket(_) => {}, 75 | } 76 | }, 77 | PossiblePacket::Status { packet } => { 78 | match packet { 79 | azalea_protocol::packets::handshake::ServerboundHandshakePacket::ClientIntentionPacket(packet) => { 80 | let (client, ping) = self.database.handle_ping(ip, packet.hostname).await?; 81 | self.summary_webhook.update(self.database.clone()).await?; 82 | self.webhook.handle_ping(client, ping).await?; 83 | self.config.summary_message_ids = self.summary_webhook.clone().message_ids; 84 | self.config.save(self.config_path.clone()).await? 85 | }, 86 | } 87 | } 88 | }; 89 | Ok(()) 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | // minecraft honeypot does honeypot things for minecraft and proxies which is cool 2 | // Copyright (C) 2022 cleonyc 3 | 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | #![feature(let_chains)] 17 | mod config; 18 | mod database; 19 | mod logger; 20 | mod packet; 21 | mod webhook; 22 | mod ipinfo; 23 | 24 | use crate::packet::get_all_packets; 25 | use bytes::BytesMut; 26 | use clap::Parser; 27 | use futures::{FutureExt, StreamExt}; 28 | use logger::Logger; 29 | use std::collections::VecDeque; 30 | use std::error::Error; 31 | use std::path::PathBuf; 32 | use std::sync::Arc; 33 | use std::time::Duration as StdDuration; 34 | use tokio::io::AsyncWriteExt; 35 | use tokio::net::{TcpListener, TcpStream}; 36 | use tokio::sync::RwLock; 37 | use tokio_util::codec::{BytesCodec, FramedRead}; 38 | 39 | #[derive(Parser)] 40 | #[clap(author, version, about, long_about = None)] 41 | pub struct Cli { 42 | /// Config file 43 | #[clap(value_parser)] 44 | config: PathBuf, 45 | } 46 | 47 | #[tokio::main(flavor = "multi_thread")] 48 | async fn main() -> Result<(), Box> { 49 | let cli = Cli::parse(); 50 | let logger = Logger::new(cli.config).await?; 51 | println!("Listening on: {}", logger.config.bind); 52 | let sv = logger.config.server.clone(); 53 | println!("Proxying to: {}", sv.clone()); 54 | 55 | let listener = TcpListener::bind(logger.config.bind.clone()).await?; 56 | let wrapped = Arc::new(RwLock::new(logger)); 57 | let mut join_handles = vec![]; 58 | while let Ok((inbound, _)) = listener.accept().await { 59 | let transfer = transfer(inbound, sv.clone(), wrapped.clone()).map(|r| r.unwrap()); 60 | join_handles.push(tokio::spawn(transfer)); 61 | } 62 | for jh in join_handles { 63 | jh.await.unwrap(); 64 | } 65 | 66 | Ok(()) 67 | } 68 | 69 | async fn transfer( 70 | mut inbound: TcpStream, 71 | proxy_addr: String, 72 | logger: Arc>, 73 | ) -> Result<(), Box> { 74 | let peer = inbound.peer_addr()?.to_string(); 75 | let split = peer.split(':').collect::>(); 76 | let reconnects = logger 77 | .read() 78 | .await 79 | .database 80 | .data 81 | .iter() 82 | .find(|c| c.ip == split[0]) 83 | .map(|c| c.logins.len()) 84 | .unwrap_or(0); 85 | 86 | let timeout_seconds = if reconnects == 0 { 87 | // first join, 10-30 minutes 88 | (rand::random::() * 60.0 * 20.0) as u64 + 10 * 60 89 | } else { 90 | // they've joined before, 10-130s 91 | (rand::random::() * 60.0 * 2.0) as u64 + 10 92 | }; 93 | 94 | // ping is random between 0 and reconnects*1000ms 95 | let simulated_ping: u64 = (rand::random::() * (reconnects as f32) * 1000.0) as u64; 96 | 97 | let mut outbound = match TcpStream::connect(proxy_addr).await { 98 | Ok(o) => o, 99 | Err(_) => return Ok(()), 100 | }; 101 | let (mut read_inbound, mut write_inbound) = inbound.split(); 102 | let (read_outbound, mut write_outbound) = outbound.split(); 103 | 104 | let client_to_server = async { 105 | // uses read_inbound and write_outbound 106 | 107 | // println!("start"); 108 | // wait lag before actually letting them connect 109 | tokio::time::sleep(StdDuration::from_millis(simulated_ping)).await; 110 | 111 | for packet in get_all_packets(&mut read_inbound, &mut write_outbound).await { 112 | let logger = logger.clone(); 113 | let ip = split[0].to_string(); 114 | let p = packet.clone(); 115 | tokio::spawn(async move { logger.write().await.handle_connect(p, &ip).await }); 116 | } 117 | 118 | // copy packets from ri to wo 119 | let packet_queue: VecDeque<(BytesMut, tokio::time::Instant)> = VecDeque::new(); 120 | let packet_queue = Arc::new(std::sync::Mutex::new(packet_queue)); 121 | 122 | let task_packet_queue = packet_queue.clone(); 123 | 124 | // read from the queue and write to write_outbound 125 | let read_from_queue = async move { 126 | loop { 127 | // check if there's something in the packet queue every simulated_ping ms 128 | tokio::time::sleep(StdDuration::from_millis(simulated_ping)).await; 129 | // if there is, wait until the packet is ready to be sent and send it 130 | loop { 131 | let queue_front = packet_queue.lock().unwrap().pop_front(); 132 | if let Some((bytes, sent_at)) = &queue_front { 133 | let sending_at = *sent_at + StdDuration::from_millis(simulated_ping); 134 | tokio::time::sleep_until(sending_at).await; 135 | if write_outbound.write_all(bytes.as_ref()).await.is_err() { 136 | break; 137 | } 138 | } else { 139 | break; 140 | } 141 | } 142 | } 143 | }; 144 | 145 | let write_to_queue = async move { 146 | let mut framed = FramedRead::new(read_inbound, BytesCodec::new()); 147 | while let Some(message) = framed.next().await { 148 | match message { 149 | Ok(bytes) => { 150 | task_packet_queue 151 | .lock() 152 | .unwrap() 153 | .push_back((bytes, tokio::time::Instant::now())); 154 | } 155 | Err(_) => break, 156 | } 157 | } 158 | }; 159 | 160 | tokio::join!(read_from_queue, write_to_queue); 161 | }; 162 | 163 | let server_to_client = async { 164 | let mut outbound_framed = FramedRead::new(read_outbound, BytesCodec::new()); 165 | // copy packets from ro to wi 166 | while let Some(message) = outbound_framed.next().await { 167 | match message { 168 | Ok(bytes) => { 169 | if write_inbound.write_all(&bytes).await.is_err() { 170 | break; 171 | } 172 | } 173 | Err(_) => break, 174 | } 175 | } 176 | 177 | write_inbound.shutdown().await 178 | }; 179 | 180 | let _ = tokio::try_join!( 181 | tokio::time::timeout(StdDuration::from_secs(timeout_seconds), client_to_server), 182 | tokio::time::timeout(StdDuration::from_secs(timeout_seconds), server_to_client) 183 | ); 184 | 185 | // so it times out 186 | tokio::time::sleep(StdDuration::from_millis(5 * 60 * 1000)).await; 187 | 188 | Ok(()) 189 | } 190 | -------------------------------------------------------------------------------- /src/packet.rs: -------------------------------------------------------------------------------- 1 | // minecraft honeypot does honeypot things for minecraft and proxies which is cool 2 | // Copyright (C) 2022 cleonyc 3 | 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | 17 | use azalea_protocol::packets::handshake::ServerboundHandshakePacket; 18 | use azalea_protocol::packets::login::ServerboundLoginPacket; 19 | use azalea_protocol::read::read_packet; 20 | use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt}; 21 | 22 | // pub async fn read_packet<'a, P: ProtocolPacket, R>( 23 | // stream: &'a mut R, 24 | // ) -> anyhow::Result<(Option

, Vec)> 25 | // where 26 | // R: AsyncRead + std::marker::Unpin + std::marker::Send + std::marker::Sync, 27 | // { 28 | // // let start_time = std::time::Instant::now(); 29 | 30 | // // println!("decrypting packet ({}ms)", start_time.elapsed().as_millis()); 31 | // // if we were given a cipher, decrypt the packet 32 | // let buf = frame_splitter(stream).await.unwrap(); 33 | // println!("24"); 34 | // // println!("splitting packet ({}ms)", start_time.elapsed().as_millis()); 35 | // if buf.1.len() == 0 { 36 | // return Ok((None, buf.1)); 37 | // } 38 | // let mut orig = buf.1.clone(); 39 | // println!("31"); 40 | // // println!("decoding packet ({}ms)", start_time.elapsed().as_millis()); 41 | // let packet: (Option

, Vec) = packet_decoder(&mut buf.0.as_slice()).await?; 42 | // println!("34"); 43 | // // println!("decoded packet ({}ms)", start_time.elapsed().as_millis()); 44 | // // orig.push(packet.1); 45 | // Ok((packet.0, orig)) 46 | // } 47 | 48 | async fn frame_splitter(mut stream: &mut R) -> anyhow::Result<(Vec, Vec)> 49 | where 50 | R: AsyncRead + std::marker::Unpin + std::marker::Send, 51 | { 52 | // Packet Length 53 | // println!("called"); 54 | let res = match read_varint_async(&mut stream).await { 55 | Ok(len) => len, 56 | Err(_) => { 57 | // println!("err reading varint"); 58 | return Ok((vec![], vec![])); 59 | } 60 | }; 61 | // println!("fs varint read: {}", res.0); 62 | 63 | if res.0 > 1024 || res.0 == 0 { 64 | return Ok((vec![], res.1)); 65 | } 66 | let mut read = vec![]; 67 | let length = res.0; 68 | while read.len() < length.try_into().unwrap() { 69 | let mut buf = [0; 1]; 70 | match stream.read_exact(&mut buf).await { 71 | Ok(_) => read.push(buf[0]), 72 | Err(_) => { 73 | break; 74 | } 75 | }; 76 | } 77 | 78 | let mut orig = res.1; 79 | // println!("74: orig starts {:?}, appending: {:?}", orig, read); 80 | 81 | orig.append(&mut (read.clone())); 82 | let (valid_packet, _) = safe_check_packet_id(&mut read.as_slice()).await; 83 | if !valid_packet { 84 | return Ok((vec![], orig)); 85 | } 86 | Ok((read, orig)) 87 | } 88 | 89 | // async fn packet_decoder( 90 | // mut stream: &mut R, 91 | // ) -> anyhow::Result<(Option

, Vec)> 92 | // where 93 | // R: AsyncRead + std::marker::Unpin + std::marker::Send + std::io::Read, 94 | // { 95 | // // Packet ID 96 | // let packet_id = read_varint_async(&mut stream).await?; 97 | // if packet_id.0 != 0x00 { 98 | // return Ok((None, packet_id.1)); 99 | // } 100 | // let read = P::read(packet_id.0.try_into().unwrap(), stream)?; 101 | 102 | // Ok((Some(read), vec![])) 103 | // } 104 | // fast varints modified from https://github.com/luojia65/mc-varint/blob/master/src/lib.rs#L67 105 | /// Read a single varint from the reader and return the value, along with the number of bytes read 106 | pub async fn read_varint_async( 107 | reader: &mut (dyn AsyncRead + Unpin + Send), 108 | ) -> anyhow::Result<(i32, Vec)> { 109 | let mut buffer = [0]; 110 | let mut orig = vec![]; 111 | let mut ans = 0; 112 | for i in 0..5 { 113 | if let Ok(n) = reader.read(&mut buffer).await && n > 0 { 114 | ans |= ((buffer[0] & 0b0111_1111) as i32) << (7 * i); 115 | orig.push(buffer[0]); 116 | if buffer[0] & 0b1000_0000 == 0 { 117 | return Ok((ans, orig)); 118 | } 119 | }; 120 | } 121 | Ok((ans, orig)) 122 | } 123 | pub async fn safe_check_packet_id(reader: &mut (dyn AsyncRead + Unpin + Send)) -> (bool, Vec) { 124 | let packet_id = match read_varint_async(reader).await { 125 | Ok(packet_id) => packet_id, 126 | Err(_) => return (false, vec![]), 127 | }; 128 | if packet_id.0 != 0x00 { 129 | return (false, packet_id.1); 130 | }; 131 | (true, packet_id.1) 132 | } 133 | #[derive(Clone, Debug)] 134 | pub enum PossiblePacket { 135 | LoginStart { packet: ServerboundLoginPacket }, 136 | Status { packet: ServerboundHandshakePacket }, 137 | } 138 | pub async fn try_get_packet( 139 | stream: &mut R, 140 | writer: &mut W, 141 | ) -> Option 142 | where 143 | R: AsyncRead + std::marker::Unpin + std::marker::Send, 144 | W: AsyncWrite + std::marker::Unpin + std::marker::Send, 145 | { 146 | let (read_bytes, original_bytes) = frame_splitter(stream).await.unwrap(); 147 | // println!("138: orig from frame_splitter: {:?}", original_bytes); 148 | // 1024 bytes *should* be the theoretical maximum for login or status packets that we care about 149 | // might break if it's an actual valid user key, we'll see 150 | if original_bytes.len() > 20000 || original_bytes.is_empty() || read_bytes.is_empty() { 151 | // println!("bad byte len"); 152 | writer.write_all(&original_bytes).await.unwrap(); 153 | // io::copy(stream, writer).await.unwrap(); 154 | return None; 155 | } 156 | if let Ok(packet) = read_packet::( 157 | &mut original_bytes.clone().as_slice(), 158 | None, 159 | &mut None, 160 | ) 161 | .await 162 | { 163 | writer.write_all(&original_bytes).await.unwrap(); 164 | // io::copy(stream, writer).await.unwrap(); 165 | // println!("returning! <3"); 166 | return Some(PossiblePacket::Status { packet }); 167 | }; 168 | if let Ok(packet) = read_packet::( 169 | &mut adapt_from_1_18(&original_bytes.clone()).as_slice(), 170 | None, 171 | &mut None, 172 | ) 173 | .await 174 | { 175 | // println!("\n\n\n\n\n\n\n\n\nreturning! (login) <3"); 176 | writer.write_all(&original_bytes).await.unwrap(); 177 | // io::copy(stream, writer).await.unwrap(); 178 | // println!("returning! L<3"); 179 | return Some(PossiblePacket::LoginStart { packet }); 180 | } 181 | 182 | // println!("returning! :("); 183 | writer.write_all(&original_bytes).await.unwrap(); 184 | // io::copy(stream, writer).await.unwrap(); 185 | None 186 | } 187 | pub async fn get_all_packets( 188 | stream: &mut R, 189 | writer: &mut W, 190 | ) -> Vec 191 | where 192 | R: AsyncRead + std::marker::Unpin + std::marker::Send, 193 | W: AsyncWrite + std::marker::Unpin + std::marker::Send, 194 | { 195 | let mut ret = vec![]; 196 | while let Some(packet) = try_get_packet(stream, writer).await { 197 | ret.push(packet); 198 | } 199 | ret 200 | } 201 | 202 | fn adapt_from_1_18(bytes: &[u8]) -> Vec { 203 | let mut clone = Vec::with_capacity(bytes.len() + 2); 204 | clone.extend_from_slice(bytes); 205 | clone[0] += 2; 206 | clone.extend_from_slice(&[0x00, 0x00]); 207 | clone 208 | } 209 | 210 | #[cfg(test)] 211 | mod tests { 212 | use azalea_protocol::{ 213 | packets::handshake::client_intention_packet::ClientIntentionPacket, write::write_packet, 214 | }; 215 | use rand::Rng; 216 | use tokio::io::AsyncWriteExt; 217 | 218 | use crate::packet::{adapt_from_1_18, get_all_packets, try_get_packet}; 219 | 220 | #[tokio::test] 221 | async fn test_adapt_1_18() { 222 | assert_eq!( 223 | adapt_from_1_18(&[6, 0, 4, 50, 57, 55, 56]), 224 | vec![8, 0, 4, 50, 57, 55, 56, 0, 0] 225 | ); 226 | } 227 | #[tokio::test] 228 | async fn check_packets() { 229 | // let hello_packet = ServerboundHelloPacket { 230 | // username: "2978".to_string(), 231 | // public_key: None, 232 | // profile_id: None, 233 | // } 234 | // .get(); 235 | let mut random_data: [u8; 2048] = [0; 2048]; 236 | rand::thread_rng().fill(&mut random_data); 237 | let random_data_orig = random_data; 238 | { 239 | let mut buf = vec![]; 240 | 241 | write_packet( 242 | ClientIntentionPacket { 243 | protocol_version: 758, 244 | hostname: "localhost".to_string(), 245 | port: 25565, 246 | intention: azalea_protocol::packets::ConnectionProtocol::Login, 247 | } 248 | .get(), 249 | &mut buf, 250 | None, 251 | &mut None, 252 | ) 253 | .await 254 | .unwrap(); 255 | // old 1.18.2 hello packet 256 | buf.write_all(&[6, 0, 4, 50, 57, 55, 56]).await.unwrap(); 257 | 258 | // write_packet(hello_packet, &mut buf, None, &mut None) 259 | // .await 260 | // .unwrap(); 261 | let mut orig_data = vec![]; 262 | let packets = get_all_packets(&mut buf.as_slice(), &mut orig_data).await; 263 | assert_eq!(packets.len(), 2); 264 | println!("packets: {:?}", packets); 265 | assert_eq!(buf, orig_data); 266 | } 267 | { 268 | let mut modded_rand_data: &[u8] = &random_data; 269 | let mut orig_data = vec![]; 270 | let packet = try_get_packet(&mut modded_rand_data, &mut orig_data).await; 271 | assert!(packet.is_none()); 272 | assert_eq!(orig_data, random_data_orig); 273 | } 274 | } 275 | } 276 | 277 | // fn combine(first: &Vec, second: &Vec) -> Vec { 278 | // // println!("combining {:?} with {:?}", first, second); 279 | // let mut new = vec![]; 280 | // new.append(&mut first.clone()); 281 | // new.append(&mut second.clone()); 282 | // new 283 | // } 284 | -------------------------------------------------------------------------------- /src/webhook.rs: -------------------------------------------------------------------------------- 1 | // minecraft honeypot does honeypot things for minecraft and proxies which is cool 2 | // Copyright (C) 2022 cleonyc 3 | 4 | // This program is free software: you can redistribute it and/or modify 5 | // it under the terms of the GNU General Public License as published by 6 | // the Free Software Foundation, either version 3 of the License, or 7 | // (at your option) any later version. 8 | 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | 14 | // You should have received a copy of the GNU General Public License 15 | // along with this program. If not, see . 16 | use isahc::{AsyncReadResponseExt, HttpClient, Request}; 17 | use serde_json::Value; 18 | use webhook::{client::WebhookClient, models::Message}; 19 | 20 | use crate::database::{Client, Database, Login, Ping}; 21 | 22 | #[derive(Clone)] 23 | pub struct SummaryWebhook { 24 | url: String, 25 | pub message_ids: Vec, 26 | client: HttpClient, 27 | } 28 | impl SummaryWebhook { 29 | pub async fn new( 30 | url: String, 31 | message_ids: Vec, 32 | database: Database, 33 | ) -> anyhow::Result { 34 | let client = HttpClient::new()?; 35 | let mut ret = Self { 36 | url, 37 | message_ids, 38 | client, 39 | }; 40 | ret.update(database.clone()).await?; 41 | 42 | Ok(ret) 43 | } 44 | 45 | pub async fn update(&mut self, database: Database) -> anyhow::Result<()> { 46 | let gen_messages = gen_summmary_messages(database.clone()); 47 | if gen_messages.len() != self.message_ids.len() { 48 | for msg in gen_messages.iter().skip(self.message_ids.len()) { 49 | let req = Request::post(&format!("{}?wait=true", self.url.trim_end_matches('/'))) 50 | .header("Content-Type", "application/json") 51 | .body(serde_json::to_string(&msg)?)?; 52 | let mut resp = self.client.send_async(req).await?; 53 | let json: Value = resp.json().await?; 54 | let id: u64 = json["id"] 55 | .as_str() 56 | .expect("bad id in response from discord when creating webhook, what the fuck") 57 | .parse() 58 | .expect("apparently the id from the response is not a number (WTF??)"); 59 | self.message_ids.push(id); 60 | } 61 | } 62 | for (index, msg) in gen_summmary_messages(database.clone()).iter().enumerate() { 63 | self.client 64 | .send_async( 65 | Request::patch(&format!( 66 | "{}/messages/{}", 67 | self.url.clone(), 68 | self.message_ids[index] 69 | )) 70 | .header("Content-Type", "application/json") 71 | // this is the best way to handle rate limits: 72 | .header("x-pls-no-rate-limit", "owo") 73 | .body(serde_json::to_string(&msg)?)?, 74 | ) 75 | .await?; 76 | } 77 | Ok(()) 78 | } 79 | } 80 | fn gen_summmary_messages(database: Database) -> Vec { 81 | let mut ret = vec![]; 82 | for (chunk_num, chunk) in database.data.chunks(25).enumerate() { 83 | let mut m = Message::new(); 84 | m.embed(|e| { 85 | if chunk_num == 0 { 86 | e.title("Clients"); 87 | } 88 | for client in chunk 89 | { 90 | e.field( 91 | &format!("`{}`", &client.ip), 92 | &format!( 93 | "Pings: `{}` ({}), Logins: `{}` ({}), `{}`", 94 | client.pings.len(), 95 | if client.pings.is_empty() { 96 | "N/A".to_string() 97 | } else { 98 | format!( 99 | "", 100 | client 101 | .pings 102 | .iter() 103 | .reduce(|a, b| if a.time > b.time { b } else { a }) 104 | .unwrap() 105 | .time 106 | .unix_timestamp() 107 | ) 108 | }, 109 | client.logins.len(), 110 | if client.logins.is_empty() { 111 | "N/A".to_string() 112 | } else { 113 | format!( 114 | "", 115 | client 116 | .logins 117 | .iter() 118 | .reduce(|a, b| if a.time > b.time { b } else { a }) 119 | .unwrap() 120 | .time 121 | .unix_timestamp() 122 | ) 123 | }, 124 | client.ipinfo 125 | ), 126 | false, 127 | ); 128 | } 129 | e 130 | }); 131 | ret.push(m) 132 | } 133 | ret 134 | } 135 | #[derive(Clone)] 136 | pub struct ConWebhook { 137 | url: String, 138 | } 139 | impl ConWebhook { 140 | pub fn new(url: String) -> Self { 141 | Self { url } 142 | } 143 | pub async fn handle_login(&self, client: Client, login: Login) -> anyhow::Result<()> { 144 | WebhookClient::new(&self.url) 145 | .send(|m| { 146 | m.content( 147 | format!( 148 | "`{}` joined the server 149 | {} | {} 150 | {} 151 | ", 152 | login.username, 153 | pretty_ip(&client.ip), 154 | client.ipinfo, 155 | if client.logins.len() == 1 { 156 | "**First Login**".to_string() 157 | } else { 158 | format!("Previous logins: `{}`", client.logins.len()) 159 | } 160 | ) 161 | .trim(), 162 | ) 163 | }) 164 | .await 165 | .expect("failed to send webhook"); 166 | Ok(()) 167 | } 168 | pub async fn handle_ping(&self, client: Client, ping: Ping) -> anyhow::Result<()> { 169 | WebhookClient::new(&self.url) 170 | .send(|m| { 171 | m.content(&format!( 172 | "Ping from {}, Con: {}, Target: {}", 173 | pretty_ip(&client.ip), 174 | client.ipinfo, 175 | ping.target 176 | )) 177 | }) 178 | .await 179 | .unwrap(); 180 | Ok(()) 181 | } 182 | } 183 | 184 | fn pretty_ip(ip: &str) -> String { 185 | format!("[`{}`]()", ip, ip) 186 | } 187 | --------------------------------------------------------------------------------