+32
-5
README.md
+32
-5
README.md
···
2
2
3
3
A (somewhat barebones) atproto app for creating custom sites without hosting!
4
4
5
+
> [!CAUTION]
6
+
> This software is super duper alpha and not tested thoroughly! Use at your own risk!
7
+
5
8
- Lexicons are located at [`./lexicons`](./lexicons/)
6
9
- Server backend is located at [`./server`](./server/)
7
10
- Upload CLI is located at [`./upload`](./upload/)
8
11
- Web GUI **will be** located at [`./web-gui`](./web-gui/)
9
12
- Fuse tool **will be** located at [`./fuse`](./fuse/)
10
13
11
-
TODO:
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:
12
39
13
40
- [x] Resolve `handle.host` and `did.did-method.host` domains to records/blobs
14
41
- [x] Backfill network
···
16
43
- [x] Store blobs for CDN (max ~0.25gb per user)
17
44
- [x] Moderate illegal content or hope that people are niceys
18
45
(Hope that people are niceys)
19
-
- [ ] Finish CLI tool
20
-
- [ ] Sign in via app password
21
-
- [ ] Clear old site
22
-
- [ ] Upload new site
46
+
- [x] Finish CLI tool
47
+
- [x] Sign in via app password
48
+
- [x] Clear old site
49
+
- [x] Upload new site
23
50
- [ ] Fuse uploader
24
51
- [ ] Web GUI uploader
+1
server/deno.json
+1
server/deno.json
···
1
1
{
2
2
"tasks": {
3
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",
4
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",
5
6
"dk": "deno run -A --node-modules-dir npm:drizzle-kit"
6
7
},
+132
-66
upload/Cargo.lock
+132
-66
upload/Cargo.lock
···
158
158
dependencies = [
159
159
"proc-macro2",
160
160
"quote",
161
-
"syn 2.0.106",
161
+
"syn 2.0.107",
162
162
]
163
163
164
164
[[package]]
165
165
name = "atcities-upload"
166
-
version = "0.1.0"
166
+
version = "1.0.1"
167
167
dependencies = [
168
168
"clap",
169
169
"env_logger",
···
291
291
"proc-macro2",
292
292
"quote",
293
293
"rustversion",
294
-
"syn 2.0.106",
294
+
"syn 2.0.107",
295
295
]
296
296
297
297
[[package]]
···
526
526
"heck 0.5.0",
527
527
"proc-macro2",
528
528
"quote",
529
-
"syn 2.0.106",
529
+
"syn 2.0.107",
530
530
]
531
531
532
532
[[package]]
···
697
697
"proc-macro2",
698
698
"quote",
699
699
"strsim",
700
-
"syn 2.0.106",
700
+
"syn 2.0.107",
701
701
]
702
702
703
703
[[package]]
···
708
708
dependencies = [
709
709
"darling_core",
710
710
"quote",
711
-
"syn 2.0.106",
711
+
"syn 2.0.107",
712
712
]
713
713
714
714
[[package]]
···
748
748
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
749
749
dependencies = [
750
750
"data-encoding",
751
-
"syn 2.0.106",
751
+
"syn 2.0.107",
752
752
]
753
753
754
754
[[package]]
···
801
801
dependencies = [
802
802
"proc-macro2",
803
803
"quote",
804
-
"syn 2.0.106",
804
+
"syn 2.0.107",
805
805
]
806
806
807
807
[[package]]
···
856
856
"heck 0.5.0",
857
857
"proc-macro2",
858
858
"quote",
859
-
"syn 2.0.106",
859
+
"syn 2.0.107",
860
860
]
861
861
862
862
[[package]]
···
1001
1001
dependencies = [
1002
1002
"proc-macro2",
1003
1003
"quote",
1004
-
"syn 2.0.106",
1004
+
"syn 2.0.107",
1005
1005
]
1006
1006
1007
1007
[[package]]
···
1034
1034
]
1035
1035
1036
1036
[[package]]
1037
+
name = "genawaiter"
1038
+
version = "0.99.1"
1039
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1040
+
checksum = "c86bd0361bcbde39b13475e6e36cb24c329964aa2611be285289d1e4b751c1a0"
1041
+
dependencies = [
1042
+
"futures-core",
1043
+
"genawaiter-macro",
1044
+
"genawaiter-proc-macro",
1045
+
"proc-macro-hack",
1046
+
]
1047
+
1048
+
[[package]]
1049
+
name = "genawaiter-macro"
1050
+
version = "0.99.1"
1051
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1052
+
checksum = "0b32dfe1fdfc0bbde1f22a5da25355514b5e450c33a6af6770884c8750aedfbc"
1053
+
1054
+
[[package]]
1055
+
name = "genawaiter-proc-macro"
1056
+
version = "0.99.1"
1057
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1058
+
checksum = "784f84eebc366e15251c4a8c3acee82a6a6f427949776ecb88377362a9621738"
1059
+
dependencies = [
1060
+
"proc-macro-error 0.4.12",
1061
+
"proc-macro-hack",
1062
+
"proc-macro2",
1063
+
"quote",
1064
+
"syn 1.0.109",
1065
+
]
1066
+
1067
+
[[package]]
1037
1068
name = "generic-array"
1038
1069
version = "0.14.9"
1039
1070
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1521
1552
1522
1553
[[package]]
1523
1554
name = "indexmap"
1524
-
version = "2.11.4"
1555
+
version = "2.12.0"
1525
1556
source = "registry+https://github.com/rust-lang/crates.io-index"
1526
-
checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
1557
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
1527
1558
dependencies = [
1528
1559
"equivalent",
1529
1560
"hashbrown 0.16.0",
···
1594
1625
1595
1626
[[package]]
1596
1627
name = "jacquard"
1597
-
version = "0.5.4"
1628
+
version = "0.6.0"
1598
1629
source = "registry+https://github.com/rust-lang/crates.io-index"
1599
-
checksum = "c9f7e9e2fb15b8e526c8f44ba197ba8b4174858d05522f088d1ff8de0ce02836"
1630
+
checksum = "5857f000e67605995ba7c24c9833f840adf5c063a731a6f72f69e0e3c986791c"
1600
1631
dependencies = [
1601
1632
"bon",
1602
1633
"bytes",
···
1626
1657
1627
1658
[[package]]
1628
1659
name = "jacquard-api"
1629
-
version = "0.5.5"
1660
+
version = "0.6.0"
1630
1661
source = "registry+https://github.com/rust-lang/crates.io-index"
1631
-
checksum = "eef8307959cc031759816d8e44a3c4db5dd184eedec07431579877a8c4741b80"
1662
+
checksum = "58132b60473124a34c64c267a1c3390c2e4a4dfd62c801639903c4aefd05f52d"
1632
1663
dependencies = [
1633
1664
"bon",
1634
1665
"bytes",
···
1636
1667
"jacquard-derive",
1637
1668
"miette",
1638
1669
"serde",
1670
+
"serde_ipld_dagcbor",
1639
1671
"thiserror 2.0.17",
1640
1672
]
1641
1673
1642
1674
[[package]]
1643
1675
name = "jacquard-common"
1644
-
version = "0.5.4"
1676
+
version = "0.6.0"
1645
1677
source = "registry+https://github.com/rust-lang/crates.io-index"
1646
-
checksum = "cf91dfa4ade1ca83c9afccee4ece7ed72b6607a0853d88623958d4e7c5382eb3"
1678
+
checksum = "f7f1bab0279ae2e29c3383f132a05b9c708585fab62e94292affdf352ce13242"
1647
1679
dependencies = [
1648
1680
"base64 0.22.1",
1649
1681
"bon",
1650
1682
"bytes",
1651
1683
"chrono",
1652
1684
"cid",
1685
+
"genawaiter",
1653
1686
"getrandom 0.3.4",
1654
1687
"http",
1655
1688
"ipld-core",
···
1671
1704
"smol_str",
1672
1705
"thiserror 2.0.17",
1673
1706
"tokio",
1707
+
"tokio-util",
1674
1708
"trait-variant",
1675
1709
"url",
1676
1710
]
1677
1711
1678
1712
[[package]]
1679
1713
name = "jacquard-derive"
1680
-
version = "0.5.4"
1714
+
version = "0.6.0"
1681
1715
source = "registry+https://github.com/rust-lang/crates.io-index"
1682
-
checksum = "4f7db8498da87d842297b169a0080eed751bce173c56626b5fa71261fe72f804"
1716
+
checksum = "a4741844c0638498156338e6230a81ecb54d0a061ffc6f4f54e97b94972a01fb"
1683
1717
dependencies = [
1684
1718
"proc-macro2",
1685
1719
"quote",
1686
-
"syn 2.0.106",
1720
+
"syn 2.0.107",
1687
1721
]
1688
1722
1689
1723
[[package]]
1690
1724
name = "jacquard-identity"
1691
-
version = "0.5.3"
1725
+
version = "0.6.0"
1692
1726
source = "registry+https://github.com/rust-lang/crates.io-index"
1693
-
checksum = "afafcd8fcc26095789aeefe4f54cda4471f1748ba11fa7886184f515362b6339"
1727
+
checksum = "65ae022725ddc09ce03c1a02a97b895279e1d46957c0574a032fa78b81273263"
1694
1728
dependencies = [
1695
1729
"bon",
1696
1730
"bytes",
···
1713
1747
1714
1748
[[package]]
1715
1749
name = "jacquard-oauth"
1716
-
version = "0.5.4"
1750
+
version = "0.6.0"
1717
1751
source = "registry+https://github.com/rust-lang/crates.io-index"
1718
-
checksum = "0c583fb0f634654b51d390809f4dc5b08087d34c155b33d89b36475f6e6b1428"
1752
+
checksum = "8c37269e2ea0c6c3418bf61fb3d342aab87b1bda706ebae49e454f8e50580cab"
1719
1753
dependencies = [
1720
1754
"base64 0.22.1",
1721
1755
"bytes",
···
1767
1801
dependencies = [
1768
1802
"proc-macro2",
1769
1803
"quote",
1770
-
"syn 2.0.106",
1804
+
"syn 2.0.107",
1771
1805
]
1772
1806
1773
1807
[[package]]
···
1872
1906
1873
1907
[[package]]
1874
1908
name = "lexicons"
1875
-
version = "0.1.0"
1909
+
version = "1.0.0"
1876
1910
dependencies = [
1877
1911
"bon",
1878
1912
"bytes",
···
2007
2041
dependencies = [
2008
2042
"proc-macro2",
2009
2043
"quote",
2010
-
"syn 2.0.106",
2044
+
"syn 2.0.107",
2011
2045
]
2012
2046
2013
2047
[[package]]
···
2044
2078
2045
2079
[[package]]
2046
2080
name = "mio"
2047
-
version = "1.0.4"
2081
+
version = "1.1.0"
2048
2082
source = "registry+https://github.com/rust-lang/crates.io-index"
2049
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
2083
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
2050
2084
dependencies = [
2051
2085
"libc",
2052
2086
"wasi",
2053
-
"windows-sys 0.59.0",
2087
+
"windows-sys 0.61.2",
2054
2088
]
2055
2089
2056
2090
[[package]]
···
2252
2286
dependencies = [
2253
2287
"proc-macro2",
2254
2288
"quote",
2255
-
"syn 2.0.106",
2289
+
"syn 2.0.107",
2256
2290
]
2257
2291
2258
2292
[[package]]
···
2294
2328
"proc-macro2",
2295
2329
"proc-macro2-diagnostics",
2296
2330
"quote",
2297
-
"syn 2.0.106",
2331
+
"syn 2.0.107",
2298
2332
]
2299
2333
2300
2334
[[package]]
···
2448
2482
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
2449
2483
dependencies = [
2450
2484
"proc-macro2",
2451
-
"syn 2.0.106",
2485
+
"syn 2.0.107",
2452
2486
]
2453
2487
2454
2488
[[package]]
···
2462
2496
2463
2497
[[package]]
2464
2498
name = "proc-macro-error"
2499
+
version = "0.4.12"
2500
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2501
+
checksum = "18f33027081eba0a6d8aba6d1b1c3a3be58cbb12106341c2d5759fcd9b5277e7"
2502
+
dependencies = [
2503
+
"proc-macro-error-attr 0.4.12",
2504
+
"proc-macro2",
2505
+
"quote",
2506
+
"syn 1.0.109",
2507
+
"version_check",
2508
+
]
2509
+
2510
+
[[package]]
2511
+
name = "proc-macro-error"
2465
2512
version = "1.0.4"
2466
2513
source = "registry+https://github.com/rust-lang/crates.io-index"
2467
2514
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
2468
2515
dependencies = [
2469
-
"proc-macro-error-attr",
2516
+
"proc-macro-error-attr 1.0.4",
2470
2517
"proc-macro2",
2471
2518
"quote",
2472
2519
"syn 1.0.109",
···
2475
2522
2476
2523
[[package]]
2477
2524
name = "proc-macro-error-attr"
2525
+
version = "0.4.12"
2526
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2527
+
checksum = "8a5b4b77fdb63c1eca72173d68d24501c54ab1269409f6b672c85deb18af69de"
2528
+
dependencies = [
2529
+
"proc-macro2",
2530
+
"quote",
2531
+
"syn 1.0.109",
2532
+
"syn-mid",
2533
+
"version_check",
2534
+
]
2535
+
2536
+
[[package]]
2537
+
name = "proc-macro-error-attr"
2478
2538
version = "1.0.4"
2479
2539
source = "registry+https://github.com/rust-lang/crates.io-index"
2480
2540
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
···
2483
2543
"quote",
2484
2544
"version_check",
2485
2545
]
2546
+
2547
+
[[package]]
2548
+
name = "proc-macro-hack"
2549
+
version = "0.5.20+deprecated"
2550
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2551
+
checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2486
2552
2487
2553
[[package]]
2488
2554
name = "proc-macro2"
···
2501
2567
dependencies = [
2502
2568
"proc-macro2",
2503
2569
"quote",
2504
-
"syn 2.0.106",
2570
+
"syn 2.0.107",
2505
2571
"version_check",
2506
2572
"yansi",
2507
2573
]
···
2989
3055
dependencies = [
2990
3056
"proc-macro2",
2991
3057
"quote",
2992
-
"syn 2.0.106",
3058
+
"syn 2.0.107",
2993
3059
]
2994
3060
2995
3061
[[package]]
···
3064
3130
version = "1.3.0"
3065
3131
source = "registry+https://github.com/rust-lang/crates.io-index"
3066
3132
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
3067
-
3068
-
[[package]]
3069
-
name = "signal-hook-registry"
3070
-
version = "1.4.6"
3071
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3072
-
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
3073
-
dependencies = [
3074
-
"libc",
3075
-
]
3076
3133
3077
3134
[[package]]
3078
3135
name = "signature"
···
3165
3222
"ciborium",
3166
3223
"hex_fmt",
3167
3224
"indoc",
3168
-
"proc-macro-error",
3225
+
"proc-macro-error 1.0.4",
3169
3226
"proc-macro2",
3170
3227
"quote",
3171
3228
"serde",
3172
3229
"sha2",
3173
-
"syn 2.0.106",
3230
+
"syn 2.0.107",
3174
3231
"thiserror 1.0.69",
3175
3232
]
3176
3233
···
3226
3283
3227
3284
[[package]]
3228
3285
name = "syn"
3229
-
version = "2.0.106"
3286
+
version = "2.0.107"
3230
3287
source = "registry+https://github.com/rust-lang/crates.io-index"
3231
-
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
3288
+
checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b"
3232
3289
dependencies = [
3233
3290
"proc-macro2",
3234
3291
"quote",
···
3236
3293
]
3237
3294
3238
3295
[[package]]
3296
+
name = "syn-mid"
3297
+
version = "0.5.4"
3298
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3299
+
checksum = "fea305d57546cc8cd04feb14b62ec84bf17f50e3f7b12560d7bfa9265f39d9ed"
3300
+
dependencies = [
3301
+
"proc-macro2",
3302
+
"quote",
3303
+
"syn 1.0.109",
3304
+
]
3305
+
3306
+
[[package]]
3239
3307
name = "sync_wrapper"
3240
3308
version = "1.0.2"
3241
3309
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3252
3320
dependencies = [
3253
3321
"proc-macro2",
3254
3322
"quote",
3255
-
"syn 2.0.106",
3323
+
"syn 2.0.107",
3256
3324
]
3257
3325
3258
3326
[[package]]
···
3335
3403
dependencies = [
3336
3404
"proc-macro2",
3337
3405
"quote",
3338
-
"syn 2.0.106",
3406
+
"syn 2.0.107",
3339
3407
]
3340
3408
3341
3409
[[package]]
···
3346
3414
dependencies = [
3347
3415
"proc-macro2",
3348
3416
"quote",
3349
-
"syn 2.0.106",
3417
+
"syn 2.0.107",
3350
3418
]
3351
3419
3352
3420
[[package]]
···
3425
3493
"bytes",
3426
3494
"libc",
3427
3495
"mio",
3428
-
"parking_lot",
3429
3496
"pin-project-lite",
3430
-
"signal-hook-registry",
3431
3497
"socket2 0.6.1",
3432
3498
"tokio-macros",
3433
3499
"windows-sys 0.61.2",
···
3441
3507
dependencies = [
3442
3508
"proc-macro2",
3443
3509
"quote",
3444
-
"syn 2.0.106",
3510
+
"syn 2.0.107",
3445
3511
]
3446
3512
3447
3513
[[package]]
···
3541
3607
dependencies = [
3542
3608
"proc-macro2",
3543
3609
"quote",
3544
-
"syn 2.0.106",
3610
+
"syn 2.0.107",
3545
3611
]
3546
3612
3547
3613
[[package]]
···
3561
3627
dependencies = [
3562
3628
"proc-macro2",
3563
3629
"quote",
3564
-
"syn 2.0.106",
3630
+
"syn 2.0.107",
3565
3631
]
3566
3632
3567
3633
[[package]]
···
3726
3792
"log",
3727
3793
"proc-macro2",
3728
3794
"quote",
3729
-
"syn 2.0.106",
3795
+
"syn 2.0.107",
3730
3796
"wasm-bindgen-shared",
3731
3797
]
3732
3798
···
3761
3827
dependencies = [
3762
3828
"proc-macro2",
3763
3829
"quote",
3764
-
"syn 2.0.106",
3830
+
"syn 2.0.107",
3765
3831
"wasm-bindgen-backend",
3766
3832
"wasm-bindgen-shared",
3767
3833
]
···
3870
3936
dependencies = [
3871
3937
"proc-macro2",
3872
3938
"quote",
3873
-
"syn 2.0.106",
3939
+
"syn 2.0.107",
3874
3940
]
3875
3941
3876
3942
[[package]]
···
3881
3947
dependencies = [
3882
3948
"proc-macro2",
3883
3949
"quote",
3884
-
"syn 2.0.106",
3950
+
"syn 2.0.107",
3885
3951
]
3886
3952
3887
3953
[[package]]
···
4288
4354
dependencies = [
4289
4355
"proc-macro2",
4290
4356
"quote",
4291
-
"syn 2.0.106",
4357
+
"syn 2.0.107",
4292
4358
"synstructure",
4293
4359
]
4294
4360
···
4309
4375
dependencies = [
4310
4376
"proc-macro2",
4311
4377
"quote",
4312
-
"syn 2.0.106",
4378
+
"syn 2.0.107",
4313
4379
]
4314
4380
4315
4381
[[package]]
···
4329
4395
dependencies = [
4330
4396
"proc-macro2",
4331
4397
"quote",
4332
-
"syn 2.0.106",
4398
+
"syn 2.0.107",
4333
4399
"synstructure",
4334
4400
]
4335
4401
···
4372
4438
dependencies = [
4373
4439
"proc-macro2",
4374
4440
"quote",
4375
-
"syn 2.0.106",
4441
+
"syn 2.0.107",
4376
4442
]
+3
-3
upload/Cargo.toml
+3
-3
upload/Cargo.toml
···
4
4
5
5
[package]
6
6
name = "atcities-upload"
7
-
version = "0.1.0"
7
+
version = "1.0.1"
8
8
edition = "2024"
9
9
10
10
[dependencies]
···
13
13
ignore = "0.4.23"
14
14
regex = "1.12.2"
15
15
mime_guess = "2.0.5"
16
-
tokio = { version = "1.48.0", features = ["full"] }
17
-
jacquard = "0.5.4"
16
+
tokio = { version = "1.48.0", features = [] }
17
+
jacquard = "0.6.0"
18
18
reqwest = "0.12.24"
19
19
env_logger = "0.11.8"
20
20
miette = { version = "7.6.0", features = ["derive", "fancy"] }
+3
-3
upload/lexicons/Cargo.toml
+3
-3
upload/lexicons/Cargo.toml
···
1
1
[package]
2
2
name = "lexicons"
3
-
version = "0.1.0"
3
+
version = "1.0.0"
4
4
edition = "2024"
5
5
6
6
[features]
···
13
13
miette = "7.6.0"
14
14
serde = "1.0.228"
15
15
thiserror = "2.0.17"
16
-
jacquard-common = "0.5.3"
17
-
jacquard-derive = "0.5.3"
16
+
jacquard-common = "0.6.0"
17
+
jacquard-derive = "0.6.0"
+21
-2
upload/src/main.rs
+21
-2
upload/src/main.rs
···
18
18
xrpc::XrpcExt,
19
19
};
20
20
use miette::{Context, IntoDiagnostic, Result};
21
+
use std::io::Write;
21
22
use std::{collections::HashMap, fs, path::PathBuf};
22
23
23
24
use crate::sitemap::{BlobRef, Sitemap, SitemapNode};
···
123
124
// upload local site blobs
124
125
let mut new_sitemap: Sitemap = HashMap::new();
125
126
for (k, v) in local_sitemap {
127
+
print!("Uploading {k}... ");
128
+
let _ = std::io::stdout().flush();
126
129
let blob = match v.blob {
127
130
BlobRef::Local(path) => path,
128
131
BlobRef::Remote(_) => {
···
143
146
blob: BlobRef::Remote(res.blob.into()),
144
147
},
145
148
);
149
+
150
+
println!("Done!");
146
151
}
147
152
148
153
Ok(new_sitemap)
···
174
179
let mut create_records = new_sitemap
175
180
.into_iter()
176
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
+
};
177
190
let rkey =
178
191
utils::url_to_rkey(k).wrap_err("Invalid file path. Could not be converted to rkey")?;
179
192
let rkey = RecordKey(Rkey::new_owned(rkey).into_diagnostic()?);
···
262
275
)
263
276
.await?;
264
277
265
-
println!("Site is now updated. Live at {}", utils::site_handle(config.user));
278
+
println!(
279
+
"Site is now updated. Live at {}",
280
+
utils::site_handle(config.user)
281
+
);
266
282
} else {
267
283
let oauth = oauth::client::OAuthClient::with_memory_store();
268
284
let session = oauth
···
298
314
)
299
315
.await?;
300
316
301
-
println!("Site is now updated. Live at {}", utils::site_handle(config.user));
317
+
println!(
318
+
"Site is now updated. Live at {}",
319
+
utils::site_handle(config.user)
320
+
);
302
321
};
303
322
304
323
Ok(())