public async Task <AdminUserDetailsVM> EditUser(AdminEditUserVM user) { try { var admin = await _userManager.FindByIdAsync(user.AdminId); if (admin == null) { throw new Exception("Cannot find the active user."); } var adminResult = await _userManager.VerifyUserTokenAsync(admin, "Default", "authentication-backend", user.AdminToken); if (!adminResult) { throw new Exception("Cannot verify the active user."); } var original = await _userManager.FindByIdAsync(user.User.UserId); if (original == null) { throw new Exception("User does not exist in database."); } original.UserName = user.User.UserName; original.FirstName = user.User.FirstName; original.LastName = user.User.LastName; original.Age = user.User.Age; original.Email = user.User.Email; // This checks whether the IsAdmin was changed or not, and if it was it changes the role corresponding to the change. _ = user.User.IsAdmin != original.IsAdmin && user.User.IsAdmin == true ? await _userManager.AddToRoleAsync(original, "Administrator") : user.User.IsAdmin != original.IsAdmin && user.User.IsAdmin == false ? await _userManager.RemoveFromRoleAsync(original, "Administrator") : null; original.IsAdmin = user.User.IsAdmin; var result = await _userManager.UpdateAsync(original); if (result.Succeeded) { AdminUserDetailsVM resultVM = new AdminUserDetailsVM { AdminId = admin.Id, User = user.User, FrontEndToken = VerificationToken(), AdminToken = await UserToken(admin) }; return(resultVM); } else { throw new Exception(result.Errors.ToString()); } } catch (Exception ex) { AdminUserDetailsVM resultVM = new AdminUserDetailsVM { ErrorMessage = ex.Message }; return(resultVM); } }
public async Task <AdminUserDetailsVM> Create(RegisterAdminUser10 user) { try { var admin = await _userManager.FindByIdAsync(user.AdminId); if (admin == null) { throw new Exception("Could not find the active user."); } var adminResult = await _userManager.VerifyUserTokenAsync(admin, "Default", "authentication-backend", user.AdminToken); if (!adminResult) { throw new Exception("Could not verify the active user."); } if (_userManager.FindByNameAsync(user.UserName).Result != null) { throw new Exception("This username is already in use."); } if (user.Password != user.ComparePassword) { throw new Exception("The passwords does not match."); } var appUser = new AppUser10 { UserName = user.UserName, FirstName = user.FirstName, LastName = user.LastName, Age = user.Age, Email = user.Email, SecurityStamp = user.SecurityStamp, IsAdmin = user.IsAdmin }; var result = await _userManager.CreateAsync(appUser, user.Password); if (result.Succeeded) { var roles = await _roleManager.Roles.ToListAsync(); List <string> roleNames = new List <string>(); roles.ForEach(x => roleNames.Add(x.Name)); var newUser = await _userManager.FindByNameAsync(user.UserName); _ = user.IsAdmin == true ? await _userManager.AddToRolesAsync(newUser, roleNames) : await _userManager.AddToRoleAsync(newUser, "NormalUser"); AdminUserDetailsVM userVM = new AdminUserDetailsVM { AdminId = admin.Id, FrontEndToken = VerificationToken(), AdminToken = await UserToken(admin), User = new DetailsVM { UserId = newUser.Id, UserName = newUser.UserName, FirstName = newUser.FirstName, LastName = newUser.LastName, Age = newUser.Age, Email = newUser.Email, Roles = new List <string>(roleNames), IsAdmin = newUser.IsAdmin } }; return(userVM); } else { throw new Exception("Something went wrong. Please check all inputs and then try again."); } } catch (Exception ex) { AdminUserDetailsVM userVM = new AdminUserDetailsVM { ErrorMessage = ex.Message }; return(userVM); } }
public async Task <AdminUserDetailsVM> GetUser(AdminVerificationForUserVM verificationVM) { try { if (string.IsNullOrWhiteSpace(verificationVM.AdminId) || string.IsNullOrWhiteSpace(verificationVM.UserId) || string.IsNullOrWhiteSpace(verificationVM.AdminToken)) { throw new Exception("Something went wrong."); } var admin = await _userManager.FindByIdAsync(verificationVM.AdminId); if (admin == null) { throw new Exception("Cannot verify user."); } var adminResult = await _userManager.VerifyUserTokenAsync(admin, "Default", "authentication-backend", verificationVM.AdminToken); if (!adminResult) { throw new Exception("Could not verify the administrator."); } var user = await _userManager.FindByIdAsync(verificationVM.UserId); if (user == null) { throw new Exception("User could not be found."); } // Doing it this way because for some reason it throws an exception if they are combined. DetailsVM User = new DetailsVM { UserId = user.Id, UserName = user.UserName, FirstName = user.FirstName, LastName = user.LastName, Age = user.Age, Email = user.Email, IsAdmin = user.IsAdmin, Roles = await _userManager.GetRolesAsync(user), }; AdminUserDetailsVM userVM = new AdminUserDetailsVM { AdminId = admin.Id, User = User, FrontEndToken = VerificationToken(), AdminToken = await UserToken(admin), }; return(userVM); } catch (Exception ex) { AdminUserDetailsVM userVM = new AdminUserDetailsVM { ErrorMessage = ex.Message }; return(userVM); } }