From 77a2a5eb01fbc87048084906d350f560052c8fd5 Mon Sep 17 00:00:00 2001 From: nutomic Date: Fri, 17 Jul 2020 21:11:07 +0000 Subject: [PATCH] Update activitystreams library to latest version (#71) Merge branch 'main' into more-upgrade-apub-3 Update activitystreams library to latest version Remove remaining usages of old activitystreams library Migrate community inbox and user inbox Migrate private message Migrate post Migrate community activities Migrate extensions to new activitystreams library Co-authored-by: dessalines Co-authored-by: Felix Ableitner Reviewed-on: https://yerbamate.dev/LemmyNet/lemmy/pulls/71 --- server/Cargo.lock | 323 +++++----- server/Cargo.toml | 5 +- server/lemmy_db/Cargo.toml | 3 +- server/lemmy_db/src/comment.rs | 7 + server/lemmy_db/src/post.rs | 7 + server/src/apub/activities.rs | 38 +- server/src/apub/comment.rs | 84 ++- server/src/apub/community.rs | 213 +++--- server/src/apub/community_inbox.rs | 25 +- .../src/apub/extensions/group_extensions.rs | 23 +- server/src/apub/extensions/page_extension.rs | 23 +- server/src/apub/extensions/signatures.rs | 23 +- server/src/apub/fetcher.rs | 60 +- server/src/apub/mod.rs | 49 +- server/src/apub/post.rs | 254 +++----- server/src/apub/private_message.rs | 133 ++-- server/src/apub/shared_inbox.rs | 608 ++++++------------ server/src/apub/user.rs | 41 +- server/src/apub/user_inbox.rs | 72 +-- 19 files changed, 831 insertions(+), 1160 deletions(-) diff --git a/server/Cargo.lock b/server/Cargo.lock index d90b96799..1e0e04f86 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -1,35 +1,9 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "activitystreams" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464cb473bfb402b857cc15b1153974c203a43f1485da4dda15cd17a738548958" -dependencies = [ - "activitystreams-derive", - "chrono", - "mime", - "serde 1.0.114", - "serde_json", - "thiserror", - "url", -] - -[[package]] -name = "activitystreams-derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39ba5929399e9f921055bac76dd8f47419fa5b6b6da1ac4c1e82b94ed0ac7b4" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "activitystreams-ext" version = "0.1.0" -source = "git+https://git.asonix.dog/asonix/activitystreams-ext#e5c97f4ea9f60e49bc7ff27fb0fb515d3190fd25" +source = "git+https://git.asonix.dog/asonix/activitystreams-ext?branch=main#9acc466c7cb550ada31b669a1c47ea088f1c8471" dependencies = [ "activitystreams-new", "serde 1.0.114", @@ -39,12 +13,14 @@ dependencies = [ [[package]] name = "activitystreams-new" version = "0.1.0" -source = "git+https://git.asonix.dog/asonix/activitystreams-sketch#99c7e9aa5596eda846a1ebd5978ca72d11d4c08a" +source = "git+https://git.asonix.dog/asonix/activitystreams-sketch?branch=main#857d5167dfa13054dd0d21d3d54f8147eea0d546" dependencies = [ - "activitystreams", + "chrono", + "mime", "serde 1.0.114", "serde_json", - "typed-builder", + "thiserror", + "url", ] [[package]] @@ -111,9 +87,9 @@ dependencies = [ [[package]] name = "actix-files" -version = "0.3.0-alpha.1" +version = "0.3.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b32e0fdd5998c2712549cbc39dff46c8754d55e3dd9f4d017d9e28de30cac6" +checksum = "627f597ad98061816766201db8afc7444752992f2919b2e60f53a7fa27f01aed" dependencies = [ "actix-http", "actix-service", @@ -132,9 +108,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "2.0.0-alpha.4" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7ea0568480d199952a51de70271946da57c33cc0e8b83f54383e70958dff21" +checksum = "33f501768e82e8548763b7f55309e2f8bcc7f9f4273c75b47af99ac2b2581f37" dependencies = [ "actix-codec", "actix-connect", @@ -147,6 +123,7 @@ dependencies = [ "bitflags", "brotli2", "bytes", + "cookie", "copyless", "derive_more", "either", @@ -160,6 +137,7 @@ dependencies = [ "http", "httparse", "indexmap", + "itoa", "language-tags", "lazy_static", "log", @@ -171,7 +149,7 @@ dependencies = [ "serde 1.0.114", "serde_json", "serde_urlencoded", - "sha-1", + "sha-1 0.9.1", "slab", "time 0.2.16", ] @@ -260,16 +238,16 @@ dependencies = [ [[package]] name = "actix-threadpool" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91164716d956745c79dcea5e66d2aa04506549958accefcede5368c70f2fd4ff" +checksum = "d209f04d002854b9afd3743032a27b066158817965bf5d036824d19ac2cc0e30" dependencies = [ "derive_more", "futures-channel", "lazy_static", "log", "num_cpus", - "parking_lot 0.10.2", + "parking_lot 0.11.0", "threadpool", ] @@ -313,9 +291,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "3.0.0-alpha.3" +version = "3.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd6df56ec5f9a1a0d8335f156f36e1e8f76dbd736fa0cc0f6bc3a69be1e6124" +checksum = "9125c29b7d9911bfdb4d0d4d8f1cf4fee4f21515cf2a405a423c30c245364297" dependencies = [ "actix-codec", "actix-http", @@ -353,24 +331,25 @@ dependencies = [ [[package]] name = "actix-web-actors" -version = "3.0.0-alpha.1" +version = "3.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5efeb3907582f9c724ce27be093ab8aafabd97be828bc6750c0d467f5e1aa3" +checksum = "55ef22b33c49a28dda61866d5573c5b8ceb080a099cd59e7371b78b48bbf1bc0" dependencies = [ "actix", "actix-codec", "actix-http", "actix-web", "bytes", - "futures", + "futures-channel", + "futures-core", "pin-project", ] [[package]] name = "actix-web-codegen" -version = "0.2.2" +version = "0.3.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a71bf475cbe07281d0b3696abb48212db118e7e23219f13596ce865235ff5766" +checksum = "df9679f5b1f4c819de08b63b0a61a131b2fdc30b367c2c208984fda8eaa07fa0" dependencies = [ "proc-macro2", "quote", @@ -390,24 +369,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602d785912f476e480434627e8732e6766b760c045bbf897d9dfaa9f4fbd399c" +checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" dependencies = [ "gimli", ] [[package]] name = "adler" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc9a9dd069569f212bc4330af9f17c4afb5e8ce185e83dbb14f1349dda18b10" - -[[package]] -name = "adler32" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" [[package]] name = "aho-corasick" @@ -481,9 +454,9 @@ checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "awc" -version = "2.0.0-alpha.2" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7038a9747cd5159b9f0550895eaf865c0143baa7e4eee834e9294d0a7e0e4be" +checksum = "374057b508d4083208996be82141891c2e14c8885f45991b21c1621200ab6df3" dependencies = [ "actix-codec", "actix-http", @@ -505,14 +478,14 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.49" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05100821de9e028f12ae3d189176b41ee198341eb8f369956407fea2f5cc666c" +checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" dependencies = [ "addr2line", "cfg-if", "libc", - "miniz_oxide 0.3.7", + "miniz_oxide", "object", "rustc-demangle", ] @@ -590,7 +563,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.3", ] [[package]] @@ -599,7 +572,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.3", ] [[package]] @@ -642,6 +615,15 @@ dependencies = [ "libc", ] +[[package]] +name = "buf-min" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6ae7069aad07c7cdefe6a22a671f00650728bd2331a4cc62e1e5d0becdf9ca4" +dependencies = [ + "bytes", +] + [[package]] name = "bufstream" version = "0.1.4" @@ -668,12 +650,9 @@ checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytes" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "118cf036fbb97d0816e3c34b2d7a1e8cfc60f68fcf63d550ddbe9bd5f59c213b" -dependencies = [ - "loom", -] +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytestring" @@ -686,9 +665,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fde55d2a2bfaa4c9668bbc63f531fbdeee3ffe188f4662511ce2c22b3eedebe" +checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" [[package]] name = "cfg-if" @@ -698,9 +677,9 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "chrono" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0fee792e164f78f5fe0c296cc2eb3688a2ca2b70cdff33040922d298203f0c4" +checksum = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6" dependencies = [ "num-integer", "num-traits 0.2.12", @@ -770,6 +749,16 @@ dependencies = [ "serde-hjson", ] +[[package]] +name = "cookie" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca761767cf3fa9068cc893ec8c247a22d0fd0535848e65640c0548bd1f8bbb36" +dependencies = [ + "percent-encoding", + "time 0.2.16", +] + [[package]] name = "copyless" version = "0.1.5" @@ -794,9 +783,9 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cpuid-bool" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d375c433320f6c5057ae04a04376eef4d04ce2801448cf8863a78da99107be4" +checksum = "ec6763c20301ab0dc67051d1b6f4cc9132ad9e6eddcb1f10c6c53ea6d6ae2183" [[package]] name = "crc32fast" @@ -950,7 +939,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.3", ] [[package]] @@ -1142,7 +1131,7 @@ dependencies = [ "cfg-if", "crc32fast", "libc", - "miniz_oxide 0.4.0", + "miniz_oxide", ] [[package]] @@ -1292,19 +1281,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "generator" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add72f17bb81521258fcc8a7a3245b1e184e916bfbe34f0ea89558f440df5c68" -dependencies = [ - "cc", - "libc", - "log", - "rustc_version", - "winapi 0.3.9", -] - [[package]] name = "generic-array" version = "0.12.3" @@ -1316,9 +1292,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" +checksum = "60fb4bb6bba52f78a471264d9a3b7d026cc0af47b22cd2cffbc0b787ca003e63" dependencies = [ "typenum", "version_check 0.9.2", @@ -1337,15 +1313,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c" +checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" [[package]] name = "h2" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" +checksum = "993f9e0baeed60001cf565546b0d3dbe6a6ad23f2bd31644a133c641eccf6d53" dependencies = [ "bytes", "fnv", @@ -1354,10 +1330,10 @@ dependencies = [ "futures-util", "http", "indexmap", - "log", "slab", "tokio", "tokio-util 0.3.1", + "tracing", ] [[package]] @@ -1371,9 +1347,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9586eedd4ce6b3c498bc3b4dd92fc9f11166aa908a914071953768066c67909" +checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9" dependencies = [ "libc", ] @@ -1481,9 +1457,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69da7ce1490173c2bf4d26bc8be429aaeeaf4cce6c4b970b7949651fa17655fe" +checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" [[package]] name = "iovec" @@ -1523,9 +1499,9 @@ checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" [[package]] name = "js-sys" -version = "0.3.41" +version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b9172132a62451e56142bff9afc91c8e4a4500aa5b847da36815b63bfda916" +checksum = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2" dependencies = [ "wasm-bindgen", ] @@ -1579,13 +1555,13 @@ dependencies = [ "sha2", "strum", "strum_macros", + "url", ] [[package]] name = "lemmy_server" version = "0.0.1" dependencies = [ - "activitystreams", "activitystreams-ext", "activitystreams-new", "actix", @@ -1693,9 +1669,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.71" +version = "0.2.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" +checksum = "a9f8082297d534141b30c8d39e9b1773713ab50fdbe4ff30f750d063b3bfd701" [[package]] name = "linked-hash-map" @@ -1724,33 +1700,22 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de302ce1fe7482db13738fbaf2e21cfb06a986b89c0bf38d88abf16681aada4e" +checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c" dependencies = [ "scopeguard", ] [[package]] name = "log" -version = "0.4.8" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" dependencies = [ "cfg-if", ] -[[package]] -name = "loom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ecc775857611e1df29abba5c41355cdf540e7e9d4acfdf0f355eefee82330b7" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", -] - [[package]] name = "lru-cache" version = "0.1.2" @@ -1827,15 +1792,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "miniz_oxide" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" -dependencies = [ - "adler32", -] - [[package]] name = "miniz_oxide" version = "0.4.0" @@ -2060,7 +2016,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733" dependencies = [ "instant", - "lock_api 0.4.0", + "lock_api 0.4.1", "parking_lot_core 0.8.0", ] @@ -2150,7 +2106,7 @@ checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" dependencies = [ "maplit", "pest", - "sha-1", + "sha-1 0.8.2", ] [[package]] @@ -2187,9 +2143,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" [[package]] name = "ppv-lite86" @@ -2434,9 +2390,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "regex" @@ -2559,12 +2515,6 @@ dependencies = [ "parking_lot 0.11.0", ] -[[package]] -name = "scoped-tls" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" - [[package]] name = "scopeguard" version = "1.1.0" @@ -2703,6 +2653,19 @@ dependencies = [ "opaque-debug 0.2.3", ] +[[package]] +name = "sha-1" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a36ea86c864a3f16dd2687712dd6646f7019f301e57537c7f4dc9f5916770" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpuid-bool", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + [[package]] name = "sha1" version = "0.6.0" @@ -2734,9 +2697,9 @@ dependencies = [ [[package]] name = "simple_asn1" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b25ecba7165254f0c97d6c22a64b1122a03634b18d20a34daf21e18f892e618" +checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b" dependencies = [ "chrono", "num-bigint", @@ -2751,9 +2714,9 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" +checksum = "3757cb9d89161a2f24e1cf78efa0c1fcff485d18e3f55e0aa3480824ddaa0f3f" [[package]] name = "socket2" @@ -2869,9 +2832,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd" +checksum = "936cae2873c940d92e697597c5eee105fb570cd5689c695806f672883653349b" dependencies = [ "proc-macro2", "quote", @@ -3076,6 +3039,26 @@ dependencies = [ "tokio", ] +[[package]] +name = "tracing" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e2a2de6b0d5cbb13fc21193a2296888eaab62b6044479aafb3c54c01c29fcd" +dependencies = [ + "cfg-if", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94ae75f0d28ae10786f3b1895c55fe72e79928fd5ccdebb5438c75e93fec178f" +dependencies = [ + "lazy_static", +] + [[package]] name = "trust-dns-proto" version = "0.19.5" @@ -3132,17 +3115,6 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" -[[package]] -name = "typed-builder" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fc4459191c621a53ef6c6ca5642e6e0e5ccc61f3e5b8ad6b6ab5317f0200fb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "typenum" version = "1.12.0" @@ -3251,18 +3223,19 @@ dependencies = [ [[package]] name = "v_escape" -version = "0.7.4" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "660b101c07b5d0863deb9e7fb3138777e858d6d2a79f9e6049a27d1cc77c6da6" +checksum = "b66158ce426982197fd44266d68125fd4000f1d42f5ee33ef02b500b4b6b0024" dependencies = [ + "buf-min", "v_escape_derive", ] [[package]] name = "v_escape_derive" -version = "0.5.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ca2a14bc3fc5b64d188b087a7d3a927df87b152e941ccfbc66672e20c467ae" +checksum = "cae7cffca0b1f9af9b20610f6fdeee9ffcce61417b5ad186a5d482dc904e24cd" dependencies = [ "nom 4.2.3", "proc-macro2", @@ -3272,9 +3245,9 @@ dependencies = [ [[package]] name = "v_htmlescape" -version = "0.4.5" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33e939c0d8cf047514fb6ba7d5aac78bc56677a6938b2ee67000b91f2e97e41" +checksum = "f5fd25529cb2f78527b5ee507bcfb357b26d057b5e480853c26d49a4ead5c629" dependencies = [ "cfg-if", "v_escape", @@ -3312,9 +3285,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.64" +version = "0.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a634620115e4a229108b71bde263bb4220c483b3f07f5ba514ee8d15064c4c2" +checksum = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3322,9 +3295,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.64" +version = "0.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e53963b583d18a5aa3aaae4b4c1cb535218246131ba22a71f05b518098571df" +checksum = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d" dependencies = [ "bumpalo", "lazy_static", @@ -3337,9 +3310,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.64" +version = "0.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcfd5ef6eec85623b4c6e844293d4516470d8f19cd72d0d12246017eb9060b8" +checksum = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3347,9 +3320,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.64" +version = "0.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9adff9ee0e94b926ca81b57f57f86d5545cdcb1d259e21ec9bdd95b901754c75" +checksum = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6" dependencies = [ "proc-macro2", "quote", @@ -3360,15 +3333,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.64" +version = "0.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7b90ea6c632dd06fd765d44542e234d5e63d9bb917ecd64d79778a13bd79ae" +checksum = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87" [[package]] name = "web-sys" -version = "0.3.41" +version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863539788676619aac1a23e2df3655e96b32b0e05eb72ca34ba045ad573c625d" +checksum = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/server/Cargo.toml b/server/Cargo.toml index 2aa3c139b..06078ba51 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -18,9 +18,8 @@ lemmy_db = { path = "./lemmy_db" } diesel = "1.4.4" diesel_migrations = "1.4.0" dotenv = "0.15.0" -activitystreams = "0.6.2" -activitystreams-new = { git = "https://git.asonix.dog/asonix/activitystreams-sketch" } -activitystreams-ext = { git = "https://git.asonix.dog/asonix/activitystreams-ext" } +activitystreams-new = { git = "https://git.asonix.dog/asonix/activitystreams-sketch", branch = "main" } +activitystreams-ext = { git = "https://git.asonix.dog/asonix/activitystreams-ext", branch = "main" } bcrypt = "0.8.0" chrono = { version = "0.4.7", features = ["serde"] } serde_json = { version = "1.0.52", features = ["preserve_order"]} diff --git a/server/lemmy_db/Cargo.toml b/server/lemmy_db/Cargo.toml index d94cf5fc6..f10f217ef 100644 --- a/server/lemmy_db/Cargo.toml +++ b/server/lemmy_db/Cargo.toml @@ -12,4 +12,5 @@ strum = "0.18.0" strum_macros = "0.18.0" log = "0.4.0" sha2 = "0.9" -bcrypt = "0.8.0" \ No newline at end of file +bcrypt = "0.8.0" +url = { version = "2.1.1", features = ["serde"] } \ No newline at end of file diff --git a/server/lemmy_db/src/comment.rs b/server/lemmy_db/src/comment.rs index 602070d51..acdddcc34 100644 --- a/server/lemmy_db/src/comment.rs +++ b/server/lemmy_db/src/comment.rs @@ -1,5 +1,6 @@ use super::{post::Post, *}; use crate::schema::{comment, comment_like, comment_saved}; +use url::{ParseError, Url}; // WITH RECURSIVE MyTree AS ( // SELECT * FROM comment WHERE parent_id IS NULL @@ -42,6 +43,12 @@ pub struct CommentForm { pub local: bool, } +impl CommentForm { + pub fn get_ap_id(&self) -> Result { + Url::parse(&self.ap_id) + } +} + impl Crud for Comment { fn read(conn: &PgConnection, comment_id: i32) -> Result { use crate::schema::comment::dsl::*; diff --git a/server/lemmy_db/src/post.rs b/server/lemmy_db/src/post.rs index 1525a675f..12cf927e8 100644 --- a/server/lemmy_db/src/post.rs +++ b/server/lemmy_db/src/post.rs @@ -8,6 +8,7 @@ use crate::{ }; use diesel::{dsl::*, result::Error, *}; use serde::{Deserialize, Serialize}; +use url::{ParseError, Url}; #[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)] #[table_name = "post"] @@ -56,6 +57,12 @@ pub struct PostForm { pub local: bool, } +impl PostForm { + pub fn get_ap_id(&self) -> Result { + Url::parse(&self.ap_id) + } +} + impl Post { pub fn read(conn: &PgConnection, post_id: i32) -> Result { use crate::schema::post::dsl::*; diff --git a/server/src/apub/activities.rs b/server/src/apub/activities.rs index a3fad66ec..a436d30fc 100644 --- a/server/src/apub/activities.rs +++ b/server/src/apub/activities.rs @@ -6,41 +6,20 @@ use crate::{ request::retry_custom, DbPool, LemmyError, }; -use activitystreams::{context, object::properties::ObjectProperties, public, Activity, Base}; +use activitystreams_new::base::AnyBase; use actix_web::client::Client; use lemmy_db::{community::Community, user::User_}; use log::debug; -use serde::Serialize; -use std::fmt::Debug; use url::Url; -pub fn populate_object_props( - props: &mut ObjectProperties, - addressed_ccs: Vec, - object_id: &str, -) -> Result<(), LemmyError> { - props - .set_context_xsd_any_uri(context())? - // TODO: the activity needs a seperate id from the object - .set_id(object_id)? - // TODO: should to/cc go on the Create, or on the Post? or on both? - // TODO: handle privacy on the receiving side (at least ignore anything thats not public) - .set_to_xsd_any_uri(public())? - .set_many_cc_xsd_any_uris(addressed_ccs)?; - Ok(()) -} - -pub async fn send_activity_to_community( +pub async fn send_activity_to_community( creator: &User_, community: &Community, to: Vec, - activity: A, + activity: AnyBase, client: &Client, pool: &DbPool, -) -> Result<(), LemmyError> -where - A: Activity + Base + Serialize + Debug + Clone + Send + 'static, -{ +) -> Result<(), LemmyError> { insert_activity(creator.id, activity.clone(), true, pool).await?; // if this is a local community, we need to do an announce from the community instead @@ -54,15 +33,12 @@ where } /// Send an activity to a list of recipients, using the correct headers etc. -pub async fn send_activity( +pub async fn send_activity( client: &Client, - activity: &A, + activity: &AnyBase, actor: &dyn ActorType, to: Vec, -) -> Result<(), LemmyError> -where - A: Serialize, -{ +) -> Result<(), LemmyError> { let activity = serde_json::to_string(&activity)?; debug!("Sending activitypub activity {} to {:?}", activity, to); diff --git a/server/src/apub/comment.rs b/server/src/apub/comment.rs index 975a2a76d..2a0840150 100644 --- a/server/src/apub/comment.rs +++ b/server/src/apub/comment.rs @@ -19,7 +19,6 @@ use activitystreams_new::{ link::Mention, object::{kind::NoteType, Note, Tombstone}, prelude::*, - primitives::XsdAnyUri, public, }; use actix_web::{body::Body, client::Client, web::Path, HttpResponse}; @@ -35,7 +34,7 @@ use lemmy_utils::{convert_datetime, scrape_text_for_mentions, MentionData}; use log::debug; use serde::Deserialize; use serde_json::Error; -use std::str::FromStr; +use url::Url; #[derive(Deserialize)] pub struct CommentQuery { @@ -86,15 +85,15 @@ impl ToApub for Comment { comment // Not needed when the Post is embedded in a collection (like for community outbox) .set_context(context()) - .set_id(self.ap_id.parse::()?) - .set_published(convert_datetime(self.published).into()) + .set_id(Url::parse(&self.ap_id)?) + .set_published(convert_datetime(self.published)) .set_to(community.actor_id) .set_many_in_reply_tos(in_reply_to_vec) .set_content(self.content.to_owned()) .set_attributed_to(creator.actor_id); if let Some(u) = self.updated { - comment.set_updated(convert_datetime(u).into()); + comment.set_updated(convert_datetime(u)); } Ok(comment) @@ -105,7 +104,7 @@ impl ToApub for Comment { self.deleted, &self.ap_id, self.updated, - NoteType.to_string(), + NoteType::Note.to_string(), ) } } @@ -119,6 +118,7 @@ impl FromApub for CommentForm { note: &Note, client: &Client, pool: &DbPool, + actor_id: &Url, ) -> Result { let creator_actor_id = ¬e .attributed_to() @@ -129,14 +129,14 @@ impl FromApub for CommentForm { let creator = get_or_fetch_and_upsert_remote_user(creator_actor_id, client, pool).await?; let mut in_reply_tos = note - .in_reply_to + .in_reply_to() .as_ref() .unwrap() .as_many() .unwrap() .iter() .map(|i| i.as_xsd_any_uri().unwrap()); - let post_ap_id = in_reply_tos.next().unwrap().to_string(); + let post_ap_id = in_reply_tos.next().unwrap(); // This post, or the parent comment might not yet exist on this server yet, fetch them. let post = get_or_fetch_and_insert_remote_post(&post_ap_id, client, pool).await?; @@ -145,7 +145,7 @@ impl FromApub for CommentForm { // For deeply nested comments, FromApub automatically gets called recursively let parent_id: Option = match in_reply_tos.next() { Some(parent_comment_uri) => { - let parent_comment_ap_id = &parent_comment_uri.to_string(); + let parent_comment_ap_id = &parent_comment_uri; let parent_comment = get_or_fetch_and_insert_remote_comment(&parent_comment_ap_id, client, pool).await?; @@ -166,12 +166,10 @@ impl FromApub for CommentForm { .to_string(), removed: None, read: None, - published: note - .published() - .map(|u| u.as_ref().to_owned().naive_local()), - updated: note.updated().map(|u| u.as_ref().to_owned().naive_local()), + published: note.published().map(|u| u.to_owned().naive_local()), + updated: note.updated().map(|u| u.to_owned().naive_local()), deleted: None, - ap_id: note.id().unwrap().to_string(), + ap_id: note.id(actor_id.domain().unwrap())?.unwrap().to_string(), local: false, }) } @@ -201,13 +199,21 @@ impl ApubObjectType for Comment { let mut create = Create::new(creator.actor_id.to_owned(), note.into_any_base()?); create .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(maa.addressed_ccs.to_owned()) // Set the mention tags .set_many_tags(maa.get_tags()?); - send_activity_to_community(&creator, &community, maa.inboxes, create, client, pool).await?; + send_activity_to_community( + &creator, + &community, + maa.inboxes, + create.into_any_base()?, + client, + pool, + ) + .await?; Ok(()) } @@ -233,13 +239,21 @@ impl ApubObjectType for Comment { let mut update = Update::new(creator.actor_id.to_owned(), note.into_any_base()?); update .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(maa.addressed_ccs.to_owned()) // Set the mention tags .set_many_tags(maa.get_tags()?); - send_activity_to_community(&creator, &community, maa.inboxes, update, client, pool).await?; + send_activity_to_community( + &creator, + &community, + maa.inboxes, + update.into_any_base()?, + client, + pool, + ) + .await?; Ok(()) } @@ -261,7 +275,7 @@ impl ApubObjectType for Comment { let mut delete = Delete::new(creator.actor_id.to_owned(), note.into_any_base()?); delete .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -269,7 +283,7 @@ impl ApubObjectType for Comment { &creator, &community, vec![community.get_shared_inbox_url()], - delete, + delete.into_any_base()?, client, pool, ) @@ -296,7 +310,7 @@ impl ApubObjectType for Comment { let mut delete = Delete::new(creator.actor_id.to_owned(), note.into_any_base()?); delete .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -306,7 +320,7 @@ impl ApubObjectType for Comment { let mut undo = Undo::new(creator.actor_id.to_owned(), delete.into_any_base()?); undo .set_context(context()) - .set_id(XsdAnyUri::from_str(&undo_id)?) + .set_id(Url::parse(&undo_id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -314,7 +328,7 @@ impl ApubObjectType for Comment { &creator, &community, vec![community.get_shared_inbox_url()], - undo, + undo.into_any_base()?, client, pool, ) @@ -340,7 +354,7 @@ impl ApubObjectType for Comment { let mut remove = Remove::new(mod_.actor_id.to_owned(), note.into_any_base()?); remove .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -348,7 +362,7 @@ impl ApubObjectType for Comment { &mod_, &community, vec![community.get_shared_inbox_url()], - remove, + remove.into_any_base()?, client, pool, ) @@ -375,7 +389,7 @@ impl ApubObjectType for Comment { let mut remove = Remove::new(mod_.actor_id.to_owned(), note.into_any_base()?); remove .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -384,7 +398,7 @@ impl ApubObjectType for Comment { let mut undo = Undo::new(mod_.actor_id.to_owned(), remove.into_any_base()?); undo .set_context(context()) - .set_id(XsdAnyUri::from_str(&undo_id)?) + .set_id(Url::parse(&undo_id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -392,7 +406,7 @@ impl ApubObjectType for Comment { &mod_, &community, vec![community.get_shared_inbox_url()], - undo, + undo.into_any_base()?, client, pool, ) @@ -422,7 +436,7 @@ impl ApubLikeableType for Comment { let mut like = Like::new(creator.actor_id.to_owned(), note.into_any_base()?); like .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -430,7 +444,7 @@ impl ApubLikeableType for Comment { &creator, &community, vec![community.get_shared_inbox_url()], - like, + like.into_any_base()?, client, pool, ) @@ -457,7 +471,7 @@ impl ApubLikeableType for Comment { let mut dislike = Dislike::new(creator.actor_id.to_owned(), note.into_any_base()?); dislike .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -465,7 +479,7 @@ impl ApubLikeableType for Comment { &creator, &community, vec![community.get_shared_inbox_url()], - dislike, + dislike.into_any_base()?, client, pool, ) @@ -492,7 +506,7 @@ impl ApubLikeableType for Comment { let mut like = Like::new(creator.actor_id.to_owned(), note.into_any_base()?); like .set_context(context()) - .set_id(XsdAnyUri::from_str(&id)?) + .set_id(Url::parse(&id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -502,7 +516,7 @@ impl ApubLikeableType for Comment { let mut undo = Undo::new(creator.actor_id.to_owned(), like.into_any_base()?); undo .set_context(context()) - .set_id(XsdAnyUri::from_str(&undo_id)?) + .set_id(Url::parse(&undo_id)?) .set_to(public()) .set_many_ccs(vec![community.get_followers_url()]); @@ -510,7 +524,7 @@ impl ApubLikeableType for Comment { &creator, &community, vec![community.get_shared_inbox_url()], - undo, + undo.into_any_base()?, client, pool, ) diff --git a/server/src/apub/community.rs b/server/src/apub/community.rs index d6869b2e5..0df2f3fd1 100644 --- a/server/src/apub/community.rs +++ b/server/src/apub/community.rs @@ -1,29 +1,24 @@ use crate::{ apub::{ - activities::{populate_object_props, send_activity}, - create_apub_response, create_apub_tombstone_response, create_tombstone, - extensions::group_extensions::GroupExtension, - fetcher::get_or_fetch_and_upsert_remote_user, - get_shared_inbox, insert_activity, ActorType, FromApub, GroupExt, ToApub, + activities::send_activity, create_apub_response, create_apub_tombstone_response, + create_tombstone, extensions::group_extensions::GroupExtension, + fetcher::get_or_fetch_and_upsert_remote_user, get_shared_inbox, insert_activity, ActorType, + FromApub, GroupExt, ToApub, }, blocking, routes::DbPoolParam, DbPool, LemmyError, }; -use activitystreams::{ - activity::{Accept, Announce, Delete, Remove, Undo}, - Activity, Base, BaseBox, -}; use activitystreams_ext::Ext2; use activitystreams_new::{ - activity::Follow, + activity::{Accept, Announce, Delete, Follow, Remove, Undo}, actor::{kind::GroupType, ApActor, Endpoints, Group}, - base::BaseExt, + base::{AnyBase, BaseExt}, collection::UnorderedCollection, context, object::Tombstone, prelude::*, - primitives::{XsdAnyUri, XsdDateTime}, + public, }; use actix_web::{body::Body, client::Client, web, HttpResponse}; use itertools::Itertools; @@ -34,8 +29,8 @@ use lemmy_db::{ user::User_, }; use lemmy_utils::convert_datetime; -use serde::{Deserialize, Serialize}; -use std::{fmt::Debug, str::FromStr}; +use serde::Deserialize; +use url::Url; #[derive(Deserialize)] pub struct CommunityQuery { @@ -62,13 +57,13 @@ impl ToApub for Community { let mut group = Group::new(); group .set_context(context()) - .set_id(XsdAnyUri::from_str(&self.actor_id)?) + .set_id(Url::parse(&self.actor_id)?) .set_name(self.name.to_owned()) - .set_published(XsdDateTime::from(convert_datetime(self.published))) + .set_published(convert_datetime(self.published)) .set_many_attributed_tos(moderators); if let Some(u) = self.updated.to_owned() { - group.set_updated(XsdDateTime::from(convert_datetime(u))); + group.set_updated(convert_datetime(u)); } if let Some(d) = self.description.to_owned() { // TODO: this should be html, also add source field with raw markdown @@ -107,14 +102,14 @@ impl ToApub for Community { self.deleted, &self.actor_id, self.updated, - GroupType.to_string(), + GroupType::Group.to_string(), ) } } #[async_trait::async_trait(?Send)] impl ActorType for Community { - fn actor_id(&self) -> String { + fn actor_id_str(&self) -> String { self.actor_id.to_owned() } @@ -128,27 +123,23 @@ impl ActorType for Community { /// As a local community, accept the follow request from a remote user. async fn send_accept_follow( &self, - follow: &Follow, + follow: Follow, client: &Client, pool: &DbPool, ) -> Result<(), LemmyError> { - let actor_uri = follow.actor.as_single_xsd_any_uri().unwrap().to_string(); + let actor_uri = follow.actor()?.as_single_xsd_any_uri().unwrap().to_string(); let id = format!("{}/accept/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut accept = Accept::new(); - accept - .object_props - .set_context_xsd_any_uri(context())? - .set_id(id)?; - accept - .accept_props - .set_actor_xsd_any_uri(self.actor_id.to_owned())? - .set_object_base_box(BaseBox::from_concrete(follow.clone())?)?; + let mut accept = Accept::new(self.actor_id.to_owned(), follow.into_any_base()?); let to = format!("{}/inbox", actor_uri); + accept + .set_context(context()) + .set_id(Url::parse(&id)?) + .set_to(to.clone()); insert_activity(self.creator_id, accept.clone(), true, pool).await?; - send_activity(client, &accept, self, vec![to]).await?; + send_activity(client, &accept.into_any_base()?, self, vec![to]).await?; Ok(()) } @@ -162,17 +153,12 @@ impl ActorType for Community { let id = format!("{}/delete/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut delete = Delete::default(); - populate_object_props( - &mut delete.object_props, - vec![self.get_followers_url()], - &id, - )?; - + let mut delete = Delete::new(creator.actor_id.to_owned(), group.into_any_base()?); delete - .delete_props - .set_actor_xsd_any_uri(creator.actor_id.to_owned())? - .set_object_base_box(BaseBox::from_concrete(group)?)?; + .set_context(context()) + .set_id(Url::parse(&id)?) + .set_to(public()) + .set_many_ccs(vec![self.get_followers_url()]); insert_activity(self.creator_id, delete.clone(), true, pool).await?; @@ -181,7 +167,7 @@ impl ActorType for Community { // Note: For an accept, since it was automatic, no one pushed a button, // the community was the actor. // But for delete, the creator is the actor, and does the signing - send_activity(client, &delete, creator, inboxes).await?; + send_activity(client, &delete.into_any_base()?, creator, inboxes).await?; Ok(()) } @@ -195,33 +181,22 @@ impl ActorType for Community { let id = format!("{}/delete/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut delete = Delete::default(); - populate_object_props( - &mut delete.object_props, - vec![self.get_followers_url()], - &id, - )?; - + let mut delete = Delete::new(creator.actor_id.to_owned(), group.into_any_base()?); delete - .delete_props - .set_actor_xsd_any_uri(creator.actor_id.to_owned())? - .set_object_base_box(BaseBox::from_concrete(group)?)?; + .set_context(context()) + .set_id(Url::parse(&id)?) + .set_to(public()) + .set_many_ccs(vec![self.get_followers_url()]); // TODO // Undo that fake activity let undo_id = format!("{}/undo/delete/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut undo = Undo::default(); - - populate_object_props( - &mut undo.object_props, - vec![self.get_followers_url()], - &undo_id, - )?; - + let mut undo = Undo::new(creator.actor_id.to_owned(), delete.into_any_base()?); undo - .undo_props - .set_actor_xsd_any_uri(creator.actor_id.to_owned())? - .set_object_base_box(delete)?; + .set_context(context()) + .set_id(Url::parse(&undo_id)?) + .set_to(public()) + .set_many_ccs(vec![self.get_followers_url()]); insert_activity(self.creator_id, undo.clone(), true, pool).await?; @@ -230,7 +205,7 @@ impl ActorType for Community { // Note: For an accept, since it was automatic, no one pushed a button, // the community was the actor. // But for delete, the creator is the actor, and does the signing - send_activity(client, &undo, creator, inboxes).await?; + send_activity(client, &undo.into_any_base()?, creator, inboxes).await?; Ok(()) } @@ -244,17 +219,12 @@ impl ActorType for Community { let id = format!("{}/remove/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut remove = Remove::default(); - populate_object_props( - &mut remove.object_props, - vec![self.get_followers_url()], - &id, - )?; - + let mut remove = Remove::new(mod_.actor_id.to_owned(), group.into_any_base()?); remove - .remove_props - .set_actor_xsd_any_uri(mod_.actor_id.to_owned())? - .set_object_base_box(BaseBox::from_concrete(group)?)?; + .set_context(context()) + .set_id(Url::parse(&id)?) + .set_to(public()) + .set_many_ccs(vec![self.get_followers_url()]); insert_activity(mod_.id, remove.clone(), true, pool).await?; @@ -263,7 +233,7 @@ impl ActorType for Community { // Note: For an accept, since it was automatic, no one pushed a button, // the community was the actor. // But for delete, the creator is the actor, and does the signing - send_activity(client, &remove, mod_, inboxes).await?; + send_activity(client, &remove.into_any_base()?, mod_, inboxes).await?; Ok(()) } @@ -277,32 +247,21 @@ impl ActorType for Community { let id = format!("{}/remove/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut remove = Remove::default(); - populate_object_props( - &mut remove.object_props, - vec![self.get_followers_url()], - &id, - )?; - + let mut remove = Remove::new(mod_.actor_id.to_owned(), group.into_any_base()?); remove - .remove_props - .set_actor_xsd_any_uri(mod_.actor_id.to_owned())? - .set_object_base_box(BaseBox::from_concrete(group)?)?; + .set_context(context()) + .set_id(Url::parse(&id)?) + .set_to(public()) + .set_many_ccs(vec![self.get_followers_url()]); // Undo that fake activity let undo_id = format!("{}/undo/remove/{}", self.actor_id, uuid::Uuid::new_v4()); - let mut undo = Undo::default(); - - populate_object_props( - &mut undo.object_props, - vec![self.get_followers_url()], - &undo_id, - )?; - + let mut undo = Undo::new(mod_.actor_id.to_owned(), remove.into_any_base()?); undo - .undo_props - .set_actor_xsd_any_uri(mod_.actor_id.to_owned())? - .set_object_base_box(remove)?; + .set_context(context()) + .set_id(Url::parse(&undo_id)?) + .set_to(public()) + .set_many_ccs(vec![self.get_followers_url()]); insert_activity(mod_.id, undo.clone(), true, pool).await?; @@ -311,7 +270,7 @@ impl ActorType for Community { // Note: For an accept, since it was automatic, no one pushed a button, // the community was the actor. // But for remove , the creator is the actor, and does the signing - send_activity(client, &undo, mod_, inboxes).await?; + send_activity(client, &undo.into_any_base()?, mod_, inboxes).await?; Ok(()) } @@ -325,7 +284,7 @@ impl ActorType for Community { .await??; let inboxes = inboxes .into_iter() - .map(|c| get_shared_inbox(&c.user_actor_id)) + .map(|c| get_shared_inbox(&Url::parse(&c.user_actor_id).unwrap())) .filter(|s| !s.is_empty()) .unique() .collect(); @@ -357,8 +316,13 @@ impl FromApub for CommunityForm { type ApubType = GroupExt; /// Parse an ActivityPub group received from another instance into a Lemmy community. - async fn from_apub(group: &GroupExt, client: &Client, pool: &DbPool) -> Result { - let creator_and_moderator_uris = group.attributed_to().unwrap(); + async fn from_apub( + group: &GroupExt, + client: &Client, + pool: &DbPool, + actor_id: &Url, + ) -> Result { + let creator_and_moderator_uris = group.inner.attributed_to().unwrap(); let creator_uri = creator_and_moderator_uris .as_many() .unwrap() @@ -371,23 +335,34 @@ impl FromApub for CommunityForm { let creator = get_or_fetch_and_upsert_remote_user(creator_uri, client, pool).await?; Ok(CommunityForm { - name: group.name().unwrap().as_single_xsd_string().unwrap().into(), + name: group + .inner + .name() + .unwrap() + .as_one() + .unwrap() + .as_xsd_string() + .unwrap() + .into(), title: group.inner.preferred_username().unwrap().to_string(), // TODO: should be parsed as html and tags like