[WIP] A (somewhat barebones) atproto app for creating custom sites without hosting!

Compare changes

Choose any two refs to compare.

Changed files
+102 -116
server
upload
+32 -5
README.md
··· 2 3 A (somewhat barebones) atproto app for creating custom sites without hosting! 4 5 - Lexicons are located at [`./lexicons`](./lexicons/) 6 - Server backend is located at [`./server`](./server/) 7 - Upload CLI is located at [`./upload`](./upload/) 8 - Web GUI **will be** located at [`./web-gui`](./web-gui/) 9 - Fuse tool **will be** located at [`./fuse`](./fuse/) 10 11 - TODO: 12 13 - [x] Resolve `handle.host` and `did.did-method.host` domains to records/blobs 14 - [x] Backfill network ··· 16 - [x] Store blobs for CDN (max ~0.25gb per user) 17 - [x] Moderate illegal content or hope that people are niceys 18 (Hope that people are niceys) 19 - - [ ] Finish CLI tool 20 - - [ ] Sign in via app password 21 - - [ ] Clear old site 22 - - [ ] Upload new site 23 - [ ] Fuse uploader 24 - [ ] Web GUI uploader
··· 2 3 A (somewhat barebones) atproto app for creating custom sites without hosting! 4 5 + > [!CAUTION] 6 + > This software is super duper alpha and not tested thoroughly! Use at your own risk! 7 + 8 - Lexicons are located at [`./lexicons`](./lexicons/) 9 - Server backend is located at [`./server`](./server/) 10 - Upload CLI is located at [`./upload`](./upload/) 11 - Web GUI **will be** located at [`./web-gui`](./web-gui/) 12 - Fuse tool **will be** located at [`./fuse`](./fuse/) 13 14 + ## How to: 15 + 16 + **View someones site?** 17 + > Head to `https://<handle>.atcities.dev/` or `https://<did>.did-<method>.atcities.dev/`. 18 + 19 + **Upload your own site?** 20 + > Use the upload cli. Installation guide below. 21 + 22 + **Self host atcities.dev?** 23 + > Clone this repo and setup the `.env` file for `/server`, then run `deno run run` 24 + 25 + ### CLI installation guide. 26 + 27 + 1. Build from source: 28 + Prerequisites: `git` `cargo` `rust` 29 + ```sh 30 + git clone https://tangled.org/@vielle.dev/atcities.dev 31 + cd atcities.dev/upload 32 + cargo build 33 + sudo cp ./target/debug/atcities-upload /bin 34 + # Reload your shell environment 35 + atcities-upload --version 36 + ``` 37 + 38 + ## Todo: 39 40 - [x] Resolve `handle.host` and `did.did-method.host` domains to records/blobs 41 - [x] Backfill network ··· 43 - [x] Store blobs for CDN (max ~0.25gb per user) 44 - [x] Moderate illegal content or hope that people are niceys 45 (Hope that people are niceys) 46 + - [x] Finish CLI tool 47 + - [x] Sign in via app password 48 + - [x] Clear old site 49 + - [x] Upload new site 50 - [ ] Fuse uploader 51 - [ ] Web GUI uploader
+1
server/deno.json
··· 1 { 2 "tasks": { 3 "dev": "deno run --watch --allow-net --allow-env --allow-sys --allow-read=/usr/bin/ldd,./blobs,./src --allow-write=./blobs --allow-ffi --env-file src/index.ts", 4 "lexgen": "deno run --allow-env --allow-sys --allow-read=.. --allow-write=./src/lexicons --no-prompt @atcute/lex-cli generate -c ./lex.config.js && cat ./src/lexicons/index.ts | sed \"s/.js/.ts/\" > ./src/lexicons/index.ts", 5 "dk": "deno run -A --node-modules-dir npm:drizzle-kit" 6 },
··· 1 { 2 "tasks": { 3 "dev": "deno run --watch --allow-net --allow-env --allow-sys --allow-read=/usr/bin/ldd,./blobs,./src --allow-write=./blobs --allow-ffi --env-file src/index.ts", 4 + "run": "deno run --allow-net --allow-env --allow-sys --allow-read=/usr/bin/ldd,./blobs,./src --allow-write=./blobs --allow-ffi --env-file src/index.ts", 5 "lexgen": "deno run --allow-env --allow-sys --allow-read=.. --allow-write=./src/lexicons --no-prompt @atcute/lex-cli generate -c ./lex.config.js && cat ./src/lexicons/index.ts | sed \"s/.js/.ts/\" > ./src/lexicons/index.ts", 6 "dk": "deno run -A --node-modules-dir npm:drizzle-kit" 7 },
+44 -102
upload/Cargo.lock
··· 158 dependencies = [ 159 "proc-macro2", 160 "quote", 161 - "syn 2.0.106", 162 ] 163 164 [[package]] 165 name = "atcities-upload" 166 - version = "0.1.0" 167 dependencies = [ 168 "clap", 169 "env_logger", ··· 291 "proc-macro2", 292 "quote", 293 "rustversion", 294 - "syn 2.0.106", 295 ] 296 297 [[package]] ··· 526 "heck 0.5.0", 527 "proc-macro2", 528 "quote", 529 - "syn 2.0.106", 530 ] 531 532 [[package]] ··· 697 "proc-macro2", 698 "quote", 699 "strsim", 700 - "syn 2.0.106", 701 ] 702 703 [[package]] ··· 708 dependencies = [ 709 "darling_core", 710 "quote", 711 - "syn 2.0.106", 712 ] 713 714 [[package]] ··· 748 checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 749 dependencies = [ 750 "data-encoding", 751 - "syn 2.0.106", 752 ] 753 754 [[package]] ··· 801 dependencies = [ 802 "proc-macro2", 803 "quote", 804 - "syn 2.0.106", 805 ] 806 807 [[package]] ··· 856 "heck 0.5.0", 857 "proc-macro2", 858 "quote", 859 - "syn 2.0.106", 860 ] 861 862 [[package]] ··· 1001 dependencies = [ 1002 "proc-macro2", 1003 "quote", 1004 - "syn 2.0.106", 1005 ] 1006 1007 [[package]] ··· 1634 "getrandom 0.2.16", 1635 "http", 1636 "jacquard-api", 1637 - "jacquard-common 0.6.0", 1638 - "jacquard-derive 0.6.0", 1639 "jacquard-identity", 1640 "jacquard-oauth", 1641 "jose-jwk", ··· 1663 dependencies = [ 1664 "bon", 1665 "bytes", 1666 - "jacquard-common 0.6.0", 1667 - "jacquard-derive 0.6.0", 1668 "miette", 1669 "serde", 1670 "serde_ipld_dagcbor", ··· 1673 1674 [[package]] 1675 name = "jacquard-common" 1676 - version = "0.5.4" 1677 - source = "registry+https://github.com/rust-lang/crates.io-index" 1678 - checksum = "cf91dfa4ade1ca83c9afccee4ece7ed72b6607a0853d88623958d4e7c5382eb3" 1679 - dependencies = [ 1680 - "base64 0.22.1", 1681 - "bon", 1682 - "bytes", 1683 - "chrono", 1684 - "cid", 1685 - "getrandom 0.3.4", 1686 - "http", 1687 - "ipld-core", 1688 - "k256", 1689 - "langtag", 1690 - "miette", 1691 - "multibase", 1692 - "multihash", 1693 - "ouroboros", 1694 - "p256", 1695 - "rand 0.9.2", 1696 - "regex", 1697 - "reqwest", 1698 - "serde", 1699 - "serde_html_form", 1700 - "serde_ipld_dagcbor", 1701 - "serde_json", 1702 - "signature", 1703 - "smol_str", 1704 - "thiserror 2.0.17", 1705 - "tokio", 1706 - "trait-variant", 1707 - "url", 1708 - ] 1709 - 1710 - [[package]] 1711 - name = "jacquard-common" 1712 version = "0.6.0" 1713 source = "registry+https://github.com/rust-lang/crates.io-index" 1714 checksum = "f7f1bab0279ae2e29c3383f132a05b9c708585fab62e94292affdf352ce13242" ··· 1747 1748 [[package]] 1749 name = "jacquard-derive" 1750 - version = "0.5.4" 1751 - source = "registry+https://github.com/rust-lang/crates.io-index" 1752 - checksum = "4f7db8498da87d842297b169a0080eed751bce173c56626b5fa71261fe72f804" 1753 - dependencies = [ 1754 - "proc-macro2", 1755 - "quote", 1756 - "syn 2.0.106", 1757 - ] 1758 - 1759 - [[package]] 1760 - name = "jacquard-derive" 1761 version = "0.6.0" 1762 source = "registry+https://github.com/rust-lang/crates.io-index" 1763 checksum = "a4741844c0638498156338e6230a81ecb54d0a061ffc6f4f54e97b94972a01fb" 1764 dependencies = [ 1765 "proc-macro2", 1766 "quote", 1767 - "syn 2.0.106", 1768 ] 1769 1770 [[package]] ··· 1778 "hickory-resolver", 1779 "http", 1780 "jacquard-api", 1781 - "jacquard-common 0.6.0", 1782 "miette", 1783 "percent-encoding", 1784 "reqwest", ··· 1804 "dashmap", 1805 "elliptic-curve", 1806 "http", 1807 - "jacquard-common 0.6.0", 1808 "jacquard-identity", 1809 "jose-jwa", 1810 "jose-jwk", ··· 1848 dependencies = [ 1849 "proc-macro2", 1850 "quote", 1851 - "syn 2.0.106", 1852 ] 1853 1854 [[package]] ··· 1953 1954 [[package]] 1955 name = "lexicons" 1956 - version = "0.1.0" 1957 dependencies = [ 1958 "bon", 1959 "bytes", 1960 - "jacquard-common 0.5.4", 1961 - "jacquard-derive 0.5.4", 1962 "miette", 1963 "serde", 1964 "thiserror 2.0.17", ··· 2088 dependencies = [ 2089 "proc-macro2", 2090 "quote", 2091 - "syn 2.0.106", 2092 ] 2093 2094 [[package]] ··· 2333 dependencies = [ 2334 "proc-macro2", 2335 "quote", 2336 - "syn 2.0.106", 2337 ] 2338 2339 [[package]] ··· 2375 "proc-macro2", 2376 "proc-macro2-diagnostics", 2377 "quote", 2378 - "syn 2.0.106", 2379 ] 2380 2381 [[package]] ··· 2529 checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2530 dependencies = [ 2531 "proc-macro2", 2532 - "syn 2.0.106", 2533 ] 2534 2535 [[package]] ··· 2614 dependencies = [ 2615 "proc-macro2", 2616 "quote", 2617 - "syn 2.0.106", 2618 "version_check", 2619 "yansi", 2620 ] ··· 3102 dependencies = [ 3103 "proc-macro2", 3104 "quote", 3105 - "syn 2.0.106", 3106 ] 3107 3108 [[package]] ··· 3177 version = "1.3.0" 3178 source = "registry+https://github.com/rust-lang/crates.io-index" 3179 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3180 - 3181 - [[package]] 3182 - name = "signal-hook-registry" 3183 - version = "1.4.6" 3184 - source = "registry+https://github.com/rust-lang/crates.io-index" 3185 - checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 3186 - dependencies = [ 3187 - "libc", 3188 - ] 3189 3190 [[package]] 3191 name = "signature" ··· 3283 "quote", 3284 "serde", 3285 "sha2", 3286 - "syn 2.0.106", 3287 "thiserror 1.0.69", 3288 ] 3289 ··· 3339 3340 [[package]] 3341 name = "syn" 3342 - version = "2.0.106" 3343 source = "registry+https://github.com/rust-lang/crates.io-index" 3344 - checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 3345 dependencies = [ 3346 "proc-macro2", 3347 "quote", ··· 3376 dependencies = [ 3377 "proc-macro2", 3378 "quote", 3379 - "syn 2.0.106", 3380 ] 3381 3382 [[package]] ··· 3459 dependencies = [ 3460 "proc-macro2", 3461 "quote", 3462 - "syn 2.0.106", 3463 ] 3464 3465 [[package]] ··· 3470 dependencies = [ 3471 "proc-macro2", 3472 "quote", 3473 - "syn 2.0.106", 3474 ] 3475 3476 [[package]] ··· 3549 "bytes", 3550 "libc", 3551 "mio", 3552 - "parking_lot", 3553 "pin-project-lite", 3554 - "signal-hook-registry", 3555 "socket2 0.6.1", 3556 "tokio-macros", 3557 "windows-sys 0.61.2", ··· 3565 dependencies = [ 3566 "proc-macro2", 3567 "quote", 3568 - "syn 2.0.106", 3569 ] 3570 3571 [[package]] ··· 3665 dependencies = [ 3666 "proc-macro2", 3667 "quote", 3668 - "syn 2.0.106", 3669 ] 3670 3671 [[package]] ··· 3685 dependencies = [ 3686 "proc-macro2", 3687 "quote", 3688 - "syn 2.0.106", 3689 ] 3690 3691 [[package]] ··· 3850 "log", 3851 "proc-macro2", 3852 "quote", 3853 - "syn 2.0.106", 3854 "wasm-bindgen-shared", 3855 ] 3856 ··· 3885 dependencies = [ 3886 "proc-macro2", 3887 "quote", 3888 - "syn 2.0.106", 3889 "wasm-bindgen-backend", 3890 "wasm-bindgen-shared", 3891 ] ··· 3994 dependencies = [ 3995 "proc-macro2", 3996 "quote", 3997 - "syn 2.0.106", 3998 ] 3999 4000 [[package]] ··· 4005 dependencies = [ 4006 "proc-macro2", 4007 "quote", 4008 - "syn 2.0.106", 4009 ] 4010 4011 [[package]] ··· 4412 dependencies = [ 4413 "proc-macro2", 4414 "quote", 4415 - "syn 2.0.106", 4416 "synstructure", 4417 ] 4418 ··· 4433 dependencies = [ 4434 "proc-macro2", 4435 "quote", 4436 - "syn 2.0.106", 4437 ] 4438 4439 [[package]] ··· 4453 dependencies = [ 4454 "proc-macro2", 4455 "quote", 4456 - "syn 2.0.106", 4457 "synstructure", 4458 ] 4459 ··· 4496 dependencies = [ 4497 "proc-macro2", 4498 "quote", 4499 - "syn 2.0.106", 4500 ]
··· 158 dependencies = [ 159 "proc-macro2", 160 "quote", 161 + "syn 2.0.107", 162 ] 163 164 [[package]] 165 name = "atcities-upload" 166 + version = "1.0.1" 167 dependencies = [ 168 "clap", 169 "env_logger", ··· 291 "proc-macro2", 292 "quote", 293 "rustversion", 294 + "syn 2.0.107", 295 ] 296 297 [[package]] ··· 526 "heck 0.5.0", 527 "proc-macro2", 528 "quote", 529 + "syn 2.0.107", 530 ] 531 532 [[package]] ··· 697 "proc-macro2", 698 "quote", 699 "strsim", 700 + "syn 2.0.107", 701 ] 702 703 [[package]] ··· 708 dependencies = [ 709 "darling_core", 710 "quote", 711 + "syn 2.0.107", 712 ] 713 714 [[package]] ··· 748 checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 749 dependencies = [ 750 "data-encoding", 751 + "syn 2.0.107", 752 ] 753 754 [[package]] ··· 801 dependencies = [ 802 "proc-macro2", 803 "quote", 804 + "syn 2.0.107", 805 ] 806 807 [[package]] ··· 856 "heck 0.5.0", 857 "proc-macro2", 858 "quote", 859 + "syn 2.0.107", 860 ] 861 862 [[package]] ··· 1001 dependencies = [ 1002 "proc-macro2", 1003 "quote", 1004 + "syn 2.0.107", 1005 ] 1006 1007 [[package]] ··· 1634 "getrandom 0.2.16", 1635 "http", 1636 "jacquard-api", 1637 + "jacquard-common", 1638 + "jacquard-derive", 1639 "jacquard-identity", 1640 "jacquard-oauth", 1641 "jose-jwk", ··· 1663 dependencies = [ 1664 "bon", 1665 "bytes", 1666 + "jacquard-common", 1667 + "jacquard-derive", 1668 "miette", 1669 "serde", 1670 "serde_ipld_dagcbor", ··· 1673 1674 [[package]] 1675 name = "jacquard-common" 1676 version = "0.6.0" 1677 source = "registry+https://github.com/rust-lang/crates.io-index" 1678 checksum = "f7f1bab0279ae2e29c3383f132a05b9c708585fab62e94292affdf352ce13242" ··· 1711 1712 [[package]] 1713 name = "jacquard-derive" 1714 version = "0.6.0" 1715 source = "registry+https://github.com/rust-lang/crates.io-index" 1716 checksum = "a4741844c0638498156338e6230a81ecb54d0a061ffc6f4f54e97b94972a01fb" 1717 dependencies = [ 1718 "proc-macro2", 1719 "quote", 1720 + "syn 2.0.107", 1721 ] 1722 1723 [[package]] ··· 1731 "hickory-resolver", 1732 "http", 1733 "jacquard-api", 1734 + "jacquard-common", 1735 "miette", 1736 "percent-encoding", 1737 "reqwest", ··· 1757 "dashmap", 1758 "elliptic-curve", 1759 "http", 1760 + "jacquard-common", 1761 "jacquard-identity", 1762 "jose-jwa", 1763 "jose-jwk", ··· 1801 dependencies = [ 1802 "proc-macro2", 1803 "quote", 1804 + "syn 2.0.107", 1805 ] 1806 1807 [[package]] ··· 1906 1907 [[package]] 1908 name = "lexicons" 1909 + version = "1.0.0" 1910 dependencies = [ 1911 "bon", 1912 "bytes", 1913 + "jacquard-common", 1914 + "jacquard-derive", 1915 "miette", 1916 "serde", 1917 "thiserror 2.0.17", ··· 2041 dependencies = [ 2042 "proc-macro2", 2043 "quote", 2044 + "syn 2.0.107", 2045 ] 2046 2047 [[package]] ··· 2286 dependencies = [ 2287 "proc-macro2", 2288 "quote", 2289 + "syn 2.0.107", 2290 ] 2291 2292 [[package]] ··· 2328 "proc-macro2", 2329 "proc-macro2-diagnostics", 2330 "quote", 2331 + "syn 2.0.107", 2332 ] 2333 2334 [[package]] ··· 2482 checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2483 dependencies = [ 2484 "proc-macro2", 2485 + "syn 2.0.107", 2486 ] 2487 2488 [[package]] ··· 2567 dependencies = [ 2568 "proc-macro2", 2569 "quote", 2570 + "syn 2.0.107", 2571 "version_check", 2572 "yansi", 2573 ] ··· 3055 dependencies = [ 3056 "proc-macro2", 3057 "quote", 3058 + "syn 2.0.107", 3059 ] 3060 3061 [[package]] ··· 3130 version = "1.3.0" 3131 source = "registry+https://github.com/rust-lang/crates.io-index" 3132 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3133 3134 [[package]] 3135 name = "signature" ··· 3227 "quote", 3228 "serde", 3229 "sha2", 3230 + "syn 2.0.107", 3231 "thiserror 1.0.69", 3232 ] 3233 ··· 3283 3284 [[package]] 3285 name = "syn" 3286 + version = "2.0.107" 3287 source = "registry+https://github.com/rust-lang/crates.io-index" 3288 + checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" 3289 dependencies = [ 3290 "proc-macro2", 3291 "quote", ··· 3320 dependencies = [ 3321 "proc-macro2", 3322 "quote", 3323 + "syn 2.0.107", 3324 ] 3325 3326 [[package]] ··· 3403 dependencies = [ 3404 "proc-macro2", 3405 "quote", 3406 + "syn 2.0.107", 3407 ] 3408 3409 [[package]] ··· 3414 dependencies = [ 3415 "proc-macro2", 3416 "quote", 3417 + "syn 2.0.107", 3418 ] 3419 3420 [[package]] ··· 3493 "bytes", 3494 "libc", 3495 "mio", 3496 "pin-project-lite", 3497 "socket2 0.6.1", 3498 "tokio-macros", 3499 "windows-sys 0.61.2", ··· 3507 dependencies = [ 3508 "proc-macro2", 3509 "quote", 3510 + "syn 2.0.107", 3511 ] 3512 3513 [[package]] ··· 3607 dependencies = [ 3608 "proc-macro2", 3609 "quote", 3610 + "syn 2.0.107", 3611 ] 3612 3613 [[package]] ··· 3627 dependencies = [ 3628 "proc-macro2", 3629 "quote", 3630 + "syn 2.0.107", 3631 ] 3632 3633 [[package]] ··· 3792 "log", 3793 "proc-macro2", 3794 "quote", 3795 + "syn 2.0.107", 3796 "wasm-bindgen-shared", 3797 ] 3798 ··· 3827 dependencies = [ 3828 "proc-macro2", 3829 "quote", 3830 + "syn 2.0.107", 3831 "wasm-bindgen-backend", 3832 "wasm-bindgen-shared", 3833 ] ··· 3936 dependencies = [ 3937 "proc-macro2", 3938 "quote", 3939 + "syn 2.0.107", 3940 ] 3941 3942 [[package]] ··· 3947 dependencies = [ 3948 "proc-macro2", 3949 "quote", 3950 + "syn 2.0.107", 3951 ] 3952 3953 [[package]] ··· 4354 dependencies = [ 4355 "proc-macro2", 4356 "quote", 4357 + "syn 2.0.107", 4358 "synstructure", 4359 ] 4360 ··· 4375 dependencies = [ 4376 "proc-macro2", 4377 "quote", 4378 + "syn 2.0.107", 4379 ] 4380 4381 [[package]] ··· 4395 dependencies = [ 4396 "proc-macro2", 4397 "quote", 4398 + "syn 2.0.107", 4399 "synstructure", 4400 ] 4401 ··· 4438 dependencies = [ 4439 "proc-macro2", 4440 "quote", 4441 + "syn 2.0.107", 4442 ]
+2 -2
upload/Cargo.toml
··· 4 5 [package] 6 name = "atcities-upload" 7 - version = "0.1.0" 8 edition = "2024" 9 10 [dependencies] ··· 13 ignore = "0.4.23" 14 regex = "1.12.2" 15 mime_guess = "2.0.5" 16 - tokio = { version = "1.48.0", features = ["full"] } 17 jacquard = "0.6.0" 18 reqwest = "0.12.24" 19 env_logger = "0.11.8"
··· 4 5 [package] 6 name = "atcities-upload" 7 + version = "1.0.1" 8 edition = "2024" 9 10 [dependencies] ··· 13 ignore = "0.4.23" 14 regex = "1.12.2" 15 mime_guess = "2.0.5" 16 + tokio = { version = "1.48.0", features = [] } 17 jacquard = "0.6.0" 18 reqwest = "0.12.24" 19 env_logger = "0.11.8"
+3 -3
upload/lexicons/Cargo.toml
··· 1 [package] 2 name = "lexicons" 3 - version = "0.1.0" 4 edition = "2024" 5 6 [features] ··· 13 miette = "7.6.0" 14 serde = "1.0.228" 15 thiserror = "2.0.17" 16 - jacquard-common = "0.5.3" 17 - jacquard-derive = "0.5.3"
··· 1 [package] 2 name = "lexicons" 3 + version = "1.0.0" 4 edition = "2024" 5 6 [features] ··· 13 miette = "7.6.0" 14 serde = "1.0.228" 15 thiserror = "2.0.17" 16 + jacquard-common = "0.6.0" 17 + jacquard-derive = "0.6.0"
+16 -2
upload/src/main.rs
··· 179 let mut create_records = new_sitemap 180 .into_iter() 181 .map(|(k, v)| { 182 let rkey = 183 utils::url_to_rkey(k).wrap_err("Invalid file path. Could not be converted to rkey")?; 184 let rkey = RecordKey(Rkey::new_owned(rkey).into_diagnostic()?); ··· 267 ) 268 .await?; 269 270 - println!("Site is now updated. Live at {}", utils::site_handle(config.user)); 271 } else { 272 let oauth = oauth::client::OAuthClient::with_memory_store(); 273 let session = oauth ··· 303 ) 304 .await?; 305 306 - println!("Site is now updated. Live at {}", utils::site_handle(config.user)); 307 }; 308 309 Ok(())
··· 179 let mut create_records = new_sitemap 180 .into_iter() 181 .map(|(k, v)| { 182 + let k = match k.as_str() { 183 + "404.html" => String::from("404"), 184 + "index.html" => String::from("/"), 185 + _ => match k.strip_suffix("/index.html") { 186 + Some(k) => format!("/{k}/"), 187 + None => format!("/{k}"), 188 + } 189 + }; 190 let rkey = 191 utils::url_to_rkey(k).wrap_err("Invalid file path. Could not be converted to rkey")?; 192 let rkey = RecordKey(Rkey::new_owned(rkey).into_diagnostic()?); ··· 275 ) 276 .await?; 277 278 + println!( 279 + "Site is now updated. Live at {}", 280 + utils::site_handle(config.user) 281 + ); 282 } else { 283 let oauth = oauth::client::OAuthClient::with_memory_store(); 284 let session = oauth ··· 314 ) 315 .await?; 316 317 + println!( 318 + "Site is now updated. Live at {}", 319 + utils::site_handle(config.user) 320 + ); 321 }; 322 323 Ok(())
+4 -2
upload/src/utils.rs
··· 70 let method = user[1]; 71 let did = user[2]; 72 format!("https://{did}.did-{method}.atcities.dev/") 73 - } else { format!("https://{user}.atcities.dev/") } 74 - }
··· 70 let method = user[1]; 71 let did = user[2]; 72 format!("https://{did}.did-{method}.atcities.dev/") 73 + } else { 74 + format!("https://{user}.atcities.dev/") 75 + } 76 + }