Auth: convert auth views and verification email to Nova layout
This commit is contained in:
@@ -38,12 +38,16 @@ Route::prefix('v1')->name('api.v1.')->group(function () {
|
||||
->name('feed');
|
||||
});
|
||||
|
||||
Route::middleware(['web', 'auth'])->prefix('artworks')->name('api.artworks.')->group(function () {
|
||||
Route::middleware(['web', 'normalize.username', 'throttle:30,1'])
|
||||
->get('username/availability', \App\Http\Controllers\Api\UsernameAvailabilityController::class)
|
||||
->name('api.username.availability');
|
||||
|
||||
Route::middleware(['web', 'auth', 'normalize.username'])->prefix('artworks')->name('api.artworks.')->group(function () {
|
||||
Route::post('/', [\App\Http\Controllers\Api\ArtworkController::class, 'store'])
|
||||
->name('store');
|
||||
});
|
||||
|
||||
Route::middleware(['web', 'auth'])->prefix('uploads')->name('api.uploads.')->group(function () {
|
||||
Route::middleware(['web', 'auth', 'normalize.username'])->prefix('uploads')->name('api.uploads.')->group(function () {
|
||||
Route::post('init', [\App\Http\Controllers\Api\UploadController::class, 'init'])
|
||||
->middleware('throttle:uploads-init')
|
||||
->name('init');
|
||||
@@ -102,6 +106,19 @@ Route::middleware(['web', 'auth', 'admin.moderation'])->prefix('admin/reports')-
|
||||
->name('feed-performance');
|
||||
});
|
||||
|
||||
Route::middleware(['web', 'auth', 'admin.moderation'])->prefix('admin/usernames')->name('api.admin.usernames.')->group(function () {
|
||||
Route::get('pending', [\App\Http\Controllers\Api\Admin\UsernameApprovalController::class, 'pending'])
|
||||
->name('pending');
|
||||
|
||||
Route::post('{id}/approve', [\App\Http\Controllers\Api\Admin\UsernameApprovalController::class, 'approve'])
|
||||
->whereNumber('id')
|
||||
->name('approve');
|
||||
|
||||
Route::post('{id}/reject', [\App\Http\Controllers\Api\Admin\UsernameApprovalController::class, 'reject'])
|
||||
->whereNumber('id')
|
||||
->name('reject');
|
||||
});
|
||||
|
||||
Route::post('analytics/similar-artworks', [\App\Http\Controllers\Api\SimilarArtworkAnalyticsController::class, 'store'])
|
||||
->middleware('throttle:uploads-status')
|
||||
->name('api.analytics.similar-artworks.store');
|
||||
@@ -110,19 +127,19 @@ Route::middleware(['web', 'auth'])->post('analytics/feed', [\App\Http\Controller
|
||||
->middleware('throttle:uploads-status')
|
||||
->name('api.analytics.feed.store');
|
||||
|
||||
Route::middleware(['web', 'auth'])->prefix('discovery')->name('api.discovery.')->group(function () {
|
||||
Route::middleware(['web', 'auth', 'normalize.username'])->prefix('discovery')->name('api.discovery.')->group(function () {
|
||||
Route::post('events', [\App\Http\Controllers\Api\DiscoveryEventController::class, 'store'])
|
||||
->middleware('throttle:uploads-status')
|
||||
->name('events.store');
|
||||
});
|
||||
|
||||
// Tag system (auth-protected; 404-only ownership checks handled in requests/controllers)
|
||||
Route::middleware(['web', 'auth'])->prefix('tags')->name('api.tags.')->group(function () {
|
||||
Route::middleware(['web', 'auth', 'normalize.username'])->prefix('tags')->name('api.tags.')->group(function () {
|
||||
Route::get('search', [\App\Http\Controllers\Api\TagController::class, 'search'])->name('search');
|
||||
Route::get('popular', [\App\Http\Controllers\Api\TagController::class, 'popular'])->name('popular');
|
||||
});
|
||||
|
||||
Route::middleware(['web', 'auth'])->prefix('artworks')->name('api.artworks.tags.')->group(function () {
|
||||
Route::middleware(['web', 'auth', 'normalize.username'])->prefix('artworks')->name('api.artworks.tags.')->group(function () {
|
||||
Route::get('{id}/tags', [\App\Http\Controllers\Api\ArtworkTagController::class, 'index'])->whereNumber('id')->name('index');
|
||||
Route::post('{id}/tags', [\App\Http\Controllers\Api\ArtworkTagController::class, 'store'])->whereNumber('id')->name('store');
|
||||
Route::put('{id}/tags', [\App\Http\Controllers\Api\ArtworkTagController::class, 'update'])->whereNumber('id')->name('update');
|
||||
|
||||
@@ -8,14 +8,28 @@ use App\Http\Controllers\Auth\NewPasswordController;
|
||||
use App\Http\Controllers\Auth\PasswordController;
|
||||
use App\Http\Controllers\Auth\PasswordResetLinkController;
|
||||
use App\Http\Controllers\Auth\RegisteredUserController;
|
||||
use App\Http\Controllers\Auth\RegistrationVerificationController;
|
||||
use App\Http\Controllers\Auth\SetupPasswordController;
|
||||
use App\Http\Controllers\Auth\SetupUsernameController;
|
||||
use App\Http\Controllers\Auth\VerifyEmailController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::middleware(['guest', 'normalize.username'])->group(function () {
|
||||
Route::get('register', [RegisteredUserController::class, 'create'])
|
||||
->name('register');
|
||||
|
||||
Route::post('register', [RegisteredUserController::class, 'store']);
|
||||
Route::get('register/notice', [RegisteredUserController::class, 'notice'])
|
||||
->name('register.notice');
|
||||
|
||||
Route::post('register', [RegisteredUserController::class, 'store'])
|
||||
->middleware('throttle:register');
|
||||
|
||||
Route::post('register/resend-verification', [RegisteredUserController::class, 'resendVerification'])
|
||||
->middleware('throttle:register')
|
||||
->name('register.resend');
|
||||
|
||||
Route::get('verify/{token}', RegistrationVerificationController::class)
|
||||
->name('registration.verify');
|
||||
|
||||
Route::get('login', [AuthenticatedSessionController::class, 'create'])
|
||||
->name('login');
|
||||
@@ -36,6 +50,18 @@ Route::middleware('guest')->group(function () {
|
||||
});
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('setup/password', [SetupPasswordController::class, 'create'])
|
||||
->name('setup.password.create');
|
||||
|
||||
Route::post('setup/password', [SetupPasswordController::class, 'store'])
|
||||
->name('setup.password.store');
|
||||
|
||||
Route::get('setup/username', [SetupUsernameController::class, 'create'])
|
||||
->name('setup.username.create');
|
||||
|
||||
Route::post('setup/username', [SetupUsernameController::class, 'store'])
|
||||
->name('setup.username.store');
|
||||
|
||||
Route::get('verify-email', EmailVerificationPromptController::class)
|
||||
->name('verification.notice');
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ use App\Http\Controllers\Dashboard\ArtworkController as DashboardArtworkControll
|
||||
use App\Http\Controllers\Web\HomeController;
|
||||
use App\Http\Controllers\Web\ArtController;
|
||||
use App\Http\Controllers\Misc\AvatarController as LegacyAvatarController;
|
||||
use App\Http\Controllers\Community\ForumController;
|
||||
use App\Http\Controllers\Forum\ForumController;
|
||||
use App\Http\Controllers\Community\NewsController;
|
||||
use App\Http\Controllers\Web\CategoryController;
|
||||
use App\Http\Controllers\Web\FeaturedArtworksController;
|
||||
@@ -42,8 +42,39 @@ Route::match(['get','post'], '/art/{id}/comment', [ArtController::class, 'show']
|
||||
|
||||
Route::get('/avatar/{id}/{name?}', [LegacyAvatarController::class, 'show'])->where('id', '\\d+')->name('legacy.avatar');
|
||||
|
||||
Route::get('/forum', [ForumController::class, 'index'])->name('legacy.forum.index');
|
||||
Route::get('/forum/{topic_id}/{slug?}', [ForumController::class, 'topic'])->where('topic_id', '\\d+')->name('legacy.forum.topic');
|
||||
Route::middleware('ensure.onboarding.complete')->prefix('forum')->name('forum.')->group(function () {
|
||||
Route::get('/', [ForumController::class, 'index'])->name('index');
|
||||
Route::get('/thread/{thread}-{slug?}', [ForumController::class, 'showThread'])->name('thread.show');
|
||||
Route::get('/{category:slug}', [ForumController::class, 'showCategory'])->name('category.show');
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('/{category:slug}/new', [ForumController::class, 'createThreadForm'])->name('thread.create');
|
||||
Route::post('/{category:slug}/new', [ForumController::class, 'storeThread'])->name('thread.store');
|
||||
Route::post('/thread/{thread}/reply', [ForumController::class, 'reply'])->name('thread.reply');
|
||||
Route::post('/post/{post}/report', [ForumController::class, 'reportPost'])->name('post.report');
|
||||
Route::get('/post/{post}/edit', [ForumController::class, 'editPostForm'])->name('post.edit');
|
||||
Route::put('/post/{post}', [ForumController::class, 'updatePost'])->name('post.update');
|
||||
});
|
||||
|
||||
Route::middleware(['auth', 'can:moderate-forum'])->group(function () {
|
||||
Route::post('/thread/{thread}/lock', [ForumController::class, 'lockThread'])->name('thread.lock');
|
||||
Route::post('/thread/{thread}/unlock', [ForumController::class, 'unlockThread'])->name('thread.unlock');
|
||||
Route::post('/thread/{thread}/pin', [ForumController::class, 'pinThread'])->name('thread.pin');
|
||||
Route::post('/thread/{thread}/unpin', [ForumController::class, 'unpinThread'])->name('thread.unpin');
|
||||
});
|
||||
});
|
||||
|
||||
Route::middleware('ensure.onboarding.complete')->get('/forum.php', function (\Illuminate\Http\Request $request) {
|
||||
$threadId = (int) ($request->query('topic') ?? $request->query('tid') ?? 0);
|
||||
if ($threadId < 1) {
|
||||
return redirect()->route('forum.index', [], 301);
|
||||
}
|
||||
|
||||
$thread = \App\Models\ForumThread::query()->find($threadId);
|
||||
$slug = $thread?->slug ?: ('thread-' . $threadId);
|
||||
|
||||
return redirect()->route('forum.thread.show', ['thread' => $threadId, 'slug' => $slug], 301);
|
||||
})->name('forum.legacy.redirect');
|
||||
|
||||
Route::get('/news/{id}/{slug?}', [NewsController::class, 'show'])->where('id', '\\d+')->name('legacy.news.show');
|
||||
|
||||
@@ -59,11 +90,21 @@ Route::post('/chat_post', [ChatController::class, 'post'])->name('legacy.chat.po
|
||||
|
||||
Route::get('/browse-categories', [BrowseCategoriesController::class, 'index'])->name('browse.categories');
|
||||
|
||||
Route::get('/profile/{id}/{username?}', [ProfileController::class, 'show'])
|
||||
Route::get('/@{username}', [ProfileController::class, 'showByUsername'])
|
||||
->where('username', '[A-Za-z0-9_-]{3,20}')
|
||||
->name('profile.show');
|
||||
|
||||
Route::get('/user/{username}', [ProfileController::class, 'legacyByUsername'])
|
||||
->where('username', '[A-Za-z0-9_-]{3,20}')
|
||||
->name('legacy.user.profile');
|
||||
|
||||
Route::get('/profile/{id}/{username?}', [ProfileController::class, 'legacyById'])
|
||||
->where('id', '\\d+')
|
||||
->name('legacy.profile.id');
|
||||
|
||||
Route::get('/profile/{username?}', [ProfileController::class, 'show'])->name('legacy.profile');
|
||||
Route::get('/profile/{username}', [ProfileController::class, 'legacyByUsername'])
|
||||
->where('username', '[A-Za-z0-9_-]{3,20}')
|
||||
->name('legacy.profile');
|
||||
|
||||
Route::get('/top-favourites', [TopFavouritesController::class, 'index'])->name('legacy.top_favourites');
|
||||
Route::get('/top-authors', [TopAuthorsController::class, 'index'])->name('legacy.top_authors');
|
||||
@@ -78,7 +119,7 @@ Route::middleware('auth')->get('/buddies', [\App\Http\Controllers\User\BuddiesCo
|
||||
Route::get('/favourites/{id?}/{username?}', [FavouritesController::class, 'index'])->name('legacy.favourites');
|
||||
Route::post('/favourites/{userId}/delete/{artworkId}', [FavouritesController::class, 'destroy'])->name('legacy.favourites.delete');
|
||||
|
||||
Route::get('/gallery/{id}/{username?}', [GalleryController::class, 'show'])->name('legacy.gallery');
|
||||
Route::middleware('ensure.onboarding.complete')->get('/gallery/{id}/{username?}', [GalleryController::class, 'show'])->name('legacy.gallery');
|
||||
|
||||
Route::middleware('auth')->get('/recieved-comments', [ReceivedCommentsController::class, 'index'])->name('legacy.received_comments');
|
||||
|
||||
@@ -108,7 +149,7 @@ Route::middleware(['auth'])->prefix('dashboard')->name('dashboard.')->group(func
|
||||
Route::delete('/artworks/{id}', [DashboardArtworkController::class, 'destroy'])->whereNumber('id')->name('artworks.destroy');
|
||||
});
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::middleware(['auth', 'normalize.username', 'ensure.onboarding.complete'])->group(function () {
|
||||
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
||||
// Backwards-compatible settings path used by some layouts/links
|
||||
Route::get('/settings', [ProfileController::class, 'edit'])->name('settings');
|
||||
@@ -120,7 +161,7 @@ Route::middleware('auth')->group(function () {
|
||||
Route::post('/avatar/upload', [AvatarController::class, 'upload'])->middleware('throttle:20,1')->name('avatar.upload');
|
||||
});
|
||||
|
||||
Route::middleware(['auth'])->group(function () {
|
||||
Route::middleware(['auth', 'ensure.onboarding.complete'])->group(function () {
|
||||
Route::get('/upload', function () {
|
||||
$contentTypes = ContentType::with(['rootCategories.children'])->get()->map(function ($ct) {
|
||||
return [
|
||||
@@ -227,5 +268,9 @@ Route::middleware(['auth'])->prefix('admin')->name('admin.')->group(function ()
|
||||
return Inertia::render('Admin/UploadQueue');
|
||||
})->middleware('admin.moderation')->name('uploads.moderation');
|
||||
|
||||
Route::get('usernames/moderation', function () {
|
||||
return Inertia::render('Admin/UsernameQueue');
|
||||
})->middleware('admin.moderation')->name('usernames.moderation');
|
||||
|
||||
Route::resource('artworks', \App\Http\Controllers\Admin\ArtworkController::class)->except(['show']);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user