R6 moderation in decePub: users and personas, accounts, report actions, deletions, suspended personas

Administration's Users & personas (administrators): logins searched and opened into their personas and groups; roles,
bans, two-factor reset and deletion of a login; silence, suspension and deletion of a persona; a group deleted. Accounts
(moderators): local personas and remote accounts searched or listed as moderated, silenced and suspended with a staff
note and a warning. Reports resolve with an action. ActDialog asks for the note, the warning or the password and is the
act's confirmation. A login deletes its own persona and the groups it owns with its password. Suspended personas can't
be chosen; one refused a token mid-session moves the session to another, or to none, once. Warnings show in
notifications, limited accounts on their profile, and moderators remove a post from its card.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpVCoDeM1qUTRp4fXQdfof
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-17 05:41:10 +02:00
1 parent 4c88980374
commit c572471b88
30 files changed
+2604 -67

No files matched your search

+20 -2
View File
@@ -1,8 +1,8 @@
namespace decePubClient.Models.Mastodon;
/// <summary>
/// type: mention, status, reblog, follow, follow_request, favourite, poll, update, quote, quoted_update or
/// pleroma:emoji_reaction. Status is null for follows.
/// type: mention, status, reblog, follow, follow_request, favourite, poll, update, quote, quoted_update,
/// pleroma:emoji_reaction or moderation_warning. Status is null for follows and for most warnings (a removed post is gone).
/// </summary>
public class Notification
{
@@ -14,6 +14,22 @@ public class Notification
public string Emoji { get; set; }
/// <summary>The group it belongs to (likes and boosts of one post, follows within an hour), or ungrouped-{id}.</summary>
public string GroupKey { get; set; }
/// <summary>A moderation_warning's: what this server's staff did and told the persona. Its Account is the persona
/// itself, as Mastodon's are.</summary>
public AccountWarning ModerationWarning { get; set; }
}
/// <summary>Mastodon's AccountWarning: what this server's staff did to the persona and why, as they wrote it.</summary>
public class AccountWarning
{
public string Id { get; set; }
/// <summary>none, silence, suspend or delete_statuses (PrivaPub's); Mastodon also has disable, mark_statuses_as_sensitive
/// and sensitive.</summary>
public string Action { get; set; }
public string Text { get; set; }
/// <summary>The posts it is about (a removed post's id stays named).</summary>
public List<string> StatusIds { get; set; } = [];
public DateTime? CreatedAt { get; set; }
}
/// <summary>/api/v2/notifications: notifications folded into groups, with the accounts and posts they name.</summary>
@@ -36,6 +52,8 @@ public class NotificationGroup
public List<string> SampleAccountIds { get; set; } = [];
public string StatusId { get; set; }
public string Emoji { get; set; }
/// <summary>A moderation_warning group's newest warning.</summary>
public AccountWarning ModerationWarning { get; set; }
}
public class MarkersForm