first commit

This commit is contained in:
2026-10-09 08:21:06 +02:00
parent db7456df87
commit d259c62304
3761 changed files with 896046 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
<?php
use App\Http\Controllers\Api\Auth\AuthController;
use App\Http\Controllers\Api\Auth\Password\RemindController;
use App\Http\Controllers\Api\Auth\Password\ResetController;
use App\Http\Controllers\Api\Auth\RegistrationController;
use App\Http\Controllers\Api\Auth\SocialLoginController;
use App\Http\Controllers\Api\Auth\VerificationController;
use App\Http\Controllers\Api\Authorization\PermissionsController;
use App\Http\Controllers\Api\Authorization\RolePermissionsController;
use App\Http\Controllers\Api\Authorization\RolesController;
use App\Http\Controllers\Api\CountriesController;
use App\Http\Controllers\Api\Profile\AuthDetailsController;
use App\Http\Controllers\Api\Profile\AvatarController as ProfileAvatarController;
use App\Http\Controllers\Api\Profile\DetailsController;
use App\Http\Controllers\Api\Profile\SessionsController as ProfileSessionsController;
use App\Http\Controllers\Api\Profile\TwoFactorController as ProfileTwoFactorController;
use App\Http\Controllers\Api\SessionsController;
use App\Http\Controllers\Api\SettingsController;
use App\Http\Controllers\Api\StatsController;
use App\Http\Controllers\Api\Users\AvatarController as UsersAvatarController;
use App\Http\Controllers\Api\Users\SessionsController as UsersSessionsController;
use App\Http\Controllers\Api\Users\TwoFactorController as UsersTwoFactorController;
use App\Http\Controllers\Api\Users\UsersController;
Route::post('login', [AuthController::class, 'token']);
Route::post('login/social', [SocialLoginController::class, 'index']);
Route::post('logout', [AuthController::class, 'logout']);
Route::post('register', [RegistrationController::class, 'index'])->middleware('registration');
Route::group(['middleware' => ['guest', 'password-reset']], function () {
Route::post('password/remind', [RemindController::class, 'index']);
Route::post('password/reset', [ResetController::class, 'index']);
});
Route::group(['middleware' => ['auth', 'registration']], function () {
Route::post('email/resend', [VerificationController::class, 'resend']);
Route::post('email/verify', [VerificationController::class, 'verify']);
});
Route::group(['middleware' => ['auth', 'verified', 'approved']], function () {
Route::get('me', [DetailsController::class, 'index']);
Route::patch('me/details', [DetailsController::class, 'update']);
Route::patch('me/details/auth', [AuthDetailsController::class, 'update']);
Route::post('me/avatar', [ProfileAvatarController::class, 'update']);
Route::delete('me/avatar', [ProfileAvatarController::class, 'destroy']);
Route::put('me/avatar/external', [ProfileAvatarController::class, 'updateExternal']);
Route::get('me/sessions', [ProfileSessionsController::class, 'index']);
Route::group(['middleware' => 'two-factor'], function () {
Route::put('me/2fa', [ProfileTwoFactorController::class, 'update']);
Route::post('me/2fa/verify', [ProfileTwoFactorController::class, 'verify']);
Route::delete('me/2fa', [ProfileTwoFactorController::class, 'destroy']);
});
Route::get('stats', [StatsController::class, 'index']);
Route::apiResource('users', UsersController::class)->except('show');
Route::get('users/{userId}', [UsersController::class, 'show']);
Route::post('users/{user}/avatar', [UsersAvatarController::class, 'update']);
Route::put('users/{user}/avatar/external', [UsersAvatarController::class, 'updateExternal']);
Route::delete('users/{user}/avatar', [UsersAvatarController::class, 'destroy']);
Route::group(['middleware' => 'two-factor'], function () {
Route::put('users/{user}/2fa', [UsersTwoFactorController::class, 'update']);
Route::post('users/{user}/2fa/verify', [UsersTwoFactorController::class, 'verify']);
Route::delete('users/{user}/2fa', [UsersTwoFactorController::class, 'destroy']);
});
Route::get('users/{user}/sessions', [UsersSessionsController::class, 'index']);
Route::get('/sessions/{session}', [SessionsController::class, 'show']);
Route::delete('/sessions/{session}', [SessionsController::class, 'destroy']);
Route::apiResource('roles', RolesController::class)->except('show');
Route::get('/roles/{roleId}', [RolesController::class, 'show']);
Route::get('roles/{role}/permissions', [RolePermissionsController::class, 'show']);
Route::put('roles/{role}/permissions', [RolePermissionsController::class, 'update']);
Route::apiResource('permissions', PermissionsController::class);
Route::get('/settings', [SettingsController::class, 'index']);
Route::get('/countries', [CountriesController::class, 'index']);
});
+16
View File
@@ -0,0 +1,16 @@
<?php
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
+18
View File
@@ -0,0 +1,18 @@
<?php
use Illuminate\Foundation\Inspiring;
/*
|--------------------------------------------------------------------------
| Console Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of your Closure based console
| commands. Each Closure is bound to a command instance allowing a
| simple approach to interacting with each command's IO methods.
|
*/
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');
+244
View File
@@ -0,0 +1,244 @@
<?php
use App\Http\Controllers\Web\Auth\ForgotPasswordController;
use App\Http\Controllers\Web\Auth\LoginController;
use App\Http\Controllers\Web\Auth\RegisterController;
use App\Http\Controllers\Web\Auth\ResetPasswordController;
use App\Http\Controllers\Web\Auth\SocialAuthController;
use App\Http\Controllers\Web\Auth\TwoFactorTokenController;
use App\Http\Controllers\Web\Auth\VerificationController;
use App\Http\Controllers\Web\Authorization\PermissionsController;
use App\Http\Controllers\Web\Authorization\RolePermissionsController;
use App\Http\Controllers\Web\Authorization\RolesController;
use App\Http\Controllers\Web\DashboardController;
use App\Http\Controllers\Web\PostLoginDispatchController;
use App\Http\Controllers\Web\InstallController;
use App\Http\Controllers\Web\Profile\AvatarController as ProfileAvatarController;
use App\Http\Controllers\Web\Profile\DetailsController as ProfileDetailsController;
use App\Http\Controllers\Web\Profile\LoginDetailsController as ProfileLoginDetailsController;
use App\Http\Controllers\Web\Profile\ProfileController;
use App\Http\Controllers\Web\Profile\SessionsController as ProfileSessionsController;
use App\Http\Controllers\Web\SettingsController;
use App\Http\Controllers\Web\TwoFactorController;
use App\Http\Controllers\Web\Users\AvatarController as UsersAvatarController;
use App\Http\Controllers\Web\Users\DetailsController as UsersDetailsController;
use App\Http\Controllers\Web\Users\LoginDetailsController as UsersLoginDetailsController;
use App\Http\Controllers\Web\Users\SessionsController as UsersSessionsController;
use App\Http\Controllers\Web\Users\UsersController;
use Inertia\Inertia;
/**
* Authentication
*/
Route::get('login', [LoginController::class, 'show']);
Route::post('login', [LoginController::class, 'login'])->name('login');
Route::get('logout', [LoginController::class, 'logout'])->name('auth.logout');
Route::group(['middleware' => ['registration', 'guest']], function () {
Route::get('register', [RegisterController::class, 'show']);
Route::post('register', [RegisterController::class, 'register'])->name('register');
});
Route::get('email/verify', [VerificationController::class, 'show'])->name('verification.notice');
Route::get('email/verify/{id}/{hash}', [VerificationController::class, 'verify'])->name('verification.verify');
Route::post('email/resend', [VerificationController::class, 'resend'])->name('verification.resend');
Route::group(['middleware' => ['password-reset', 'guest']], function () {
Route::get('password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request');
Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email');
Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('password.reset');
Route::post('password/reset', [ResetPasswordController::class, 'reset'])->name('password.update');
});
/**
* Two-Factor Authentication
*/
Route::group(['middleware' => 'two-factor'], function () {
Route::get('auth/two-factor-authentication', [TwoFactorTokenController::class, 'show'])
->name('auth.token');
Route::post('auth/two-factor-authentication', [TwoFactorTokenController::class, 'update'])
->name('auth.token.validate');
});
/**
* Social Login
*/
Route::get('auth/{provider}/login', [SocialAuthController::class, 'redirectToProvider'])
->name('social.login');
Route::get('auth/{provider}/callback', [SocialAuthController::class, 'handleProviderCallback']);
/**
* Impersonate Routes
*/
Route::group(['middleware' => 'auth'], function () {
Route::impersonate();
});
Route::get('/approval-notice', fn() => Inertia::render('auth/Approval'))
->middleware(['auth', 'verified'])
->name('approval.notice');
Route::group(['middleware' => ['auth', 'verified', 'approved', 'password-change']], function () {
/**
* Dashboard
*/
Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
Route::get('/', [PostLoginDispatchController::class, 'index'])->name('dashboard');
/**
* User Profile
*/
Route::group(['prefix' => 'profile'], function () {
Route::get('/', [ProfileController::class, 'show'])->name('profile');
Route::put('details', [ProfileDetailsController::class, 'update'])->name('profile.update.details');
Route::post('avatar', [ProfileAvatarController::class, 'update'])->name('profile.update.avatar');
Route::post('avatar/external', [ProfileAvatarController::class, 'updateExternal'])
->name('profile.update.avatar-external');
Route::put('login-details', [ProfileLoginDetailsController::class, 'update'])
->name('profile.update.login-details');
Route::get('sessions', [ProfileSessionsController::class, 'index'])
->name('profile.sessions')
->middleware('session.database');
Route::delete('sessions/{session}/invalidate', [ProfileSessionsController::class, 'destroy'])
->name('profile.sessions.invalidate')
->middleware('session.database');
});
/**
* Two-Factor Authentication Setup
*/
Route::group(['middleware' => 'two-factor'], function () {
Route::post('two-factor/enable', [TwoFactorController::class, 'enable'])
->name('2fa.enable');
Route::post('two-factor/verify', [TwoFactorController::class, 'verify'])
->name('2fa.verify')
->middleware('verify-2fa-code');
Route::post('two-factor/disable', [TwoFactorController::class, 'disable'])
->name('2fa.disable');
});
/**
* User Management
*/
Route::resource('users', UsersController::class)
->except('update')->middleware('permission:users.manage');
Route::group(['prefix' => 'users/{user}', 'middleware' => 'permission:users.manage'], function () {
Route::put('update/approve', [UsersDetailsController::class, 'approve'])
->name('users.update.approve');
Route::put('update/details', [UsersDetailsController::class, 'update'])
->name('users.update.details');
Route::put('update/login-details', [UsersLoginDetailsController::class, 'update'])
->name('users.update.login-details');
Route::post('update/avatar', [UsersAvatarController::class, 'update'])
->name('user.update.avatar');
Route::post('update/avatar/external', [UsersAvatarController::class, 'updateExternal'])
->name('user.update.avatar.external');
Route::get('sessions', [UsersSessionsController::class, 'index'])
->name('user.sessions')
->middleware('session.database');
Route::delete('sessions/{session}/invalidate', [UsersSessionsController::class, 'destroy'])
->name('user.sessions.invalidate')
->middleware('session.database');
Route::post('two-factor/enable', [TwoFactorController::class, 'enable'])
->name('user.two-factor.enable');
Route::post('two-factor/disable', [TwoFactorController::class, 'disable'])
->name('user.two-factor.disable');
});
/**
* Roles & Permissions
*/
Route::resource('roles', RolesController::class)
->except('show')
->middleware('permission:roles.manage');
Route::post('permissions/save', [RolePermissionsController::class, 'update'])
->name('permissions.save')
->middleware('permission:permissions.manage');
Route::resource('permissions', PermissionsController::class)
->middleware('permission:permissions.manage');
/**
* Settings
*/
Route::get('settings', [SettingsController::class, 'general'])->name('settings.general')
->middleware('permission:settings.general');
Route::post('settings/general', [SettingsController::class, 'update'])->name('settings.general.update')
->middleware('permission:settings.general');
Route::get('settings/auth', [SettingsController::class, 'auth'])->name('settings.auth')
->middleware('permission:settings.auth');
Route::post('settings/auth', [SettingsController::class, 'update'])->name('settings.auth.update')
->middleware('permission:settings.auth');
Route::post('settings/auth/2fa/enable', [SettingsController::class, 'enableTwoFactor'])
->name('settings.auth.2fa.enable')
->middleware('permission:settings.auth');
Route::post('settings/auth/2fa/disable', [SettingsController::class, 'disableTwoFactor'])
->name('settings.auth.2fa.disable')
->middleware('permission:settings.auth');
Route::post('settings/auth/password-change/enable', [SettingsController::class, 'enablePasswordChange'])
->name('settings.auth.password-change.enable')
->middleware('permission:settings.auth');
Route::post('settings/auth/password-change/disable', [SettingsController::class, 'disablePasswordChange'])
->name('settings.auth.password-change.disable')
->middleware('permission:settings.auth');
Route::post('settings/auth/approval/enable', [SettingsController::class, 'enableApproval'])
->name('settings.auth.approval.enable')
->middleware('permission:settings.auth');
Route::post('settings/auth/approval/disable', [SettingsController::class, 'disableApproval'])
->name('settings.auth.approval.disable')
->middleware('permission:settings.auth');
Route::post('settings/auth/registration/captcha/enable', [SettingsController::class, 'enableCaptcha'])
->name('settings.registration.captcha.enable')
->middleware('permission:settings.auth');
Route::post('settings/auth/registration/captcha/disable', [SettingsController::class, 'disableCaptcha'])
->name('settings.registration.captcha.disable')
->middleware('permission:settings.auth');
Route::get('settings/notifications', [SettingsController::class, 'notifications'])
->name('settings.notifications')
->middleware('permission:settings.notifications');
Route::post('settings/notifications', [SettingsController::class, 'update'])
->name('settings.notifications.update')
->middleware('permission:settings.notifications');
});
/**
* Installation
*/
Route::group(['prefix' => 'install'], function () {
Route::get('/', [InstallController::class, 'index'])->name('install.start');
Route::get('requirements', [InstallController::class, 'requirements'])->name('install.requirements');
Route::get('permissions', [InstallController::class, 'permissions'])->name('install.permissions');
Route::get('database', [InstallController::class, 'databaseInfo'])->name('install.database');
Route::get('start-installation', [InstallController::class, 'installation'])->name('install.installation.start');
Route::post('start-installation', [InstallController::class, 'installation'])->name('install.installation');
Route::post('install-app', [InstallController::class, 'install'])->name('install.install');
Route::get('complete', [InstallController::class, 'complete'])->name('install.complete');
Route::get('error', [InstallController::class, 'error'])->name('install.error');
});