@rendermode InteractiveServer @using BlazorStrap @using static Microsoft.AspNetCore.Components.Web.RenderMode @using BlazorStrap.Shared.Components.Modal @using BlazorStrap.V5 @using CurrieTechnologies.Razor.SweetAlert2 @using HopFrame.Database.Models @using HopFrame.Security.Claims @using HopFrame.Security.Services @using HopFrame.Web.Model Add user E-Mail Username Password Primary group Select group @foreach (var group in _allGroups) { @group.Name.Replace("group.", "") } Cancel Save @inject IUserService Users @inject IPermissionService Permissions @inject SweetAlertService Alerts @inject ITokenContext Auth @code { [Parameter] public Func ReloadPage { get; set; } private IList _allGroups = new List(); private IList _allUsers = new List(); private UserAdd _user; private BSModalBase _modal; public async Task ShowAsync() { _allGroups = await Permissions.GetPermissionGroups(); _allUsers = await Users.GetUsers(); await _modal.ShowAsync(); } private async Task AddUser() { if (!(await Permissions.HasPermission(Security.AdminPermissions.AddUser, Auth.User.Id))) { await NoAddPermissions(); return; } string errorMessage = null; if (_allUsers.Any(user => user.Username == _user.Username)) { errorMessage = "Username is already taken!"; } else if (_allUsers.Any(user => user.Email == _user.Email)) { errorMessage = "E-Mail is already taken!"; } else if (!_user.PasswordIsValid) { errorMessage = "The password needs to be at least 8 characters long!"; } else if (!_user.EmailIsValid) { errorMessage = "Invalid E-Mail address!"; } else if (string.IsNullOrWhiteSpace(_user.Username)) { errorMessage = "You need to set a username!"; } if (!string.IsNullOrWhiteSpace(errorMessage)) { await Alerts.FireAsync(new SweetAlertOptions { Title = "Something went wrong!", Text = errorMessage, Icon = SweetAlertIcon.Error, ShowConfirmButton = false, Timer = 1500 }); return; } var user = await Users.AddUser(_user); if (!string.IsNullOrWhiteSpace(_user.Group)) { await Permissions.AddPermission(user, _user.Group); } await ReloadPage.Invoke(); await Alerts.FireAsync(new SweetAlertOptions { Title = "New user added!", Icon = SweetAlertIcon.Success, ShowConfirmButton = false, Timer = 1500 }); } private async Task NoAddPermissions() { await Alerts.FireAsync(new SweetAlertOptions { Title = "Unauthorized!", Text = "You don't have the required permissions to add a user!", Icon = SweetAlertIcon.Error }); } }