Files
2026-10-12 10:56:55 +01:00

100 lines
8.2 KiB
PHP

<?php
use App\Http\Controllers\Admin\AdminController;
use App\Http\Controllers\Admin\SupportTicketController;
use App\Http\Controllers\Admin\ReleaseController as AdminReleaseController;
use App\Http\Controllers\Admin\CmsPageController as AdminCmsPageController;
use App\Http\Controllers\Admin\SeoSettingsController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\SeoController;
use App\Http\Controllers\CmsPageController;
use App\Http\Controllers\Auth\AuthenticatedSessionController;
use App\Http\Controllers\Auth\EmailVerificationController;
use App\Http\Controllers\Auth\PasswordController;
use App\Http\Controllers\Auth\RegisteredUserController;
use App\Http\Controllers\ReleaseController;
use App\Http\Controllers\Admin\DownloadProductController;
use App\Http\Controllers\Support\SupportController;
use App\Http\Middleware\AdminOnly;
use Illuminate\Support\Facades\Route;
Route::get('/sitemap.xml', [SeoController::class, 'sitemap'])->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');