Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions app/Users/Controllers/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -208,4 +208,17 @@ public function destroy(Request $request, int $id)

return redirect('/settings/users');
}

/**
* Reset MFA for the specified user.
*/
public function resetMfa(Request $request, int $id)
{
$this->checkPermission(Permission::UsersManage);
$user = $this->userRepo->getById($id);
// Resetear el 2FA del usuario
$user->mfaValues()->delete();
session()->flash('success', trans('settings.users_mfa_reset_success', ['userName' => $user->name]));
return redirect()->back();
}
}
5 changes: 5 additions & 0 deletions lang/en/settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,11 @@
'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.',
'users_mfa_x_methods' => ':count method configured|:count methods configured',
'users_mfa_configure' => 'Configure Methods',
'users_mfa_reset' => 'Reset 2FA',
'users_mfa_reset_desc' => 'Reset and clear all configured MFA methods for :userName. They will be prompted to reconfigure on next login.',
'users_mfa_reset_confirm' => 'Are you sure you want to reset 2FA for :userName?',
'users_mfa_reset_success' => '2FA has been reset for :userName',
'users_mfa_reset_error' => 'Failed to reset 2FA for :userName',

// API Tokens
'user_api_token_create' => 'Create API Token',
Expand Down
20 changes: 20 additions & 0 deletions resources/views/users/edit.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,26 @@ class="button outline">{{ trans('settings.users_mfa_configure') }}</a>
</div>
</div>

@if(user()->hasSystemRole('admin'))
<div class="mt-xl">
<hr class="my-m">
<div class="grid half gap-xl v-center">
<div>
<strong class="text-neg">{{ trans('settings.users_mfa_reset') }}</strong>
<p class="text-small text-muted">{{ trans('settings.users_mfa_reset_desc', ['userName' => $user->name]) }}</p>
</div>
<div class="text-m-right">
<form action="{{ url("/settings/users/{$user->id}/reset-mfa") }}" method="POST" style="display: inline;">
@csrf
<button type="submit" class="button neg"
onclick="return confirm('{{ trans('settings.users_mfa_reset_confirm', ['userName' => $user->name]) }}')">
{{ trans('settings.users_mfa_reset') }}
</button>
</form>
</div>
</div>
</div>
@endif
</section>

@if(count($activeSocialDrivers) > 0)
Expand Down
1 change: 1 addition & 0 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@
Route::get('/settings/users/{id}', [UserControllers\UserController::class, 'edit']);
Route::put('/settings/users/{id}', [UserControllers\UserController::class, 'update']);
Route::delete('/settings/users/{id}', [UserControllers\UserController::class, 'destroy']);
Route::post('/settings/users/{id}/reset-mfa', [UserControllers\UserController::class, 'resetMfa']);

// User Account
Route::get('/my-account', [UserControllers\UserAccountController::class, 'redirect']);
Expand Down