From 518305142e1c94dfbe0f237a162690b228cf6527 Mon Sep 17 00:00:00 2001 From: Snider Date: Tue, 27 Jan 2026 16:25:31 +0000 Subject: [PATCH] refactor: relocate module from app/Mod/Developer to src/ Move module to standard package structure with namespace change from Mod\Developer to Core\Developer. Updates composer.json autoload configuration accordingly. Co-Authored-By: Claude Opus 4.5 --- app/Mod/.gitkeep | 0 changelog/2026/jan/code-review.md | 117 ++++++++++++++++++ composer.json | 4 +- {app/Mod/Developer => src}/Boot.php | 2 +- .../Concerns/RemoteServerManager.php | 6 +- .../Console/Commands/CopyDeviceFrames.php | 2 +- .../Controllers/DevController.php | 4 +- .../Data/RouteTestResult.php | 2 +- .../Exceptions/SshConnectionException.php | 2 +- .../Lang/en_GB/developer.php | 0 .../Listeners/SetHadesCookie.php | 2 +- .../Middleware/ApplyIconSettings.php | 2 +- .../Middleware/RequireHades.php | 2 +- ...1_01_01_000001_create_developer_tables.php | 0 {app/Mod/Developer => src}/Models/Server.php | 2 +- .../Providers/HorizonServiceProvider.php | 2 +- .../Providers/TelescopeServiceProvider.php | 2 +- {app/Mod/Developer => src}/Routes/admin.php | 24 ++-- .../Services/LogReaderService.php | 2 +- .../Services/RouteTestService.php | 4 +- .../Tests/UseCase/DevToolsBasic.php | 0 .../View/Blade/admin/activity-log.blade.php | 0 .../View/Blade/admin/cache.blade.php | 0 .../View/Blade/admin/database.blade.php | 0 .../View/Blade/admin/logs.blade.php | 0 .../Blade/admin/route-inspector.blade.php | 0 .../View/Blade/admin/routes.blade.php | 0 .../View/Blade/admin/servers.blade.php | 0 .../Blade/vendor/pulse/dashboard.blade.php | 0 .../View/Modal/Admin/ActivityLog.php | 2 +- .../View/Modal/Admin/Cache.php | 2 +- .../View/Modal/Admin/Database.php | 2 +- .../View/Modal/Admin/Logs.php | 4 +- .../View/Modal/Admin/RouteInspector.php | 6 +- .../View/Modal/Admin/Routes.php | 2 +- .../View/Modal/Admin/Servers.php | 4 +- 36 files changed, 160 insertions(+), 43 deletions(-) delete mode 100644 app/Mod/.gitkeep create mode 100644 changelog/2026/jan/code-review.md rename {app/Mod/Developer => src}/Boot.php (99%) rename {app/Mod/Developer => src}/Concerns/RemoteServerManager.php (98%) rename {app/Mod/Developer => src}/Console/Commands/CopyDeviceFrames.php (98%) rename {app/Mod/Developer => src}/Controllers/DevController.php (97%) rename {app/Mod/Developer => src}/Data/RouteTestResult.php (99%) rename {app/Mod/Developer => src}/Exceptions/SshConnectionException.php (94%) rename {app/Mod/Developer => src}/Lang/en_GB/developer.php (100%) rename {app/Mod/Developer => src}/Listeners/SetHadesCookie.php (96%) rename {app/Mod/Developer => src}/Middleware/ApplyIconSettings.php (96%) rename {app/Mod/Developer => src}/Middleware/RequireHades.php (95%) rename {app/Mod/Developer => src}/Migrations/0001_01_01_000001_create_developer_tables.php (100%) rename {app/Mod/Developer => src}/Models/Server.php (99%) rename {app/Mod/Developer => src}/Providers/HorizonServiceProvider.php (97%) rename {app/Mod/Developer => src}/Providers/TelescopeServiceProvider.php (98%) rename {app/Mod/Developer => src}/Routes/admin.php (50%) rename {app/Mod/Developer => src}/Services/LogReaderService.php (99%) rename {app/Mod/Developer => src}/Services/RouteTestService.php (99%) rename {app/Mod/Developer => src}/Tests/UseCase/DevToolsBasic.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/activity-log.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/cache.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/database.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/logs.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/route-inspector.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/routes.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/admin/servers.blade.php (100%) rename {app/Mod/Developer => src}/View/Blade/vendor/pulse/dashboard.blade.php (100%) rename {app/Mod/Developer => src}/View/Modal/Admin/ActivityLog.php (98%) rename {app/Mod/Developer => src}/View/Modal/Admin/Cache.php (98%) rename {app/Mod/Developer => src}/View/Modal/Admin/Database.php (98%) rename {app/Mod/Developer => src}/View/Modal/Admin/Logs.php (96%) rename {app/Mod/Developer => src}/View/Modal/Admin/RouteInspector.php (99%) rename {app/Mod/Developer => src}/View/Modal/Admin/Routes.php (98%) rename {app/Mod/Developer => src}/View/Modal/Admin/Servers.php (98%) diff --git a/app/Mod/.gitkeep b/app/Mod/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/changelog/2026/jan/code-review.md b/changelog/2026/jan/code-review.md new file mode 100644 index 0000000..2468adf --- /dev/null +++ b/changelog/2026/jan/code-review.md @@ -0,0 +1,117 @@ +# Developer Module Review + +**Updated:** 2026-01-21 - Additional improvements: command registration, Horizon notifications, multi-log support + +## Overview + +The Developer module provides administrative developer tools for Hades-tier users (god-mode access). It includes: + +1. **Admin Panel Tools**: Log viewer, route browser, and cache management via Livewire components +2. **Remote Server Management**: SSH trait for executing commands on remote servers (used by other modules) +3. **Service Provider Overrides**: Custom Horizon and Telescope configuration +4. **Device Frames Command**: Artisan command for copying device frame assets +5. **Middleware/Listeners**: Icon settings from cookies and Hades cookie on login + +## Production Readiness Score: 95/100 (was 90/100 - Wave 4 improvements applied 2026-01-21) + +The module is production-ready with authorization, rate limiting, audit logging, configurable timeouts, Horizon notification routing, and multi-log file support. + +## Critical Issues (Must Fix) + +- [x] **Server model has no migration**: FIXED - Migration created at `database/migrations/2026_01_21_000001_create_servers_table.php`. + +- [x] **Inconsistent Hades authorization**: FIXED - `DevController` now uses `$user->isHades()` method instead of checking non-existent `account_type` field. + +- [x] **SetHadesCookie uses env() directly**: FIXED - Now uses `config('developer.hades_token')` with config file at `config/developer.php`. + +- [x] **HorizonServiceProvider gate is empty**: FIXED - `viewHorizon` gate now checks `$user->isHades()` for proper authorization. + +- [x] **TelescopeServiceProvider gate emails empty**: FIXED - Telescope gate now checks `$user->isHades()` instead of hardcoded email list. + +- [x] **CopyDeviceFrames command references missing config**: FIXED 2026-01-21 - The config exists at `app/Mod/Web/device-frames.php` and is loaded by Web module as `config('device-frames')`. The command was not registered - now registered in `Developer\Boot.php` via `onConsole()` event handler. + +## Recommended Improvements + +- [x] **Unify authorization pattern**: Created `RequireHades` middleware at `Middleware/RequireHades.php` for consistent authorization. DevController now uses this middleware via routes. + +- [x] **Add route middleware for Hades access**: Created `RequireHades` middleware and applied to API routes group in `Routes/admin.php`. + +- [x] **Move HADES_TOKEN to config**: Already done in prior wave. Config at `config/developer.php` with `'hades_token' => env('HADES_TOKEN')`. + +- [x] **Add rate limiting to API routes**: Added rate limiters in `Boot.php` (`dev-cache-clear`, `dev-logs`, `dev-routes`, `dev-session`) and applied via `throttle:` middleware on routes. + +- [x] **Log clear action should be audited**: `clearLogs()` now logs to Laravel log with user_id, user_email, previous_size_bytes, and IP. + +- [x] **Remove duplicate log reading logic**: Created `LogReaderService` at `Services/LogReaderService.php` with `tailFile()` and `readLogEntries()` methods. Both DevController and Logs component now use this service. + +- [x] **RemoteServerManager timeout is hardcoded**: Added `developer.ssh.connection_timeout` and `developer.ssh.command_timeout` config options. `connect()` and `run()` methods now use config values with fallback defaults. + +- [x] **Services directory is empty**: Now contains `LogReaderService.php`. + +## Missing Features (Future) + +- [ ] **Server CRUD UI**: The Server model exists with full functionality but there's no UI for managing servers. + +- [x] **Horizon/Telescope admin email configuration**: FIXED 2026-01-21 - Added `developer.horizon.*` config options (mail_to, sms_to, slack_webhook, slack_channel) in `config/developer.php`. `HorizonServiceProvider` now reads these values via `configureNotifications()` method. + +- [ ] **Log download/export**: Users can view and clear logs but cannot download them. + +- [ ] **Route testing/inspection**: Route viewer shows routes but doesn't allow clicking to test them. + +- [ ] **Event log viewer**: Activity logs (from Spatie) exist on Server model but no UI to view them. + +- [x] **Multi-log file support**: FIXED 2026-01-21 - Added `getAvailableLogFiles()` to list all log files sorted by date, and `getCurrentLogPath()` to detect daily vs single log channels. LogReaderService now supports reading any log file. + +- [ ] **Database query tool**: Cache, Routes, Logs exist but no database query/inspection tool. + +## Test Coverage Assessment + +**Current Coverage**: Minimal - only one test file exists (`Tests/UseCase/DevToolsBasic.php`) + +**What's tested**: +- Logs page renders with correct sections and translations +- Routes page renders with table headers +- Cache page renders with all cache action cards + +**What's NOT tested**: +- DevController API endpoints +- Cache clearing actually works +- Log filtering functionality +- Route filtering/searching +- Hades authorization enforcement +- RemoteServerManager SSH operations +- Server model scopes and methods +- SetHadesCookie listener +- ApplyIconSettings middleware +- CopyDeviceFrames command + +**Test issues**: +- Tests create a user but don't set Hades tier, so authorization should fail (but tests pass, indicating auth may not be enforced on page load properly in test environment) + +## Security Concerns + +1. **Authorization bypass potential**: The tests pass without setting Hades tier, suggesting the authorization checks may not be working correctly in all environments. + +2. **Log file disclosure**: While Hades-only, the log viewer shows full log messages which may contain sensitive data like tokens, passwords in queries, etc. Consider redacting sensitive patterns. + +3. **Cache clear is destructive**: No confirmation dialog before clearing caches. Accidental clicks could disrupt the application. + +4. **Session endpoint exposes data**: `/hub/api/dev/session` returns session ID, IP, and user agent - useful for debugging but could be abused. + +5. **RemoteServerManager command injection**: While commands are not directly user-input, the `run()` method accepts raw command strings. Any code using this trait must sanitize inputs. + +6. **Private keys stored encrypted**: Good - Server model uses `'encrypted'` cast for `private_key`. Hidden from serialization. + +## Notes + +1. **Module structure is clean**: Follows the modular monolith pattern correctly with Boot.php as service provider, proper namespace structure, and event-driven admin panel registration. + +2. **Translation support**: Full translation file exists for en_GB locale - good i18n practice. + +3. **Pulse dashboard override**: Custom Pulse dashboard view is registered, allowing control over the metrics shown. + +4. **Livewire components well-structured**: Use attributes (`#[Title]`, `#[Layout]`, `#[Url]`) properly and follow consistent patterns. + +5. **RemoteServerManager is well-designed**: The `withConnection()` pattern with guaranteed cleanup is good. Base64 encoding for file writes prevents injection. + +6. **Dead code concern**: The `DevController` methods overlap with Livewire components. The API routes exist but may not be used by the Livewire views. Consider if both are needed. diff --git a/composer.json b/composer.json index 4c8f720..9c65910 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ }, "autoload": { "psr-4": { - "Mod\\Developer\\": "app/Mod/Developer/" + "Core\\Developer\\": "src/" } }, "autoload-dev": { @@ -27,7 +27,7 @@ "extra": { "laravel": { "providers": [ - "Mod\\Developer\\Boot" + "Core\\Developer\\Boot" ] } }, diff --git a/app/Mod/Developer/Boot.php b/src/Boot.php similarity index 99% rename from app/Mod/Developer/Boot.php rename to src/Boot.php index 51dd720..c4edf46 100644 --- a/app/Mod/Developer/Boot.php +++ b/src/Boot.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer; +namespace Core\Developer; use Core\Events\AdminPanelBooting; use Core\Events\ConsoleBooting; diff --git a/app/Mod/Developer/Concerns/RemoteServerManager.php b/src/Concerns/RemoteServerManager.php similarity index 98% rename from app/Mod/Developer/Concerns/RemoteServerManager.php rename to src/Concerns/RemoteServerManager.php index c813b3e..f4aa741 100644 --- a/app/Mod/Developer/Concerns/RemoteServerManager.php +++ b/src/Concerns/RemoteServerManager.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Mod\Developer\Concerns; +namespace Core\Developer\Concerns; -use Mod\Developer\Exceptions\SshConnectionException; -use Mod\Developer\Models\Server; +use Core\Developer\Exceptions\SshConnectionException; +use Core\Developer\Models\Server; use Core\Helpers\CommandResult; use phpseclib3\Crypt\PublicKeyLoader; use phpseclib3\Net\SSH2; diff --git a/app/Mod/Developer/Console/Commands/CopyDeviceFrames.php b/src/Console/Commands/CopyDeviceFrames.php similarity index 98% rename from app/Mod/Developer/Console/Commands/CopyDeviceFrames.php rename to src/Console/Commands/CopyDeviceFrames.php index 2e8a3eb..d69fcf6 100644 --- a/app/Mod/Developer/Console/Commands/CopyDeviceFrames.php +++ b/src/Console/Commands/CopyDeviceFrames.php @@ -1,6 +1,6 @@ name('hub.')->group(function () { // Developer tools (Hades only) - authorization checked in components Route::prefix('dev')->name('dev.')->group(function () { - Route::get('/logs', \Mod\Developer\View\Modal\Admin\Logs::class)->name('logs'); - Route::get('/routes', \Mod\Developer\View\Modal\Admin\Routes::class)->name('routes'); - Route::get('/cache', \Mod\Developer\View\Modal\Admin\Cache::class)->name('cache'); - Route::get('/activity', \Mod\Developer\View\Modal\Admin\ActivityLog::class)->name('activity'); - Route::get('/servers', \Mod\Developer\View\Modal\Admin\Servers::class)->name('servers'); - Route::get('/database', \Mod\Developer\View\Modal\Admin\Database::class)->name('database'); - Route::get('/route-inspector', \Mod\Developer\View\Modal\Admin\RouteInspector::class)->name('route-inspector'); + Route::get('/logs', \Core\Developer\View\Modal\Admin\Logs::class)->name('logs'); + Route::get('/routes', \Core\Developer\View\Modal\Admin\Routes::class)->name('routes'); + Route::get('/cache', \Core\Developer\View\Modal\Admin\Cache::class)->name('cache'); + Route::get('/activity', \Core\Developer\View\Modal\Admin\ActivityLog::class)->name('activity'); + Route::get('/servers', \Core\Developer\View\Modal\Admin\Servers::class)->name('servers'); + Route::get('/database', \Core\Developer\View\Modal\Admin\Database::class)->name('database'); + Route::get('/route-inspector', \Core\Developer\View\Modal\Admin\RouteInspector::class)->name('route-inspector'); }); }); @@ -31,21 +31,21 @@ Route::prefix('hub')->name('hub.')->group(function () { Route::prefix('hub/api/dev') ->name('hub.api.dev.') - ->middleware(\Mod\Developer\Middleware\RequireHades::class) + ->middleware(\Core\Developer\Middleware\RequireHades::class) ->group(function () { - Route::get('/logs', [\Mod\Developer\Controllers\DevController::class, 'logs']) + Route::get('/logs', [\Core\Developer\Controllers\DevController::class, 'logs']) ->middleware('throttle:dev-logs') ->name('logs'); - Route::get('/routes', [\Mod\Developer\Controllers\DevController::class, 'routes']) + Route::get('/routes', [\Core\Developer\Controllers\DevController::class, 'routes']) ->middleware('throttle:dev-routes') ->name('routes'); - Route::get('/session', [\Mod\Developer\Controllers\DevController::class, 'session']) + Route::get('/session', [\Core\Developer\Controllers\DevController::class, 'session']) ->middleware('throttle:dev-session') ->name('session'); - Route::post('/clear/{type}', [\Mod\Developer\Controllers\DevController::class, 'clear']) + Route::post('/clear/{type}', [\Core\Developer\Controllers\DevController::class, 'clear']) ->middleware('throttle:dev-cache-clear') ->name('clear'); }); diff --git a/app/Mod/Developer/Services/LogReaderService.php b/src/Services/LogReaderService.php similarity index 99% rename from app/Mod/Developer/Services/LogReaderService.php rename to src/Services/LogReaderService.php index 5bd4650..088dd1a 100644 --- a/app/Mod/Developer/Services/LogReaderService.php +++ b/src/Services/LogReaderService.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\Services; +namespace Core\Developer\Services; /** * Service for reading and parsing Laravel log files. diff --git a/app/Mod/Developer/Services/RouteTestService.php b/src/Services/RouteTestService.php similarity index 99% rename from app/Mod/Developer/Services/RouteTestService.php rename to src/Services/RouteTestService.php index 85c9055..ac2b950 100644 --- a/app/Mod/Developer/Services/RouteTestService.php +++ b/src/Services/RouteTestService.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Mod\Developer\Services; +namespace Core\Developer\Services; use Illuminate\Http\Request; use Illuminate\Routing\Route; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Route as RouteFacade; -use Mod\Developer\Data\RouteTestResult; +use Core\Developer\Data\RouteTestResult; use Throwable; /** diff --git a/app/Mod/Developer/Tests/UseCase/DevToolsBasic.php b/src/Tests/UseCase/DevToolsBasic.php similarity index 100% rename from app/Mod/Developer/Tests/UseCase/DevToolsBasic.php rename to src/Tests/UseCase/DevToolsBasic.php diff --git a/app/Mod/Developer/View/Blade/admin/activity-log.blade.php b/src/View/Blade/admin/activity-log.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/activity-log.blade.php rename to src/View/Blade/admin/activity-log.blade.php diff --git a/app/Mod/Developer/View/Blade/admin/cache.blade.php b/src/View/Blade/admin/cache.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/cache.blade.php rename to src/View/Blade/admin/cache.blade.php diff --git a/app/Mod/Developer/View/Blade/admin/database.blade.php b/src/View/Blade/admin/database.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/database.blade.php rename to src/View/Blade/admin/database.blade.php diff --git a/app/Mod/Developer/View/Blade/admin/logs.blade.php b/src/View/Blade/admin/logs.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/logs.blade.php rename to src/View/Blade/admin/logs.blade.php diff --git a/app/Mod/Developer/View/Blade/admin/route-inspector.blade.php b/src/View/Blade/admin/route-inspector.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/route-inspector.blade.php rename to src/View/Blade/admin/route-inspector.blade.php diff --git a/app/Mod/Developer/View/Blade/admin/routes.blade.php b/src/View/Blade/admin/routes.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/routes.blade.php rename to src/View/Blade/admin/routes.blade.php diff --git a/app/Mod/Developer/View/Blade/admin/servers.blade.php b/src/View/Blade/admin/servers.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/admin/servers.blade.php rename to src/View/Blade/admin/servers.blade.php diff --git a/app/Mod/Developer/View/Blade/vendor/pulse/dashboard.blade.php b/src/View/Blade/vendor/pulse/dashboard.blade.php similarity index 100% rename from app/Mod/Developer/View/Blade/vendor/pulse/dashboard.blade.php rename to src/View/Blade/vendor/pulse/dashboard.blade.php diff --git a/app/Mod/Developer/View/Modal/Admin/ActivityLog.php b/src/View/Modal/Admin/ActivityLog.php similarity index 98% rename from app/Mod/Developer/View/Modal/Admin/ActivityLog.php rename to src/View/Modal/Admin/ActivityLog.php index 6b154e1..fd62e00 100644 --- a/app/Mod/Developer/View/Modal/Admin/ActivityLog.php +++ b/src/View/Modal/Admin/ActivityLog.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Illuminate\Contracts\View\View; use Livewire\Attributes\Computed; diff --git a/app/Mod/Developer/View/Modal/Admin/Cache.php b/src/View/Modal/Admin/Cache.php similarity index 98% rename from app/Mod/Developer/View/Modal/Admin/Cache.php rename to src/View/Modal/Admin/Cache.php index 8d8dbc0..ce32f1a 100644 --- a/app/Mod/Developer/View/Modal/Admin/Cache.php +++ b/src/View/Modal/Admin/Cache.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Artisan; diff --git a/app/Mod/Developer/View/Modal/Admin/Database.php b/src/View/Modal/Admin/Database.php similarity index 98% rename from app/Mod/Developer/View/Modal/Admin/Database.php rename to src/View/Modal/Admin/Database.php index d25c052..4bd5a14 100644 --- a/app/Mod/Developer/View/Modal/Admin/Database.php +++ b/src/View/Modal/Admin/Database.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\DB; diff --git a/app/Mod/Developer/View/Modal/Admin/Logs.php b/src/View/Modal/Admin/Logs.php similarity index 96% rename from app/Mod/Developer/View/Modal/Admin/Logs.php rename to src/View/Modal/Admin/Logs.php index 79ce815..72ed6c6 100644 --- a/app/Mod/Developer/View/Modal/Admin/Logs.php +++ b/src/View/Modal/Admin/Logs.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Log; use Livewire\Attributes\Layout; use Livewire\Attributes\Title; use Livewire\Component; -use Mod\Developer\Services\LogReaderService; +use Core\Developer\Services\LogReaderService; #[Title('Application Logs')] #[Layout('hub::admin.layouts.app')] diff --git a/app/Mod/Developer/View/Modal/Admin/RouteInspector.php b/src/View/Modal/Admin/RouteInspector.php similarity index 99% rename from app/Mod/Developer/View/Modal/Admin/RouteInspector.php rename to src/View/Modal/Admin/RouteInspector.php index e5b27ea..b861669 100644 --- a/app/Mod/Developer/View/Modal/Admin/RouteInspector.php +++ b/src/View/Modal/Admin/RouteInspector.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Flux\Flux; use Illuminate\Contracts\View\View; @@ -12,8 +12,8 @@ use Livewire\Attributes\Layout; use Livewire\Attributes\Title; use Livewire\Attributes\Url; use Livewire\Component; -use Mod\Developer\Data\RouteTestResult; -use Mod\Developer\Services\RouteTestService; +use Core\Developer\Data\RouteTestResult; +use Core\Developer\Services\RouteTestService; /** * Route Inspector - interactive route testing for developers. diff --git a/app/Mod/Developer/View/Modal/Admin/Routes.php b/src/View/Modal/Admin/Routes.php similarity index 98% rename from app/Mod/Developer/View/Modal/Admin/Routes.php rename to src/View/Modal/Admin/Routes.php index d1d4f2b..374be67 100644 --- a/app/Mod/Developer/View/Modal/Admin/Routes.php +++ b/src/View/Modal/Admin/Routes.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Route; diff --git a/app/Mod/Developer/View/Modal/Admin/Servers.php b/src/View/Modal/Admin/Servers.php similarity index 98% rename from app/Mod/Developer/View/Modal/Admin/Servers.php rename to src/View/Modal/Admin/Servers.php index 4302509..5f6f46e 100644 --- a/app/Mod/Developer/View/Modal/Admin/Servers.php +++ b/src/View/Modal/Admin/Servers.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Mod\Developer\View\Modal\Admin; +namespace Core\Developer\View\Modal\Admin; use Flux\Flux; use Illuminate\Contracts\View\View; @@ -11,7 +11,7 @@ use Livewire\Attributes\Computed; use Livewire\Attributes\Layout; use Livewire\Attributes\Title; use Livewire\Component; -use Mod\Developer\Models\Server; +use Core\Developer\Models\Server; #[Title('Server Management')] #[Layout('hub::admin.layouts.app')]