mirror of
https://github.com/JGH0/Todo-App-Backend.git
synced 2026-06-03 13:28:47 +02:00
Merge main into feature/marketplace
This commit is contained in:
@@ -34,7 +34,11 @@ class Cors extends BaseConfig
|
||||
* - ['http://localhost:8080']
|
||||
* - ['https://www.example.com']
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
'allowedOrigins' => ['http://localhost:5173', 'http://127.0.0.1:5173'],
|
||||
=======
|
||||
'allowedOrigins' => ['http://localhost:5173', 'http://127.0.0.1:5173', 'http://localhost'],
|
||||
>>>>>>> main
|
||||
|
||||
/**
|
||||
* Origin regex patterns for the `Access-Control-Allow-Origin` header.
|
||||
@@ -68,7 +72,11 @@ class Cors extends BaseConfig
|
||||
*
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
'allowedHeaders' => ['*'],
|
||||
=======
|
||||
'allowedHeaders' => ['Content-Type', 'Authorization', 'X-API-Key'],
|
||||
>>>>>>> main
|
||||
|
||||
/**
|
||||
* Set headers to expose.
|
||||
@@ -93,7 +101,11 @@ class Cors extends BaseConfig
|
||||
*
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
'allowedMethods' => ['*'],
|
||||
=======
|
||||
'allowedMethods' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
||||
>>>>>>> main
|
||||
|
||||
/**
|
||||
* Set how many seconds the results of a preflight request can be cached.
|
||||
|
||||
@@ -34,6 +34,7 @@ class Filters extends BaseFilters
|
||||
'forcehttps' => ForceHTTPS::class,
|
||||
'pagecache' => PageCache::class,
|
||||
'performance' => PerformanceMetrics::class,
|
||||
'apiauth' => \App\Filters\ApiAuthFilter::class,
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -72,6 +73,7 @@ class Filters extends BaseFilters
|
||||
*/
|
||||
public array $globals = [
|
||||
'before' => [
|
||||
'cors',
|
||||
// 'honeypot',
|
||||
// 'csrf',
|
||||
// 'invalidchars',
|
||||
|
||||
@@ -7,6 +7,92 @@ use CodeIgniter\Router\RouteCollection;
|
||||
*/
|
||||
$routes->get('/', 'Home::index');
|
||||
$routes->get('/themes', 'ThemeStore::index');
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
$routes->post('/themes/upload', 'ThemeStore::upload');
|
||||
$routes->get('/themes/preview/(:segment)', 'ThemeStore::preview/$1');
|
||||
|
||||
// ============================================================================
|
||||
// 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
|
||||
$routes->options('auth/register', 'AuthController::options');
|
||||
$routes->post('auth/register', 'AuthController::register');
|
||||
$routes->options('auth/login', 'AuthController::options');
|
||||
$routes->post('auth/login', 'AuthController::login');
|
||||
$routes->options('auth/api-key', 'AuthController::options');
|
||||
$routes->post('auth/api-key', 'AuthController::createApiKey');
|
||||
|
||||
// Marketplace - Public access
|
||||
$routes->get('marketplace/themes', 'MarketplaceController::index');
|
||||
$routes->get('marketplace/themes/(:num)', 'MarketplaceController::show/$1');
|
||||
});
|
||||
|
||||
// Protected endpoints (API key authentication required)
|
||||
$routes->group('api/v1', ['namespace' => 'App\Controllers\Api\V1', 'filter' => ['cors', 'apiauth']], function ($routes) {
|
||||
// User endpoints
|
||||
$routes->get('user/profile', 'UserController::profile');
|
||||
$routes->put('user/profile', 'UserController::updateProfile');
|
||||
$routes->get('user/api-keys', 'UserController::listApiKeys');
|
||||
$routes->post('user/api-keys', 'UserController::createApiKey');
|
||||
$routes->delete('user/api-keys/(:segment)', 'UserController::revokeApiKey/$1');
|
||||
|
||||
// Categories
|
||||
$routes->get('categories', 'CategoryController::index');
|
||||
$routes->post('categories', 'CategoryController::create');
|
||||
$routes->get('categories/(:segment)', 'CategoryController::show/$1');
|
||||
$routes->put('categories/(:segment)', 'CategoryController::update/$1');
|
||||
$routes->delete('categories/(:segment)', 'CategoryController::delete/$1');
|
||||
|
||||
// Projects
|
||||
$routes->get('projects', 'ProjectController::index');
|
||||
$routes->post('projects', 'ProjectController::create');
|
||||
$routes->get('projects/(:segment)', 'ProjectController::show/$1');
|
||||
$routes->put('projects/(:segment)', 'ProjectController::update/$1');
|
||||
$routes->delete('projects/(:segment)', 'ProjectController::delete/$1');
|
||||
|
||||
// Todos
|
||||
$routes->get('todos', 'TodoController::index');
|
||||
$routes->post('todos', 'TodoController::create');
|
||||
$routes->get('todos/(:segment)', 'TodoController::show/$1');
|
||||
$routes->put('todos/(:segment)', 'TodoController::update/$1');
|
||||
$routes->delete('todos/(:segment)', 'TodoController::delete/$1');
|
||||
$routes->post('todos/(:segment)/categories', 'TodoController::addCategory/$1');
|
||||
$routes->delete('todos/(:segment)/categories/(:segment)', 'TodoController::removeCategory/$1/$2');
|
||||
|
||||
// Recurring Tasks
|
||||
$routes->get('recurring-tasks', 'RecurringTaskController::index');
|
||||
$routes->post('recurring-tasks', 'RecurringTaskController::create');
|
||||
$routes->get('recurring-tasks/(:segment)', 'RecurringTaskController::show/$1');
|
||||
$routes->put('recurring-tasks/(:segment)', 'RecurringTaskController::update/$1');
|
||||
$routes->delete('recurring-tasks/(:segment)', 'RecurringTaskController::delete/$1');
|
||||
$routes->post('recurring-tasks/(:segment)/categories', 'RecurringTaskController::addCategory/$1');
|
||||
$routes->delete('recurring-tasks/(:segment)/categories/(:segment)', 'RecurringTaskController::removeCategory/$1/$2');
|
||||
|
||||
// Activity Logs
|
||||
$routes->get('activity-logs', 'ActivityLogController::index');
|
||||
$routes->get('activity-logs/(:segment)', 'ActivityLogController::show/$1');
|
||||
|
||||
// User Themes
|
||||
$routes->get('user/themes', 'UserThemeController::index');
|
||||
$routes->post('user/themes', 'UserThemeController::create');
|
||||
$routes->put('user/themes/(:segment)', 'UserThemeController::update/$1');
|
||||
$routes->delete('user/themes/(:segment)', 'UserThemeController::delete/$1');
|
||||
});
|
||||
$routes->get('/themes', 'ThemeStore::index');
|
||||
>>>>>>> main
|
||||
$routes->options('/themes', static function () {
|
||||
header('Access-Control-Allow-Origin: http://localhost:5173');
|
||||
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||
@@ -23,8 +109,11 @@ $routes->options('/themes/upload', static function () {
|
||||
return response()->setStatusCode(204);
|
||||
});
|
||||
$routes->get('/themes/preview/(:segment)', 'ThemeStore::preview/$1');
|
||||
<<<<<<< HEAD
|
||||
$routes->post('/themes/install/(:segment)', 'ThemeStore::install/$1');
|
||||
$routes->post('/themes/activate/(:segment)', 'ThemeStore::activate/$1');
|
||||
$routes->delete('/themes/uninstall/(:segment)', 'ThemeStore::uninstall/$1');
|
||||
$routes->get('/themes/my-themes', 'ThemeStore::myThemes');
|
||||
$routes->get('/themes/(:segment)', 'ThemeStore::serveCss/$1');
|
||||
=======
|
||||
>>>>>>> main
|
||||
|
||||
Reference in New Issue
Block a user