From aa5d229687dec6878e698553d7261b9328aa49fc Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Mon, 22 Jul 2024 11:47:39 +0200 Subject: [PATCH] Refactor admin project folder structure (#113) --- .../Pages/Account/Manage/ChangePassword.razor | 4 +- .../Pages/Account/Manage/Disable2fa.razor | 4 +- .../Account/Manage/EnableAuthenticator.razor | 4 +- .../Manage/GenerateRecoveryCodes.razor | 4 +- .../Account/Manage/ResetAuthenticator.razor | 4 +- .../Pages/Account/Manage/SetPassword.razor | 4 +- .../Manage/TwoFactorAuthentication.razor | 18 ++--- .../Main/Pages/Account/ManageNavMenu.razor | 14 +--- .../Services/AccessCheckService.cs | 2 - src/AliasVault.Admin2/Services/UserService.cs | 72 +++---------------- 10 files changed, 34 insertions(+), 96 deletions(-) diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/ChangePassword.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/ChangePassword.razor index 63c7f965b..f623443dd 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/ChangePassword.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/ChangePassword.razor @@ -1,4 +1,4 @@ -@page "/account/manage/ChangePassword" +@page "/account/manage/change-password" @using System.ComponentModel.DataAnnotations @using Microsoft.AspNetCore.Identity @@ -50,7 +50,7 @@ hasPassword = await UserManager.HasPasswordAsync(UserService.User()); if (!hasPassword) { - NavigationService.RedirectTo("account/manage/SetPassword"); + NavigationService.RedirectTo("account/manage/set-password"); } } diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/Disable2fa.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/Disable2fa.razor index 55488d067..d0daae01d 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/Disable2fa.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/Disable2fa.razor @@ -1,4 +1,4 @@ -@page "/account/manage/Disable2fa" +@page "/account/manage/disable-2fa" @using Microsoft.AspNetCore.Identity @@ -15,7 +15,7 @@

Disabling 2FA does not change the keys used in authenticator apps. If you wish to change the key - used in an authenticator app you should reset your authenticator keys. + used in an authenticator app you should reset your authenticator keys.

diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/EnableAuthenticator.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/EnableAuthenticator.razor index 288c9cd5b..e5ffd91c8 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/EnableAuthenticator.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/EnableAuthenticator.razor @@ -1,4 +1,4 @@ -@page "/account/manage/EnableAuthenticator" +@page "/account/manage/enable-authenticator" @using System.ComponentModel.DataAnnotations @using System.Globalization @@ -114,7 +114,7 @@ else else { // Navigate back to the two factor authentication page. - NavigationService.RedirectTo("account/manage/TwoFactorAuthentication", forceLoad: true); + NavigationService.RedirectTo("account/manage/2fa", forceLoad: true); } } diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/GenerateRecoveryCodes.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/GenerateRecoveryCodes.razor index 02b51f24c..91b99170d 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/GenerateRecoveryCodes.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/GenerateRecoveryCodes.razor @@ -1,4 +1,4 @@ -@page "/account/manage/GenerateRecoveryCodes" +@page "/account/manage/generate-recovery-codes" @using Microsoft.AspNetCore.Identity @@ -26,7 +26,7 @@ else

Generating new recovery codes does not change the keys used in authenticator apps. If you wish to change the key - used in an authenticator app you should reset your authenticator keys. + used in an authenticator app you should reset your authenticator keys.

diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/ResetAuthenticator.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/ResetAuthenticator.razor index e4d85904e..a05f7fe37 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/ResetAuthenticator.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/ResetAuthenticator.razor @@ -1,4 +1,4 @@ -@page "/account/manage/ResetAuthenticator" +@page "/account/manage/reset-authenticator" @using Microsoft.AspNetCore.Identity @@ -41,7 +41,7 @@ GlobalNotificationService.AddSuccessMessage("Your authenticator app key has been reset, you will need to configure your authenticator app using the new key."); NavigationService.RedirectTo( - "account/manage/EnableAuthenticator"); + "account/manage/enable-authenticator"); } } diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/SetPassword.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/SetPassword.razor index 61d3ec132..65a392445 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/SetPassword.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/SetPassword.razor @@ -1,4 +1,4 @@ -@page "/account/manage/SetPassword" +@page "/account/manage/set-password" @using System.ComponentModel.DataAnnotations @using Microsoft.AspNetCore.Identity @@ -47,7 +47,7 @@ var hasPassword = await UserManager.HasPasswordAsync(UserService.User()); if (hasPassword) { - NavigationService.RedirectTo("account/manage/ChangePassword"); + NavigationService.RedirectTo("account/manage/change-password"); } } diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/TwoFactorAuthentication.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/TwoFactorAuthentication.razor index bc919ca65..6e7dbd65f 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/TwoFactorAuthentication.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/TwoFactorAuthentication.razor @@ -1,4 +1,4 @@ -@page "/account/manage/TwoFactorAuthentication" +@page "/account/manage/2fa" @using Microsoft.AspNetCore.Identity @@ -16,27 +16,27 @@ {

You have no recovery codes left.

-

You must generate a new set of recovery codes before you can log in with a recovery code.

+

You must generate a new set of recovery codes before you can log in with a recovery code.

} else if (recoveryCodesLeft == 1) {

You have 1 recovery code left.

-

You can generate a new set of recovery codes.

+

You can generate a new set of recovery codes.

} else if (recoveryCodesLeft <= 3) {

You have @recoveryCodesLeft recovery codes left.

-

You should generate a new set of recovery codes.

+

You should generate a new set of recovery codes.

}
} @@ -46,16 +46,16 @@
@if (!hasAuthenticator) { - + Add authenticator app } else { - + Set up authenticator app - + Reset authenticator app } diff --git a/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor b/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor index f3acb6ed5..43a9b8967 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor @@ -7,19 +7,9 @@ Profile
  • - Password + Password
  • - Two-factor authentication + Two-factor authentication
  • - -@code { - private bool hasExternalLogins; - - protected override async Task OnInitializedAsync() - { - hasExternalLogins = (await SignInManager.GetExternalAuthenticationSchemesAsync()).Any(); - } - -} diff --git a/src/AliasVault.Admin2/Services/AccessCheckService.cs b/src/AliasVault.Admin2/Services/AccessCheckService.cs index e7bbf4afc..8cf2ab53e 100644 --- a/src/AliasVault.Admin2/Services/AccessCheckService.cs +++ b/src/AliasVault.Admin2/Services/AccessCheckService.cs @@ -1,7 +1,5 @@ namespace AliasVault.Admin2.Services; -using Microsoft.AspNetCore.Components; - /// /// Access check service to verify if the user is logged in and has a confirmed email. /// diff --git a/src/AliasVault.Admin2/Services/UserService.cs b/src/AliasVault.Admin2/Services/UserService.cs index 11e9ba381..f0f269efe 100644 --- a/src/AliasVault.Admin2/Services/UserService.cs +++ b/src/AliasVault.Admin2/Services/UserService.cs @@ -23,11 +23,6 @@ public class UserService /// public event Action OnChange = () => { }; - /// - /// The Event Ids that the current user is allowed to manage. - /// - private List _managedEventIds = new(); - /// /// The roles of the current user /// @@ -39,7 +34,7 @@ public class UserService private bool _isAdmin; /// - /// Gets a value indicating whether an event is loaded and available, false if not. Use this before accessing Event() method. + /// Gets a value indicating whether the User is loaded and available, false if not. Use this before accessing User() method. /// public bool UserLoaded => _user != null; @@ -88,7 +83,7 @@ public class UserService } /// - /// Returns inner event EF object. + /// Returns inner User EF object. /// /// public AdminUser User() @@ -101,15 +96,6 @@ public class UserService return _user; } - /// - /// Returns managed Event ids list. - /// - /// - public List UserAllowedEventIds() - { - return _managedEventIds; - } - /// /// Returns whether current user is admin or not. /// @@ -133,45 +119,18 @@ public class UserService { _user = user; - // Load all roles for current user. - _userRoles = await _userManager.GetRolesAsync(this.User()); - - // Define if current user is admin. - _isAdmin = _userRoles.Contains(AdminRole); - } - - // UserManager implementation: throughout Blazor server session user is not updated when user is updated in database - // because of UserManager EF cache. That's why we load it ourselves straight from the database via new DbContext - // to ensure we get the latest data everytime. - /*var currentUser = await _userManager.GetUserAsync(_httpContextAccessor.HttpContext.User); - if (currentUser != null) - { - _user = currentUser; - - // Load managed event ids for current user. - _managedEventIds = await GetUserAllowedEventIdsAsync(_user); - // Load all roles for current user. _userRoles = await _userManager.GetRolesAsync(User()); // Define if current user is admin. _isAdmin = _userRoles.Contains(AdminRole); - }*/ + } } // Notify listeners that the user has been loaded. NotifyStateChanged(); } - /// - /// Generate email confirmation token for current user. - /// - /// Email confirmation token. - public async Task GenerateEmailConfirmTokenAsync() - { - return await _userManager.GenerateEmailConfirmationTokenAsync(User()); - } - /// /// Returns current logged on user roles based on HttpContext. /// @@ -193,15 +152,6 @@ public class UserService return await _userManager.Users.Where(x => x.UserName.Contains(searchTerm)).Take(5).ToListAsync(); } - /// - /// Sign out the current user. - /// - /// Async task. - public async Task SignOutAsync() - { - await _signInManager.SignOutAsync(); - } - /// /// Create a new user. /// @@ -250,7 +200,7 @@ public class UserService // Update password if necessary if (!string.IsNullOrEmpty(newPassword)) { - var passwordRemoveResult = await this._userManager.RemovePasswordAsync(user); + var passwordRemoveResult = await _userManager.RemovePasswordAsync(user); if (!passwordRemoveResult.Succeeded) { foreach (var error in passwordRemoveResult.Errors) @@ -260,7 +210,7 @@ public class UserService return errors; } - var passwordAddResult = await this._userManager.AddPasswordAsync(user, newPassword); + var passwordAddResult = await _userManager.AddPasswordAsync(user, newPassword); if (!passwordAddResult.Succeeded) { foreach (var error in passwordAddResult.Errors) @@ -271,7 +221,7 @@ public class UserService } } - var result = await this._userManager.UpdateAsync(user); + var result = await _userManager.UpdateAsync(user); if (!result.Succeeded) { foreach (var error in result.Errors) @@ -305,8 +255,8 @@ public class UserService var rolesToAdd = roles.Except(currentRoles).ToList(); var rolesToRemove = currentRoles.Except(roles).ToList(); - await this._userManager.AddToRolesAsync(user, rolesToAdd); - await this._userManager.RemoveFromRolesAsync(user, rolesToRemove); + await _userManager.AddToRolesAsync(user, rolesToAdd); + await _userManager.RemoveFromRolesAsync(user, rolesToRemove); return errors; } @@ -339,7 +289,7 @@ public class UserService if (isUpdate) { - var originalUser = await this._userManager.FindByIdAsync(user.Id); + var originalUser = await _userManager.FindByIdAsync(user.Id); if (user.UserName != originalUser.UserName) { errors.Add("Username cannot be changed for existing users."); @@ -347,13 +297,13 @@ public class UserService } else { - var existingUser = await this._userManager.FindByNameAsync(user.UserName); + var existingUser = await _userManager.FindByNameAsync(user.UserName); if (existingUser != null) { errors.Add("Username is already in use."); } - var existingEmail = await this._userManager.FindByEmailAsync(user.Email); + var existingEmail = await _userManager.FindByEmailAsync(user.Email); if (existingEmail != null) { errors.Add("Email is already in use.");