diff --git a/app/Config/Filters.php b/app/Config/Filters.php index c604e0f..93508bc 100644 --- a/app/Config/Filters.php +++ b/app/Config/Filters.php @@ -73,6 +73,7 @@ class Filters extends BaseFilters */ public array $globals = [ 'before' => [ + 'cors', // 'honeypot', // 'csrf', // 'invalidchars', diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 85cd609..6a9c6e0 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -11,6 +11,15 @@ $routes->get('/', 'Home::index'); // API Routes - Version 1.0 // ============================================================================ +// Catch-all CORS preflight handler for all API routes +$routes->options('api/v1/(:any)', function () { + $response = service('response'); + return $response->setStatusCode(200) + ->setHeader('Access-Control-Allow-Origin', '*') + ->setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') + ->setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-API-Key'); +}); + // Public endpoints (no authentication required) $routes->group('api/v1', ['namespace' => 'App\Controllers\Api\V1', 'filter' => 'cors'], function ($routes) { // Authentication diff --git a/app/Models/ActivityLogModel.php b/app/Models/ActivityLogModel.php index 003567a..6848051 100644 --- a/app/Models/ActivityLogModel.php +++ b/app/Models/ActivityLogModel.php @@ -25,7 +25,7 @@ class ActivityLogModel extends Model protected $useTimestamps = true; protected $createdField = 'created_at'; - protected $updatedField = null; + protected $updatedField = ''; protected $validationRules = [ 'action' => 'required|max_length[255]', diff --git a/app/Models/AiMessageModel.php b/app/Models/AiMessageModel.php index 1871407..894c2a9 100644 --- a/app/Models/AiMessageModel.php +++ b/app/Models/AiMessageModel.php @@ -22,7 +22,7 @@ class AiMessageModel extends Model protected $useTimestamps = true; protected $createdField = 'created_at'; - protected $updatedField = null; + protected $updatedField = ''; protected $validationRules = [ 'chat_id' => 'required', diff --git a/app/Models/AiProviderModel.php b/app/Models/AiProviderModel.php index ce0a587..46d44ed 100644 --- a/app/Models/AiProviderModel.php +++ b/app/Models/AiProviderModel.php @@ -22,7 +22,7 @@ class AiProviderModel extends Model protected $useTimestamps = true; protected $createdField = 'created_at'; - protected $updatedField = null; + protected $updatedField = ''; protected $validationRules = [ 'name' => 'required|max_length[100]|is_unique[ai_providers.name]', diff --git a/app/Models/ApiAuthKeyModel.php b/app/Models/ApiAuthKeyModel.php index 1d53c23..9bf7d40 100644 --- a/app/Models/ApiAuthKeyModel.php +++ b/app/Models/ApiAuthKeyModel.php @@ -27,7 +27,7 @@ class ApiAuthKeyModel extends Model protected $useTimestamps = false; protected $createdField = 'created_at'; - protected $updatedField = null; + protected $updatedField = ''; protected $validationRules = [ 'user_id' => 'required', diff --git a/app/Models/CategoryModel.php b/app/Models/CategoryModel.php index d3e7dfb..84a31be 100644 --- a/app/Models/CategoryModel.php +++ b/app/Models/CategoryModel.php @@ -22,7 +22,7 @@ class CategoryModel extends Model protected $useTimestamps = true; protected $createdField = 'created_at'; - protected $updatedField = null; + protected $updatedField = ''; protected $validationRules = [ 'user_id' => 'required', diff --git a/app/Models/ProjectModel.php b/app/Models/ProjectModel.php index da78b0b..ea69a9d 100644 --- a/app/Models/ProjectModel.php +++ b/app/Models/ProjectModel.php @@ -22,7 +22,7 @@ class ProjectModel extends Model protected $useTimestamps = true; protected $createdField = 'created_at'; - protected $updatedField = null; + protected $updatedField = ''; protected $validationRules = [ 'user_id' => 'required',