private async Task AssignRoleToFirstNUsers(int n, UserGE user, string role) { bool shouldHaveRole = _userManager.Users.Count() <= n; if (shouldHaveRole) { await _userManager.AddToRoleAsync(user, role); } }
private async Task LoadAsync(UserGE user) { var userName = await _userManager.GetUserNameAsync(user); var phoneNumber = (await _userManager.GetPhoneNumberAsync(user)).Substring(1); Input = new InputModel { PhoneNumber = phoneNumber, UserName = userName, Balance = user.CreditBalance }; }
public async Task TransferCreditsAsync(ClaimsPrincipal user, TransferDTOin dto) { using (var transaction = await transfersRepository.BeginTransactionAsync()) { UserGE sender = await _userManager.GetUserAsync(user); if (sender.CreditBalance < dto.Ammount) { throw new ArgumentOutOfRangeException(GlobalConstants.InsufficientFundsError); } UserGE reciever = _userManager.Users.FirstOrDefault(x => x.UserName.ToLower() == dto.RecieverUnameOrPhone.ToLower() || x.PhoneNumber == Helpers.SanitizePhone(dto.RecieverUnameOrPhone)); if (reciever is null) { throw new ArgumentOutOfRangeException(GlobalConstants.UserNotLocatedByPhoneOrUserNameError(dto.RecieverUnameOrPhone)); } else if (reciever.Id == sender.Id) { throw new ArgumentOutOfRangeException(GlobalConstants.AutoSendCreditsError); } sender.CreditBalance -= dto.Ammount; reciever.CreditBalance += dto.Ammount; var transfer = new CreditTransfer { Sender = sender, Reciever = reciever, Ammount = dto.Ammount, Comment = dto.Comment }; sender.TransactionsSent.Add(transfer); cache.Remove(GlobalConstants.StatisticsCasheName); await transfersRepository.SaveChangesAsync(); await transaction.CommitAsync(); } }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { var phoneNumber = Helpers.SanitizePhone(Input.PhoneNumber); if (await userService.PhoneNumberInUseAsync(phoneNumber)) { StatusMessages.Add(GlobalConstants.PhoneAlreadyUsedError(phoneNumber)); return(Page()); } var user = new UserGE { UserName = Input.UserName, PhoneNumber = phoneNumber }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { var adminRoleName = GlobalConstants.AdministratorRole; await EnsureRoleExists(adminRoleName); await AssignRoleToFirstNUsers(GlobalConstants.AdminsCount, user, adminRoleName); _logger.LogInformation("User created a new account with password."); cache.Remove(GlobalConstants.StatisticsCasheName); StatusMessages.Add("Successfull Registration!"); Thread.Sleep(1000); await _signInManager.SignInAsync(user, isPersistent : true); return(LocalRedirect(returnUrl)); } StatusMessages = result.Errors.Select(x => "Error: " + x.Description).ToList(); } return(Page()); }