Microservice to bring 2FA to self hosted PDSes

mobile side bar

+1022 -32
+816 -22
Cargo.lock
··· 28 28 checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 29 29 30 30 [[package]] 31 + name = "adler32" 32 + version = "1.2.0" 33 + source = "registry+https://github.com/rust-lang/crates.io-index" 34 + checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 35 + 36 + [[package]] 31 37 name = "ahash" 32 38 version = "0.8.12" 33 39 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 55 61 checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 56 62 57 63 [[package]] 64 + name = "alloc-no-stdlib" 65 + version = "2.0.4" 66 + source = "registry+https://github.com/rust-lang/crates.io-index" 67 + checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 68 + 69 + [[package]] 70 + name = "alloc-stdlib" 71 + version = "0.2.2" 72 + source = "registry+https://github.com/rust-lang/crates.io-index" 73 + checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 74 + dependencies = [ 75 + "alloc-no-stdlib", 76 + ] 77 + 78 + [[package]] 58 79 name = "allocator-api2" 59 80 version = "0.2.21" 60 81 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 83 104 dependencies = [ 84 105 "object", 85 106 ] 107 + 108 + [[package]] 109 + name = "ascii" 110 + version = "1.1.0" 111 + source = "registry+https://github.com/rust-lang/crates.io-index" 112 + checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" 86 113 87 114 [[package]] 88 115 name = "async-channel" ··· 434 461 435 462 [[package]] 436 463 name = "base64" 464 + version = "0.13.1" 465 + source = "registry+https://github.com/rust-lang/crates.io-index" 466 + checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 467 + 468 + [[package]] 469 + name = "base64" 437 470 version = "0.22.1" 438 471 source = "registry+https://github.com/rust-lang/crates.io-index" 439 472 checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" ··· 510 543 ] 511 544 512 545 [[package]] 546 + name = "brotli" 547 + version = "3.5.0" 548 + source = "registry+https://github.com/rust-lang/crates.io-index" 549 + checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" 550 + dependencies = [ 551 + "alloc-no-stdlib", 552 + "alloc-stdlib", 553 + "brotli-decompressor", 554 + ] 555 + 556 + [[package]] 557 + name = "brotli-decompressor" 558 + version = "2.5.1" 559 + source = "registry+https://github.com/rust-lang/crates.io-index" 560 + checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" 561 + dependencies = [ 562 + "alloc-no-stdlib", 563 + "alloc-stdlib", 564 + ] 565 + 566 + [[package]] 513 567 name = "bstr" 514 568 version = "1.12.1" 515 569 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 541 595 "cc-traits", 542 596 "slab", 543 597 "smallvec", 598 + ] 599 + 600 + [[package]] 601 + name = "buf_redux" 602 + version = "0.8.4" 603 + source = "registry+https://github.com/rust-lang/crates.io-index" 604 + checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" 605 + dependencies = [ 606 + "memchr", 607 + "safemem", 544 608 ] 545 609 546 610 [[package]] ··· 595 659 ] 596 660 597 661 [[package]] 662 + name = "cesu8" 663 + version = "1.1.0" 664 + source = "registry+https://github.com/rust-lang/crates.io-index" 665 + checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 666 + 667 + [[package]] 598 668 name = "cfg-if" 599 669 version = "1.0.4" 600 670 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 629 699 "hashbrown 0.14.5", 630 700 "stacker", 631 701 ] 702 + 703 + [[package]] 704 + name = "chunked_transfer" 705 + version = "1.5.0" 706 + source = "registry+https://github.com/rust-lang/crates.io-index" 707 + checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" 632 708 633 709 [[package]] 634 710 name = "ciborium" ··· 700 776 ] 701 777 702 778 [[package]] 779 + name = "combine" 780 + version = "4.6.7" 781 + source = "registry+https://github.com/rust-lang/crates.io-index" 782 + checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 783 + dependencies = [ 784 + "bytes", 785 + "memchr", 786 + ] 787 + 788 + [[package]] 703 789 name = "compression-codecs" 704 790 version = "0.4.35" 705 791 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 745 831 source = "registry+https://github.com/rust-lang/crates.io-index" 746 832 checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" 747 833 dependencies = [ 748 - "base64", 834 + "base64 0.22.1", 749 835 "hmac", 750 836 "percent-encoding", 751 837 "rand 0.8.5", ··· 776 862 ] 777 863 778 864 [[package]] 865 + name = "core-foundation" 866 + version = "0.10.1" 867 + source = "registry+https://github.com/rust-lang/crates.io-index" 868 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 869 + dependencies = [ 870 + "core-foundation-sys", 871 + "libc", 872 + ] 873 + 874 + [[package]] 779 875 name = "core-foundation-sys" 780 876 version = "0.8.7" 781 877 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 830 926 checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 831 927 832 928 [[package]] 929 + name = "crossbeam-channel" 930 + version = "0.5.15" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 933 + dependencies = [ 934 + "crossbeam-utils", 935 + ] 936 + 937 + [[package]] 833 938 name = "crossbeam-queue" 834 939 version = "0.3.12" 835 940 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 980 1085 dependencies = [ 981 1086 "data-encoding", 982 1087 "syn 2.0.112", 1088 + ] 1089 + 1090 + [[package]] 1091 + name = "deflate" 1092 + version = "1.0.0" 1093 + source = "registry+https://github.com/rust-lang/crates.io-index" 1094 + checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" 1095 + dependencies = [ 1096 + "adler32", 1097 + "gzip-header", 983 1098 ] 984 1099 985 1100 [[package]] ··· 1154 1269 source = "registry+https://github.com/rust-lang/crates.io-index" 1155 1270 checksum = "9298e6504d9b9e780ed3f7dfd43a61be8cd0e09eb07f7706a945b0072b6670b6" 1156 1271 dependencies = [ 1157 - "base64", 1272 + "base64 0.22.1", 1158 1273 "memchr", 1159 1274 ] 1160 1275 ··· 1186 1301 ] 1187 1302 1188 1303 [[package]] 1304 + name = "enum-as-inner" 1305 + version = "0.6.1" 1306 + source = "registry+https://github.com/rust-lang/crates.io-index" 1307 + checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 1308 + dependencies = [ 1309 + "heck 0.5.0", 1310 + "proc-macro2", 1311 + "quote", 1312 + "syn 2.0.112", 1313 + ] 1314 + 1315 + [[package]] 1189 1316 name = "equivalent" 1190 1317 version = "1.0.2" 1191 1318 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1256 1383 ] 1257 1384 1258 1385 [[package]] 1386 + name = "filetime" 1387 + version = "0.2.27" 1388 + source = "registry+https://github.com/rust-lang/crates.io-index" 1389 + checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" 1390 + dependencies = [ 1391 + "cfg-if", 1392 + "libc", 1393 + "libredox", 1394 + ] 1395 + 1396 + [[package]] 1259 1397 name = "find-msvc-tools" 1260 1398 version = "0.1.6" 1261 1399 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1339 1477 version = "1.3.0" 1340 1478 source = "registry+https://github.com/rust-lang/crates.io-index" 1341 1479 checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 1480 + 1481 + [[package]] 1482 + name = "futf" 1483 + version = "0.1.5" 1484 + source = "registry+https://github.com/rust-lang/crates.io-index" 1485 + checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 1486 + dependencies = [ 1487 + "mac", 1488 + "new_debug_unreachable", 1489 + ] 1342 1490 1343 1491 [[package]] 1344 1492 name = "futures-buffered" ··· 1536 1684 ] 1537 1685 1538 1686 [[package]] 1687 + name = "gloo-storage" 1688 + version = "0.3.0" 1689 + source = "registry+https://github.com/rust-lang/crates.io-index" 1690 + checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" 1691 + dependencies = [ 1692 + "gloo-utils", 1693 + "js-sys", 1694 + "serde", 1695 + "serde_json", 1696 + "thiserror 1.0.69", 1697 + "wasm-bindgen", 1698 + "web-sys", 1699 + ] 1700 + 1701 + [[package]] 1539 1702 name = "gloo-timers" 1540 1703 version = "0.3.0" 1541 1704 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1548 1711 ] 1549 1712 1550 1713 [[package]] 1714 + name = "gloo-utils" 1715 + version = "0.2.0" 1716 + source = "registry+https://github.com/rust-lang/crates.io-index" 1717 + checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 1718 + dependencies = [ 1719 + "js-sys", 1720 + "serde", 1721 + "serde_json", 1722 + "wasm-bindgen", 1723 + "web-sys", 1724 + ] 1725 + 1726 + [[package]] 1551 1727 name = "governor" 1552 1728 version = "0.10.4" 1553 1729 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1579 1755 "ff", 1580 1756 "rand_core 0.6.4", 1581 1757 "subtle", 1758 + ] 1759 + 1760 + [[package]] 1761 + name = "gzip-header" 1762 + version = "1.0.0" 1763 + source = "registry+https://github.com/rust-lang/crates.io-index" 1764 + checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" 1765 + dependencies = [ 1766 + "crc32fast", 1582 1767 ] 1583 1768 1584 1769 [[package]] ··· 1729 1914 checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" 1730 1915 1731 1916 [[package]] 1917 + name = "hickory-proto" 1918 + version = "0.24.4" 1919 + source = "registry+https://github.com/rust-lang/crates.io-index" 1920 + checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" 1921 + dependencies = [ 1922 + "async-trait", 1923 + "cfg-if", 1924 + "data-encoding", 1925 + "enum-as-inner", 1926 + "futures-channel", 1927 + "futures-io", 1928 + "futures-util", 1929 + "idna", 1930 + "ipnet", 1931 + "once_cell", 1932 + "rand 0.8.5", 1933 + "thiserror 1.0.69", 1934 + "tinyvec", 1935 + "tokio", 1936 + "tracing", 1937 + "url", 1938 + ] 1939 + 1940 + [[package]] 1941 + name = "hickory-resolver" 1942 + version = "0.24.4" 1943 + source = "registry+https://github.com/rust-lang/crates.io-index" 1944 + checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" 1945 + dependencies = [ 1946 + "cfg-if", 1947 + "futures-util", 1948 + "hickory-proto", 1949 + "ipconfig", 1950 + "lru-cache", 1951 + "once_cell", 1952 + "parking_lot", 1953 + "rand 0.8.5", 1954 + "resolv-conf", 1955 + "smallvec", 1956 + "thiserror 1.0.69", 1957 + "tokio", 1958 + "tracing", 1959 + ] 1960 + 1961 + [[package]] 1732 1962 name = "hkdf" 1733 1963 version = "0.12.4" 1734 1964 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1765 1995 ] 1766 1996 1767 1997 [[package]] 1998 + name = "html5ever" 1999 + version = "0.27.0" 2000 + source = "registry+https://github.com/rust-lang/crates.io-index" 2001 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 2002 + dependencies = [ 2003 + "log", 2004 + "mac", 2005 + "markup5ever", 2006 + "proc-macro2", 2007 + "quote", 2008 + "syn 2.0.112", 2009 + ] 2010 + 2011 + [[package]] 1768 2012 name = "http" 1769 2013 version = "1.4.0" 1770 2014 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1868 2112 source = "registry+https://github.com/rust-lang/crates.io-index" 1869 2113 checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" 1870 2114 dependencies = [ 1871 - "base64", 2115 + "base64 0.22.1", 1872 2116 "bytes", 1873 2117 "futures-channel", 1874 2118 "futures-core", ··· 1880 2124 "libc", 1881 2125 "percent-encoding", 1882 2126 "pin-project-lite", 1883 - "socket2", 2127 + "socket2 0.6.1", 1884 2128 "system-configuration", 1885 2129 "tokio", 1886 2130 "tower-service", ··· 2077 2321 ] 2078 2322 2079 2323 [[package]] 2324 + name = "ipconfig" 2325 + version = "0.3.2" 2326 + source = "registry+https://github.com/rust-lang/crates.io-index" 2327 + checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 2328 + dependencies = [ 2329 + "socket2 0.5.10", 2330 + "widestring", 2331 + "windows-sys 0.48.0", 2332 + "winreg", 2333 + ] 2334 + 2335 + [[package]] 2080 2336 name = "ipld-core" 2081 2337 version = "0.4.2" 2082 2338 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2110 2366 checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 2111 2367 2112 2368 [[package]] 2369 + name = "jacquard" 2370 + version = "0.9.5" 2371 + source = "registry+https://github.com/rust-lang/crates.io-index" 2372 + checksum = "f7c1fdbcf1153e6e6b87fde20036c1ffe7473c4852f1c6369bc4ef1fe47ccb9f" 2373 + dependencies = [ 2374 + "bytes", 2375 + "getrandom 0.2.16", 2376 + "gloo-storage", 2377 + "http", 2378 + "jacquard-api", 2379 + "jacquard-common", 2380 + "jacquard-derive", 2381 + "jacquard-identity", 2382 + "jacquard-oauth", 2383 + "jose-jwk", 2384 + "miette", 2385 + "regex", 2386 + "regex-lite", 2387 + "reqwest", 2388 + "serde", 2389 + "serde_html_form", 2390 + "serde_json", 2391 + "smol_str", 2392 + "thiserror 2.0.17", 2393 + "tokio", 2394 + "trait-variant", 2395 + "url", 2396 + "webpage", 2397 + ] 2398 + 2399 + [[package]] 2113 2400 name = "jacquard-api" 2114 2401 version = "0.9.5" 2115 2402 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2135 2422 source = "registry+https://github.com/rust-lang/crates.io-index" 2136 2423 checksum = "1751921e0bdae5e0077afade6161545e9ef7698306c868f800916e99ecbcaae9" 2137 2424 dependencies = [ 2138 - "base64", 2425 + "base64 0.22.1", 2139 2426 "bon", 2140 2427 "bytes", 2141 2428 "chrono", ··· 2191 2478 dependencies = [ 2192 2479 "bon", 2193 2480 "bytes", 2481 + "hickory-resolver", 2194 2482 "http", 2195 2483 "jacquard-api", 2196 2484 "jacquard-common", 2197 2485 "jacquard-lexicon", 2198 2486 "miette", 2487 + "mini-moka-wasm", 2199 2488 "n0-future", 2200 2489 "percent-encoding", 2201 2490 "reqwest", ··· 2242 2531 source = "registry+https://github.com/rust-lang/crates.io-index" 2243 2532 checksum = "68bf0b0e061d85b09cfa78588dc098918d5b62f539a719165c6a806a1d2c0ef2" 2244 2533 dependencies = [ 2245 - "base64", 2534 + "base64 0.22.1", 2246 2535 "bytes", 2247 2536 "chrono", 2248 2537 "dashmap", ··· 2255 2544 "miette", 2256 2545 "p256", 2257 2546 "rand 0.8.5", 2547 + "rouille", 2258 2548 "serde", 2259 2549 "serde_html_form", 2260 2550 "serde_json", ··· 2264 2554 "tokio", 2265 2555 "trait-variant", 2266 2556 "url", 2557 + "webbrowser", 2267 2558 ] 2268 2559 2269 2560 [[package]] 2561 + name = "jni" 2562 + version = "0.21.1" 2563 + source = "registry+https://github.com/rust-lang/crates.io-index" 2564 + checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 2565 + dependencies = [ 2566 + "cesu8", 2567 + "cfg-if", 2568 + "combine", 2569 + "jni-sys", 2570 + "log", 2571 + "thiserror 1.0.69", 2572 + "walkdir", 2573 + "windows-sys 0.45.0", 2574 + ] 2575 + 2576 + [[package]] 2577 + name = "jni-sys" 2578 + version = "0.3.0" 2579 + source = "registry+https://github.com/rust-lang/crates.io-index" 2580 + checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 2581 + 2582 + [[package]] 2270 2583 name = "jobserver" 2271 2584 version = "0.1.34" 2272 2585 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2319 2632 checksum = "a808e078330e6af222eb0044b71d4b1ff981bfef43e7bc8133a88234e0c86a0c" 2320 2633 dependencies = [ 2321 2634 "anyhow", 2322 - "base64", 2635 + "base64 0.22.1", 2323 2636 "flate2", 2324 2637 "openssl", 2325 2638 "regex", ··· 2416 2729 dependencies = [ 2417 2730 "async-std", 2418 2731 "async-trait", 2419 - "base64", 2732 + "base64 0.22.1", 2420 2733 "chumsky", 2421 2734 "email-encoding", 2422 2735 "email_address", ··· 2430 2743 "percent-encoding", 2431 2744 "quoted_printable", 2432 2745 "rustls", 2433 - "socket2", 2746 + "socket2 0.6.1", 2434 2747 "tokio", 2435 2748 "tokio-rustls", 2436 2749 "url", ··· 2472 2785 ] 2473 2786 2474 2787 [[package]] 2788 + name = "linked-hash-map" 2789 + version = "0.5.6" 2790 + source = "registry+https://github.com/rust-lang/crates.io-index" 2791 + checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 2792 + 2793 + [[package]] 2475 2794 name = "linux-raw-sys" 2476 2795 version = "0.11.0" 2477 2796 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2515 2834 ] 2516 2835 2517 2836 [[package]] 2837 + name = "lru-cache" 2838 + version = "0.1.2" 2839 + source = "registry+https://github.com/rust-lang/crates.io-index" 2840 + checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" 2841 + dependencies = [ 2842 + "linked-hash-map", 2843 + ] 2844 + 2845 + [[package]] 2518 2846 name = "lru-slab" 2519 2847 version = "0.1.2" 2520 2848 source = "registry+https://github.com/rust-lang/crates.io-index" 2521 2849 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2522 2850 2523 2851 [[package]] 2852 + name = "mac" 2853 + version = "0.1.1" 2854 + source = "registry+https://github.com/rust-lang/crates.io-index" 2855 + checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 2856 + 2857 + [[package]] 2858 + name = "markup5ever" 2859 + version = "0.12.1" 2860 + source = "registry+https://github.com/rust-lang/crates.io-index" 2861 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 2862 + dependencies = [ 2863 + "log", 2864 + "phf", 2865 + "phf_codegen", 2866 + "string_cache", 2867 + "string_cache_codegen", 2868 + "tendril", 2869 + ] 2870 + 2871 + [[package]] 2872 + name = "markup5ever_rcdom" 2873 + version = "0.3.0" 2874 + source = "registry+https://github.com/rust-lang/crates.io-index" 2875 + checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" 2876 + dependencies = [ 2877 + "html5ever", 2878 + "markup5ever", 2879 + "tendril", 2880 + "xml5ever", 2881 + ] 2882 + 2883 + [[package]] 2524 2884 name = "match-lookup" 2525 2885 version = "0.1.1" 2526 2886 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2591 2951 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2592 2952 2593 2953 [[package]] 2954 + name = "mime_guess" 2955 + version = "2.0.5" 2956 + source = "registry+https://github.com/rust-lang/crates.io-index" 2957 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2958 + dependencies = [ 2959 + "mime", 2960 + "unicase", 2961 + ] 2962 + 2963 + [[package]] 2964 + name = "mini-moka-wasm" 2965 + version = "0.10.99" 2966 + source = "registry+https://github.com/rust-lang/crates.io-index" 2967 + checksum = "0102b9a2ad50fa47ca89eead2316c8222285ecfbd3f69ce99564fbe4253866e8" 2968 + dependencies = [ 2969 + "crossbeam-channel", 2970 + "crossbeam-utils", 2971 + "dashmap", 2972 + "smallvec", 2973 + "tagptr", 2974 + "triomphe", 2975 + "web-time", 2976 + ] 2977 + 2978 + [[package]] 2594 2979 name = "minimal-lexical" 2595 2980 version = "0.2.1" 2596 2981 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2641 3026 ] 2642 3027 2643 3028 [[package]] 3029 + name = "multipart" 3030 + version = "0.18.0" 3031 + source = "registry+https://github.com/rust-lang/crates.io-index" 3032 + checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" 3033 + dependencies = [ 3034 + "buf_redux", 3035 + "httparse", 3036 + "log", 3037 + "mime", 3038 + "mime_guess", 3039 + "quick-error", 3040 + "rand 0.8.5", 3041 + "safemem", 3042 + "tempfile", 3043 + "twoway", 3044 + ] 3045 + 3046 + [[package]] 2644 3047 name = "n0-future" 2645 3048 version = "0.1.3" 2646 3049 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2660 3063 "wasm-bindgen-futures", 2661 3064 "web-time", 2662 3065 ] 3066 + 3067 + [[package]] 3068 + name = "ndk-context" 3069 + version = "0.1.1" 3070 + source = "registry+https://github.com/rust-lang/crates.io-index" 3071 + checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 3072 + 3073 + [[package]] 3074 + name = "new_debug_unreachable" 3075 + version = "1.0.6" 3076 + source = "registry+https://github.com/rust-lang/crates.io-index" 3077 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2663 3078 2664 3079 [[package]] 2665 3080 name = "nom" ··· 2769 3184 ] 2770 3185 2771 3186 [[package]] 3187 + name = "num_cpus" 3188 + version = "1.17.0" 3189 + source = "registry+https://github.com/rust-lang/crates.io-index" 3190 + checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 3191 + dependencies = [ 3192 + "hermit-abi", 3193 + "libc", 3194 + ] 3195 + 3196 + [[package]] 3197 + name = "num_threads" 3198 + version = "0.1.7" 3199 + source = "registry+https://github.com/rust-lang/crates.io-index" 3200 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 3201 + dependencies = [ 3202 + "libc", 3203 + ] 3204 + 3205 + [[package]] 3206 + name = "objc2" 3207 + version = "0.6.4" 3208 + source = "registry+https://github.com/rust-lang/crates.io-index" 3209 + checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" 3210 + dependencies = [ 3211 + "objc2-encode", 3212 + ] 3213 + 3214 + [[package]] 3215 + name = "objc2-encode" 3216 + version = "4.1.0" 3217 + source = "registry+https://github.com/rust-lang/crates.io-index" 3218 + checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 3219 + 3220 + [[package]] 3221 + name = "objc2-foundation" 3222 + version = "0.3.2" 3223 + source = "registry+https://github.com/rust-lang/crates.io-index" 3224 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 3225 + dependencies = [ 3226 + "bitflags", 3227 + "objc2", 3228 + ] 3229 + 3230 + [[package]] 2772 3231 name = "object" 2773 3232 version = "0.32.2" 2774 3233 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2926 3385 "axum", 2927 3386 "axum-extra", 2928 3387 "axum-template", 2929 - "base64", 3388 + "base64 0.22.1", 2930 3389 "chrono", 2931 3390 "dashmap", 2932 3391 "dotenvy", ··· 2934 3393 "hex", 2935 3394 "html-escape", 2936 3395 "hyper-util", 3396 + "jacquard", 2937 3397 "jacquard-api", 2938 3398 "jacquard-common", 2939 3399 "jacquard-identity", ··· 3024 3484 ] 3025 3485 3026 3486 [[package]] 3487 + name = "phf" 3488 + version = "0.11.3" 3489 + source = "registry+https://github.com/rust-lang/crates.io-index" 3490 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 3491 + dependencies = [ 3492 + "phf_shared", 3493 + ] 3494 + 3495 + [[package]] 3496 + name = "phf_codegen" 3497 + version = "0.11.3" 3498 + source = "registry+https://github.com/rust-lang/crates.io-index" 3499 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 3500 + dependencies = [ 3501 + "phf_generator", 3502 + "phf_shared", 3503 + ] 3504 + 3505 + [[package]] 3506 + name = "phf_generator" 3507 + version = "0.11.3" 3508 + source = "registry+https://github.com/rust-lang/crates.io-index" 3509 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 3510 + dependencies = [ 3511 + "phf_shared", 3512 + "rand 0.8.5", 3513 + ] 3514 + 3515 + [[package]] 3516 + name = "phf_shared" 3517 + version = "0.11.3" 3518 + source = "registry+https://github.com/rust-lang/crates.io-index" 3519 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 3520 + dependencies = [ 3521 + "siphasher", 3522 + ] 3523 + 3524 + [[package]] 3027 3525 name = "pin-project" 3028 3526 version = "1.1.10" 3029 3527 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3149 3647 dependencies = [ 3150 3648 "zerocopy", 3151 3649 ] 3650 + 3651 + [[package]] 3652 + name = "precomputed-hash" 3653 + version = "0.1.1" 3654 + source = "registry+https://github.com/rust-lang/crates.io-index" 3655 + checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 3152 3656 3153 3657 [[package]] 3154 3658 name = "prettyplease" ··· 3241 3745 ] 3242 3746 3243 3747 [[package]] 3748 + name = "quick-error" 3749 + version = "1.2.3" 3750 + source = "registry+https://github.com/rust-lang/crates.io-index" 3751 + checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 3752 + 3753 + [[package]] 3244 3754 name = "quinn" 3245 3755 version = "0.11.9" 3246 3756 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3253 3763 "quinn-udp", 3254 3764 "rustc-hash", 3255 3765 "rustls", 3256 - "socket2", 3766 + "socket2 0.6.1", 3257 3767 "thiserror 2.0.17", 3258 3768 "tokio", 3259 3769 "tracing", ··· 3290 3800 "cfg_aliases", 3291 3801 "libc", 3292 3802 "once_cell", 3293 - "socket2", 3803 + "socket2 0.6.1", 3294 3804 "tracing", 3295 3805 "windows-sys 0.60.2", 3296 3806 ] ··· 3469 3979 source = "registry+https://github.com/rust-lang/crates.io-index" 3470 3980 checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" 3471 3981 dependencies = [ 3472 - "base64", 3982 + "base64 0.22.1", 3473 3983 "bytes", 3474 3984 "encoding_rs", 3475 3985 "futures-core", ··· 3505 4015 ] 3506 4016 3507 4017 [[package]] 4018 + name = "resolv-conf" 4019 + version = "0.7.6" 4020 + source = "registry+https://github.com/rust-lang/crates.io-index" 4021 + checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" 4022 + 4023 + [[package]] 3508 4024 name = "rfc6979" 3509 4025 version = "0.4.0" 3510 4026 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3529 4045 ] 3530 4046 3531 4047 [[package]] 4048 + name = "rouille" 4049 + version = "3.6.2" 4050 + source = "registry+https://github.com/rust-lang/crates.io-index" 4051 + checksum = "3716fbf57fc1084d7a706adf4e445298d123e4a44294c4e8213caf1b85fcc921" 4052 + dependencies = [ 4053 + "base64 0.13.1", 4054 + "brotli", 4055 + "chrono", 4056 + "deflate", 4057 + "filetime", 4058 + "multipart", 4059 + "percent-encoding", 4060 + "rand 0.8.5", 4061 + "serde", 4062 + "serde_derive", 4063 + "serde_json", 4064 + "sha1_smol", 4065 + "threadpool", 4066 + "time", 4067 + "tiny_http", 4068 + "url", 4069 + ] 4070 + 4071 + [[package]] 3532 4072 name = "rsa" 3533 4073 version = "0.9.9" 3534 4074 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3608 4148 "errno", 3609 4149 "libc", 3610 4150 "linux-raw-sys", 3611 - "windows-sys 0.52.0", 4151 + "windows-sys 0.61.2", 3612 4152 ] 3613 4153 3614 4154 [[package]] ··· 3660 4200 version = "1.0.22" 3661 4201 source = "registry+https://github.com/rust-lang/crates.io-index" 3662 4202 checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" 4203 + 4204 + [[package]] 4205 + name = "safemem" 4206 + version = "0.3.3" 4207 + source = "registry+https://github.com/rust-lang/crates.io-index" 4208 + checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 3663 4209 3664 4210 [[package]] 3665 4211 name = "salsa20" ··· 3891 4437 source = "registry+https://github.com/rust-lang/crates.io-index" 3892 4438 checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" 3893 4439 dependencies = [ 3894 - "base64", 4440 + "base64 0.22.1", 3895 4441 "chrono", 3896 4442 "hex", 3897 4443 "indexmap 1.9.3", ··· 3951 4497 ] 3952 4498 3953 4499 [[package]] 4500 + name = "sha1_smol" 4501 + version = "1.0.1" 4502 + source = "registry+https://github.com/rust-lang/crates.io-index" 4503 + checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 4504 + 4505 + [[package]] 3954 4506 name = "sha2" 3955 4507 version = "0.10.9" 3956 4508 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4003 4555 checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 4004 4556 4005 4557 [[package]] 4558 + name = "siphasher" 4559 + version = "1.0.2" 4560 + source = "registry+https://github.com/rust-lang/crates.io-index" 4561 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 4562 + 4563 + [[package]] 4006 4564 name = "slab" 4007 4565 version = "0.4.11" 4008 4566 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4029 4587 4030 4588 [[package]] 4031 4589 name = "socket2" 4590 + version = "0.5.10" 4591 + source = "registry+https://github.com/rust-lang/crates.io-index" 4592 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 4593 + dependencies = [ 4594 + "libc", 4595 + "windows-sys 0.52.0", 4596 + ] 4597 + 4598 + [[package]] 4599 + name = "socket2" 4032 4600 version = "0.6.1" 4033 4601 source = "registry+https://github.com/rust-lang/crates.io-index" 4034 4602 checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" ··· 4090 4658 source = "registry+https://github.com/rust-lang/crates.io-index" 4091 4659 checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" 4092 4660 dependencies = [ 4093 - "base64", 4661 + "base64 0.22.1", 4094 4662 "bytes", 4095 4663 "chrono", 4096 4664 "crc", ··· 4166 4734 checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" 4167 4735 dependencies = [ 4168 4736 "atoi", 4169 - "base64", 4737 + "base64 0.22.1", 4170 4738 "bitflags", 4171 4739 "byteorder", 4172 4740 "bytes", ··· 4209 4777 checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" 4210 4778 dependencies = [ 4211 4779 "atoi", 4212 - "base64", 4780 + "base64 0.22.1", 4213 4781 "bitflags", 4214 4782 "byteorder", 4215 4783 "chrono", ··· 4309 4877 version = "1.1.0" 4310 4878 source = "registry+https://github.com/rust-lang/crates.io-index" 4311 4879 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 4880 + 4881 + [[package]] 4882 + name = "string_cache" 4883 + version = "0.8.9" 4884 + source = "registry+https://github.com/rust-lang/crates.io-index" 4885 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 4886 + dependencies = [ 4887 + "new_debug_unreachable", 4888 + "parking_lot", 4889 + "phf_shared", 4890 + "precomputed-hash", 4891 + "serde", 4892 + ] 4893 + 4894 + [[package]] 4895 + name = "string_cache_codegen" 4896 + version = "0.5.4" 4897 + source = "registry+https://github.com/rust-lang/crates.io-index" 4898 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 4899 + dependencies = [ 4900 + "phf_generator", 4901 + "phf_shared", 4902 + "proc-macro2", 4903 + "quote", 4904 + ] 4312 4905 4313 4906 [[package]] 4314 4907 name = "stringprep" ··· 4382 4975 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4383 4976 dependencies = [ 4384 4977 "bitflags", 4385 - "core-foundation", 4978 + "core-foundation 0.9.4", 4386 4979 "system-configuration-sys", 4387 4980 ] 4388 4981 ··· 4397 4990 ] 4398 4991 4399 4992 [[package]] 4993 + name = "tagptr" 4994 + version = "0.2.0" 4995 + source = "registry+https://github.com/rust-lang/crates.io-index" 4996 + checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 4997 + 4998 + [[package]] 4999 + name = "tempfile" 5000 + version = "3.25.0" 5001 + source = "registry+https://github.com/rust-lang/crates.io-index" 5002 + checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" 5003 + dependencies = [ 5004 + "fastrand", 5005 + "getrandom 0.4.1", 5006 + "once_cell", 5007 + "rustix", 5008 + "windows-sys 0.61.2", 5009 + ] 5010 + 5011 + [[package]] 5012 + name = "tendril" 5013 + version = "0.4.3" 5014 + source = "registry+https://github.com/rust-lang/crates.io-index" 5015 + checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 5016 + dependencies = [ 5017 + "futf", 5018 + "mac", 5019 + "utf-8", 5020 + ] 5021 + 5022 + [[package]] 4400 5023 name = "thiserror" 4401 5024 version = "1.0.69" 4402 5025 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4446 5069 ] 4447 5070 4448 5071 [[package]] 5072 + name = "threadpool" 5073 + version = "1.8.1" 5074 + source = "registry+https://github.com/rust-lang/crates.io-index" 5075 + checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 5076 + dependencies = [ 5077 + "num_cpus", 5078 + ] 5079 + 5080 + [[package]] 4449 5081 name = "time" 4450 5082 version = "0.3.44" 4451 5083 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4453 5085 dependencies = [ 4454 5086 "deranged", 4455 5087 "itoa", 5088 + "libc", 4456 5089 "num-conv", 5090 + "num_threads", 4457 5091 "powerfmt", 4458 5092 "serde", 4459 5093 "time-core", ··· 4477 5111 ] 4478 5112 4479 5113 [[package]] 5114 + name = "tiny_http" 5115 + version = "0.12.0" 5116 + source = "registry+https://github.com/rust-lang/crates.io-index" 5117 + checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" 5118 + dependencies = [ 5119 + "ascii", 5120 + "chunked_transfer", 5121 + "httpdate", 5122 + "log", 5123 + ] 5124 + 5125 + [[package]] 4480 5126 name = "tinystr" 4481 5127 version = "0.8.2" 4482 5128 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4512 5158 "mio", 4513 5159 "pin-project-lite", 4514 5160 "signal-hook-registry", 4515 - "socket2", 5161 + "socket2 0.6.1", 4516 5162 "tokio-macros", 4517 5163 "windows-sys 0.61.2", 4518 5164 ] ··· 4571 5217 dependencies = [ 4572 5218 "async-trait", 4573 5219 "axum", 4574 - "base64", 5220 + "base64 0.22.1", 4575 5221 "bytes", 4576 5222 "h2", 4577 5223 "http", ··· 4582 5228 "hyper-util", 4583 5229 "percent-encoding", 4584 5230 "pin-project", 4585 - "socket2", 5231 + "socket2 0.6.1", 4586 5232 "sync_wrapper", 4587 5233 "tokio", 4588 5234 "tokio-stream", ··· 4751 5397 ] 4752 5398 4753 5399 [[package]] 5400 + name = "triomphe" 5401 + version = "0.1.15" 5402 + source = "registry+https://github.com/rust-lang/crates.io-index" 5403 + checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" 5404 + 5405 + [[package]] 4754 5406 name = "try-lock" 4755 5407 version = "0.2.5" 4756 5408 source = "registry+https://github.com/rust-lang/crates.io-index" 4757 5409 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 4758 5410 4759 5411 [[package]] 5412 + name = "twoway" 5413 + version = "0.1.8" 5414 + source = "registry+https://github.com/rust-lang/crates.io-index" 5415 + checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" 5416 + dependencies = [ 5417 + "memchr", 5418 + ] 5419 + 5420 + [[package]] 4760 5421 name = "typenum" 4761 5422 version = "1.19.0" 4762 5423 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4769 5430 checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 4770 5431 4771 5432 [[package]] 5433 + name = "unicase" 5434 + version = "2.9.0" 5435 + source = "registry+https://github.com/rust-lang/crates.io-index" 5436 + checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" 5437 + 5438 + [[package]] 4772 5439 name = "unicode-bidi" 4773 5440 version = "0.3.18" 4774 5441 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4854 5521 version = "2.1.3" 4855 5522 source = "registry+https://github.com/rust-lang/crates.io-index" 4856 5523 checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 5524 + 5525 + [[package]] 5526 + name = "utf-8" 5527 + version = "0.7.6" 5528 + source = "registry+https://github.com/rust-lang/crates.io-index" 5529 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 4857 5530 4858 5531 [[package]] 4859 5532 name = "utf8-width" ··· 5064 5737 ] 5065 5738 5066 5739 [[package]] 5740 + name = "webbrowser" 5741 + version = "1.1.0" 5742 + source = "registry+https://github.com/rust-lang/crates.io-index" 5743 + checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2" 5744 + dependencies = [ 5745 + "core-foundation 0.10.1", 5746 + "jni", 5747 + "log", 5748 + "ndk-context", 5749 + "objc2", 5750 + "objc2-foundation", 5751 + "url", 5752 + "web-sys", 5753 + ] 5754 + 5755 + [[package]] 5756 + name = "webpage" 5757 + version = "2.0.1" 5758 + source = "registry+https://github.com/rust-lang/crates.io-index" 5759 + checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" 5760 + dependencies = [ 5761 + "html5ever", 5762 + "markup5ever_rcdom", 5763 + "serde_json", 5764 + "url", 5765 + ] 5766 + 5767 + [[package]] 5067 5768 name = "webpki-roots" 5068 5769 version = "0.26.11" 5069 5770 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5090 5791 "libredox", 5091 5792 "wasite", 5092 5793 ] 5794 + 5795 + [[package]] 5796 + name = "widestring" 5797 + version = "1.2.1" 5798 + source = "registry+https://github.com/rust-lang/crates.io-index" 5799 + checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" 5093 5800 5094 5801 [[package]] 5095 5802 name = "winapi" ··· 5190 5897 checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 5191 5898 dependencies = [ 5192 5899 "windows-link", 5900 + ] 5901 + 5902 + [[package]] 5903 + name = "windows-sys" 5904 + version = "0.45.0" 5905 + source = "registry+https://github.com/rust-lang/crates.io-index" 5906 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 5907 + dependencies = [ 5908 + "windows-targets 0.42.2", 5193 5909 ] 5194 5910 5195 5911 [[package]] ··· 5239 5955 5240 5956 [[package]] 5241 5957 name = "windows-targets" 5958 + version = "0.42.2" 5959 + source = "registry+https://github.com/rust-lang/crates.io-index" 5960 + checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 5961 + dependencies = [ 5962 + "windows_aarch64_gnullvm 0.42.2", 5963 + "windows_aarch64_msvc 0.42.2", 5964 + "windows_i686_gnu 0.42.2", 5965 + "windows_i686_msvc 0.42.2", 5966 + "windows_x86_64_gnu 0.42.2", 5967 + "windows_x86_64_gnullvm 0.42.2", 5968 + "windows_x86_64_msvc 0.42.2", 5969 + ] 5970 + 5971 + [[package]] 5972 + name = "windows-targets" 5242 5973 version = "0.48.5" 5243 5974 source = "registry+https://github.com/rust-lang/crates.io-index" 5244 5975 checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" ··· 5287 6018 5288 6019 [[package]] 5289 6020 name = "windows_aarch64_gnullvm" 6021 + version = "0.42.2" 6022 + source = "registry+https://github.com/rust-lang/crates.io-index" 6023 + checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 6024 + 6025 + [[package]] 6026 + name = "windows_aarch64_gnullvm" 5290 6027 version = "0.48.5" 5291 6028 source = "registry+https://github.com/rust-lang/crates.io-index" 5292 6029 checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" ··· 5305 6042 5306 6043 [[package]] 5307 6044 name = "windows_aarch64_msvc" 6045 + version = "0.42.2" 6046 + source = "registry+https://github.com/rust-lang/crates.io-index" 6047 + checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 6048 + 6049 + [[package]] 6050 + name = "windows_aarch64_msvc" 5308 6051 version = "0.48.5" 5309 6052 source = "registry+https://github.com/rust-lang/crates.io-index" 5310 6053 checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" ··· 5320 6063 version = "0.53.1" 5321 6064 source = "registry+https://github.com/rust-lang/crates.io-index" 5322 6065 checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 6066 + 6067 + [[package]] 6068 + name = "windows_i686_gnu" 6069 + version = "0.42.2" 6070 + source = "registry+https://github.com/rust-lang/crates.io-index" 6071 + checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 5323 6072 5324 6073 [[package]] 5325 6074 name = "windows_i686_gnu" ··· 5350 6099 version = "0.53.1" 5351 6100 source = "registry+https://github.com/rust-lang/crates.io-index" 5352 6101 checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 6102 + 6103 + [[package]] 6104 + name = "windows_i686_msvc" 6105 + version = "0.42.2" 6106 + source = "registry+https://github.com/rust-lang/crates.io-index" 6107 + checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 5353 6108 5354 6109 [[package]] 5355 6110 name = "windows_i686_msvc" ··· 5371 6126 5372 6127 [[package]] 5373 6128 name = "windows_x86_64_gnu" 6129 + version = "0.42.2" 6130 + source = "registry+https://github.com/rust-lang/crates.io-index" 6131 + checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 6132 + 6133 + [[package]] 6134 + name = "windows_x86_64_gnu" 5374 6135 version = "0.48.5" 5375 6136 source = "registry+https://github.com/rust-lang/crates.io-index" 5376 6137 checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" ··· 5389 6150 5390 6151 [[package]] 5391 6152 name = "windows_x86_64_gnullvm" 6153 + version = "0.42.2" 6154 + source = "registry+https://github.com/rust-lang/crates.io-index" 6155 + checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 6156 + 6157 + [[package]] 6158 + name = "windows_x86_64_gnullvm" 5392 6159 version = "0.48.5" 5393 6160 source = "registry+https://github.com/rust-lang/crates.io-index" 5394 6161 checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" ··· 5407 6174 5408 6175 [[package]] 5409 6176 name = "windows_x86_64_msvc" 6177 + version = "0.42.2" 6178 + source = "registry+https://github.com/rust-lang/crates.io-index" 6179 + checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 6180 + 6181 + [[package]] 6182 + name = "windows_x86_64_msvc" 5410 6183 version = "0.48.5" 5411 6184 source = "registry+https://github.com/rust-lang/crates.io-index" 5412 6185 checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" ··· 5422 6195 version = "0.53.1" 5423 6196 source = "registry+https://github.com/rust-lang/crates.io-index" 5424 6197 checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 6198 + 6199 + [[package]] 6200 + name = "winreg" 6201 + version = "0.50.0" 6202 + source = "registry+https://github.com/rust-lang/crates.io-index" 6203 + checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 6204 + dependencies = [ 6205 + "cfg-if", 6206 + "windows-sys 0.48.0", 6207 + ] 5425 6208 5426 6209 [[package]] 5427 6210 name = "wit-bindgen" ··· 5522 6305 version = "0.6.2" 5523 6306 source = "registry+https://github.com/rust-lang/crates.io-index" 5524 6307 checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 6308 + 6309 + [[package]] 6310 + name = "xml5ever" 6311 + version = "0.18.1" 6312 + source = "registry+https://github.com/rust-lang/crates.io-index" 6313 + checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" 6314 + dependencies = [ 6315 + "log", 6316 + "mac", 6317 + "markup5ever", 6318 + ] 5525 6319 5526 6320 [[package]] 5527 6321 name = "yansi"
+1
Cargo.toml
··· 48 48 p256 = { version = "0.13", features = ["ecdsa", "jwk"] } 49 49 jose-jwk = { version = "0.1", features = ["p256"] } 50 50 base64 = "0.22" 51 + jacquard = "0.9.5" 51 52
+6
html_templates/admin/accounts.hbs
··· 21 21 <button type="submit" class="btn btn-primary">Search</button> 22 22 </form> 23 23 24 + <form class="search-form" method="GET" action="/admin/account"> 25 + <input type="text" name="q" placeholder="Direct lookup by did or handle" value="{{search_query}}"/> 26 + <button type="submit" class="btn btn-primary">Search</button> 27 + </form> 28 + 29 + 24 30 {{#if accounts}} 25 31 <div class="table-container"> 26 32 <table>
+14 -1
html_templates/admin/partials/sidebar.hbs
··· 1 + <div class="topbar"> 2 + <button class="hamburger" id="hamburger" aria-label="Toggle menu"> 3 + <span></span> 4 + <span></span> 5 + <span></span> 6 + </button> 7 + <span class="topbar-title">{{pds_hostname}} — Admin</span> 8 + </div> 9 + 10 + <div class="sidebar-overlay" id="sidebar-overlay"></div> 11 + 1 12 <aside class="sidebar"> 2 13 <div class="sidebar-title">{{pds_hostname}}</div> 3 14 <div class="sidebar-subtitle">Admin Portal</div> ··· 22 33 <button type="submit">Sign out</button> 23 34 </form> 24 35 </div> 25 - </aside> 36 + </aside> 37 + 38 + <script src="/admin/static/js/admin.js"></script>
+23 -7
src/admin/routes.rs
··· 1 + use crate::AppState; 1 2 use axum::{ 2 3 extract::{Extension, Path, Query, State}, 3 4 http::StatusCode, 4 5 response::{Html, IntoResponse, Redirect, Response}, 5 6 }; 6 7 use axum_extra::extract::cookie::{Cookie, SignedCookieJar}; 8 + use jacquard::client::BasicClient; 9 + use jacquard_common::types::handle::Handle; 10 + use jacquard_identity::resolver::IdentityResolver; 7 11 use serde::Deserialize; 8 - 9 - use crate::AppState; 10 12 11 13 use super::middleware::{AdminPermissions, AdminSession}; 12 14 use super::pds_proxy; ··· 25 27 pub flash_success: Option<String>, 26 28 pub flash_error: Option<String>, 27 29 pub new_password: Option<String>, 30 + pub direct_lookup: Option<String>, 28 31 } 29 32 30 33 #[derive(Debug, Deserialize)] ··· 373 376 let pds = pds_url(&state); 374 377 let password = admin_password(&state); 375 378 379 + let mut look_up_did: String = params.direct_lookup.unwrap_or_else(|| did); 380 + 381 + if !look_up_did.starts_with("did") { 382 + let handle = Handle::new(&look_up_did).unwrap(); 383 + let client = BasicClient::unauthenticated(); 384 + 385 + // Resolve handle to DID 386 + println!("Resolving handle: {}", handle); 387 + let did = client.resolve_handle(&handle).await.unwrap(); 388 + 389 + look_up_did = did.to_string() 390 + } 391 + 376 392 // Fetch account info, subject status, repo description, and repo status in parallel 377 - let did_param: Vec<(&str, &str)> = vec![("did", did.as_str())]; 393 + let did_param: Vec<(&str, &str)> = vec![("did", look_up_did.as_str())]; 378 394 let account_fut = pds_proxy::admin_xrpc_get::<serde_json::Value>( 379 395 pds, 380 396 password, ··· 382 398 &did_param, 383 399 ); 384 400 385 - let did_param2: Vec<(&str, &str)> = vec![("did", did.as_str())]; 401 + let did_param2: Vec<(&str, &str)> = vec![("did", look_up_did.as_str())]; 386 402 let status_fut = pds_proxy::admin_xrpc_get::<serde_json::Value>( 387 403 pds, 388 404 password, ··· 391 407 ); 392 408 393 409 // Gap 2: fetch repo description (public, no auth needed) 394 - let repo_param: Vec<(&str, &str)> = vec![("repo", did.as_str())]; 410 + let repo_param: Vec<(&str, &str)> = vec![("repo", look_up_did.as_str())]; 395 411 let describe_repo_fut = pds_proxy::public_xrpc_get::<serde_json::Value>( 396 412 pds, 397 413 "com.atproto.repo.describeRepo", ··· 399 415 ); 400 416 401 417 // Gap 2: fetch repo status (public, no auth needed) 402 - let did_param3: Vec<(&str, &str)> = vec![("did", did.as_str())]; 418 + let did_param3: Vec<(&str, &str)> = vec![("did", look_up_did.as_str())]; 403 419 let repo_status_fut = pds_proxy::public_xrpc_get::<serde_json::Value>( 404 420 pds, 405 421 "com.atproto.sync.getRepoStatus", ··· 412 428 let account = match account_res { 413 429 Ok(a) => a, 414 430 Err(e) => { 415 - tracing::error!("Failed to get account info for {}: {}", did, e); 431 + tracing::error!("Failed to get account info for {}: {}", look_up_did, e); 416 432 return flash_redirect( 417 433 "/admin/accounts", 418 434 None,
-1
src/admin/static_files.rs
··· 29 29 match path.rsplit('.').next() { 30 30 Some("css") => "text/css; charset=utf-8", 31 31 Some("js") => "application/javascript; charset=utf-8", 32 - Some("json") => "application/json", 33 32 Some("svg") => "image/svg+xml", 34 33 Some("png") => "image/png", 35 34 Some("jpg") | Some("jpeg") => "image/jpeg",
+135 -1
static/css/admin.css
··· 831 831 opacity: 0.85; 832 832 } 833 833 834 + /* --- Mobile: Topbar + Hamburger ----------------------------- */ 835 + 836 + .topbar { 837 + display: none; 838 + position: fixed; 839 + top: 0; 840 + left: 0; 841 + right: 0; 842 + height: 52px; 843 + background: var(--bg-primary-color); 844 + border-bottom: 1px solid var(--border-color); 845 + align-items: center; 846 + padding: 0 16px; 847 + gap: 12px; 848 + z-index: 100; 849 + } 850 + 851 + .topbar-title { 852 + font-size: 0.875rem; 853 + font-weight: 600; 854 + overflow: hidden; 855 + text-overflow: ellipsis; 856 + white-space: nowrap; 857 + flex: 1; 858 + } 859 + 860 + .hamburger { 861 + background: none; 862 + border: none; 863 + cursor: pointer; 864 + padding: 4px; 865 + display: flex; 866 + flex-direction: column; 867 + gap: 5px; 868 + flex-shrink: 0; 869 + } 870 + 871 + .hamburger span { 872 + display: block; 873 + width: 22px; 874 + height: 2px; 875 + background: var(--primary-color); 876 + border-radius: 2px; 877 + transition: transform 0.25s ease, opacity 0.25s ease; 878 + } 879 + 880 + body.sidebar-open .hamburger span:nth-child(1) { 881 + transform: translateY(7px) rotate(45deg); 882 + } 883 + 884 + body.sidebar-open .hamburger span:nth-child(2) { 885 + opacity: 0; 886 + } 887 + 888 + body.sidebar-open .hamburger span:nth-child(3) { 889 + transform: translateY(-7px) rotate(-45deg); 890 + } 891 + 892 + .sidebar-overlay { 893 + display: none; 894 + position: fixed; 895 + inset: 0; 896 + background: rgba(0, 0, 0, 0.4); 897 + z-index: 149; 898 + } 899 + 834 900 /* --- Responsive --------------------------------------------- */ 835 901 836 902 @media (max-width: 768px) { 903 + .topbar { 904 + display: flex; 905 + } 906 + 837 907 .sidebar { 838 - display: none; 908 + transform: translateX(-220px); 909 + transition: transform 0.25s ease; 910 + z-index: 150; 911 + } 912 + 913 + body.sidebar-open .sidebar { 914 + transform: translateX(0); 915 + } 916 + 917 + body.sidebar-open .sidebar-overlay { 918 + display: block; 839 919 } 840 920 841 921 .main { 842 922 margin-left: 0; 923 + padding: 24px 16px; 924 + padding-top: 76px; /* 52px topbar + 24px breathing room */ 925 + } 926 + 927 + /* Tables scroll horizontally */ 928 + .table-container { 929 + overflow-x: auto; 930 + -webkit-overflow-scrolling: touch; 931 + } 932 + 933 + /* Cards: single column */ 934 + .cards { 935 + grid-template-columns: 1fr; 936 + } 937 + 938 + /* Form cards: full width */ 939 + .form-card, 940 + .success-card { 941 + max-width: 100%; 942 + } 943 + 944 + /* Search / create forms: stack vertically */ 945 + .search-form, 946 + .create-form { 947 + flex-direction: column; 948 + align-items: stretch; 949 + } 950 + 951 + .create-form input[type="number"] { 952 + width: 100%; 953 + } 954 + 955 + /* Detail rows wrap on narrow screens */ 956 + .detail-row { 957 + flex-wrap: wrap; 958 + gap: 4px; 959 + } 960 + 961 + .detail-row .value { 962 + max-width: 100%; 963 + text-align: left; 964 + } 965 + 966 + /* Actions wrap tightly */ 967 + .actions { 968 + flex-direction: column; 969 + align-items: flex-start; 970 + } 971 + 972 + .actions form, 973 + .actions .btn { 974 + width: 100%; 975 + display: block; 976 + text-align: center; 843 977 } 844 978 }
+27
static/js/admin.js
··· 1 + document.addEventListener('DOMContentLoaded', function () { 2 + var hamburger = document.getElementById('hamburger'); 3 + var overlay = document.getElementById('sidebar-overlay'); 4 + 5 + function openSidebar() { 6 + document.body.classList.add('sidebar-open'); 7 + } 8 + 9 + function closeSidebar() { 10 + document.body.classList.remove('sidebar-open'); 11 + } 12 + 13 + if (hamburger) { 14 + hamburger.addEventListener('click', function () { 15 + document.body.classList.toggle('sidebar-open'); 16 + }); 17 + } 18 + 19 + if (overlay) { 20 + overlay.addEventListener('click', closeSidebar); 21 + } 22 + 23 + // Close sidebar when a nav link is tapped on mobile 24 + document.querySelectorAll('.sidebar nav a').forEach(function (link) { 25 + link.addEventListener('click', closeSidebar); 26 + }); 27 + });