Merge remote-tracking branch 'upstream/main'

pull/3009/head
dullbananas 2023-06-13 13:43:56 +00:00
commit ddc32b2425
10 changed files with 321 additions and 230 deletions

View File

@ -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.

259
Cargo.lock generated
View File

@ -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"

View File

@ -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"] }

View File

@ -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)

View File

@ -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
}

View File

@ -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<String>,
limit: Option<i64>,
page: Option<i64>,
}
impl Params {
fn sort_type(&self) -> Result<SortType, Error> {
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<Params>,
context: web::Data<LemmyContext>,
) -> Result<HttpResponse, Error> {
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<Params>,
context: web::Data<LemmyContext>,
) -> Result<HttpResponse, Error> {
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<HttpResponse, LemmyError> {
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<Params>,
context: web::Data<LemmyContext>,
) -> Result<HttpResponse, Error> {
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, &param, &protocol_and_hostname).await
get_feed_user(
context.pool(),
&info.sort_type()?,
&info.get_limit(),
&info.get_page(),
&param,
&protocol_and_hostname,
)
.await
}
RequestType::Community => {
get_feed_community(context.pool(), &sort_type, &param, &protocol_and_hostname).await
get_feed_community(
context.pool(),
&info.sort_type()?,
&info.get_limit(),
&info.get_page(),
&param,
&protocol_and_hostname,
)
.await
}
RequestType::Front => {
get_feed_front(
context.pool(),
&jwt_secret,
&sort_type,
&info.sort_type()?,
&info.get_limit(),
&info.get_page(),
&param,
&protocol_and_hostname,
)
@ -173,18 +225,12 @@ async fn get_feed(
)
}
fn get_sort_type(info: web::Query<Params>) -> Result<SortType, ParseError> {
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<ChannelBuilder, LemmyError> {
@ -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<ChannelBuilder, LemmyError> {
@ -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<ChannelBuilder, LemmyError> {
@ -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?;

View File

@ -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(

View File

@ -33,5 +33,4 @@ RUN apk add libpq
# Copy resources
COPY --from=builder /app/lemmy_server /app/lemmy
EXPOSE 8536
CMD ["/app/lemmy"]

View File

@ -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

View File

@ -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