Api improvements#1344
Conversation
|
All contributors have signed the CLA! ✅ Thank you for taking the time to complete this step. We'll now proceed with reviewing your pull request. We appreciate your contribution to Ctrlpanel! 🙌 |
|
I have read and agree to the CLA. |
There was a problem hiding this comment.
Pull request overview
This PR strengthens and standardizes the ControlPanel’s Laravel APIs by introducing token validity/permissions enforcement, consistent JSON response envelopes, and broad controller updates (plus admin UI for managing API tokens).
Changes:
- Added API token security fields (active/expiry/permissions/creator) and middleware for token validation + permission checks.
- Standardized API responses via
ApiResponseService+ApiErrorCode, and updated multiple API controllers to use the new format with pagination metadata. - Updated admin UI/routes to manage token status/permissions and support token regeneration.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
themes/default/views/admin/api/index.blade.php |
Adds token “Status” column to the admin API token list. |
themes/default/views/admin/api/create.blade.php |
Adds expiry + permissions selection and intended “show token once” UI. |
themes/default/views/admin/api/edit.blade.php |
Adds active toggle, expiry, permissions selection, and regenerate-token UI. |
routes/web.php |
Adds admin route to regenerate API tokens. |
routes/api.php |
Adds explicit throttling middleware to API routes group. |
database/migrations/2026_05_02_000001_add_security_fields_to_application_apis_table.php |
Adds is_active, expires_at, permissions, created_by to application_apis. |
app/Models/ApplicationApi.php |
Adds casts, creator relation, validity + permission helpers. |
app/Http/Middleware/ApiAuthToken.php |
Enforces token presence/validity and standardizes auth error responses. |
app/Http/Middleware/ApiPermissionCheck.php |
New middleware for per-endpoint permission checks. |
app/Http/Kernel.php |
Updates API throttling and registers new permission middleware. |
app/Services/ApiResponseService.php |
New centralized response wrapper for success/error/pagination. |
app/Exceptions/ApiErrorCode.php |
Adds enumerated API error codes for consistency. |
app/Http/Resources/ApiResponseResource.php |
Adds a resource wrapper for success/data/error/meta. |
app/Http/Requests/Api/Users/UpdateUserRequest.php |
Makes user update fields optional to support partial updates. |
app/Http/Requests/Api/Servers/UpdateServerRequest.php |
Makes user_id optional for partial updates. |
app/Http/Controllers/Api/UserController.php |
Uses standardized responses + pagination meta; improves pterodactyl error handling shape. |
app/Http/Controllers/Api/ServerController.php |
Uses standardized responses + pagination meta; updates error handling/status codes. |
app/Http/Controllers/Api/VoucherController.php |
Uses standardized responses + pagination meta and enables allowed sorts. |
app/Http/Controllers/Api/RoleController.php |
Uses standardized responses + pagination meta and enables allowed sorts. |
app/Http/Controllers/Api/ProductController.php |
Uses standardized responses + pagination meta and enables allowed sorts. |
app/Http/Controllers/Api/NotificationController.php |
Uses standardized responses + pagination meta; standardizes send/delete responses. |
app/Http/Controllers/Admin/ApplicationApiController.php |
Adds permission/expiry handling, regeneration flow, and datatable status rendering. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
67c5685 to
38d4e6e
Compare
|
Resolved all Copilot review comments |
|
It's a good foundation, but it needs to be improved to maintain compatibility with the current API, as well as adapted so that Scribe can correctly generate OpenAPI specification. Due to the amount of work, this will be delayed until the 1.4 or 2.0 release |
API Security, Consistency, and Performance Improvements
Overview
This PR enhances the Laravel-based ControlPanel system with secure, permission-aware APIs, consistent response structures, robust error handling, and performance optimizations.
Changes Made
1. Authentication & Security
permissionsJSON field toapplication_apistableis_activeandexpires_atfields2. Response Consistency
success,data,error,metacurrent_page,total,last_page,per_page,from,toApiResponseServicefor consistent response handlingApiResponseResourcefor resource-based responses3. Error Handling
codeandmessagefieldsMISSING_AUTHORIZATION_HEADERINVALID_TOKENTOKEN_INACTIVETOKEN_EXPIREDINSUFFICIENT_PERMISSIONSPERMISSION_ESCALATIONRATE_LIMIT_EXCEEDEDVALIDATION_ERRORRESOURCE_NOT_FOUNDRESOURCE_ALREADY_SUSPENDEDRESOURCE_NOT_SUSPENDEDPTERODACTYL_ERRORINTERNAL_ERRORREGENERATION_DENIED4. Endpoint Fixes
$datavariable indestroymethodallowedSortsto all controllers5. Performance Optimizations
allowedSortsin all controllersper_pageto maximum of 1006. Query & Update Improvements
7. Permissions & Token Behavior
ApiPermissionCheckmiddleware8. Frontend Updates
Database Changes
2026_05_02_000001_add_security_fields_to_application_apis_table.phpis_active(boolean, default true)expires_at(timestamp, nullable)permissions(json, nullable)created_by(foreign key to users, nullable)Files Modified
Backend
app/Models/ApplicationApi.php- Added token validation, permission checksapp/Http/Middleware/ApiAuthToken.php- Enhanced with token validity checksapp/Http/Middleware/ApiPermissionCheck.php- New middleware for permission checksapp/Http/Kernel.php- Added middleware, rate limitingapp/Services/ApiResponseService.php- New service for consistent responsesapp/Exceptions/ApiErrorCode.php- New error codes definitionapp/Http/Resources/ApiResponseResource.php- New resource wrapperapp/Http/Controllers/Api/UserController.php- Updated all methodsapp/Http/Controllers/Api/ServerController.php- Updated all methodsapp/Http/Controllers/Api/VoucherController.php- Updated all methodsapp/Http/Controllers/Api/RoleController.php- Updated all methodsapp/Http/Controllers/Api/ProductController.php- Updated all methodsapp/Http/Controllers/Api/NotificationController.php- Updated all methodsapp/Http/Controllers/Admin/ApplicationApiController.php- Added regeneration, permissionsapp/Http/Requests/Api/Users/UpdateUserRequest.php- Made fields optionalapp/Http/Requests/Api/Servers/UpdateServerRequest.php- Made user_id optionalFrontend
themes/default/views/admin/api/create.blade.php- Added permissions, expirationthemes/default/views/admin/api/edit.blade.php- Added regenerate, status togglethemes/default/views/admin/api/index.blade.php- Shows active/inactive statusRoutes
routes/api.php- Added rate limiting middlewareroutes/web.php- Added regenerate routeBreaking Changes
success,data,error,meta)nullinstead of[]for full accessMigration Required