--- /dev/null
+{
+ "id": "https://mastodon.madrid/users/felix/statuses/107224289116410645/activity",
+ "type": "Create",
+ "actor": "https://mastodon.madrid/users/felix",
+ "published": "2021-11-05T11:46:50Z",
+ "to": [
+ "https://mastodon.madrid/users/felix/followers"
+ ],
+ "cc": [
+ "https://www.w3.org/ns/activitystreams#Public",
+ "https://mamot.fr/users/retiolus"
+ ],
+ "object": {
+ "id": "https://mastodon.madrid/users/felix/statuses/107224289116410645",
+ "type": "Note",
+ "summary": null,
+ "inReplyTo": "https://mamot.fr/users/retiolus/statuses/107224244380204526",
+ "published": "2021-11-05T11:46:50Z",
+ "url": "https://mastodon.madrid/@felix/107224289116410645",
+ "attributedTo": "https://mastodon.madrid/users/felix",
+ "to": [
+ "https://mastodon.madrid/users/felix/followers"
+ ],
+ "cc": [
+ "https://www.w3.org/ns/activitystreams#Public",
+ "https://mamot.fr/users/retiolus"
+ ],
+ "sensitive": false,
+ "atomUri": "https://mastodon.madrid/users/felix/statuses/107224289116410645",
+ "inReplyToAtomUri": "https://mamot.fr/users/retiolus/statuses/107224244380204526",
+ "conversation": "tag:mamot.fr,2021-11-05:objectId=64635960:objectType=Conversation",
+ "content": "<p><span class=\"h-card\"><a href=\"https://mamot.fr/@retiolus\" class=\"u-url mention\">@<span>retiolus</span></a></span> i have never been disappointed by a thinkpad. if you want to save money, get a model from a few years ago, there isnt a huge difference anyway.</p>",
+ "contentMap": {
+ "en": "<p><span class=\"h-card\"><a href=\"https://mamot.fr/@retiolus\" class=\"u-url mention\">@<span>retiolus</span></a></span> i have neverbeendisappointed by a thinkpad. if you want to save money, get a model from a few years ago, there isnt a huge difference anyway.</p>"
+ },
+ "attachment": [],
+ "tag": [
+ {
+ "type": "Mention",
+ "href": "https://mamot.fr/users/retiolus",
+ "name": "@retiolus@mamot.fr"
+ }
+ ],
+ "replies": {
+ "id": "https://mastodon.madrid/users/felix/statuses/107224289116410645/replies",
+ "type": "Collection",
+ "first": {
+ "type": "CollectionPage",
+ "next": "https://mastodon.madrid/users/felix/statuses/107224289116410645/replies?only_other_accounts=true&page=true",
+ "partOf": "https://mastodon.madrid/users/felix/statuses/107224289116410645/replies",
+ "items": []
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "id": "https://mastodon.madrid/users/felix/statuses/107224289116410645",
+ "type": "Note",
+ "summary": null,
+ "inReplyTo": "https://mamot.fr/users/retiolus/statuses/107224244380204526",
+ "published": "2021-11-05T11:46:50Z",
+ "url": "https://mastodon.madrid/@felix/107224289116410645",
+ "attributedTo": "https://mastodon.madrid/users/felix",
+ "to": [
+ "https://mastodon.madrid/users/felix/followers"
+ ],
+ "cc": [
+ "https://www.w3.org/ns/activitystreams#Public",
+ "https://mamot.fr/users/retiolus"
+ ],
+ "sensitive": false,
+ "atomUri": "https://mastodon.madrid/users/felix/statuses/107224289116410645",
+ "inReplyToAtomUri": "https://mamot.fr/users/retiolus/statuses/107224244380204526",
+ "conversation": "tag:mamot.fr,2021-11-05:objectId=64635960:objectType=Conversation",
+ "content": "<p><span class=\"h-card\"><a href=\"https://mamot.fr/@retiolus\" class=\"u-url mention\">@<span>retiolus</span></a></span> i have never been disappointed by a thinkpad. if you want to save money, get a model from a few years ago, there isnt a huge difference anyway.</p>",
+ "contentMap": {
+ "en": "<p><span class=\"h-card\"><a href=\"https://mamot.fr/@retiolus\" class=\"u-url mention\">@<span>retiolus</span></a></span> i have neverbeendisappointed by a thinkpad. if you want to save money, get a model from a few years ago, there isnt a huge difference anyway.</p>"
+ },
+ "attachment": [],
+ "tag": [
+ {
+ "type": "Mention",
+ "href": "https://mamot.fr/users/retiolus",
+ "name": "@retiolus@mamot.fr"
+ }
+ ],
+ "replies": {
+ "id": "https://mastodon.madrid/users/felix/statuses/107224289116410645/replies",
+ "type": "Collection",
+ "first": {
+ "type": "CollectionPage",
+ "next": "https://mastodon.madrid/users/felix/statuses/107224289116410645/replies?only_other_accounts=true&page=true",
+ "partOf": "https://mastodon.madrid/users/felix/statuses/107224289116410645/replies",
+ "items": []
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+ "toot": "http://joinmastodon.org/ns#",
+ "featured": {
+ "@id": "toot:featured",
+ "@type": "@id"
+ },
+ "alsoKnownAs": {
+ "@id": "as:alsoKnownAs",
+ "@type": "@id"
+ },
+ "movedTo": {
+ "@id": "as:movedTo",
+ "@type": "@id"
+ },
+ "schema": "http://schema.org#",
+ "PropertyValue": "schema:PropertyValue",
+ "value": "schema:value",
+ "IdentityProof": "toot:IdentityProof",
+ "discoverable": "toot:discoverable",
+ "Device": "toot:Device",
+ "Ed25519Signature": "toot:Ed25519Signature",
+ "Ed25519Key": "toot:Ed25519Key",
+ "Curve25519Key": "toot:Curve25519Key",
+ "EncryptedMessage": "toot:EncryptedMessage",
+ "publicKeyBase64": "toot:publicKeyBase64",
+ "deviceId": "toot:deviceId",
+ "claim": {
+ "@type": "@id",
+ "@id": "toot:claim"
+ },
+ "fingerprintKey": {
+ "@type": "@id",
+ "@id": "toot:fingerprintKey"
+ },
+ "identityKey": {
+ "@type": "@id",
+ "@id": "toot:identityKey"
+ },
+ "devices": {
+ "@type": "@id",
+ "@id": "toot:devices"
+ },
+ "messageFranking": "toot:messageFranking",
+ "messageType": "toot:messageType",
+ "cipherText": "toot:cipherText",
+ "Hashtag": "as:Hashtag",
+ "focalPoint": {
+ "@container": "@list",
+ "@id": "toot:focalPoint"
+ }
+ }
+ ],
+ "id": "https://mastodon.madrid/users/felix",
+ "type": "Person",
+ "following": "https://mastodon.madrid/users/felix/following",
+ "followers": "https://mastodon.madrid/users/felix/followers",
+ "inbox": "https://mastodon.madrid/users/felix/inbox",
+ "outbox": "https://mastodon.madrid/users/felix/outbox",
+ "featured": "https://mastodon.madrid/users/felix/collections/featured",
+ "preferredUsername": "felix",
+ "name": "",
+ "summary": "<p><a href=\"https://mastodon.madrid/tags/Lemmy\" class=\"mention hashtag\" rel=\"tag\">#<span>Lemmy</span></a> Maintainer</p>",
+ "url": "https://mastodon.madrid/@felix",
+ "manuallyApprovesFollowers": false,
+ "discoverable": false,
+ "devices": "https://mastodon.madrid/users/felix/collections/devices",
+ "publicKey": {
+ "id": "https://mastodon.madrid/users/felix#main-key",
+ "owner": "https://mastodon.madrid/users/felix",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzc+evQS6XHTUdniPmFfH\n0U6aa4NaGSTQY4fmJna9w9Sr/8nNN4XWbGJLD4kawPxAXMbK63RMkkxvaHI9w+Oe\nd6oIJH2Z5qH4s2eX8f610SGDvyEZltLAY8TkMhNEp+3bOCKf1zG/uCsE7uC6Mjal\nd6KYyqoom5TwO2UWH5r6l3vyLFvnXWX2zOgSWJwLNLxMWkkd9AqM7k9+pgmeaNWD\n6JvG7Na5ywsR4CZrE5PjgtiC9LWP/H3Elgb2nIzye5HUEJuK2h1+eNFP3HSK5CF3\ncrg4DsZ1n5X3fQVm5YmFUYtEMLZL5S18dFsp6uwE0TmVOODJdnJ6+cgu0/8t2ROR\nJQIDAQAB\n-----END PUBLIC KEY-----\n"
+ },
+ "tag": [
+ {
+ "type": "Hashtag",
+ "href": "https://mastodon.madrid/explore/lemmy",
+ "name": "#lemmy"
+ }
+ ],
+ "attachment": [],
+ "endpoints": {
+ "sharedInbox": "https://mastodon.madrid/inbox"
+ },
+ "icon": {
+ "type": "Image",
+ "mediaType": "image/jpeg",
+ "url": "https://mastodon.madrid/system/accounts/avatars/000/087/969/original/ffdd1c832b453bc9.jpg?1598972149"
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "type": "Create",
+ "id": "https://friends.grishka.me/posts/66561/activityCreate",
+ "published": "2021-11-09T11:42:35Z",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://ds9.lemmy.ml/u/nutomic"
+ ],
+ "actor": "https://friends.grishka.me/users/1",
+ "object": {
+ "type": "Note",
+ "id": "https://friends.grishka.me/posts/66561",
+ "attributedTo": "https://friends.grishka.me/users/1",
+ "content": "<p>So does this federate now?</p>",
+ "inReplyTo": "https://ds9.lemmy.ml/post/1723",
+ "published": "2021-11-09T11:42:35Z",
+ "tag": {
+ "type": "Mention",
+ "href": "https://ds9.lemmy.ml/u/nutomic"
+ },
+ "url": "https://friends.grishka.me/posts/66561",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://ds9.lemmy.ml/u/nutomic"
+ ],
+ "replies": {
+ "type": "Collection",
+ "id": "https://friends.grishka.me/posts/66561/replies",
+ "first": {
+ "type": "CollectionPage",
+ "partOf": "https://friends.grishka.me/posts/66561/replies",
+ "next": "https://friends.grishka.me/posts/66561/replies?page=1"
+ }
+ },
+ "sensitive": false,
+ "likes": "https://friends.grishka.me/posts/66561/likes"
+ },
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ {
+ "sensitive": "as:sensitive"
+ }
+ ],
+ "signature": {
+ "creator": "https://friends.grishka.me/users/1#main-key",
+ "created": "2021-11-09T11:42:35Z",
+ "type": "RsaSignature2017",
+ "signatureValue": "MmEf4hjfwfQbm/W8qfONwf0uEXO4dhKApX8PlodSNi9x6E4kEgBvx7BrKg3gtqnXfU/cbGdVIN/yCz8+v7Tp2T2kj1yRpD7WjbgwzkrOlhxLi3zPXd4En/cVVdZYSfc7R6DGflXOSeOZPnKbrmY6i+1kYkM80Yc+LFtoj0Ftdgc/YbwMynt1OwPvDbB5bJo1NVyRnpNqlqia2VNmdAh1+2vREXZmINsCOFMC5c0RVzEENYMw+ZPsbVdXfoz4wfqK2u2i7SlcDKVErVNPrKn71wfGWRRiLUNupokY1x3jsWeZlPqGvAP3WGS9ChU+FxhnVHbtxIf0QmeOas3okLDSjw=="
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "type": "Note",
+ "id": "https://friends.grishka.me/posts/66561",
+ "attributedTo": "https://friends.grishka.me/users/1",
+ "content": "<p>So does this federate now?</p>",
+ "inReplyTo": "https://ds9.lemmy.ml/post/1723",
+ "published": "2021-11-09T11:42:35Z",
+ "tag": {
+ "type": "Mention",
+ "href": "https://ds9.lemmy.ml/u/nutomic"
+ },
+ "url": "https://friends.grishka.me/posts/66561",
+ "to": [
+ "https://www.w3.org/ns/activitystreams#Public"
+ ],
+ "cc": [
+ "https://ds9.lemmy.ml/u/nutomic"
+ ],
+ "replies": {
+ "type": "Collection",
+ "id": "https://friends.grishka.me/posts/66561/replies",
+ "first": {
+ "type": "CollectionPage",
+ "partOf": "https://friends.grishka.me/posts/66561/replies",
+ "next": "https://friends.grishka.me/posts/66561/replies?page=1"
+ }
+ },
+ "sensitive": false,
+ "likes": "https://friends.grishka.me/posts/66561/likes"
+}
\ No newline at end of file
--- /dev/null
+{
+ "type": "Person",
+ "id": "https://friends.grishka.me/users/1",
+ "name": "Григорий Клюшников",
+ "icon": {
+ "type": "Image",
+ "image": {
+ "type": "Image",
+ "url": "https://friends.grishka.me/i/6QLsOws97AWp5N_osd74C1IC1ijnFopyCBD9MSEeXNQ/q:93/bG9jYWw6Ly8vcy91cGxvYWRzL2F2YXRhcnMvNTYzODRhODEwODk5ZTRjMzI4YmY4YmQwM2Q2MWM3NmMud2VicA.jpg",
+ "mediaType": "image/jpeg",
+ "width": 1280,
+ "height": 960
+ },
+ "width": 573,
+ "height": 572,
+ "cropRegion": [
+ 0.26422762870788574,
+ 0.3766937553882599,
+ 0.7113820910453796,
+ 0.9728997349739075
+ ],
+ "url": "https://friends.grishka.me/i/ql_49PQcETAWgY_nC-Qj63H_Oa6FyOAEoWFkUSSkUvQ/c:573:572:nowe:338:362/q:93/bG9jYWw6Ly8vcy91cGxvYWRzL2F2YXRhcnMvNTYzODRhODEwODk5ZTRjMzI4YmY4YmQwM2Q2MWM3NmMud2VicA.jpg",
+ "mediaType": "image/jpeg"
+ },
+ "summary": "<p>Делаю эту хрень, пытаюсь вырвать социальные сети из жадных лап корпораций</p>\n<p></p>\n<p></p>\n<p></p>\n<p>This server does NOT support direct messages. Please write me <a href=\"https://t.me/grishka\">on Telegram</a> or Matrix (@grishk:matrix<span>.org</span>).</p>",
+ "url": "https://friends.grishka.me/grishka",
+ "preferredUsername": "grishka",
+ "inbox": "https://friends.grishka.me/users/1/inbox",
+ "outbox": "https://friends.grishka.me/users/1/outbox",
+ "followers": "https://friends.grishka.me/users/1/followers",
+ "following": "https://friends.grishka.me/users/1/following",
+ "endpoints": {
+ "sharedInbox": "https://friends.grishka.me/activitypub/sharedInbox"
+ },
+ "publicKey": {
+ "id": "https://friends.grishka.me/users/1#main-key",
+ "owner": "https://friends.grishka.me/users/1",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjlakm+i/d9ER/hIeR7KfiFW+SdLZj2SkKIeM8cmR+YFJuh9ghFqXrkFEjcaqUnAFqe5gYDNSQACnDLA8y4DnzjfGNIohKAnRoa9x6GORmfKQvcnjaTZ53S1NvUiPPyc0Pv/vfCtY/Ab0CEXe5BLqL38oZn817Jf7pBrPRTYH7m012kvwAUTT6k0Y8lPITBEG7nzYbbuGcrN9Y/RDdwE08jmBXlZ45bahRH3VNXVpQE17dCzJB+7k+iJ1R7YCoI+DuMlBYGXGE2KVk46NZTuLnOjFV9SyXfWX4/SrJM4oxev+SX2N75tQgmNZmVVHeqg2ZcbC0WCfNjJOi2HHS9MujwIDAQAB\n-----END PUBLIC KEY-----\n"
+ },
+ "wall": "https://friends.grishka.me/users/1/wall",
+ "firstName": "Григорий",
+ "lastName": "Клюшников",
+ "middleName": "Александрович",
+ "vcard:bday": "1993-01-22",
+ "gender": "http://schema.org#Male",
+ "supportsFriendRequests": true,
+ "friends": "https://friends.grishka.me/users/1/friends",
+ "groups": "https://friends.grishka.me/users/1/groups",
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ {
+ "sm": "http://smithereen.software/ns#",
+ "cropRegion": {
+ "@id": "sm:cropRegion",
+ "@container": "@list"
+ },
+ "wall": {
+ "@id": "sm:wall",
+ "@type": "@id"
+ },
+ "sc": "http://schema.org#",
+ "firstName": "sc:givenName",
+ "lastName": "sc:familyName",
+ "middleName": "sc:additionalName",
+ "gender": {
+ "@id": "sc:gender",
+ "@type": "sc:GenderType"
+ },
+ "supportsFriendRequests": "sm:supportsFriendRequests",
+ "maidenName": "sm:maidenName",
+ "friends": {
+ "@id": "sm:friends",
+ "@type": "@id"
+ },
+ "groups": {
+ "@id": "sm:groups",
+ "@type": "@id"
+ },
+ "vcard": "http://www.w3.org/2006/vcard/ns#"
+ },
+ "https://w3id.org/security/v1"
+ ]
+}
\ No newline at end of file
#[actix_rt::test]
#[serial]
- async fn test_parse_lemmy_create_or_update() {
+ async fn test_parsey_create_or_update() {
test_parse_lemmy_item::<CreateOrUpdatePost>(
"assets/lemmy/activities/create_or_update/create_page.json",
);
test_parse_lemmy_item::<CreateOrUpdateComment>(
"assets/lemmy/activities/create_or_update/create_note.json",
);
- }
- #[actix_rt::test]
- #[serial]
- async fn test_parse_pleroma_create_or_update() {
file_to_json_object::<CreateOrUpdateComment>("assets/pleroma/activities/create_note.json");
+ file_to_json_object::<CreateOrUpdateComment>("assets/smithereen/activities/create_note.json");
+ file_to_json_object::<CreateOrUpdateComment>("assets/mastodon/activities/create_note.json");
}
}
#[cfg(test)]
mod tests {
- use crate::protocol::{
- objects::{chat_message::ChatMessage, group::Group, note::Note, page::Page, person::Person},
- tests::test_parse_lemmy_item,
+ use crate::{
+ objects::tests::file_to_json_object,
+ protocol::{
+ objects::{chat_message::ChatMessage, group::Group, note::Note, page::Page, person::Person},
+ tests::test_parse_lemmy_item,
+ },
};
use serial_test::serial;
#[actix_rt::test]
#[serial]
- async fn test_parse_lemmy_object() {
+ async fn test_parse_object() {
test_parse_lemmy_item::<Person>("assets/lemmy/objects/person.json");
test_parse_lemmy_item::<Group>("assets/lemmy/objects/group.json");
test_parse_lemmy_item::<Page>("assets/lemmy/objects/page.json");
test_parse_lemmy_item::<Note>("assets/lemmy/objects/note.json");
test_parse_lemmy_item::<ChatMessage>("assets/lemmy/objects/chat_message.json");
+
+ file_to_json_object::<Person>("assets/pleroma/objects/person.json");
+ file_to_json_object::<Note>("assets/pleroma/objects/note.json");
+ file_to_json_object::<ChatMessage>("assets/pleroma/objects/chat_message.json");
+
+ file_to_json_object::<Person>("assets/smithereen/objects/person.json");
+ file_to_json_object::<Note>("assets/smithereen/objects/note.json");
+
+ file_to_json_object::<Person>("assets/mastodon/objects/person.json");
+ file_to_json_object::<Note>("assets/mastodon/objects/note.json");
}
}
pub(crate) cc: Vec<Url>,
pub(crate) content: String,
pub(crate) media_type: Option<MediaTypeHtml>,
+ #[serde(default)]
pub(crate) source: SourceCompat,
pub(crate) in_reply_to: ObjectId<PostOrComment>,
pub(crate) published: Option<DateTime<FixedOffset>>,
#[serde(rename_all = "camelCase")]
#[serde(untagged)]
pub(crate) enum SourceCompat {
+ None,
Lemmy(Source),
Pleroma(String),
}
+impl Default for SourceCompat {
+ fn default() -> Self {
+ SourceCompat::None
+ }
+}
+
impl Note {
pub(crate) async fn get_parents(
&self,