♻️ Move the keys store out of the publisher meta

This commit is contained in:
2025-12-30 01:44:05 +08:00
parent 777c0c089a
commit 6a360fe697
6 changed files with 2774 additions and 13 deletions

View File

@@ -32,6 +32,9 @@ public class SnPublisher : ModelBase, IIdentifiedResource
[Column(TypeName = "jsonb")] public SnVerificationMark? Verification { get; set; } [Column(TypeName = "jsonb")] public SnVerificationMark? Verification { get; set; }
[Column(TypeName = "jsonb")] public Dictionary<string, object>? Meta { get; set; } [Column(TypeName = "jsonb")] public Dictionary<string, object>? Meta { get; set; }
[MaxLength(8192)] [JsonIgnore] public string? PrivateKeyPem { get; set; }
[MaxLength(8192)] public string? PublicKeyPem { get; set; }
[IgnoreMember] [JsonIgnore] public ICollection<SnPost> Posts { get; set; } = []; [IgnoreMember] [JsonIgnore] public ICollection<SnPost> Posts { get; set; } = [];
[IgnoreMember] [JsonIgnore] public ICollection<SnPoll> Polls { get; set; } = []; [IgnoreMember] [JsonIgnore] public ICollection<SnPoll> Polls { get; set; } = [];
[IgnoreMember] [JsonIgnore] public ICollection<SnPostCollection> Collections { get; set; } = []; [IgnoreMember] [JsonIgnore] public ICollection<SnPostCollection> Collections { get; set; } = [];

View File

@@ -327,14 +327,25 @@ public class ActivityPubController(
private static string? GetPublisherKey(SnPublisher publisher, string keyName) private static string? GetPublisherKey(SnPublisher publisher, string keyName)
{ {
var metadata = publisher.Meta; return keyName switch
return metadata?.GetValueOrDefault(keyName)?.ToString(); {
"private_key" => publisher.PrivateKeyPem,
"public_key" => publisher.PublicKeyPem,
_ => null
};
} }
private static void SavePublisherKey(SnPublisher publisher, string keyName, string keyValue) private static void SavePublisherKey(SnPublisher publisher, string keyName, string keyValue)
{ {
publisher.Meta ??= new Dictionary<string, object>(); switch (keyName)
publisher.Meta[keyName] = keyValue; {
case "private_key":
publisher.PrivateKeyPem = keyValue;
break;
case "public_key":
publisher.PublicKeyPem = keyValue;
break;
}
} }
} }

View File

@@ -161,20 +161,24 @@ public class ActivityPubSignatureService(
private string? GetPublisherKey(SnPublisher publisher, string keyName) private string? GetPublisherKey(SnPublisher publisher, string keyName)
{ {
if (publisher.Meta == null) return keyName switch
return null; {
"private_key" => publisher.PrivateKeyPem,
var metadata = publisher.Meta as Dictionary<string, object>; "public_key" => publisher.PublicKeyPem,
return metadata?.GetValueOrDefault(keyName)?.ToString(); _ => null
};
} }
private void SavePublisherKey(SnPublisher publisher, string keyName, string keyValue) private void SavePublisherKey(SnPublisher publisher, string keyName, string keyValue)
{ {
publisher.Meta ??= new Dictionary<string, object>(); switch (keyName)
var metadata = publisher.Meta as Dictionary<string, object>;
if (metadata != null)
{ {
metadata[keyName] = keyValue; case "private_key":
publisher.PrivateKeyPem = keyValue;
break;
case "public_key":
publisher.PublicKeyPem = keyValue;
break;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace DysonNetwork.Sphere.Migrations
{
/// <inheritdoc />
public partial class AddPublisherKeys : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "private_key_pem",
table: "publishers",
type: "character varying(8192)",
maxLength: 8192,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "public_key_pem",
table: "publishers",
type: "character varying(8192)",
maxLength: 8192,
nullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "private_key_pem",
table: "publishers");
migrationBuilder.DropColumn(
name: "public_key_pem",
table: "publishers");
}
}
}

View File

@@ -1544,6 +1544,16 @@ namespace DysonNetwork.Sphere.Migrations
.HasColumnType("jsonb") .HasColumnType("jsonb")
.HasColumnName("picture"); .HasColumnName("picture");
b.Property<string>("PrivateKeyPem")
.HasMaxLength(8192)
.HasColumnType("character varying(8192)")
.HasColumnName("private_key_pem");
b.Property<string>("PublicKeyPem")
.HasMaxLength(8192)
.HasColumnType("character varying(8192)")
.HasColumnName("public_key_pem");
b.Property<Guid?>("RealmId") b.Property<Guid?>("RealmId")
.HasColumnType("uuid") .HasColumnType("uuid")
.HasColumnName("realm_id"); .HasColumnName("realm_id");