Certified/routes/web.php
2026-08-09 16:33:53 +02:00

55 lines
3.1 KiB
PHP

<?php
use App\Http\Controllers\CertificateDownloadController;
use App\Http\Controllers\CertificatePreviewController;
use App\Http\Controllers\LanguageController;
use App\Http\Controllers\MarketingController;
use App\Http\Controllers\MoneybirdWebhookController;
use App\Http\Controllers\SharePageController;
use App\Http\Controllers\VerifyController;
use Illuminate\Support\Facades\Route;
Route::get('/', [MarketingController::class, 'home'])->name('home');
Route::get('/security', [MarketingController::class, 'security'])->name('marketing.security');
Route::get('/pricing', [MarketingController::class, 'pricing'])->name('marketing.pricing');
Route::get('/terms', [MarketingController::class, 'terms'])->name('marketing.terms');
Route::get('/privacy', [MarketingController::class, 'privacy'])->name('marketing.privacy');
Route::get('/dpa', [MarketingController::class, 'dpa'])->name('marketing.dpa');
// Available to guests and authenticated users alike.
Route::get('language/{locale}', LanguageController::class)->name('language.switch');
// Public certificate authenticity check. No auth — anyone with a
// certificate number and the holder's last name can confirm it's valid.
Route::get('verify', [VerifyController::class, 'show'])->name('verify.show');
Route::post('verify', [VerifyController::class, 'check'])->middleware('throttle:10,1')->name('verify.check');
// Moneybird calls this to report invoice/payment events. No auth — verified
// by comparing the webhook's shared token instead (see the controller).
Route::post('webhooks/moneybird', MoneybirdWebhookController::class)->name('webhooks.moneybird');
Route::middleware(['auth', 'verified'])->group(function () {
Route::livewire('dashboard', 'pages::dashboard')->name('dashboard');
Route::livewire('certificates', 'pages::certificates.index')->name('certificates.index');
Route::livewire('certificates/create', 'pages::certificates.create')->name('certificates.create');
Route::livewire('certificates/{certificate}', 'pages::certificates.show')->name('certificates.show');
Route::livewire('certificates/{certificate}/edit', 'pages::certificates.edit')->name('certificates.edit');
Route::get('certificates/{certificate}/download', CertificateDownloadController::class)->name('certificates.download');
Route::get('certificates/{certificate}/preview', CertificatePreviewController::class)->name('certificates.preview');
Route::livewire('categories', 'pages::categories.index')->name('categories.index');
Route::livewire('shares', 'pages::shares.index')->name('shares.index');
});
// External recipients: authorized by the unguessable share token (and the
// optional share password), not by login.
Route::prefix('shared/{share:token}')->name('shared.')->scopeBindings()->group(function () {
Route::get('/', [SharePageController::class, 'show'])->name('show');
Route::post('unlock', [SharePageController::class, 'unlock'])->middleware('throttle:10,1')->name('unlock');
Route::get('zip', [SharePageController::class, 'zip'])->name('zip');
Route::get('certificates/{certificate}', [SharePageController::class, 'download'])->name('certificate');
});
require __DIR__.'/settings.php';