From 407e6389b3ba1ed2268d06e8dc7798f12f5e9bfc Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Tue, 25 Jul 2023 04:33:55 +0000
Subject: [PATCH] Fix JsonLD parsing problems with GoToSocial

---
 src/Util/JsonLD.php        | 12 +++++------
 static/joinmastodon.jsonld | 44 ++++++++++++++++++++++++++++++++++++++
 static/schema.jsonld       |  7 ++++++
 3 files changed, 57 insertions(+), 6 deletions(-)
 create mode 100644 static/joinmastodon.jsonld
 create mode 100644 static/schema.jsonld

diff --git a/src/Util/JsonLD.php b/src/Util/JsonLD.php
index 0a4d5a0b55..beb01f0cc1 100644
--- a/src/Util/JsonLD.php
+++ b/src/Util/JsonLD.php
@@ -55,6 +55,12 @@ class JsonLD
 			case 'https://funkwhale.audio/ns':
 				$url = DI::basePath() . '/static/funkwhale.audio.jsonld';
 				break;
+			case 'http://schema.org':
+				$url = DI::basePath() . '/static/schema.jsonld';
+				break;
+			case 'http://joinmastodon.org/ns':
+				$url = DI::basePath() . '/static/joinmastodon.jsonld';
+				break;
 			default:
 				switch (parse_url($url, PHP_URL_PATH)) {
 					case '/schemas/litepub-0.1.jsonld';
@@ -177,12 +183,6 @@ class JsonLD
 			if (!in_array('https://w3id.org/security/v1', $json['@context'])) {
 				$json['@context'][] = 'https://w3id.org/security/v1';
 			}
-
-			// Issue 12419: Workaround for GoToSocial
-			$pos = array_search('http://joinmastodon.org/ns', $json['@context']);
-			if (is_int($pos)) {
-				$json['@context'][$pos] = ['toot' => 'http://joinmastodon.org/ns#'];
-			}
 		}
 
 		// Bookwyrm transmits "id" fields with "null", which isn't allowed.
diff --git a/static/joinmastodon.jsonld b/static/joinmastodon.jsonld
new file mode 100644
index 0000000000..0edd4ab0cf
--- /dev/null
+++ b/static/joinmastodon.jsonld
@@ -0,0 +1,44 @@
+{
+    "@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"},
+            "featuredTags":{"@id":"toot:featuredTags","@type":"@id"},
+            "alsoKnownAs":{"@id":"as:alsoKnownAs","@type":"@id"},
+            "movedTo":{"@id":"as:movedTo","@type":"@id"},
+            "schema":"http://schema.org#",
+            "PropertyValue":"schema:PropertyValue",
+            "value":"schema:value",
+            "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",
+            "suspended":"toot:suspended",
+            "focalPoint":{"@container":"@list","@id":"toot:focalPoint"},
+            "ostatus":"http://ostatus.org#",
+            "atomUri":"ostatus:atomUri",
+            "inReplyToAtomUri":"ostatus:inReplyToAtomUri",
+            "conversation":"ostatus:conversation",
+            "sensitive":"as:sensitive",
+            "votersCount":"toot:votersCount",
+            "Hashtag":"as:Hashtag",
+            "quoteUrl":"as:quoteUrl",
+            "Emoji":"toot:Emoji",
+            "vcard":"http://www.w3.org/2006/vcard/ns#"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/static/schema.jsonld b/static/schema.jsonld
new file mode 100644
index 0000000000..5940137428
--- /dev/null
+++ b/static/schema.jsonld
@@ -0,0 +1,7 @@
+{
+    "@context": {
+        "schema": "http://schema.org#",
+        "value": "schema:value",
+        "PropertyValue": "schema:PropertyValue"
+    }
+}
\ No newline at end of file
-- 
2.39.5