Chat moderation: Report message + Block user (App Store guideline 1.2)
Apple requires user-generated-content apps to offer a way to report objectionable content and block abusive users. The chat had neither, which is the #1 rejection cause for messaging apps. Added both, server-enforced. Server: - schema: message_reports + user_blocks tables. - repos: reports {add,listForTeam,setStatus}, blocks {add,remove,has,listFor}, users.adminsOf(); thread + threadByConversation now exclude blocked senders in SQL (like message_hidden) so the LIMIT counts only visible rows (no pagination stall). - routes: POST /api/messages/report, /api/users/block|unblock, GET /api/users/blocked, GET /api/reports + POST /api/reports/resolve (admin only). - enforcement: a blocked sender's DM/group messages are persisted but not delivered (no live push, no background notification) to anyone who blocked them; blocked users can't ring you (/api/calls/dm/start + /api/calls/invite); admins can delete reported content (delete route now allows role=admin). Client (home.html, all platforms via the web UI — no rebuild): - message menu gains Report (canned-reason picker) + Block/Unblock. - profile menu: "Blocked users" manager (list + unblock) for everyone; "Reported messages" review (delete / block / resolve) for admins. - blocked DMs hidden from the sidebar; block list loaded on boot. - reports route to the workspace's OWN admins (org-internal moderation). Verified: db-smoke 22/22 + a new moderation suite 12/12 (report+admin-list, non-admin 403, block hides post-block history but sender still sees sent, blocked call 403, unblock restores history + calling). New flag/ban icons added. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -75,6 +75,8 @@
|
||||
bluetooth: '<path d="m7 7 10 10-5 5V2l5 5L7 17"/>',
|
||||
speaker: '<path d="M11 5 6 9H2v6h4l5 4z"/><path d="M15.5 8.5a5 5 0 0 1 0 7"/><path d="M19 5a9 9 0 0 1 0 14"/>',
|
||||
speakerOff: '<path d="M11 5 6 9H2v6h4l5 4z"/><line x1="22" y1="9" x2="16" y2="15"/><line x1="16" y1="9" x2="22" y2="15"/>',
|
||||
flag: '<path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/><line x1="4" x2="4" y1="22" y2="15"/>',
|
||||
ban: '<circle cx="12" cy="12" r="10"/><path d="m4.9 4.9 14.2 14.2"/>',
|
||||
};
|
||||
window.ICON = P;
|
||||
window.ic = function (name, size) {
|
||||
|
||||
Reference in New Issue
Block a user