68 lines
2.2 KiB
PHP
68 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Settings;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Settings\PasswordUpdateRequest;
|
|
use App\Http\Requests\Settings\TwoFactorAuthenticationRequest;
|
|
use App\Models\User;
|
|
use Illuminate\Auth\Middleware\RequirePassword;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Validation\Rules\Password;
|
|
use Inertia\Inertia;
|
|
use Laravel\Fortify\Features;
|
|
use Laravel\Fortify\Fortify;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class SecurityController extends Controller
|
|
{
|
|
/**
|
|
* Show the user's security settings page.
|
|
*/
|
|
public function edit(TwoFactorAuthenticationRequest $request): Response
|
|
{
|
|
if (Features::enabled(Features::twoFactorAuthentication())) {
|
|
return app(RequirePassword::class)->handle($request, fn () => $this->page($request));
|
|
}
|
|
|
|
return $this->page($request);
|
|
}
|
|
|
|
private function page(TwoFactorAuthenticationRequest $request): Response
|
|
{
|
|
$actor = $request->user('web');
|
|
abort_unless($actor instanceof User, 403);
|
|
$props = [
|
|
'passwordRules' => Password::defaults()->toPasswordRulesString(),
|
|
];
|
|
if (Features::enabled(Features::twoFactorAuthentication())) {
|
|
$props += [
|
|
'canManageTwoFactor' => true,
|
|
'twoFactorEnabled' => $actor->hasEnabledTwoFactorAuthentication(),
|
|
'twoFactorPending' => $actor->two_factor_secret !== null && ! $actor->hasEnabledTwoFactorAuthentication(),
|
|
'requiresConfirmation' => Fortify::confirmsTwoFactorAuthentication(),
|
|
];
|
|
}
|
|
|
|
Inertia::encryptHistory();
|
|
$response = Inertia::render('settings/security', $props)->toResponse($request);
|
|
$response->headers->set('Cache-Control', 'private, no-store, max-age=0');
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Update the user's password.
|
|
*/
|
|
public function update(PasswordUpdateRequest $request): RedirectResponse
|
|
{
|
|
$request->user()->update([
|
|
'password' => $request->password,
|
|
]);
|
|
|
|
Inertia::flash('toast', ['type' => 'success', 'message' => __('Palavra-passe actualizada.')]);
|
|
|
|
return back();
|
|
}
|
|
}
|