name('sitemap'); Route::get('/{key}.txt', [SeoController::class, 'indexNowKey'])->where('key', '[A-Fa-f0-9]{8,128}')->name('indexnow.key'); Route::get('/robots.txt', [SeoController::class, 'robots'])->name('robots'); Route::get('/', fn () => view('portal.welcome', ['latestRelease' => \App\Models\SonarDeskRelease::published()->where('channel', 'stable')->latest('published_at')->first()]))->name('home'); Route::view('/features', 'features')->name('features'); Route::get('/release', [ReleaseController::class, 'index'])->name('release'); Route::get('/downloads/sonardesk/details', [ReleaseController::class, 'sonarDeskDetails'])->name('download.sonardesk.details'); Route::get('/download', [ReleaseController::class, 'latest'])->name('download.latest'); Route::get('/downloads/products/{product}/details', [ReleaseController::class, 'productDetails'])->name('download.product.details'); Route::get('/downloads/products/{product}', [ReleaseController::class, 'productDownload'])->name('download.product'); Route::get('/downloads/{release}', [ReleaseController::class, 'download'])->name('download.release'); Route::get('/updates/appcast.xml', [ReleaseController::class, 'appcast'])->name('updates.appcast'); Route::get('/support', [SupportController::class, 'create'])->name('support'); Route::post('/support', [SupportController::class, 'store'])->middleware('throttle:5,10')->name('support.store'); Route::view('/privacy', 'legal.privacy')->name('privacy'); Route::view('/terms', 'legal.terms')->name('terms'); Route::view('/refund-policy', 'legal.refund')->name('refund'); Route::view('/cookies', 'legal.cookies')->name('cookies'); Route::middleware('guest')->group(function () { Route::get('/login', [AuthenticatedSessionController::class, 'create'])->name('login'); Route::post('/login', [AuthenticatedSessionController::class, 'store'])->middleware('throttle:login'); Route::get('/register', [RegisteredUserController::class, 'create'])->name('register'); Route::post('/register', [RegisteredUserController::class, 'store'])->middleware('throttle:registration'); Route::get('/forgot-password', [PasswordController::class, 'requestForm'])->name('password.request'); Route::post('/forgot-password', [PasswordController::class, 'email'])->name('password.email')->middleware('throttle:5,1'); Route::get('/reset-password/{token}', [PasswordController::class, 'resetForm'])->name('password.reset'); Route::post('/reset-password', [PasswordController::class, 'reset'])->name('password.update'); }); Route::middleware('auth')->group(function () { Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout'); Route::get('/verify-email', [EmailVerificationController::class, 'notice'])->name('verification.notice'); Route::get('/verify-email/{id}/{hash}', [EmailVerificationController::class, 'verify'])->middleware(['signed', 'throttle:6,1'])->name('verification.verify'); Route::post('/email/verification-notification', [EmailVerificationController::class, 'resend'])->middleware('throttle:6,1')->name('verification.send'); }); Route::middleware(['auth', 'verified', AdminOnly::class])->prefix('admin')->name('admin.')->group(function () { Route::get('/', [AdminController::class, 'index'])->name('index'); Route::get('/licences', [AdminController::class, 'licenses'])->name('licenses'); Route::get('/licences/{license}', [AdminController::class, 'show'])->name('license'); Route::post('/licences/{license}/revoke', [AdminController::class, 'revoke'])->name('revoke'); Route::post('/licences/{license}/restore', [AdminController::class, 'restore'])->name('restore'); Route::get('/users', [UserController::class, 'index'])->name('users.index'); Route::get('/users/{user}', [UserController::class, 'show'])->name('users.show'); Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update'); Route::post('/users/{user}/verify', [UserController::class, 'verify'])->name('users.verify'); Route::post('/users/{user}/verification-email', [UserController::class, 'resendVerification'])->name('users.verification-email'); Route::post('/users/{user}/password-reset', [UserController::class, 'sendPasswordReset'])->name('users.password-reset'); Route::post('/users/{user}/suspend', [UserController::class, 'suspend'])->name('users.suspend'); Route::post('/users/{user}/restore', [UserController::class, 'restore'])->name('users.restore'); Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy'); Route::patch('/users/{user}/licences/{license}', [UserController::class, 'updateLicense'])->name('users.licences.update'); Route::delete('/users/{user}/licences/{license}/activations/{activation}', [UserController::class, 'deactivate'])->name('users.activations.destroy'); Route::get('/seo', [SeoSettingsController::class, 'edit'])->name('seo.edit'); Route::put('/seo', [SeoSettingsController::class, 'update'])->name('seo.update'); Route::get('/cms', [AdminCmsPageController::class, 'index'])->name('cms.index'); Route::get('/cms/create', [AdminCmsPageController::class, 'create'])->name('cms.create'); Route::post('/cms', [AdminCmsPageController::class, 'store'])->name('cms.store'); Route::get('/cms/{page}/edit', [AdminCmsPageController::class, 'edit'])->name('cms.edit'); Route::put('/cms/{page}', [AdminCmsPageController::class, 'update'])->name('cms.update'); Route::delete('/cms/{page}', [AdminCmsPageController::class, 'destroy'])->name('cms.destroy'); Route::get('/download-products', [DownloadProductController::class, 'index'])->name('download-products.index'); Route::post('/download-products', [DownloadProductController::class, 'store'])->name('download-products.store'); Route::put('/download-products/{product}', [DownloadProductController::class, 'update'])->name('download-products.update'); Route::patch('/download-products/{product}/publication', [DownloadProductController::class, 'publication'])->name('download-products.publication'); Route::delete('/download-products/{product}', [DownloadProductController::class, 'destroy'])->name('download-products.destroy'); Route::get('/releases', [AdminReleaseController::class, 'index'])->name('releases.index'); Route::get('/releases/create', [AdminReleaseController::class, 'create'])->name('releases.create'); Route::post('/releases', [AdminReleaseController::class, 'store'])->name('releases.store'); Route::get('/releases/settings', [AdminReleaseController::class, 'settings'])->name('releases.settings'); Route::put('/releases/settings', [AdminReleaseController::class, 'updateSettings'])->name('releases.settings.update'); Route::get('/releases/{release}/edit', [AdminReleaseController::class, 'edit'])->name('releases.edit'); Route::put('/releases/{release}', [AdminReleaseController::class, 'update'])->name('releases.update'); Route::delete('/releases/{release}', [AdminReleaseController::class, 'destroy'])->name('releases.destroy'); Route::get('/support', [SupportTicketController::class, 'index'])->name('support.index'); Route::get('/support/{ticket}', [SupportTicketController::class, 'show'])->name('support.show'); Route::patch('/support/{ticket}',[SupportTicketController::class, 'update'])->name('support.update'); }); Route::get('/pages/{slug}', [CmsPageController::class, 'show'])->name('cms.show');