mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-28 08:52:19 -07:00
[Server/Client/Protocol] Address PR #7091 review: security, bug, and perf fixes
Security: - Promote RESET_USER_PASSWORD to admin-only dispatch (was moderator-accessible) - Reject password reset on users with equal/higher privilege than caller - Notify affected user via Event_NotifyUser::CUSTOM when password is reset - Add server-side category whitelist for reports - Drop reporter name fallback in comment/details authorization (ID-only) - Force password change: new DB column + login enforcement + client disconnect Bugs: - XSS via QTextEdit::append() → insertPlainText() in report tab and utils - allNotified initialized to true even with empty recipients list - Warning combo box: use currentData() instead of baked-in display text - Report resolution now records who resolved (resolved_by column + audit) Performance: - IP-correlation subquery: add 6-month window + LIMIT 200 - getUserSessions: clamp limit to 500 Non-blocking: - Palette-aware colors in report_utils.cpp (dark/light mode) - Report list pagination: offset/limit fields + total_count in response - SessionCommand enum gap comment for reserved values 1201-1203 Schema: 36→37 (force_password_change), 37→38 (resolved_by) Took 12 minutes Took 16 seconds
This commit is contained in:
parent
c6d8bce81f
commit
f7998deb7a
18 changed files with 181 additions and 49 deletions
|
|
@ -15,6 +15,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_reports` (
|
|||
`resolution_time` datetime NULL,
|
||||
`status` enum('open','assigned','resolved','dismissed') NOT NULL DEFAULT 'open',
|
||||
`assigned_to` int(7) unsigned NULL,
|
||||
`resolved_by` int(7) unsigned NULL,
|
||||
`resolution_note` text,
|
||||
`notified` tinyint(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
|
|
@ -25,7 +26,8 @@ CREATE TABLE IF NOT EXISTS `cockatrice_reports` (
|
|||
INDEX `idx_status_created` (`status`, `created_at`),
|
||||
FOREIGN KEY (`reporter_id`) REFERENCES `cockatrice_users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
FOREIGN KEY (`reported_user_id`) REFERENCES `cockatrice_users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
FOREIGN KEY (`assigned_to`) REFERENCES `cockatrice_users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE
|
||||
FOREIGN KEY (`assigned_to`) REFERENCES `cockatrice_users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
FOREIGN KEY (`resolved_by`) REFERENCES `cockatrice_users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `cockatrice_report_comments` (
|
||||
|
|
@ -44,4 +46,8 @@ CREATE TABLE IF NOT EXISTS `cockatrice_report_comments` (
|
|||
FOREIGN KEY (`author_id`) REFERENCES `cockatrice_users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
ALTER TABLE `cockatrice_users`
|
||||
ADD COLUMN `force_password_change` tinyint(1) NOT NULL DEFAULT 0
|
||||
AFTER `passwordLastChangedDate`;
|
||||
|
||||
UPDATE cockatrice_schema_version SET version=36 WHERE version=35;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue