diff --git a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Contexts/litepub.json b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Contexts/litepub.json new file mode 100644 index 00000000..018c1ff8 --- /dev/null +++ b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Contexts/litepub.json @@ -0,0 +1,51 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "Emoji": "toot:Emoji", + "Hashtag": "as:Hashtag", + "PropertyValue": "schema:PropertyValue", + "atomUri": "ostatus:atomUri", + "conversation": { + "@id": "ostatus:conversation", + "@type": "@id" + }, + "discoverable": "toot:discoverable", + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "capabilities": "litepub:capabilities", + "ostatus": "http://ostatus.org#", + "schema": "http://schema.org#", + "toot": "http://joinmastodon.org/ns#", + "misskey": "https://misskey-hub.net/ns#", + "fedibird": "http://fedibird.com/ns#", + "value": "schema:value", + "sensitive": "as:sensitive", + "litepub": "http://litepub.social/ns#", + "invisible": "litepub:invisible", + "directMessage": "litepub:directMessage", + "listMessage": { + "@id": "litepub:listMessage", + "@type": "@id" + }, + "quoteUrl": "as:quoteUrl", + "quoteUri": "fedibird:quoteUri", + "oauthRegistrationEndpoint": { + "@id": "litepub:oauthRegistrationEndpoint", + "@type": "@id" + }, + "EmojiReact": "litepub:EmojiReact", + "ChatMessage": "litepub:ChatMessage", + "alsoKnownAs": { + "@id": "as:alsoKnownAs", + "@type": "@id" + }, + "vcard": "http://www.w3.org/2006/vcard/ns#", + "formerRepresentations": "litepub:formerRepresentations", + "contentMap": { + "@id": "as:content", + "@container": "@language" + } + } + ] +} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Federation/ActivityStreams/LDHelpers.cs b/Iceshrimp.Backend/Core/Federation/ActivityStreams/LDHelpers.cs index d1ce38cc..c3e14ace 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityStreams/LDHelpers.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityStreams/LDHelpers.cs @@ -11,25 +11,26 @@ public static class LdHelpers { private static readonly Dictionary ContextCache = new() { { "https://www.w3.org/ns/activitystreams", new RemoteDocument { - ContextUrl = new Uri("https://www.w3.org/ns/activitystreams"), DocumentUrl = new Uri("https://www.w3.org/ns/activitystreams"), Document = JToken.Parse(File.ReadAllText(Path.Combine("Core", "Federation", "ActivityStreams", "Contexts", "as.json"))) } }, { "https://w3id.org/security/v1", new RemoteDocument { - ContextUrl = new Uri("https://w3id.org/security/v1"), DocumentUrl = new Uri("https://w3c-ccg.github.io/security-vocab/contexts/security-v1.jsonld"), Document = JToken.Parse(File.ReadAllText(Path.Combine("Core", "Federation", "ActivityStreams", "Contexts", "security.json"))) } }, { "http://joinmastodon.org/ns", new RemoteDocument { - ContextUrl = new Uri("http://joinmastodon.org/ns"), - DocumentUrl = new Uri("http://joinmastodon.org/ns"), Document = JToken.Parse(File.ReadAllText(Path.Combine("Core", "Federation", "ActivityStreams", "Contexts", "toot.json"))) } + }, { + "litepub-0.1", new RemoteDocument { + Document = JToken.Parse(File.ReadAllText(Path.Combine("Core", "Federation", "ActivityStreams", + "Contexts", "litepub.json"))) + } } }; @@ -57,9 +58,14 @@ public static class LdHelpers { }; private static RemoteDocument CustomLoader(Uri uri, JsonLdLoaderOptions jsonLdLoaderOptions) { + var key = uri.AbsolutePath == "/schemas/litepub-0.1.jsonld" ? "litepub-0.1" : uri.ToString(); + ContextCache.TryGetValue(key, out var result); + if (result != null) { + result.ContextUrl = uri; + return result; + } + //TODO: cache in redis - ContextCache.TryGetValue(uri.ToString(), out var result); - if (result != null) return result; result = DefaultDocumentLoader.LoadJson(uri, jsonLdLoaderOptions); ContextCache.Add(uri.ToString(), result); diff --git a/Iceshrimp.NET.sln.DotSettings b/Iceshrimp.NET.sln.DotSettings index 82533647..885992fa 100644 --- a/Iceshrimp.NET.sln.DotSettings +++ b/Iceshrimp.NET.sln.DotSettings @@ -36,6 +36,7 @@ True True True + True True True True