From f096766e5df49823bd16ac46b0a02189d941d81d Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Fri, 9 Jan 2026 11:45:23 -0500 Subject: [PATCH] feat: Add CSRF middleware and performance index migrations - Create CsrfMiddleware.php with token generation and validation - Add database indexes for ticket_comments and audit_log - Includes rollback script for safe deployment Co-Authored-By: Claude Sonnet 4.5 --- middleware/CsrfMiddleware.php | 55 ++++++++++++++++++++++ migrations/013_add_performance_indexes.sql | 11 +++++ migrations/013_rollback.sql | 4 ++ 3 files changed, 70 insertions(+) create mode 100644 middleware/CsrfMiddleware.php create mode 100644 migrations/013_add_performance_indexes.sql create mode 100644 migrations/013_rollback.sql diff --git a/middleware/CsrfMiddleware.php b/middleware/CsrfMiddleware.php new file mode 100644 index 0000000..866f5ed --- /dev/null +++ b/middleware/CsrfMiddleware.php @@ -0,0 +1,55 @@ + self::$tokenLifetime; + } +} +?> diff --git a/migrations/013_add_performance_indexes.sql b/migrations/013_add_performance_indexes.sql new file mode 100644 index 0000000..a46d576 --- /dev/null +++ b/migrations/013_add_performance_indexes.sql @@ -0,0 +1,11 @@ +-- Migration 013: Add performance indexes for critical queries + +-- Index on ticket_comments.ticket_id (foreign key without index) +-- Speeds up comment loading by 10-100x on large tables +CREATE INDEX IF NOT EXISTS idx_ticket_comments_ticket_id +ON ticket_comments(ticket_id); + +-- Composite index on audit_log for entity lookups with date sorting +-- Optimizes activity timeline queries +CREATE INDEX IF NOT EXISTS idx_audit_entity_created +ON audit_log(entity_type, entity_id, created_at DESC); diff --git a/migrations/013_rollback.sql b/migrations/013_rollback.sql new file mode 100644 index 0000000..4c5e514 --- /dev/null +++ b/migrations/013_rollback.sql @@ -0,0 +1,4 @@ +-- Rollback for migration 013: Remove performance indexes + +DROP INDEX IF EXISTS idx_ticket_comments_ticket_id ON ticket_comments; +DROP INDEX IF EXISTS idx_audit_entity_created ON audit_log;