Remove remaining usages of old activitystreams library #70

Closed
nutomic wants to merge 6 commits from more-upgrade-apub-2 into main
16 changed files with 679 additions and 902 deletions

275
server/Cargo.lock generated vendored
View File

@ -111,9 +111,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 +132,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 +147,7 @@ dependencies = [
"bitflags",
"brotli2",
"bytes",
"cookie",
"copyless",
"derive_more",
"either",
@ -160,6 +161,7 @@ dependencies = [
"http",
"httparse",
"indexmap",
"itoa",
"language-tags",
"lazy_static",
"log",
@ -171,7 +173,7 @@ dependencies = [
"serde 1.0.114",
"serde_json",
"serde_urlencoded",
"sha-1",
"sha-1 0.9.1",
"slab",
"time 0.2.16",
]
@ -260,16 +262,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 +315,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 +355,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 +393,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 +478,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 +502,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 +587,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 +596,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 +639,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 +674,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 +689,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 +701,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 +773,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 +807,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 +963,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 +1155,7 @@ dependencies = [
"cfg-if",
"crc32fast",
"libc",
"miniz_oxide 0.4.0",
"miniz_oxide",
]
[[package]]
@ -1292,19 +1305,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 +1316,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 +1337,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 +1354,10 @@ dependencies = [
"futures-util",
"http",
"indexmap",
"log",
"slab",
"tokio",
"tokio-util 0.3.1",
"tracing",
]
[[package]]
@ -1371,9 +1371,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 +1481,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 +1523,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",
]
@ -1585,7 +1585,6 @@ dependencies = [
name = "lemmy_server"
version = "0.0.1"
dependencies = [
"activitystreams",
"activitystreams-ext",
"activitystreams-new",
"actix",
@ -1693,9 +1692,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 +1723,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 +1815,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 +2039,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 +2129,7 @@ checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
dependencies = [
"maplit",
"pest",
"sha-1",
"sha-1 0.8.2",
]
[[package]]
@ -2187,9 +2166,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 +2413,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 +2538,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 +2676,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 +2720,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 +2737,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 +2855,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 +3062,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"
@ -3251,18 +3257,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 +3279,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 +3319,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 +3329,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 +3344,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 +3354,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 +3367,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",

1
server/Cargo.toml vendored
View File

@ -18,7 +18,6 @@ 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" }
bcrypt = "0.8.0"

View File

@ -1,46 +1,29 @@
use crate::{
apub::{
community::do_announce, extensions::signatures::sign, insert_activity, is_apub_id_valid,
community::do_announce,
extensions::signatures::sign,
insert_activity,
is_apub_id_valid,
ActorType,
},
request::retry_custom,
DbPool, LemmyError,
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<String>,
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<A>(
pub async fn send_activity_to_community(
creator: &User_,
community: &Community,
to: Vec<String>,
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 +37,12 @@ where
}
/// Send an activity to a list of recipients, using the correct headers etc.
pub async fn send_activity<A>(
pub async fn send_activity(
client: &Client,
activity: &A,
activity: &AnyBase,
actor: &dyn ActorType,
to: Vec<String>,
) -> Result<(), LemmyError>
where
A: Serialize,
{
) -> Result<(), LemmyError> {
let activity = serde_json::to_string(&activity)?;
debug!("Sending activitypub activity {} to {:?}", activity, to);

View File

@ -1,16 +1,25 @@
use crate::{
apub::{
activities::send_activity_to_community,
create_apub_response, create_apub_tombstone_response, create_tombstone, fetch_webfinger_url,
create_apub_response,
create_apub_tombstone_response,
create_tombstone,
fetch_webfinger_url,
fetcher::{
get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_post,
get_or_fetch_and_insert_remote_comment,
get_or_fetch_and_insert_remote_post,
get_or_fetch_and_upsert_remote_user,
},
ActorType, ApubLikeableType, ApubObjectType, FromApub, ToApub,
ActorType,
ApubLikeableType,
ApubObjectType,
FromApub,
ToApub,
},
blocking,
routes::DbPoolParam,
DbPool, LemmyError,
DbPool,
LemmyError,
};
use activitystreams_new::{
activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
@ -207,7 +216,15 @@ impl ApubObjectType for Comment {
// 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(())
}
@ -239,7 +256,15 @@ impl ApubObjectType for Comment {
// 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(())
}
@ -269,7 +294,7 @@ impl ApubObjectType for Comment {
&creator,
&community,
vec![community.get_shared_inbox_url()],
delete,
delete.into_any_base()?,
client,
pool,
)
@ -314,7 +339,7 @@ impl ApubObjectType for Comment {
&creator,
&community,
vec![community.get_shared_inbox_url()],
undo,
undo.into_any_base()?,
client,
pool,
)
@ -348,7 +373,7 @@ impl ApubObjectType for Comment {
&mod_,
&community,
vec![community.get_shared_inbox_url()],
remove,
remove.into_any_base()?,
client,
pool,
)
@ -392,7 +417,7 @@ impl ApubObjectType for Comment {
&mod_,
&community,
vec![community.get_shared_inbox_url()],
undo,
undo.into_any_base()?,
client,
pool,
)
@ -430,7 +455,7 @@ impl ApubLikeableType for Comment {
&creator,
&community,
vec![community.get_shared_inbox_url()],
like,
like.into_any_base()?,
client,
pool,
)
@ -465,7 +490,7 @@ impl ApubLikeableType for Comment {
&creator,
&community,
vec![community.get_shared_inbox_url()],
dislike,
dislike.into_any_base()?,
client,
pool,
)
@ -510,7 +535,7 @@ impl ApubLikeableType for Comment {
&creator,
&community,
vec![community.get_shared_inbox_url()],
undo,
undo.into_any_base()?,
client,
pool,
)

View File

@ -1,29 +1,34 @@
use crate::{
apub::{
activities::{populate_object_props, send_activity},
create_apub_response, create_apub_tombstone_response, create_tombstone,
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,
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,
DbPool,
LemmyError,
};
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 +39,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 std::str::FromStr;
#[derive(Deserialize)]
pub struct CommunityQuery {
@ -128,27 +133,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 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(XsdAnyUri::from_str(&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 +163,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(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![self.get_followers_url()]);

This is probably much easier than that populate_object_props for everything anyway.

This is probably much easier than that populate_object_props for everything anyway.

Yes with the new library its much less verbose.

Yes with the new library its much less verbose.
insert_activity(self.creator_id, delete.clone(), true, pool).await?;
@ -181,7 +177,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 +191,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(XsdAnyUri::from_str(&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(XsdAnyUri::from_str(&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 +215,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 +229,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(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![self.get_followers_url()]);
insert_activity(mod_.id, remove.clone(), true, pool).await?;
@ -263,7 +243,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 +257,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(XsdAnyUri::from_str(&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(XsdAnyUri::from_str(&undo_id)?)
.set_to(public())
.set_many_ccs(vec![self.get_followers_url()]);
insert_activity(mod_.id, undo.clone(), true, pool).await?;
@ -311,7 +280,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(())
}
@ -358,7 +327,7 @@ impl FromApub for CommunityForm {
/// Parse an ActivityPub group received from another instance into a Lemmy community.
async fn from_apub(group: &GroupExt, client: &Client, pool: &DbPool) -> Result<Self, LemmyError> {
let creator_and_moderator_uris = group.attributed_to().unwrap();
let creator_and_moderator_uris = group.inner.attributed_to().unwrap();
let creator_uri = creator_and_moderator_uris
.as_many()
.unwrap()
@ -371,23 +340,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_single_xsd_string()
.unwrap()
.into(),
title: group.inner.preferred_username().unwrap().to_string(),
// TODO: should be parsed as html and tags like <script> removed (or use markdown source)
// -> same for post.content etc
description: group
.inner
.content()
.map(|s| s.as_single_xsd_string().unwrap().into()),
category_id: group.ext_one.category.identifier.parse::<i32>()?,
creator_id: creator.id,
removed: None,
published: group
.inner
.published()
.map(|u| u.as_ref().to_owned().naive_local()),
updated: group.updated().map(|u| u.as_ref().to_owned().naive_local()),
updated: group
.inner
.updated()
.map(|u| u.as_ref().to_owned().naive_local()),
deleted: None,
nsfw: group.ext_one.sensitive,
actor_id: group.id().unwrap().to_string(),
actor_id: group.inner.id().unwrap().to_string(),
local: false,
private_key: None,
public_key: Some(group.ext_two.to_owned().public_key.public_key_pem),
@ -440,26 +420,20 @@ pub async fn get_apub_community_followers(
Ok(create_apub_response(&collection))
}
pub async fn do_announce<A>(
activity: A,
pub async fn do_announce(
activity: AnyBase,
community: &Community,
sender: &dyn ActorType,
client: &Client,
pool: &DbPool,
) -> Result<HttpResponse, LemmyError>
where
A: Activity + Base + Serialize + Debug,
{
let mut announce = Announce::default();
populate_object_props(
&mut announce.object_props,
vec![community.get_followers_url()],
&format!("{}/announce/{}", community.actor_id, uuid::Uuid::new_v4()),
)?;
) -> Result<HttpResponse, LemmyError> {
let id = format!("{}/announce/{}", community.actor_id, uuid::Uuid::new_v4());
let mut announce = Announce::new(community.actor_id.to_owned(), activity);
announce
.announce_props
.set_actor_xsd_any_uri(community.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(activity)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
insert_activity(community.creator_id, announce.clone(), true, pool).await?;
@ -470,7 +444,7 @@ where
// this seems to be the "easiest" stable alternative for remove_item()
to.retain(|x| *x != sender.get_shared_inbox_url());
send_activity(client, &announce, community, to).await?;
send_activity(client, &announce.into_any_base()?, community, to).await?;
Ok(HttpResponse::Ok().finish())
}

View File

@ -2,14 +2,17 @@ use crate::{
apub::{
extensions::signatures::verify,
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
insert_activity, ActorType,
insert_activity,
ActorType,
},
blocking,
routes::{ChatServerParam, DbPoolParam},
LemmyError,
};
use activitystreams::activity::Undo;
use activitystreams_new::activity::Follow;
use activitystreams_new::{
activity::{Follow, Undo},
prelude::*,
};
use actix_web::{client::Client, web, HttpRequest, HttpResponse};
use lemmy_db::{
community::{Community, CommunityFollower, CommunityFollowerForm},
@ -31,14 +34,9 @@ impl CommunityAcceptedObjects {
fn follow(&self) -> Result<Follow, LemmyError> {
match self {
CommunityAcceptedObjects::Follow(f) => Ok(f.to_owned()),
CommunityAcceptedObjects::Undo(u) => Ok(
u.undo_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Follow>()?,
),
CommunityAcceptedObjects::Undo(u) => {
Ok(Follow::from_any_base(u.object.as_one().unwrap().to_owned())?.unwrap())
}
}
}
}
@ -107,7 +105,7 @@ async fn handle_follow(
})
.await?;
community.send_accept_follow(&follow, &client, &db).await?;
community.send_accept_follow(follow, &client, &db).await?;
Ok(HttpResponse::Ok().finish())
}

View File

@ -1,5 +1,6 @@
use crate::LemmyError;
use activitystreams::{ext::Extension, Actor};
use activitystreams_ext::UnparsedExtension;
use activitystreams_new::unparsed::UnparsedMutExt;
use diesel::PgConnection;
use lemmy_db::{category::Category, Crud};
use serde::{Deserialize, Serialize};
@ -37,4 +38,22 @@ impl GroupExtension {
}
}
impl<T> Extension<T> for GroupExtension where T: Actor {}
impl<U> UnparsedExtension<U> for GroupExtension
where
U: UnparsedMutExt,
{
type Error = serde_json::Error;
fn try_from_unparsed(unparsed_mut: &mut U) -> Result<Self, Self::Error> {
Ok(GroupExtension {
category: unparsed_mut.remove("category")?,
sensitive: unparsed_mut.remove("sensitive")?,
})
}
fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
unparsed_mut.insert("category", self.category)?;
unparsed_mut.insert("sensitive", self.sensitive)?;
Ok(())
}
}

View File

@ -1,4 +1,5 @@
use activitystreams::{ext::Extension, Base};
use activitystreams_ext::UnparsedExtension;
use activitystreams_new::unparsed::UnparsedMutExt;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
@ -8,4 +9,22 @@ pub struct PageExtension {
pub sensitive: bool,
}
impl<T> Extension<T> for PageExtension where T: Base {}
impl<U> UnparsedExtension<U> for PageExtension
where
U: UnparsedMutExt,
{
type Error = serde_json::Error;
fn try_from_unparsed(unparsed_mut: &mut U) -> Result<Self, Self::Error> {
Ok(PageExtension {
comments_enabled: unparsed_mut.remove("commentsEnabled")?,
sensitive: unparsed_mut.remove("sensitive")?,
})
}
fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
unparsed_mut.insert("commentsEnabled", self.comments_enabled)?;
unparsed_mut.insert("sensitive", self.sensitive)?;

Its so tempting to add the stickied here. It'd be so much easier than using the "featured" as a separate list.

Its so tempting to add the stickied here. It'd be so much easier than using the "featured" as a separate list.

Hmm we could do that, its not part of the ActivityPub standard. Only thing is that we wouldnt be compatible with Mastodon, but our HTTP Signatures arent compatible with theirs either. So it might be a way to get things working, and later we do the proper, compatible implementation.

Or we just do it right from the start, its not that complicated.

Hmm we could do that, its not part of the ActivityPub standard. Only thing is that we wouldnt be compatible with Mastodon, but our HTTP Signatures arent compatible with theirs either. So it might be a way to get things working, and later we do the proper, compatible implementation. Or we just do it right from the start, its not that complicated.
Ok(())
}
}

View File

@ -1,5 +1,6 @@
use crate::{apub::ActorType, LemmyError};
use activitystreams::ext::Extension;
use activitystreams_ext::UnparsedExtension;
use activitystreams_new::unparsed::UnparsedMutExt;
use actix_web::{client::ClientRequest, HttpRequest};
use http_signature_normalization_actix::{
digest::{DigestClient, SignExt},
@ -98,4 +99,20 @@ impl PublicKey {
}
}
impl<T> Extension<T> for PublicKeyExtension where T: activitystreams::Actor {}
impl<U> UnparsedExtension<U> for PublicKeyExtension
where
U: UnparsedMutExt,
{
type Error = serde_json::Error;
fn try_from_unparsed(unparsed_mut: &mut U) -> Result<Self, Self::Error> {
Ok(PublicKeyExtension {
public_key: unparsed_mut.remove("publicKey")?,
})
}
fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
unparsed_mut.insert("publicKey", self.public_key)?;
Ok(())
}
}

View File

@ -4,7 +4,8 @@ use crate::{
blocking,
request::{retry, RecvError},
routes::nodeinfo::{NodeInfo, NodeInfoWellKnown},
DbPool, LemmyError,
DbPool,
LemmyError,
};
use activitystreams_new::{base::BaseExt, object::Note, prelude::*, primitives::XsdAnyUri};
use actix_web::client::Client;
@ -20,7 +21,9 @@ use lemmy_db::{
post_view::PostView,
user::{UserForm, User_},
user_view::UserView,
Crud, Joinable, SearchType,
Crud,
Joinable,
SearchType,
};
use lemmy_utils::get_apub_protocol_string;
use log::debug;

View File

@ -19,7 +19,8 @@ use crate::{
blocking,
request::{retry, RecvError},
routes::webfinger::WebFingerResponse,
DbPool, LemmyError,
DbPool,
LemmyError,
};
use activitystreams_ext::{Ext1, Ext2};
use activitystreams_new::{
@ -239,7 +240,7 @@ pub trait ActorType {
#[allow(unused_variables)]
async fn send_accept_follow(
&self,
follow: &Follow,
follow: Follow,
client: &Client,
pool: &DbPool,
) -> Result<(), LemmyError>;

View File

@ -1,25 +1,31 @@
use crate::{
apub::{
activities::{populate_object_props, send_activity_to_community},
create_apub_response, create_apub_tombstone_response, create_tombstone,
activities::send_activity_to_community,
create_apub_response,
create_apub_tombstone_response,
create_tombstone,
extensions::page_extension::PageExtension,
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
ActorType, ApubLikeableType, ApubObjectType, FromApub, PageExt, ToApub,
ActorType,
ApubLikeableType,
ApubObjectType,
FromApub,
PageExt,
ToApub,
},
blocking,
routes::DbPoolParam,
DbPool, LemmyError,
};
use activitystreams::{
activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
BaseBox,
DbPool,
LemmyError,
};
use activitystreams_ext::Ext1;
use activitystreams_new::{
activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
context,
object::{kind::PageType, Image, Page, Tombstone},
prelude::*,
primitives::{XsdAnyUri, XsdDateTime},
public,
};
use actix_web::{body::Body, client::Client, web, HttpResponse};
use lemmy_db::{
@ -30,6 +36,7 @@ use lemmy_db::{
};
use lemmy_utils::{convert_datetime, get_apub_protocol_string, settings::Settings};
use serde::Deserialize;
use std::str::FromStr;
#[derive(Deserialize)]
pub struct PostQuery {
@ -265,22 +272,18 @@ impl ApubObjectType for Post {
let id = format!("{}/create/{}", self.ap_id, uuid::Uuid::new_v4());
let mut create = Create::new();
populate_object_props(
&mut create.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut create = Create::new(creator.actor_id.to_owned(), page.into_any_base()?);
create
.create_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
creator,
&community,
vec![community.get_shared_inbox_url()],
create,
create.into_any_base()?,
client,
pool,
)
@ -302,22 +305,18 @@ impl ApubObjectType for Post {
let id = format!("{}/update/{}", self.ap_id, uuid::Uuid::new_v4());
let mut update = Update::new();
populate_object_props(
&mut update.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut update = Update::new(creator.actor_id.to_owned(), page.into_any_base()?);
update
.update_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
creator,
&community,
vec![community.get_shared_inbox_url()],
update,
update.into_any_base()?,
client,
pool,
)
@ -337,24 +336,18 @@ impl ApubObjectType for Post {
let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??;
let id = format!("{}/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut delete = Delete::default();
populate_object_props(
&mut delete.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut delete = Delete::new(creator.actor_id.to_owned(), page.into_any_base()?);
delete
.delete_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
creator,
&community,
vec![community.get_shared_inbox_url()],
delete,
delete.into_any_base()?,
client,
pool,
)
@ -374,40 +367,28 @@ impl ApubObjectType for Post {
let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??;
let id = format!("{}/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut delete = Delete::default();
populate_object_props(
&mut delete.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut delete = Delete::new(creator.actor_id.to_owned(), page.into_any_base()?);
delete
.delete_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
// TODO
// Undo that fake activity
let undo_id = format!("{}/undo/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default();
populate_object_props(
&mut undo.object_props,
vec![community.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(XsdAnyUri::from_str(&undo_id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
creator,
&community,
vec![community.get_shared_inbox_url()],
undo,
undo.into_any_base()?,
client,
pool,
)
@ -427,24 +408,18 @@ impl ApubObjectType for Post {
let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??;
let id = format!("{}/remove/{}", self.ap_id, uuid::Uuid::new_v4());
let mut remove = Remove::default();
populate_object_props(
&mut remove.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut remove = Remove::new(mod_.actor_id.to_owned(), page.into_any_base()?);
remove
.remove_props
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
mod_,
&community,
vec![community.get_shared_inbox_url()],
remove,
remove.into_any_base()?,
client,
pool,
)
@ -464,39 +439,27 @@ impl ApubObjectType for Post {
let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??;
let id = format!("{}/remove/{}", self.ap_id, uuid::Uuid::new_v4());
let mut remove = Remove::default();
populate_object_props(
&mut remove.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut remove = Remove::new(mod_.actor_id.to_owned(), page.into_any_base()?);
remove
.remove_props
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
// Undo that fake activity
let undo_id = format!("{}/undo/remove/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default();
populate_object_props(
&mut undo.object_props,
vec![community.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(XsdAnyUri::from_str(&undo_id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
mod_,
&community,
vec![community.get_shared_inbox_url()],
undo,
undo.into_any_base()?,
client,
pool,
)
@ -520,22 +483,18 @@ impl ApubLikeableType for Post {
let id = format!("{}/like/{}", self.ap_id, uuid::Uuid::new_v4());
let mut like = Like::new();
populate_object_props(
&mut like.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut like = Like::new(creator.actor_id.to_owned(), page.into_any_base()?);
like
.like_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
&creator,
&community,
vec![community.get_shared_inbox_url()],
like,
like.into_any_base()?,
client,
pool,
)
@ -556,22 +515,18 @@ impl ApubLikeableType for Post {
let id = format!("{}/dislike/{}", self.ap_id, uuid::Uuid::new_v4());
let mut dislike = Dislike::new();
populate_object_props(
&mut dislike.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut dislike = Dislike::new(creator.actor_id.to_owned(), page.into_any_base()?);
dislike
.dislike_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
&creator,
&community,
vec![community.get_shared_inbox_url()],
dislike,
dislike.into_any_base()?,
client,
pool,
)
@ -592,38 +547,28 @@ impl ApubLikeableType for Post {
let id = format!("{}/like/{}", self.ap_id, uuid::Uuid::new_v4());
let mut like = Like::new();
populate_object_props(
&mut like.object_props,
vec![community.get_followers_url()],
&id,
)?;
let mut like = Like::new(creator.actor_id.to_owned(), page.into_any_base()?);
like
.like_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(BaseBox::from_concrete(page)?)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
// TODO
// Undo that fake activity
let undo_id = format!("{}/undo/like/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default();
populate_object_props(
&mut undo.object_props,
vec![community.get_followers_url()],
&undo_id,
)?;
let mut undo = Undo::new(creator.actor_id.to_owned(), like.into_any_base()?);
undo
.undo_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(like)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&undo_id)?)
.set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community(
&creator,
&community,
vec![community.get_shared_inbox_url()],
undo,
undo.into_any_base()?,
client,
pool,
)

View File

@ -1,16 +1,24 @@
use crate::{
apub::{
activities::send_activity, create_tombstone, fetcher::get_or_fetch_and_upsert_remote_user,
insert_activity, ApubObjectType, FromApub, ToApub,
activities::send_activity,
create_tombstone,
fetcher::get_or_fetch_and_upsert_remote_user,
insert_activity,
ApubObjectType,
FromApub,
ToApub,
},
blocking, DbPool, LemmyError,
blocking,
DbPool,
LemmyError,
};
use activitystreams::{
use activitystreams_new::{
activity::{Create, Delete, Undo, Update},
context,
object::{kind::NoteType, properties::ObjectProperties, Note},
object::{kind::NoteType, Note, Tombstone},
prelude::*,
primitives::{XsdAnyUri, XsdDateTime},
};
use activitystreams_new::object::Tombstone;
use actix_web::client::Client;
use lemmy_db::{
private_message::{PrivateMessage, PrivateMessageForm},
@ -18,14 +26,14 @@ use lemmy_db::{
Crud,
};
use lemmy_utils::convert_datetime;
use std::str::FromStr;
#[async_trait::async_trait(?Send)]
impl ToApub for PrivateMessage {
type Response = Note;
async fn to_apub(&self, pool: &DbPool) -> Result<Note, LemmyError> {
let mut private_message = Note::default();
let oprops: &mut ObjectProperties = private_message.as_mut();
let mut private_message = Note::new();
let creator_id = self.creator_id;
let creator = blocking(pool, move |conn| User_::read(conn, creator_id)).await??;
@ -33,16 +41,16 @@ impl ToApub for PrivateMessage {
let recipient_id = self.recipient_id;
let recipient = blocking(pool, move |conn| User_::read(conn, recipient_id)).await??;
oprops
.set_context_xsd_any_uri(context())?
.set_id(self.ap_id.to_owned())?
.set_published(convert_datetime(self.published))?
.set_content_xsd_string(self.content.to_owned())?
.set_to_xsd_any_uri(recipient.actor_id)?
.set_attributed_to_xsd_any_uri(creator.actor_id)?;
private_message
.set_context(context())
.set_id(XsdAnyUri::from_str(&self.ap_id.to_owned())?)
.set_published(XsdDateTime::from(convert_datetime(self.published)))
.set_content(self.content.to_owned())
.set_to(recipient.actor_id)
.set_attributed_to(creator.actor_id);
if let Some(u) = self.updated {
oprops.set_updated(convert_datetime(u))?;
private_message.set_updated(XsdDateTime::from(convert_datetime(u)));
}
Ok(private_message)
@ -68,31 +76,35 @@ impl FromApub for PrivateMessageForm {
client: &Client,
pool: &DbPool,
) -> Result<PrivateMessageForm, LemmyError> {
let oprops = &note.object_props;
let creator_actor_id = &oprops.get_attributed_to_xsd_any_uri().unwrap();
let creator_actor_id = note
.attributed_to()
.unwrap()
.clone()
.single_xsd_any_uri()
.unwrap();
let creator = get_or_fetch_and_upsert_remote_user(&creator_actor_id, client, pool).await?;
let recipient_actor_id = &oprops.get_to_xsd_any_uri().unwrap();
let recipient_actor_id = note.to().unwrap().clone().single_xsd_any_uri().unwrap();
let recipient = get_or_fetch_and_upsert_remote_user(&recipient_actor_id, client, pool).await?;
Ok(PrivateMessageForm {
creator_id: creator.id,
recipient_id: recipient.id,
content: oprops
.get_content_xsd_string()
.map(|c| c.to_string())
.unwrap(),
published: oprops
.get_published()
.map(|u| u.as_ref().to_owned().naive_local()),
updated: oprops
.get_updated()
content: note
.content()
.unwrap()
.as_single_xsd_string()
.unwrap()
.to_string(),
published: note
.published()
.map(|u| u.as_ref().to_owned().naive_local()),
updated: note.updated().map(|u| u.as_ref().to_owned().naive_local()),
deleted: None,
read: None,
ap_id: oprops.get_id().unwrap().to_string(),
ap_id: note.id().unwrap().to_string(),
local: false,
})
}
@ -113,21 +125,16 @@ impl ApubObjectType for PrivateMessage {
let recipient_id = self.recipient_id;
let recipient = blocking(pool, move |conn| User_::read(conn, recipient_id)).await??;
let mut create = Create::new();
create
.object_props
.set_context_xsd_any_uri(context())?
.set_id(id)?;
let mut create = Create::new(creator.actor_id.to_owned(), note.into_any_base()?);
let to = format!("{}/inbox", recipient.actor_id);
create
.create_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(note)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(to.clone());
insert_activity(creator.id, create.clone(), true, pool).await?;
send_activity(client, &create, creator, vec![to]).await?;
send_activity(client, &create.into_any_base()?, creator, vec![to]).await?;
Ok(())
}
@ -144,21 +151,16 @@ impl ApubObjectType for PrivateMessage {
let recipient_id = self.recipient_id;
let recipient = blocking(pool, move |conn| User_::read(conn, recipient_id)).await??;
let mut update = Update::new();
update
.object_props
.set_context_xsd_any_uri(context())?
.set_id(id)?;
let mut update = Update::new(creator.actor_id.to_owned(), note.into_any_base()?);
let to = format!("{}/inbox", recipient.actor_id);
update
.update_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(note)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(to.clone());
insert_activity(creator.id, update.clone(), true, pool).await?;
send_activity(client, &update, creator, vec![to]).await?;
send_activity(client, &update.into_any_base()?, creator, vec![to]).await?;
Ok(())
}
@ -174,21 +176,16 @@ impl ApubObjectType for PrivateMessage {
let recipient_id = self.recipient_id;
let recipient = blocking(pool, move |conn| User_::read(conn, recipient_id)).await??;
let mut delete = Delete::new();
delete
.object_props
.set_context_xsd_any_uri(context())?
.set_id(id)?;
let mut delete = Delete::new(creator.actor_id.to_owned(), note.into_any_base()?);
let to = format!("{}/inbox", recipient.actor_id);
delete
.delete_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(note)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(to.clone());
insert_activity(creator.id, delete.clone(), true, pool).await?;
send_activity(client, &delete, creator, vec![to]).await?;
send_activity(client, &delete.into_any_base()?, creator, vec![to]).await?;
Ok(())
}
@ -204,36 +201,25 @@ impl ApubObjectType for PrivateMessage {
let recipient_id = self.recipient_id;
let recipient = blocking(pool, move |conn| User_::read(conn, recipient_id)).await??;
let mut delete = Delete::new();
delete
.object_props
.set_context_xsd_any_uri(context())?
.set_id(id)?;
let mut delete = Delete::new(creator.actor_id.to_owned(), note.into_any_base()?);
let to = format!("{}/inbox", recipient.actor_id);
delete
.delete_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(note)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&id)?)
.set_to(to.clone());
// TODO
// Undo that fake activity
let undo_id = format!("{}/undo/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default();
let mut undo = Undo::new(creator.actor_id.to_owned(), delete.into_any_base()?);
undo
.object_props
.set_context_xsd_any_uri(context())?
.set_id(undo_id)?;
undo
.undo_props
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
.set_object_base_box(delete)?;
.set_context(context())
.set_id(XsdAnyUri::from_str(&undo_id)?)
.set_to(to.clone());
insert_activity(creator.id, undo.clone(), true, pool).await?;
send_activity(client, &undo, creator, vec![to]).await?;
send_activity(client, &undo.into_any_base()?, creator, vec![to]).await?;
Ok(())
}

View File

@ -8,10 +8,15 @@ use crate::{
community::do_announce,
extensions::signatures::verify,
fetcher::{
get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_post,
get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user,
get_or_fetch_and_insert_remote_comment,
get_or_fetch_and_insert_remote_post,
get_or_fetch_and_upsert_remote_community,
get_or_fetch_and_upsert_remote_user,
},
insert_activity, FromApub, GroupExt, PageExt,
insert_activity,
FromApub,
GroupExt,
PageExt,
},
blocking,
routes::{ChatServerParam, DbPoolParam},
@ -19,13 +24,16 @@ use crate::{
server::{SendComment, SendCommunityRoomMessage, SendPost},
UserOperation,
},
DbPool, LemmyError,
DbPool,
LemmyError,
};
use activitystreams::{
use activitystreams_new::{
activity::{Announce, Create, Delete, Dislike, Like, Remove, Undo, Update},
Activity, Base, BaseBox,
base::AnyBase,
object::Note,
prelude::{ExtendsExt, *},
primitives::XsdAnyUri,
};
use activitystreams_new::{object::Note, primitives::XsdAnyUri};
use actix_web::{client::Client, web, HttpRequest, HttpResponse};
use lemmy_db::{
comment::{Comment, CommentForm, CommentLike, CommentLikeForm},
@ -35,7 +43,8 @@ use lemmy_db::{
naive_now,
post::{Post, PostForm, PostLike, PostLikeForm},
post_view::PostView,
Crud, Likeable,
Crud,
Likeable,
};
use lemmy_utils::scrape_text_for_mentions;
use log::debug;
@ -43,7 +52,7 @@ use serde::{Deserialize, Serialize};
use std::fmt::Debug;
#[serde(untagged)]
#[derive(Serialize, Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum SharedAcceptedObjects {
Create(Box<Create>),
Update(Box<Update>),
@ -56,47 +65,50 @@ pub enum SharedAcceptedObjects {
}
impl SharedAcceptedObjects {
fn object(&self) -> Option<&BaseBox> {
// TODO: these shouldnt be necessary anymore
fn object(&self) -> Option<AnyBase> {
match self {
SharedAcceptedObjects::Create(c) => c.create_props.get_object_base_box(),
SharedAcceptedObjects::Update(u) => u.update_props.get_object_base_box(),
SharedAcceptedObjects::Like(l) => l.like_props.get_object_base_box(),
SharedAcceptedObjects::Dislike(d) => d.dislike_props.get_object_base_box(),
SharedAcceptedObjects::Delete(d) => d.delete_props.get_object_base_box(),
SharedAcceptedObjects::Undo(d) => d.undo_props.get_object_base_box(),
SharedAcceptedObjects::Remove(r) => r.remove_props.get_object_base_box(),
SharedAcceptedObjects::Announce(a) => a.announce_props.get_object_base_box(),
SharedAcceptedObjects::Create(c) => c.object().to_owned().one(),
SharedAcceptedObjects::Update(u) => u.object().to_owned().one(),
SharedAcceptedObjects::Like(l) => l.object().to_owned().one(),
SharedAcceptedObjects::Dislike(d) => d.object().to_owned().one(),
SharedAcceptedObjects::Delete(d) => d.object().to_owned().one(),
SharedAcceptedObjects::Undo(d) => d.object().to_owned().one(),
SharedAcceptedObjects::Remove(r) => r.object().to_owned().one(),
SharedAcceptedObjects::Announce(a) => a.object().to_owned().one(),
}
}
fn sender(&self) -> XsdAnyUri {
let uri = match self {
SharedAcceptedObjects::Create(c) => c.create_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Update(u) => u.update_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Like(l) => l.like_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Dislike(d) => d.dislike_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Delete(d) => d.delete_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Undo(d) => d.undo_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Remove(r) => r.remove_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Announce(a) => a.announce_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Create(c) => c.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Update(u) => u.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Like(l) => l.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Dislike(d) => d.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Delete(d) => d.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Undo(d) => d.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Remove(r) => r.actor.to_owned().single_xsd_any_uri(),
SharedAcceptedObjects::Announce(a) => a.actor.to_owned().single_xsd_any_uri(),
};
uri.unwrap().clone()
uri.unwrap()
}
fn cc(&self) -> String {
// TODO: there is probably an easier way to do this
let oprops = match self {
SharedAcceptedObjects::Create(c) => &c.object_props,
SharedAcceptedObjects::Update(u) => &u.object_props,
SharedAcceptedObjects::Like(l) => &l.object_props,
SharedAcceptedObjects::Dislike(d) => &d.object_props,
SharedAcceptedObjects::Delete(d) => &d.object_props,
SharedAcceptedObjects::Undo(d) => &d.object_props,
SharedAcceptedObjects::Remove(r) => &r.object_props,
SharedAcceptedObjects::Announce(a) => &a.object_props,
let cc = match self {
SharedAcceptedObjects::Create(c) => c.cc().to_owned(),
SharedAcceptedObjects::Update(u) => u.cc().to_owned(),
SharedAcceptedObjects::Like(l) => l.cc().to_owned(),
SharedAcceptedObjects::Dislike(d) => d.cc().to_owned(),
SharedAcceptedObjects::Delete(d) => d.cc().to_owned(),
SharedAcceptedObjects::Undo(d) => d.cc().to_owned(),
SharedAcceptedObjects::Remove(r) => r.cc().to_owned(),
SharedAcceptedObjects::Announce(a) => a.cc().to_owned(),
};
oprops
.get_many_cc_xsd_any_uris()
cc.unwrap()
.clone()
.many()
.unwrap()
.next()
.first()
.unwrap()
.as_xsd_any_uri()
.unwrap()
.to_string()
}
@ -117,9 +129,8 @@ pub async fn shared_inbox(
let json = serde_json::to_string(&activity)?;
debug!("Shared inbox received activity: {}", json);
let object = activity.object().cloned().unwrap();
let sender = &activity.sender();
let cc = &activity.cc();
let sender = &activity.to_owned().sender();
let cc = activity.to_owned().cc();
// TODO: this is hacky, we should probably send the community id directly somehow
let to = cc.replace("/followers", "");
@ -132,74 +143,75 @@ pub async fn shared_inbox(
}
}
match (activity, object.kind()) {
let object = activity.object().unwrap();
match (activity, object.kind_str()) {
(SharedAcceptedObjects::Create(c), Some("Page")) => {
receive_create_post((*c).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Create>(*c, &to, sender, client, pool).await
announce_activity_if_valid(c.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Update(u), Some("Page")) => {
receive_update_post((*u).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Update>(*u, &to, sender, client, pool).await
announce_activity_if_valid(u.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Like(l), Some("Page")) => {
receive_like_post((*l).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Like>(*l, &to, sender, client, pool).await
announce_activity_if_valid(l.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Dislike(d), Some("Page")) => {
receive_dislike_post((*d).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Dislike>(*d, &to, sender, client, pool).await
announce_activity_if_valid(d.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Delete(d), Some("Page")) => {
receive_delete_post((*d).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Delete>(*d, &to, sender, client, pool).await
announce_activity_if_valid(d.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Remove(r), Some("Page")) => {
receive_remove_post((*r).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Remove>(*r, &to, sender, client, pool).await
announce_activity_if_valid(r.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Create(c), Some("Note")) => {
receive_create_comment((*c).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Create>(*c, &to, sender, client, pool).await
announce_activity_if_valid(c.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Update(u), Some("Note")) => {
receive_update_comment((*u).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Update>(*u, &to, sender, client, pool).await
announce_activity_if_valid(u.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Like(l), Some("Note")) => {
receive_like_comment((*l).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Like>(*l, &to, sender, client, pool).await
announce_activity_if_valid(l.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Dislike(d), Some("Note")) => {
receive_dislike_comment((*d).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Dislike>(*d, &to, sender, client, pool).await
announce_activity_if_valid(d.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Delete(d), Some("Note")) => {
receive_delete_comment((*d).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Delete>(*d, &to, sender, client, pool).await
announce_activity_if_valid(d.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Remove(r), Some("Note")) => {
receive_remove_comment((*r).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Remove>(*r, &to, sender, client, pool).await
announce_activity_if_valid(r.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Delete(d), Some("Group")) => {
receive_delete_community((*d).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Delete>(*d, &to, sender, client, pool).await
announce_activity_if_valid(d.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Remove(r), Some("Group")) => {
receive_remove_community((*r).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Remove>(*r, &to, sender, client, pool).await
announce_activity_if_valid(r.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Undo(u), Some("Delete")) => {
receive_undo_delete((*u).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Undo>(*u, &to, sender, client, pool).await
announce_activity_if_valid(u.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Undo(u), Some("Remove")) => {
receive_undo_remove((*u).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Undo>(*u, &to, sender, client, pool).await
announce_activity_if_valid(u.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Undo(u), Some("Like")) => {
receive_undo_like((*u).clone(), client, pool, chat_server).await?;
announce_activity_if_valid::<Undo>(*u, &to, sender, client, pool).await
announce_activity_if_valid(u.into_any_base()?, &to, sender, client, pool).await
}
(SharedAcceptedObjects::Announce(a), _) => receive_announce(a, client, pool, chat_server).await,
(a, _) => receive_unhandled_activity(a),
@ -207,16 +219,13 @@ pub async fn shared_inbox(
}
// TODO: should pass in sender as ActorType, but thats a bit tricky in shared_inbox()
async fn announce_activity_if_valid<A>(
activity: A,
async fn announce_activity_if_valid(
activity: AnyBase,
community_uri: &str,
sender: &XsdAnyUri,
client: &Client,
pool: &DbPool,
) -> Result<HttpResponse, LemmyError>
where
A: Activity + Base + Serialize + Debug,
{
) -> Result<HttpResponse, LemmyError> {
let community_uri = community_uri.to_owned();
let community = blocking(pool, move |conn| {
Community::read_from_actor_id(conn, &community_uri)
@ -238,71 +247,60 @@ async fn receive_announce(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let object = announce
.announce_props
.get_object_base_box()
.unwrap()
.to_owned();
let object = announce.to_owned().object.one().unwrap();
// TODO: too much copy paste
match object.kind() {
match object.kind_str() {
Some("Create") => {
let create = object.into_concrete::<Create>()?;
let inner_object = create.create_props.get_object_base_box().unwrap();
match inner_object.kind() {
let create = Create::from_any_base(object)?.unwrap();
match create.object.as_single_kind_str() {
Some("Page") => receive_create_post(create, client, pool, chat_server).await,
Some("Note") => receive_create_comment(create, client, pool, chat_server).await,
_ => receive_unhandled_activity(announce),
}
}
Some("Update") => {
let update = object.into_concrete::<Update>()?;
let inner_object = update.update_props.get_object_base_box().unwrap();
match inner_object.kind() {
let update = Update::from_any_base(object)?.unwrap();
match update.object.as_single_kind_str() {
Some("Page") => receive_update_post(update, client, pool, chat_server).await,
Some("Note") => receive_update_comment(update, client, pool, chat_server).await,
_ => receive_unhandled_activity(announce),
}
}
Some("Like") => {
let like = object.into_concrete::<Like>()?;
let inner_object = like.like_props.get_object_base_box().unwrap();
match inner_object.kind() {
let like = Like::from_any_base(object)?.unwrap();
match like.object.as_single_kind_str() {
Some("Page") => receive_like_post(like, client, pool, chat_server).await,
Some("Note") => receive_like_comment(like, client, pool, chat_server).await,
_ => receive_unhandled_activity(announce),
}
}
Some("Dislike") => {
let dislike = object.into_concrete::<Dislike>()?;
let inner_object = dislike.dislike_props.get_object_base_box().unwrap();
match inner_object.kind() {
let dislike = Dislike::from_any_base(object)?.unwrap();
match dislike.object.as_single_kind_str() {
Some("Page") => receive_dislike_post(dislike, client, pool, chat_server).await,
Some("Note") => receive_dislike_comment(dislike, client, pool, chat_server).await,
_ => receive_unhandled_activity(announce),
}
}
Some("Delete") => {
let delete = object.into_concrete::<Delete>()?;
let inner_object = delete.delete_props.get_object_base_box().unwrap();
match inner_object.kind() {
let delete = Delete::from_any_base(object)?.unwrap();
match delete.object.as_single_kind_str() {
Some("Page") => receive_delete_post(delete, client, pool, chat_server).await,
Some("Note") => receive_delete_comment(delete, client, pool, chat_server).await,
_ => receive_unhandled_activity(announce),
}
}
Some("Remove") => {
let remove = object.into_concrete::<Remove>()?;
let inner_object = remove.remove_props.get_object_base_box().unwrap();
match inner_object.kind() {
let remove = Remove::from_any_base(object)?.unwrap();
match remove.object.as_single_kind_str() {
Some("Page") => receive_remove_post(remove, client, pool, chat_server).await,
Some("Note") => receive_remove_comment(remove, client, pool, chat_server).await,
_ => receive_unhandled_activity(announce),
}
}
Some("Undo") => {
let undo = object.into_concrete::<Undo>()?;
let inner_object = undo.undo_props.get_object_base_box().unwrap();
match inner_object.kind() {
let undo = Undo::from_any_base(object)?.unwrap();
match undo.object.as_single_kind_str() {
Some("Delete") => receive_undo_delete(undo, client, pool, chat_server).await,
Some("Remove") => receive_undo_remove(undo, client, pool, chat_server).await,
Some("Like") => receive_undo_like(undo, client, pool, chat_server).await,
@ -327,15 +325,9 @@ async fn receive_create_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let page = create
.create_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(create.object.to_owned().one().unwrap())?.unwrap();
let user_uri = create.create_props.get_actor_xsd_any_uri().unwrap();
let user_uri = create.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -369,15 +361,9 @@ async fn receive_create_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = create
.create_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(create.object.to_owned().one().unwrap())?.unwrap();
let user_uri = create.create_props.get_actor_xsd_any_uri().unwrap();
let user_uri = create.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -424,15 +410,9 @@ async fn receive_update_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let page = update
.update_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(update.object.to_owned().one().unwrap())?.unwrap();
let user_uri = update.update_props.get_actor_xsd_any_uri().unwrap();
let user_uri = update.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -466,15 +446,9 @@ async fn receive_like_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let page = like
.like_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(like.object.to_owned().one().unwrap())?.unwrap();
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user_uri = like.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -517,15 +491,9 @@ async fn receive_dislike_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let page = dislike
.dislike_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(dislike.object.to_owned().one().unwrap())?.unwrap();
let user_uri = dislike.dislike_props.get_actor_xsd_any_uri().unwrap();
let user_uri = dislike.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -568,15 +536,9 @@ async fn receive_update_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = update
.update_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(update.object.to_owned().one().unwrap())?.unwrap();
let user_uri = update.update_props.get_actor_xsd_any_uri().unwrap();
let user_uri = update.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -623,15 +585,9 @@ async fn receive_like_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = like
.like_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(like.object.to_owned().one().unwrap())?.unwrap();
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user_uri = like.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -681,15 +637,9 @@ async fn receive_dislike_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = dislike
.dislike_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(dislike.object.to_owned().one().unwrap())?.unwrap();
let user_uri = dislike.dislike_props.get_actor_xsd_any_uri().unwrap();
let user_uri = dislike.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -739,15 +689,9 @@ async fn receive_delete_community(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor.to_owned().single_xsd_any_uri().unwrap();
let group = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<GroupExt>()?;
let group = GroupExt::from_any_base(delete.object.to_owned().one().unwrap())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -812,15 +756,9 @@ async fn receive_remove_community(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
let mod_uri = remove.actor.to_owned().single_xsd_any_uri().unwrap();
let group = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<GroupExt>()?;
let group = GroupExt::from_any_base(remove.object.to_owned().one().unwrap())?.unwrap();
let mod_ = get_or_fetch_and_upsert_remote_user(&mod_uri, client, pool).await?;
@ -885,15 +823,9 @@ async fn receive_delete_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor.to_owned().single_xsd_any_uri().unwrap();
let page = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(delete.object.to_owned().one().unwrap())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -947,15 +879,9 @@ async fn receive_remove_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
let mod_uri = remove.actor.to_owned().single_xsd_any_uri().unwrap();
let page = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(remove.object.to_owned().one().unwrap())?.unwrap();
let mod_ = get_or_fetch_and_upsert_remote_user(&mod_uri, client, pool).await?;
@ -1009,15 +935,9 @@ async fn receive_delete_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor.to_owned().single_xsd_any_uri().unwrap();
let note = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(delete.object.to_owned().one().unwrap())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -1073,15 +993,9 @@ async fn receive_remove_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
let mod_uri = remove.actor.to_owned().single_xsd_any_uri().unwrap();
let note = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(remove.object.to_owned().one().unwrap())?.unwrap();
let mod_ = get_or_fetch_and_upsert_remote_user(&mod_uri, client, pool).await?;
@ -1137,22 +1051,9 @@ async fn receive_undo_delete(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let delete = undo
.undo_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Delete>()?;
let type_ = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.kind()
.unwrap();
let delete = Delete::from_any_base(undo.object.to_owned().one().unwrap())?.unwrap();
let type_ = delete.object.as_single_kind_str().unwrap();
match type_ {
"Note" => receive_undo_delete_comment(delete, client, pool, chat_server).await,
"Page" => receive_undo_delete_post(delete, client, pool, chat_server).await,
@ -1167,22 +1068,9 @@ async fn receive_undo_remove(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let remove = undo
.undo_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Remove>()?;
let type_ = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.kind()
.unwrap();
let remove = Remove::from_any_base(undo.object.to_owned().one().unwrap())?.unwrap();
let type_ = remove.object.as_single_kind_str().unwrap();
match type_ {
"Note" => receive_undo_remove_comment(remove, client, pool, chat_server).await,
"Page" => receive_undo_remove_post(remove, client, pool, chat_server).await,
@ -1197,15 +1085,9 @@ async fn receive_undo_delete_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor.to_owned().single_xsd_any_uri().unwrap();
let note = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(delete.object.to_owned().one().unwrap())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -1261,15 +1143,9 @@ async fn receive_undo_remove_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
let mod_uri = remove.actor.to_owned().single_xsd_any_uri().unwrap();
let note = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(remove.object.to_owned().one().unwrap())?.unwrap();
let mod_ = get_or_fetch_and_upsert_remote_user(&mod_uri, client, pool).await?;
@ -1325,15 +1201,9 @@ async fn receive_undo_delete_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor.to_owned().single_xsd_any_uri().unwrap();
let page = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(delete.object.to_owned().one().unwrap())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -1387,15 +1257,9 @@ async fn receive_undo_remove_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
let mod_uri = remove.actor.to_owned().single_xsd_any_uri().unwrap();
let page = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(remove.object.to_owned().one().unwrap())?.unwrap();
let mod_ = get_or_fetch_and_upsert_remote_user(&mod_uri, client, pool).await?;
@ -1449,15 +1313,9 @@ async fn receive_undo_delete_community(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor.to_owned().single_xsd_any_uri().unwrap();
let group = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<GroupExt>()?;
let group = GroupExt::from_any_base(delete.object.to_owned().one().unwrap())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -1522,15 +1380,9 @@ async fn receive_undo_remove_community(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
let mod_uri = remove.actor.to_owned().single_xsd_any_uri().unwrap();
let group = remove
.remove_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<GroupExt>()?;
let group = GroupExt::from_any_base(remove.object.to_owned().one().unwrap())?.unwrap();
let mod_ = get_or_fetch_and_upsert_remote_user(&mod_uri, client, pool).await?;
@ -1595,22 +1447,9 @@ async fn receive_undo_like(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let like = undo
.undo_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Like>()?;
let type_ = like
.like_props
.get_object_base_box()
.to_owned()
.unwrap()
.kind()
.unwrap();
let like = Like::from_any_base(undo.object.to_owned().one().unwrap())?.unwrap();
let type_ = like.object.as_single_kind_str().unwrap();
match type_ {
"Note" => receive_undo_like_comment(like, client, pool, chat_server).await,
"Page" => receive_undo_like_post(like, client, pool, chat_server).await,
@ -1624,15 +1463,9 @@ async fn receive_undo_like_comment(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = like
.like_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let note = Note::from_any_base(like.object.to_owned().one().unwrap())?.unwrap();
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user_uri = like.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -1678,15 +1511,9 @@ async fn receive_undo_like_post(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let page = like
.like_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<PageExt>()?;
let page = PageExt::from_any_base(like.object.to_owned().one().unwrap())?.unwrap();
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user_uri = like.actor.to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;

View File

@ -1,12 +1,18 @@
use crate::{
api::claims::Claims,
apub::{
activities::send_activity, create_apub_response, insert_activity, ActorType, FromApub,
PersonExt, ToApub,
activities::send_activity,
create_apub_response,
insert_activity,
ActorType,
FromApub,
PersonExt,
ToApub,
},
blocking,
routes::DbPoolParam,
DbPool, LemmyError,
DbPool,
LemmyError,
};
use activitystreams_ext::Ext1;
use activitystreams_new::{
@ -105,7 +111,7 @@ impl ActorType for User_ {
insert_activity(self.id, follow.clone(), true, pool).await?;
send_activity(client, &follow, self, vec![to]).await?;
send_activity(client, &follow.into_any_base()?, self, vec![to]).await?;
Ok(())
}
@ -129,7 +135,7 @@ impl ActorType for User_ {
insert_activity(self.id, undo.clone(), true, pool).await?;
send_activity(client, &undo, self, vec![to]).await?;
send_activity(client, &undo.into_any_base()?, self, vec![to]).await?;
Ok(())
}
@ -171,7 +177,7 @@ impl ActorType for User_ {
async fn send_accept_follow(
&self,
_follow: &Follow,
_follow: Follow,
_client: &Client,
_pool: &DbPool,
) -> Result<(), LemmyError> {
@ -225,6 +231,7 @@ impl FromApub for UserForm {
matrix_user_id: None,
actor_id: person.id().unwrap().to_string(),
bio: person
.inner
.summary()
.map(|s| s.as_single_xsd_string().unwrap().into()),
local: false,

View File

@ -3,16 +3,19 @@ use crate::{
apub::{
extensions::signatures::verify,
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
insert_activity, FromApub,
insert_activity,
FromApub,
},
blocking,
routes::{ChatServerParam, DbPoolParam},
websocket::{server::SendUserRoomMessage, UserOperation},
DbPool, LemmyError,
DbPool,
LemmyError,
};
use activitystreams::{
use activitystreams_new::{
activity::{Accept, Create, Delete, Undo, Update},
object::Note,
prelude::*,
};
use actix_web::{client::Client, web, HttpRequest, HttpResponse};
use lemmy_db::{
@ -21,7 +24,8 @@ use lemmy_db::{
private_message::{PrivateMessage, PrivateMessageForm},
private_message_view::PrivateMessageView,
user::User_,
Crud, Followable,
Crud,
Followable,
};
use log::debug;
use serde::Deserialize;
@ -77,8 +81,9 @@ async fn receive_accept(
pool: &DbPool,
) -> Result<HttpResponse, LemmyError> {
let community_uri = accept
.accept_props
.get_actor_xsd_any_uri()
.actor()
.to_owned()
.single_xsd_any_uri()
.unwrap()
.to_string();
@ -113,17 +118,10 @@ async fn receive_create_private_message(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = create
.create_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let user_uri = &create.actor().to_owned().single_xsd_any_uri().unwrap();
let note = Note::from_any_base(create.object.as_one().unwrap().to_owned())?.unwrap();
let user_uri = create.create_props.get_actor_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
let user = get_or_fetch_and_upsert_remote_user(user_uri, client, pool).await?;
verify(request, &user)?;
insert_activity(user.id, create, false, pool).await?;
@ -161,15 +159,8 @@ async fn receive_update_private_message(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = update
.update_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let user_uri = update.update_props.get_actor_xsd_any_uri().unwrap();
let user_uri = update.actor().to_owned().single_xsd_any_uri().unwrap();
let note = Note::from_any_base(update.object.as_one().unwrap().to_owned())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?;
@ -217,15 +208,8 @@ async fn receive_delete_private_message(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let note = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let user_uri = delete.actor().to_owned().single_xsd_any_uri().unwrap();
let note = Note::from_any_base(delete.object.as_one().unwrap().to_owned())?.unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?;
@ -285,23 +269,9 @@ async fn receive_undo_delete_private_message(
pool: &DbPool,
chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> {
let delete = undo
.undo_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Delete>()?;
let note = delete
.delete_props
.get_object_base_box()
.to_owned()
.unwrap()
.to_owned()
.into_concrete::<Note>()?;
let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
let delete = Delete::from_any_base(undo.object.as_one().unwrap().to_owned())?.unwrap();
let note = Note::from_any_base(delete.object.as_one().unwrap().to_owned())?.unwrap();
let user_uri = delete.actor().to_owned().single_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?;