@namespace Oqtane.Modules.Admin.Users @using System.Text.RegularExpressions; @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService @inject IProfileService ProfileService @inject ISettingService SettingService @inject IFileService FileService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (_initialized) {
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) {
}
@foreach (Profile profile in profiles) { var p = profile; if (p.Category != category) {
@p.Category
category = p.Category; }
@if (!string.IsNullOrEmpty(p.Options)) { } else { @if (p.Rows == 1) { } else { } }
}
@SharedLocalizer["Cancel"] @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host) && isdeleted == "True") { }

} @code { private bool _initialized = false; private string _passwordrequirements; private int userid; private string username = string.Empty; private string _password = string.Empty; private string _passwordtype = "password"; private string _togglepassword = string.Empty; private string confirm = string.Empty; private string email = string.Empty; private string displayname = string.Empty; private string isdeleted; private string lastlogin; private string lastipaddress; private List profiles; private Dictionary userSettings; private string category = string.Empty; private string createdby; private DateTime createdon; private string modifiedby; private DateTime modifiedon; private string deletedby; private DateTime? deletedon; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Edit; protected override async Task OnInitializedAsync() { try { _passwordrequirements = await UserService.GetPasswordRequirementsAsync(PageState.Site.SiteId); _togglepassword = SharedLocalizer["ShowPassword"]; profiles = await ProfileService.GetProfilesAsync(PageState.Site.SiteId); if (PageState.QueryString.ContainsKey("id") && int.TryParse(PageState.QueryString["id"], out int UserId)) { userid = UserId; var user = await UserService.GetUserAsync(userid, PageState.Site.SiteId); if (user != null) { username = user.Username; email = user.Email; displayname = user.DisplayName; isdeleted = user.IsDeleted.ToString(); lastlogin = string.Format("{0:MMM dd yyyy HH:mm:ss}", user.LastLoginOn); lastipaddress = user.LastIPAddress; userSettings = user.Settings; createdby = user.CreatedBy; createdon = user.CreatedOn; modifiedby = user.ModifiedBy; modifiedon = user.ModifiedOn; deletedby = user.DeletedBy; deletedon = user.DeletedOn; } } _initialized = true; } catch (Exception ex) { await logger.LogError(ex, "Error Loading User {UserId} {Error}", userid, ex.Message); AddModuleMessage(Localizer["Error.User.Load"], MessageType.Error); } } private string GetProfileValue(string SettingName, string DefaultValue) { string value = SettingService.GetSetting(userSettings, SettingName, DefaultValue); if (value.Contains("]")) { value = value.Substring(value.IndexOf("]") + 1); } return value; } private async Task SaveUser() { try { if (username != string.Empty && email != string.Empty) { if (_password == confirm) { if (ValidateProfiles()) { var user = await UserService.GetUserAsync(userid, PageState.Site.SiteId); user.SiteId = PageState.Site.SiteId; user.Username = username; user.Password = _password; user.Email = email; user.DisplayName = string.IsNullOrWhiteSpace(displayname) ? username : displayname; if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { user.IsDeleted = (isdeleted == null ? true : Boolean.Parse(isdeleted)); } user = await UserService.UpdateUserAsync(user); if (user != null) { await SettingService.UpdateUserSettingsAsync(userSettings, user.UserId); await logger.LogInformation("User Saved {User}", user); NavigationManager.NavigateTo(NavigateUrl()); } else { AddModuleMessage(Localizer["Message.Password.Complexity"], MessageType.Error); } } } else { AddModuleMessage(Localizer["Message.Password.NoMatch"], MessageType.Warning); } } else { AddModuleMessage(Localizer["Message.Required.ProfileInfo"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving User {Username} {Email} {Error}", username, email, ex.Message); AddModuleMessage(Localizer["Error.User.Save"], MessageType.Error); } } private async Task DeleteUser() { try { if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host) && userid != PageState.User.UserId) { var user = await UserService.GetUserAsync(userid, PageState.Site.SiteId); await UserService.DeleteUserAsync(user.UserId, PageState.Site.SiteId); await logger.LogInformation("User Permanently Deleted {User}", user); NavigationManager.NavigateTo(NavigateUrl()); } } catch (Exception ex) { await logger.LogError(ex, "Error Permanently Deleting User {UserId} {Error}", userid, ex.Message); AddModuleMessage(Localizer["Error.DeleteUser"], MessageType.Error); } } private bool ValidateProfiles() { foreach (Profile profile in profiles) { var value = GetProfileValue(profile.Name, string.Empty); if (string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(profile.DefaultValue)) { userSettings = SettingService.SetSetting(userSettings, profile.Name, profile.DefaultValue); } if (!profile.IsPrivate || UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin)) { if (profile.IsRequired && string.IsNullOrEmpty(value)) { AddModuleMessage(string.Format(SharedLocalizer["ProfileRequired"], profile.Title), MessageType.Warning); return false; } if (!string.IsNullOrEmpty(profile.Validation)) { Regex regex = new Regex(profile.Validation); bool valid = regex.Match(value).Success; if (!valid) { AddModuleMessage(string.Format(SharedLocalizer["ProfileInvalid"], profile.Title), MessageType.Warning); return false; } } } } return true; } private void ProfileChanged(ChangeEventArgs e, string SettingName) { var value = (string)e.Value; userSettings = SettingService.SetSetting(userSettings, SettingName, value); } private void TogglePassword() { if (_passwordtype == "password") { _passwordtype = "text"; _togglepassword = SharedLocalizer["HidePassword"]; } else { _passwordtype = "password"; _togglepassword = SharedLocalizer["ShowPassword"]; } } }