[backend/federation] Use dotNetRdf ForceArray option instead of patching the AS context (ISH-153)
This commit is contained in:
parent
46140b3ace
commit
7c0e6dfea1
3 changed files with 9 additions and 35 deletions
|
@ -200,8 +200,7 @@
|
|||
},
|
||||
"tag": {
|
||||
"@id": "as:tag",
|
||||
"@type": "@id",
|
||||
"@container": "@list"
|
||||
"@type": "@id"
|
||||
},
|
||||
"target": {
|
||||
"@id": "as:target",
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using Iceshrimp.Backend.Core.Configuration;
|
||||
using Iceshrimp.Backend.Core.Database.Tables;
|
||||
using Iceshrimp.Backend.Core.Federation.ActivityStreams.Types;
|
||||
using Iceshrimp.Backend.Core.Federation.Cryptography;
|
||||
|
@ -60,12 +61,15 @@ public static class LdHelpers
|
|||
JToken.Parse(File.ReadAllText(Path.Combine("Core", "Federation", "ActivityStreams", "Contexts",
|
||||
"as-extensions.json")));
|
||||
|
||||
private static IEnumerable<string> ASForceArray => ["tag", "to", "cc", "bcc", "bto"];
|
||||
|
||||
private static readonly JsonLdProcessorOptions Options = new()
|
||||
{
|
||||
DocumentLoader = CustomLoader,
|
||||
ExpandContext = ASExtensions,
|
||||
ProcessingMode = JsonLdProcessingMode.JsonLd11,
|
||||
KeepIRIs = ["https://www.w3.org/ns/activitystreams#Public"]
|
||||
KeepIRIs = [$"{Constants.ActivityStreamsNs}#Public"],
|
||||
ForceArray = ASForceArray.Select(p => $"{Constants.ActivityStreamsNs}#{p}").ToList()
|
||||
};
|
||||
|
||||
public static readonly JsonSerializerSettings JsonSerializerSettings = new()
|
||||
|
|
|
@ -54,7 +54,7 @@ public class ASEmoji : ASTag
|
|||
|
||||
public sealed class ASTagConverter : JsonConverter
|
||||
{
|
||||
public override bool CanWrite => true;
|
||||
public override bool CanWrite => false;
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
|
@ -74,27 +74,7 @@ public sealed class ASTagConverter : JsonConverter
|
|||
|
||||
if (reader.TokenType == JsonToken.StartArray)
|
||||
{
|
||||
// We have to use @list here because otherwise Akkoma will refuse to process activities with only one Tag.
|
||||
// To solve this, we've patched the AS2 context to render & parse the tag type as @list, forcing it to be an array.
|
||||
// Ref: https://akkoma.dev/AkkomaGang/akkoma/issues/720
|
||||
var array = JArray.Load(reader);
|
||||
if (array.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
return array.SelectToken("$.[*].@list")
|
||||
?.Children()
|
||||
.OfType<JObject>()
|
||||
.Select(HandleObject)
|
||||
.OfType<ASTag>()
|
||||
.ToList();
|
||||
}
|
||||
catch
|
||||
{
|
||||
//ignored
|
||||
}
|
||||
}
|
||||
|
||||
var array = JArray.Load(reader);
|
||||
var result = new List<ASTag>();
|
||||
foreach (var token in array)
|
||||
{
|
||||
|
@ -125,15 +105,6 @@ public sealed class ASTagConverter : JsonConverter
|
|||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNull();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("@list");
|
||||
serializer.Serialize(writer, value);
|
||||
writer.WriteEndObject();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue