@namespace Oqtane.Modules.Admin.Users @inherits ModuleBase @inject IUserRoleService UserRoleService @inject IUserService UserService @inject ISettingService SettingService @inject ISiteService SiteService @inject ISystemService SystemService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (userroles == null) {

@SharedLocalizer["Loading"]

} else {
      @SharedLocalizer["Name"] @SharedLocalizer["Username"]
@context.User.DisplayName @context.User.Username
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) {
}

} @code { private List allroles; private List userroles; private string _search; private string _allowregistration; private string _minimumlength = "6"; private string _uniquecharacters = "1"; private string _requiredigit = "true"; private string _requireupper = "true"; private string _requirelower = "true"; private string _requirepunctuation = "true"; private string _maximumfailures = "5"; private string _lockoutduration = "5"; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; protected override async Task OnInitializedAsync() { allroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); await LoadSettingsAsync(); userroles = Search(_search); _allowregistration = PageState.Site.AllowRegistration.ToString(); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { Dictionary systeminfo = await SystemService.GetSystemInfoAsync(); if (systeminfo != null) { _minimumlength = systeminfo["Password:RequiredLength"].ToString(); _uniquecharacters = systeminfo["Password:RequiredUniqueChars"].ToString(); _requiredigit = systeminfo["Password:RequireDigit"].ToString(); _requireupper = systeminfo["Password:RequireUppercase"].ToString(); _requirelower = systeminfo["Password:RequireLowercase"].ToString(); _requirepunctuation = systeminfo["Password:RequireNonAlphanumeric"].ToString(); _maximumfailures = systeminfo["Lockout:MaxFailedAccessAttempts"].ToString(); _lockoutduration = TimeSpan.Parse(systeminfo["Lockout:DefaultLockoutTimeSpan"].ToString()).TotalMinutes.ToString(); } } } private List Search(string search) { var results = allroles.Where(item => item.Role.Name == RoleNames.Registered || (item.Role.Name == RoleNames.Host && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))); if (!string.IsNullOrEmpty(_search)) { results = results.Where(item => ( item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || item.User.DisplayName.Contains(search, StringComparison.OrdinalIgnoreCase) ) ); } return results.ToList(); } private async Task OnSearch() { userroles = Search(_search); await UpdateSettingsAsync(); } private async Task DeleteUser(UserRole UserRole) { try { var user = await UserService.GetUserAsync(UserRole.UserId, PageState.Site.SiteId); if (user != null) { await UserService.DeleteUserAsync(user.UserId, PageState.Site.SiteId); await logger.LogInformation("User Deleted {User}", UserRole.User); allroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); userroles = Search(_search); StateHasChanged(); } } catch (Exception ex) { await logger.LogError(ex, "Error Deleting User {User} {Error}", UserRole.User, ex.Message); AddModuleMessage(ex.Message, MessageType.Error); } } private string settingSearch = "AU-search"; private async Task LoadSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); _search = SettingService.GetSetting(settings, settingSearch, ""); } private async Task UpdateSettingsAsync() { Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); SettingService.SetSetting(settings, settingSearch, _search); await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); } private async Task SaveSiteSettings() { try { var site = PageState.Site; site.AllowRegistration = bool.Parse(_allowregistration); await SiteService.UpdateSiteAsync(site); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { var settings = new Dictionary(); settings.Add("Password:RequiredLength", _minimumlength); settings.Add("Password:RequiredUniqueChars", _uniquecharacters); settings.Add("Password:RequireDigit", _requiredigit); settings.Add("Password:RequireUppercase", _requireupper); settings.Add("Password:RequireLowercase", _requirelower); settings.Add("Password:RequireNonAlphanumeric", _requirepunctuation); settings.Add("Lockout:MaxFailedAccessAttempts", _maximumfailures); settings.Add("Lockout:DefaultLockoutTimeSpan", TimeSpan.FromMinutes(Convert.ToInt64(_lockoutduration)).ToString()); await SystemService.UpdateSystemInfoAsync(settings); AddModuleMessage(Localizer["Success.UpdateConfig.Restart"], MessageType.Success); } else { AddModuleMessage(Localizer["Success.SaveSiteSettings"], MessageType.Success); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Site Settings {Error}", ex.Message); AddModuleMessage(Localizer["Error.SaveSiteSettings"], MessageType.Error); } } }