diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d13668bfa..75015d8f5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -See [here](https://join-lemmy.org/docs/en/contributing/contributing.html) for contributing Instructions. +See [here](https://join-lemmy.org/docs/en/contributors/01-overview.html) for contributing Instructions. diff --git a/Cargo.lock b/Cargo.lock index 2bbc25175..4bac2e012 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,17 +14,16 @@ dependencies = [ [[package]] name = "activitypub_federation" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b52228e706f380074b0722dae97f9c8274264026dbd3aa16d20466758995b6f4" +checksum = "f85cab86a72489b908adfeec61a4f104124b01784b9a5bb721c988727c363dad" dependencies = [ "activitystreams-kinds", - "actix-rt", "actix-web", "anyhow", "async-trait", "background-jobs", - "base64", + "base64 0.21.2", "bytes", "chrono", "derive_builder 0.12.0", @@ -33,7 +32,7 @@ dependencies = [ "enum_delegate", "futures-core", "http", - "http-signature-normalization", + "http-signature-normalization 0.7.0", "http-signature-normalization-reqwest", "httpdate", "itertools", @@ -53,9 +52,9 @@ dependencies = [ [[package]] name = "activitystreams-kinds" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d014a4fb8828870b7b46bee6257b9a89d06188ae8d435381ba94f14c8c697d8" +checksum = "e97dfe76efd8c0b113cc3580a6b5f4acba47662e3cfbbfcce081c9ac89798990" dependencies = [ "serde", "url", @@ -111,17 +110,17 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c83abf9903e1f0ad9973cc4f7b9767fd5a03a583f51a5b7a339e07987cd2724" +checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74" dependencies = [ "actix-codec", "actix-rt", "actix-service", "actix-tls", "actix-utils", - "ahash", - "base64", + "ahash 0.8.3", + "base64 0.21.2", "bitflags 1.3.2", "bytes", "bytestring", @@ -141,6 +140,8 @@ dependencies = [ "rand 0.8.5", "sha1", "smallvec", + "tokio", + "tokio-util 0.7.4", "tracing", ] @@ -256,9 +257,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.2.1" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d48f7b6534e06c7bfc72ee91db7917d4af6afe23e7d223b51e68fffbb21e96b9" +checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96" dependencies = [ "actix-codec", "actix-http", @@ -270,7 +271,7 @@ dependencies = [ "actix-tls", "actix-utils", "actix-web-codegen", - "ahash", + "ahash 0.7.6", "bytes", "bytestring", "cfg-if", @@ -298,9 +299,9 @@ dependencies = [ [[package]] name = "actix-web-codegen" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa9362663c8643d67b2d5eafba49e4cb2c8a053a29ed00a0bea121f17c76b13" +checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9" dependencies = [ "actix-router", "proc-macro2", @@ -335,14 +336,32 @@ dependencies = [ ] [[package]] -name = "aho-corasick" -version = "0.7.19" +name = "ahash" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.8", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -354,9 +373,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "arrayvec" @@ -460,8 +479,8 @@ dependencies = [ "actix-service", "actix-tls", "actix-utils", - "ahash", - "base64", + "ahash 0.7.6", + "base64 0.13.1", "bytes", "cfg-if", "derive_more", @@ -604,13 +623,19 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" + [[package]] name = "bcrypt" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7e7c93a3fb23b2fdde989b2c9ec4dd153063ec81f408507f84c090cd91c6641" dependencies = [ - "base64", + "base64 0.13.1", "blowfish", "getrandom 0.2.8", "zeroize", @@ -722,7 +747,7 @@ version = "0.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db21780337b425f968a2c3efa842eeaa4fe53d2bcb1eb27d2877460a862fb0ab" dependencies = [ - "base64", + "base64 0.13.1", "hound", "image", "lodepng", @@ -750,13 +775,13 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "serde", "time 0.1.44", @@ -1490,13 +1515,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.103", + "syn 2.0.18", ] [[package]] @@ -1507,9 +1532,9 @@ checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] name = "doku" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "966b1227ac4d9d77f4d7e9507dd01c56ceaec6e35888661b54319123da47b159" +checksum = "d018fadaf95088d2c12b66fe5b9d7c04a027b996c42a7b403b83fbd7a1c31531" dependencies = [ "doku-derive", "serde", @@ -1519,9 +1544,9 @@ dependencies = [ [[package]] name = "doku-derive" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252ec56116f931b050b5d80512c2c76f4807a297dd95a93f37593dd7650868a5" +checksum = "74073dd10495ce912909655131925b0459d49363751b93676148d843097fe825" dependencies = [ "darling 0.13.4", "proc-macro2", @@ -1573,9 +1598,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "either" @@ -1589,7 +1614,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34dd14c63662e0206599796cd5e1ad0268ab2b9d19b868d6050d688eba2bbf98" dependencies = [ - "base64", + "base64 0.13.1", "memchr", ] @@ -1834,9 +1859,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -1906,9 +1931,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" @@ -2046,7 +2071,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] @@ -2055,7 +2080,7 @@ version = "7.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" dependencies = [ - "base64", + "base64 0.13.1", "byteorder", "flate2", "nom 7.1.1", @@ -2184,9 +2209,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -2219,6 +2244,15 @@ dependencies = [ "httpdate", ] +[[package]] +name = "http-signature-normalization" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95e3149194de5f3f9d5225bcc6a8677979f8ff8ce39c85654730ad4824f101e" +dependencies = [ + "httpdate", +] + [[package]] name = "http-signature-normalization-actix" version = "0.6.1" @@ -2228,9 +2262,9 @@ dependencies = [ "actix-http", "actix-rt", "actix-web", - "base64", + "base64 0.13.1", "futures-util", - "http-signature-normalization", + "http-signature-normalization 0.6.0", "sha2", "thiserror", "tokio", @@ -2241,12 +2275,12 @@ dependencies = [ [[package]] name = "http-signature-normalization-reqwest" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e309145e63e70307ab1f521fb6e354158f0255e572da21c9fd56940c5bd5d854" +checksum = "3c382c69a07b21accae86298d520579403af6479b1cd1c389e3ee11f01d48627" dependencies = [ - "base64", - "http-signature-normalization", + "base64 0.13.1", + "http-signature-normalization 0.7.0", "httpdate", "reqwest", "reqwest-middleware", @@ -2365,9 +2399,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2524,7 +2558,7 @@ version = "8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aa4b4af834c6cfd35d8763d359661b90f2e45d8f750a0849156c7f4671af09c" dependencies = [ - "base64", + "base64 0.13.1", "pem", "ring", "serde", @@ -2551,7 +2585,7 @@ dependencies = [ "actix-web", "anyhow", "async-trait", - "base64", + "base64 0.13.1", "bcrypt", "captcha", "lemmy_api_common", @@ -2836,7 +2870,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eabca5e0b4d0e98e7f2243fb5b7520b6af2b65d8f87bcc86f2c75185a6ff243" dependencies = [ - "base64", + "base64 0.13.1", "email-encoding", "email_address", "fastrand", @@ -3336,15 +3370,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" -version = "0.10.42" +version = "0.10.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" +checksum = "69b3f656a17a6cbc115b5c7a40c616947d213ba182135b014d6051b73ab6f019" dependencies = [ "bitflags 1.3.2", "cfg-if", @@ -3374,11 +3408,10 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.76" +version = "0.9.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" +checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", @@ -3615,14 +3648,14 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" dependencies = [ - "base64", + "base64 0.13.1", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" @@ -3785,7 +3818,7 @@ dependencies = [ "anyhow", "async-trait", "awc", - "base64", + "base64 0.13.1", "clap", "color-eyre", "config", @@ -3893,7 +3926,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "878c6cbf956e03af9aa8204b407b9cbf47c072164800aa918c516cd4b056c50c" dependencies = [ - "base64", + "base64 0.13.1", "byteorder", "bytes", "fallible-iterator", @@ -4242,13 +4275,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.7.2", ] [[package]] @@ -4257,7 +4290,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.27", ] [[package]] @@ -4266,6 +4299,12 @@ version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +[[package]] +name = "regex-syntax" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -4277,11 +4316,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.12" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64", + "base64 0.21.2", "bytes", "encoding_rs", "futures-core", @@ -4310,15 +4349,16 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "winreg", ] [[package]] name = "reqwest-middleware" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1c03e9011a8c59716ad13115550469e081e2e9892656b0ba6a47c907921894" +checksum = "4531c89d50effe1fac90d095c8b133c20c5c714204feee0bfc3fd158e784209d" dependencies = [ "anyhow", "async-trait", @@ -4380,7 +4420,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ - "base64", + "base64 0.13.1", "bitflags 1.3.2", "serde", ] @@ -4486,7 +4526,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13332fd1e9538328a80183b9c0bde0cd7065ad2c4405f56b855a51a0a37fffd4" dependencies = [ - "base64", + "base64 0.13.1", "hmac", "md-5", "percent-encoding", @@ -4604,9 +4644,9 @@ checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ "serde_derive", ] @@ -4623,20 +4663,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn 1.0.103", + "syn 2.0.18", ] [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "indexmap", "itoa", @@ -4953,7 +4993,7 @@ version = "0.29.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebd844dfbd9969a9ef8430e954661de43edde353d65e987f935a328619698883" dependencies = [ - "ahash", + "ahash 0.7.6", "ast_node", "better_scoped_tls", "cfg-if", @@ -5104,11 +5144,11 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "task-local-extensions" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4167afbec18ae012de40f8cf1b9bf48420abb390678c34821caa07d924941cc4" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" dependencies = [ - "tokio", + "pin-utils", ] [[package]] @@ -5156,22 +5196,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.103", + "syn 2.0.18", ] [[package]] @@ -5417,7 +5457,7 @@ checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" dependencies = [ "async-stream", "async-trait", - "base64", + "base64 0.13.1", "bytes", "futures-core", "futures-util", @@ -5449,7 +5489,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64", + "base64 0.13.1", "bytes", "futures-core", "futures-util", @@ -5847,9 +5887,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-id" @@ -5907,12 +5947,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.4.0", "percent-encoding", "serde", ] @@ -6068,6 +6108,19 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +[[package]] +name = "wasm-streams" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.60" diff --git a/Cargo.toml b/Cargo.toml index ebb1f62b7..9da7881b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,7 +60,7 @@ lemmy_routes = { version = "=0.17.1", path = "./crates/routes" } lemmy_db_views = { version = "=0.17.1", path = "./crates/db_views" } lemmy_db_views_actor = { version = "=0.17.1", path = "./crates/db_views_actor" } lemmy_db_views_moderator = { version = "=0.17.1", path = "./crates/db_views_moderator" } -activitypub_federation = { version = "0.4.0", default-features = false, features = ["actix-web"] } +activitypub_federation = { version = "0.4.1", default-features = false, features = ["actix-web"] } diesel = "2.1.0" diesel_migrations = "2.1.0" diesel-async = "0.3.0" @@ -78,7 +78,7 @@ reqwest = { version = "0.11.12", features = ["json", "blocking"] } reqwest-middleware = "0.2.0" reqwest-tracing = "0.4.0" clokwerk = "0.3.5" -doku = { version = "0.20.0", features = ["url-2"] } +doku = { version = "0.21.1", features = ["url-2"] } bcrypt = "0.13.0" chrono = { version = "0.4.22", features = ["serde"], default-features = false } serde_json = { version = "1.0.87", features = ["preserve_order"] } diff --git a/README.md b/README.md index eccb12480..9f2407933 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,7 @@ Each Lemmy server can set its own moderation policy; appointing site-wide admins - [lemmy-rust-client](https://github.com/LemmyNet/lemmy/tree/main/crates/api_common) - [go-lemmy](https://gitea.arsenm.dev/Arsen6331/go-lemmy) - [Dart API client](https://github.com/LemmurOrg/lemmy_api_client) +- [Lemmy-Swift-Client](https://github.com/rrainn/Lemmy-Swift-Client) - [Reddit -> Lemmy Importer](https://github.com/rileynull/RedditLemmyImporter) - [lemmy-bot - Typescript library to make it easier to make bots for Lemmy](https://github.com/SleeplessOne1917/lemmy-bot) diff --git a/config/defaults.hjson b/config/defaults.hjson index a686cdfed..4c38ddd45 100644 --- a/config/defaults.hjson +++ b/config/defaults.hjson @@ -1,39 +1,38 @@ { # settings related to the postgresql database database: { + # Configure the database by specifying a URI + # + # This is the preferred method to specify database connection details since + # it is the most flexible. + # Connection URI pointing to a postgres instance + # + # This example uses peer authentication to obviate the need for creating, + # configuring, and managing passwords. + # + # For an explanation of how to use connection URIs, see [here][0] in + # PostgreSQL's documentation. + # + # [0]: https://www.postgresql.org/docs/current/libpq-connect.html#id-1.7.3.8.3.6 + uri: "postgresql:///lemmy?user=lemmy&host=/var/run/postgresql" - # Configure the database by specifying a URI - # - # This is the preferred method to specify database connection details since - # it is the most flexible. - # Connection URI pointing to a postgres instance - # - # This example uses peer authentication to obviate the need for creating, - # configuring, and managing passwords. - # - # For an explanation of how to use connection URIs, see [here][0] in - # PostgreSQL's documentation. - # - # [0]: https://www.postgresql.org/docs/current/libpq-connect.html#id-1.7.3.8.3.6 - uri: "postgresql:///lemmy?user=lemmy&host=/var/run/postgresql" - // or - # Configure the database by specifying parts of a URI - # - # Note that specifying the `uri` field should be preferred since it provides - # greater control over how the connection is made. This merely exists for - # backwards-compatibility. - { - # Username to connect to postgres - user: "string" - # Password to connect to postgres - password: "string" - # Host where postgres is running - host: "string" - # Port where postgres can be accessed - port: 123 - # Name of the postgres database for lemmy - database: "string" - } + # or + + # Configure the database by specifying parts of a URI + # + # Note that specifying the `uri` field should be preferred since it provides + # greater control over how the connection is made. This merely exists for + # backwards-compatibility. + # Username to connect to postgres + user: "string" + # Password to connect to postgres + password: "string" + # Host where postgres is running + host: "string" + # Port where postgres can be accessed + port: 123 + # Name of the postgres database for lemmy + database: "string" # Maximum number of active sql connections pool_size: 5 } diff --git a/crates/routes/src/feeds.rs b/crates/routes/src/feeds.rs index 803de7273..08a76925e 100644 --- a/crates/routes/src/feeds.rs +++ b/crates/routes/src/feeds.rs @@ -31,13 +31,30 @@ use rss::{ }; use serde::Deserialize; use std::{collections::BTreeMap, str::FromStr}; -use strum::ParseError; const RSS_FETCH_LIMIT: i64 = 20; #[derive(Deserialize)] struct Params { sort: Option, + limit: Option, + page: Option, +} + +impl Params { + fn sort_type(&self) -> Result { + let sort_query = self + .sort + .clone() + .unwrap_or_else(|| SortType::Hot.to_string()); + SortType::from_str(&sort_query).map_err(ErrorBadRequest) + } + fn get_limit(&self) -> i64 { + self.limit.unwrap_or(RSS_FETCH_LIMIT) + } + fn get_page(&self) -> i64 { + self.page.unwrap_or(1) + } } enum RequestType { @@ -68,8 +85,16 @@ async fn get_all_feed( info: web::Query, context: web::Data, ) -> Result { - let sort_type = get_sort_type(info).map_err(ErrorBadRequest)?; - Ok(get_feed_data(&context, ListingType::All, sort_type).await?) + Ok( + get_feed_data( + &context, + ListingType::All, + info.sort_type()?, + info.get_limit(), + info.get_page(), + ) + .await?, + ) } #[tracing::instrument(skip_all)] @@ -77,8 +102,16 @@ async fn get_local_feed( info: web::Query, context: web::Data, ) -> Result { - let sort_type = get_sort_type(info).map_err(ErrorBadRequest)?; - Ok(get_feed_data(&context, ListingType::Local, sort_type).await?) + Ok( + get_feed_data( + &context, + ListingType::Local, + info.sort_type()?, + info.get_limit(), + info.get_page(), + ) + .await?, + ) } #[tracing::instrument(skip_all)] @@ -86,6 +119,8 @@ async fn get_feed_data( context: &LemmyContext, listing_type: ListingType, sort_type: SortType, + limit: i64, + page: i64, ) -> Result { let site_view = SiteView::read_local(context.pool()).await?; @@ -93,7 +128,8 @@ async fn get_feed_data( .pool(context.pool()) .listing_type(Some(listing_type)) .sort(Some(sort_type)) - .limit(Some(RSS_FETCH_LIMIT)) + .limit(Some(limit)) + .page(Some(page)) .build() .list() .await?; @@ -125,8 +161,6 @@ async fn get_feed( info: web::Query, context: web::Data, ) -> Result { - let sort_type = get_sort_type(info).map_err(ErrorBadRequest)?; - let req_type: String = req.match_info().get("type").unwrap_or("none").parse()?; let param: String = req.match_info().get("name").unwrap_or("none").parse()?; @@ -143,16 +177,34 @@ async fn get_feed( let builder = match request_type { RequestType::User => { - get_feed_user(context.pool(), &sort_type, ¶m, &protocol_and_hostname).await + get_feed_user( + context.pool(), + &info.sort_type()?, + &info.get_limit(), + &info.get_page(), + ¶m, + &protocol_and_hostname, + ) + .await } RequestType::Community => { - get_feed_community(context.pool(), &sort_type, ¶m, &protocol_and_hostname).await + get_feed_community( + context.pool(), + &info.sort_type()?, + &info.get_limit(), + &info.get_page(), + ¶m, + &protocol_and_hostname, + ) + .await } RequestType::Front => { get_feed_front( context.pool(), &jwt_secret, - &sort_type, + &info.sort_type()?, + &info.get_limit(), + &info.get_page(), ¶m, &protocol_and_hostname, ) @@ -173,18 +225,12 @@ async fn get_feed( ) } -fn get_sort_type(info: web::Query) -> Result { - let sort_query = info - .sort - .clone() - .unwrap_or_else(|| SortType::Hot.to_string()); - SortType::from_str(&sort_query) -} - #[tracing::instrument(skip_all)] async fn get_feed_user( pool: &DbPool, sort_type: &SortType, + limit: &i64, + page: &i64, user_name: &str, protocol_and_hostname: &str, ) -> Result { @@ -196,7 +242,8 @@ async fn get_feed_user( .listing_type(Some(ListingType::All)) .sort(Some(*sort_type)) .creator_id(Some(person.id)) - .limit(Some(RSS_FETCH_LIMIT)) + .limit(Some(*limit)) + .page(Some(*page)) .build() .list() .await?; @@ -217,6 +264,8 @@ async fn get_feed_user( async fn get_feed_community( pool: &DbPool, sort_type: &SortType, + limit: &i64, + page: &i64, community_name: &str, protocol_and_hostname: &str, ) -> Result { @@ -227,7 +276,8 @@ async fn get_feed_community( .pool(pool) .sort(Some(*sort_type)) .community_id(Some(community.id)) - .limit(Some(RSS_FETCH_LIMIT)) + .limit(Some(*limit)) + .page(Some(*page)) .build() .list() .await?; @@ -253,6 +303,8 @@ async fn get_feed_front( pool: &DbPool, jwt_secret: &str, sort_type: &SortType, + limit: &i64, + page: &i64, jwt: &str, protocol_and_hostname: &str, ) -> Result { @@ -265,7 +317,8 @@ async fn get_feed_front( .listing_type(Some(ListingType::Subscribed)) .local_user(Some(&local_user)) .sort(Some(*sort_type)) - .limit(Some(RSS_FETCH_LIMIT)) + .limit(Some(*limit)) + .page(Some(*page)) .build() .list() .await?; diff --git a/crates/utils/src/email.rs b/crates/utils/src/email.rs index f036c2a67..eda8309f8 100644 --- a/crates/utils/src/email.rs +++ b/crates/utils/src/email.rs @@ -43,8 +43,8 @@ pub fn send_email( (email, port) }; - // the message length before wrap, 78, is somewhat arbritary but looks good to me - let plain_text = html2text::from_read(html.as_bytes(), 78); + // use usize::MAX as the line wrap length, since lettre handles the wrapping for us + let plain_text = html2text::from_read(html.as_bytes(), usize::MAX); let email = Message::builder() .from( diff --git a/docker/Dockerfile b/docker/Dockerfile index 4da87a1d8..f28c3ac96 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -33,5 +33,4 @@ RUN apk add libpq # Copy resources COPY --from=builder /app/lemmy_server /app/lemmy -EXPOSE 8536 CMD ["/app/lemmy"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c023741d7..b3b3b8b38 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,5 +1,11 @@ version: "3.3" +x-logging: &default-logging + driver: "json-file" + options: + max-size: "50m" + max-file: 4 + networks: # communication to web and clients lemmyexternalproxy: @@ -16,8 +22,9 @@ services: - lemmyexternalproxy ports: # actual and only port facing any connection from outside - # Note, change the left number if port 80 is already in use on your system (or you want to run a reverse proxy outside this config) - - "80:80" + # Note, change the left number if port 1236 is already in use on your system + # You could use port 80 if you won't use a reverse proxy + - "1236:1236" - "8536:8536" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro,Z @@ -25,6 +32,7 @@ services: depends_on: - pictrs - lemmy-ui + logging: *default-logging lemmy: # image: dessalines/lemmy:dev @@ -49,6 +57,7 @@ services: depends_on: - postgres - pictrs + logging: *default-logging lemmy-ui: image: dessalines/lemmy-ui:0.17.1 @@ -70,6 +79,7 @@ services: depends_on: - lemmy restart: always + logging: *default-logging pictrs: image: asonix/pictrs:0.4.0-beta.19 @@ -93,6 +103,7 @@ services: volumes: - ./volumes/pictrs:/mnt:Z restart: always + logging: *default-logging postgres: image: postgres:15-alpine @@ -128,3 +139,4 @@ services: volumes: - ./volumes/postgres:/var/lib/postgresql/data:Z restart: always + logging: *default-logging diff --git a/docker/federation/docker-compose.yml b/docker/federation/docker-compose.yml index dba64b1bf..49049e083 100644 --- a/docker/federation/docker-compose.yml +++ b/docker/federation/docker-compose.yml @@ -1,5 +1,29 @@ version: "3.3" +x-ui-default: &ui-default + image: dessalines/lemmy-ui:0.17.3 + # assuming lemmy-ui is cloned besides lemmy directory + # build: + # context: ../../../lemmy-ui + # dockerfile: dev.dockerfile + environment: + - LEMMY_UI_HTTPS=false + +x-lemmy-default: &lemmy-default + image: lemmy-federation:latest + environment: + - RUST_BACKTRACE=1 + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + restart: always + +x-postgres-default: &postgres-default + image: postgres:15-alpine + environment: + - POSTGRES_USER=lemmy + - POSTGRES_PASSWORD=password + - POSTGRES_DB=lemmy + restart: always + services: nginx: image: nginx:1-alpine @@ -28,153 +52,103 @@ services: - ./volumes/pictrs_alpha:/mnt:Z lemmy-alpha-ui: - image: dessalines/lemmy-ui:0.17.1 + <<: *ui-default environment: - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy-alpha:8541 - LEMMY_UI_LEMMY_EXTERNAL_HOST=localhost:8541 - - LEMMY_UI_HTTPS=false depends_on: - lemmy-alpha lemmy-alpha: - image: lemmy-federation:latest + <<: *lemmy-default volumes: - ./lemmy_alpha.hjson:/config/config.hjson:Z - environment: - - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_alpha - restart: always ports: - "8541:8541" postgres_alpha: - image: postgres:15-alpine - environment: - - POSTGRES_USER=lemmy - - POSTGRES_PASSWORD=password - - POSTGRES_DB=lemmy - restart: always + <<: *postgres-default volumes: - ./volumes/postgres_alpha:/var/lib/postgresql/data:Z lemmy-beta-ui: - image: dessalines/lemmy-ui:0.17.1 + <<: *ui-default environment: - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy-beta:8551 - LEMMY_UI_LEMMY_EXTERNAL_HOST=localhost:8551 - - LEMMY_UI_HTTPS=false depends_on: - lemmy-beta lemmy-beta: - image: lemmy-federation:latest + <<: *lemmy-default volumes: - ./lemmy_beta.hjson:/config/config.hjson:Z - environment: - - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_beta - restart: always ports: - "8551:8551" postgres_beta: - image: postgres:15-alpine - environment: - - POSTGRES_USER=lemmy - - POSTGRES_PASSWORD=password - - POSTGRES_DB=lemmy - restart: always + <<: *postgres-default volumes: - ./volumes/postgres_beta:/var/lib/postgresql/data:Z lemmy-gamma-ui: - image: dessalines/lemmy-ui:0.17.1 + <<: *ui-default environment: - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy-gamma:8561 - LEMMY_UI_LEMMY_EXTERNAL_HOST=localhost:8561 - - LEMMY_UI_HTTPS=false depends_on: - lemmy-gamma lemmy-gamma: - image: lemmy-federation:latest + <<: *lemmy-default volumes: - ./lemmy_gamma.hjson:/config/config.hjson:Z - environment: - - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_gamma - restart: always ports: - "8561:8561" postgres_gamma: - image: postgres:15-alpine - environment: - - POSTGRES_USER=lemmy - - POSTGRES_PASSWORD=password - - POSTGRES_DB=lemmy - restart: always + <<: *postgres-default volumes: - ./volumes/postgres_gamma:/var/lib/postgresql/data:Z # An instance with only an allowlist for beta lemmy-delta-ui: - image: dessalines/lemmy-ui:0.17.1 + <<: *ui-default environment: - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy-delta:8571 - LEMMY_UI_LEMMY_EXTERNAL_HOST=localhost:8571 - - LEMMY_UI_HTTPS=false depends_on: - lemmy-delta lemmy-delta: - image: lemmy-federation:latest + <<: *lemmy-default volumes: - ./lemmy_delta.hjson:/config/config.hjson:Z - environment: - - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_delta - restart: always ports: - "8571:8571" postgres_delta: - image: postgres:15-alpine - environment: - - POSTGRES_USER=lemmy - - POSTGRES_PASSWORD=password - - POSTGRES_DB=lemmy - restart: always + <<: *postgres-default volumes: - ./volumes/postgres_delta:/var/lib/postgresql/data:Z # An instance who has a blocklist, with lemmy-alpha blocked lemmy-epsilon-ui: - image: dessalines/lemmy-ui:0.17.1 + <<: *ui-default environment: - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy-epsilon:8581 - LEMMY_UI_LEMMY_EXTERNAL_HOST=localhost:8581 - - LEMMY_UI_HTTPS=false depends_on: - lemmy-epsilon lemmy-epsilon: - image: lemmy-federation:latest + <<: *lemmy-default volumes: - ./lemmy_epsilon.hjson:/config/config.hjson:Z - environment: - - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_epsilon - restart: always ports: - "8581:8581" postgres_epsilon: - image: postgres:15-alpine - environment: - - POSTGRES_USER=lemmy - - POSTGRES_PASSWORD=password - - POSTGRES_DB=lemmy - restart: always + <<: *postgres-default volumes: - ./volumes/postgres_epsilon:/var/lib/postgresql/data:Z