group(function () { Route::get('/login', [AuthController::class, 'showLogin'])->name('login'); Route::post('/login', [AuthController::class, 'login']); }); Route::post('/logout', [AuthController::class, 'logout'])->name('logout')->middleware('auth'); // ─── Authenticated Routes ──────────────────────────────────────────── Route::middleware(['auth'])->group(function () { // Dashboard Route::get('/', [DashboardController::class, 'index'])->name('dashboard'); // ── Hypervisor / vCenter ────────────────────────────────────── Route::prefix('hypervisors')->name('hypervisors.')->group(function () { Route::get('/', [HypervisorController::class, 'index'])->name('index'); Route::get('/create', [HypervisorController::class, 'create'])->name('create'); Route::post('/', [HypervisorController::class, 'store'])->name('store'); Route::get('/{hypervisor}', [HypervisorController::class, 'show'])->name('show'); Route::get('/{hypervisor}/edit', [HypervisorController::class, 'edit'])->name('edit'); Route::put('/{hypervisor}', [HypervisorController::class, 'update'])->name('update'); Route::delete('/{hypervisor}', [HypervisorController::class, 'destroy'])->name('destroy'); Route::post('/{hypervisor}/sync', [HypervisorController::class, 'sync'])->name('sync'); Route::post('/{hypervisor}/test-connection', [HypervisorController::class, 'testConnection'])->name('test-connection'); }); Route::prefix('virtual-machines')->name('vms.')->group(function () { Route::get('/', [VirtualMachineController::class, 'index'])->name('index'); Route::get('/{vm}', [VirtualMachineController::class, 'show'])->name('show'); Route::post('/{vm}/power', [VirtualMachineController::class, 'power'])->name('power'); Route::post('/{vm}/snapshot', [VirtualMachineController::class, 'snapshot'])->name('snapshot'); Route::post('/{vm}/clone', [VirtualMachineController::class, 'clone'])->name('clone'); Route::post('/{vm}/migrate', [VirtualMachineController::class, 'migrate'])->name('migrate'); }); Route::prefix('templates')->name('templates.')->group(function () { Route::get('/', [TemplateController::class, 'index'])->name('index'); Route::get('/create', [TemplateController::class, 'create'])->name('create'); Route::post('/', [TemplateController::class, 'store'])->name('store'); Route::get('/{template}', [TemplateController::class, 'show'])->name('show'); Route::get('/{template}/edit', [TemplateController::class, 'edit'])->name('edit'); Route::put('/{template}', [TemplateController::class, 'update'])->name('update'); Route::delete('/{template}', [TemplateController::class, 'destroy'])->name('destroy'); Route::post('/{template}/deploy', [TemplateController::class, 'deploy'])->name('deploy'); }); // ── Containers / Docker ─────────────────────────────────────── Route::prefix('containers')->name('containers.')->group(function () { Route::get('/', [ContainerController::class, 'index'])->name('index'); Route::get('/{container}', [ContainerController::class, 'show'])->name('show'); Route::post('/{container}/action', [ContainerController::class, 'action'])->name('action'); Route::get('/{container}/logs', [ContainerController::class, 'logs'])->name('logs'); Route::get('/{container}/stats', [ContainerController::class, 'stats'])->name('stats'); Route::delete('/{container}', [ContainerController::class, 'destroy'])->name('destroy'); }); Route::prefix('stacks')->name('stacks.')->group(function () { Route::get('/', [StackController::class, 'index'])->name('index'); Route::get('/create', [StackController::class, 'create'])->name('create'); Route::post('/', [StackController::class, 'store'])->name('store'); Route::get('/{stack}', [StackController::class, 'show'])->name('show'); Route::get('/{stack}/edit', [StackController::class, 'edit'])->name('edit'); Route::put('/{stack}', [StackController::class, 'update'])->name('update'); Route::delete('/{stack}', [StackController::class, 'destroy'])->name('destroy'); Route::post('/{stack}/deploy', [StackController::class, 'deploy'])->name('deploy'); }); // ── Cloud Accounts ──────────────────────────────────────────── Route::prefix('cloud')->name('cloud.')->group(function () { Route::get('/', [CloudAccountController::class, 'index'])->name('index'); Route::get('/accounts/create', [CloudAccountController::class, 'create'])->name('accounts.create'); Route::post('/accounts', [CloudAccountController::class, 'store'])->name('accounts.store'); Route::get('/accounts/{account}', [CloudAccountController::class, 'show'])->name('accounts.show'); Route::get('/accounts/{account}/edit', [CloudAccountController::class, 'edit'])->name('accounts.edit'); Route::put('/accounts/{account}', [CloudAccountController::class, 'update'])->name('accounts.update'); Route::delete('/accounts/{account}', [CloudAccountController::class, 'destroy'])->name('accounts.destroy'); Route::get('/resources', [CloudResourceController::class, 'index'])->name('resources.index'); Route::get('/resources/{resource}', [CloudResourceController::class, 'show'])->name('resources.show'); Route::post('/accounts/{account}/sync', [CloudAccountController::class, 'sync'])->name('accounts.sync'); }); // ── Security Dashboard ──────────────────────────────────────── Route::prefix('security')->name('security.')->group(function () { Route::get('/', [SecurityDashboardController::class, 'index'])->name('index'); Route::get('/scans', [ScanController::class, 'index'])->name('scans.index'); Route::post('/scans', [ScanController::class, 'store'])->name('scans.store'); Route::get('/scans/{scan}', [ScanController::class, 'show'])->name('scans.show'); Route::get('/vulnerabilities', [SecurityDashboardController::class, 'vulnerabilities'])->name('vulnerabilities'); Route::get('/compliance', [SecurityDashboardController::class, 'compliance'])->name('compliance'); }); // ── Backup & DR ─────────────────────────────────────────────── Route::prefix('backups')->name('backups.')->group(function () { Route::get('/', [BackupController::class, 'index'])->name('index'); Route::post('/', [BackupController::class, 'store'])->name('store'); Route::get('/{backup}', [BackupController::class, 'show'])->name('show'); Route::delete('/{backup}', [BackupController::class, 'destroy'])->name('destroy'); Route::post('/{backup}/restore', [RestoreController::class, 'restore'])->name('restore'); Route::get('/schedules', [BackupController::class, 'schedules'])->name('schedules'); Route::post('/schedules', [BackupController::class, 'storeSchedule'])->name('schedules.store'); }); // ── Monitoring ──────────────────────────────────────────────── Route::prefix('monitoring')->name('monitoring.')->group(function () { Route::get('/', [MonitoringController::class, 'index'])->name('index'); Route::get('/metrics/{target}', [MonitoringController::class, 'metrics'])->name('metrics'); Route::get('/alerts', [MonitoringController::class, 'alerts'])->name('alerts'); Route::post('/alerts/{alert}/acknowledge', [MonitoringController::class, 'acknowledge'])->name('alerts.acknowledge'); Route::get('/dashboards', [MonitoringController::class, 'dashboards'])->name('dashboards'); }); // ── Identity / Secrets ──────────────────────────────────────── Route::prefix('identity')->name('identity.')->group(function () { Route::get('/', fn() => Inertia::render('Identity/Index'))->name('index'); Route::prefix('passwords')->name('passwords.')->group(function () { Route::get('/', [PasswordController::class, 'index'])->name('index'); Route::post('/', [PasswordController::class, 'store'])->name('store'); Route::get('/{password}/reveal', [PasswordController::class, 'reveal'])->name('reveal'); Route::put('/{password}', [PasswordController::class, 'update'])->name('update'); Route::delete('/{password}', [PasswordController::class, 'destroy'])->name('destroy'); }); Route::prefix('certificates')->name('certificates.')->group(function () { Route::get('/', [CertificateController::class, 'index'])->name('index'); Route::post('/', [CertificateController::class, 'store'])->name('store'); Route::get('/{cert}', [CertificateController::class, 'show'])->name('show'); Route::delete('/{cert}', [CertificateController::class, 'destroy'])->name('destroy'); Route::post('/generate', [CertificateController::class, 'generate'])->name('generate'); }); }); // ── Wiki / Documents ────────────────────────────────────────── Route::prefix('wiki')->name('wiki.')->group(function () { Route::get('/', [WikiController::class, 'index'])->name('index'); Route::get('/spaces', [WikiController::class, 'spaces'])->name('spaces'); Route::get('/spaces/{space}', [WikiController::class, 'space'])->name('space'); Route::get('/pages/create', [DocumentController::class, 'create'])->name('pages.create'); Route::post('/pages', [DocumentController::class, 'store'])->name('pages.store'); Route::get('/pages/{page}', [DocumentController::class, 'show'])->name('pages.show'); Route::get('/pages/{page}/edit', [DocumentController::class, 'edit'])->name('pages.edit'); Route::put('/pages/{page}', [DocumentController::class, 'update'])->name('pages.update'); Route::delete('/pages/{page}', [DocumentController::class, 'destroy'])->name('pages.destroy'); Route::get('/files', [WikiController::class, 'files'])->name('files'); Route::post('/files', [WikiController::class, 'uploadFile'])->name('files.upload'); Route::delete('/files/{file}', [WikiController::class, 'deleteFile'])->name('files.delete'); }); // ── ACL / Roles & Users ─────────────────────────────────────── Route::middleware(['role:admin|super-admin'])->group(function () { Route::prefix('acl')->name('acl.')->group(function () { Route::get('/', fn() => Inertia::render('Acl/Index'))->name('index'); Route::resource('roles', RoleController::class); Route::resource('users', UserController::class); Route::post('/users/{user}/roles', [UserController::class, 'assignRole'])->name('users.roles'); }); // ── Administration ──────────────────────────────────────── Route::prefix('admin')->name('admin.')->group(function () { Route::get('/', [AdminController::class, 'index'])->name('index'); Route::get('/settings', [SettingsController::class, 'index'])->name('settings'); Route::put('/settings', [SettingsController::class, 'update'])->name('settings.update'); Route::get('/audit-log', [AdminController::class, 'auditLog'])->name('audit-log'); Route::get('/system-health', [AdminController::class, 'systemHealth'])->name('system-health'); Route::prefix('ldap')->name('ldap.')->group(function () { Route::get('/', [LdapController::class, 'index'])->name('index'); Route::put('/', [LdapController::class, 'update'])->name('update'); Route::post('/test', [LdapController::class, 'test'])->name('test'); Route::post('/sync', [LdapController::class, 'sync'])->name('sync'); }); }); }); });