public async Task <TokenSelectRequest> Handle(TokenRequest tokenRequest, CancellationToken cancellationToken) { var user = await _userRepository.TableNoTracking.Include(u => u.RefreshToken) .SingleOrDefaultAsync(u => u.UserName.Equals(tokenRequest.username), cancellationToken); if (user == null) { throw new BadRequestException("Username or password is wrong!", HttpStatusCode.BadRequest); } var isPasswordValid = await _userManager.CheckPasswordAsync(user, tokenRequest.password); if (!isPasswordValid) { throw new BadRequestException("Username or password is wrong!", HttpStatusCode.BadRequest); } var refreshToken = _tokenFactory.GenerateToken(); HandleRefreshToken(user, refreshToken); await _userRepository.UpdateSecurityStampAsync(user, cancellationToken); var jwt = await _jwtService.GenerateAsync(user); var token = new TokenSelectRequest { access_token = jwt.access_token, expires_in = jwt.expires_in, refresh_token = refreshToken }; return(token); }
private async Task <TokenSelectRequest> SignInUser(string phone, CancellationToken cancellationToken) { var user = await _userRepository.Table.Include(u => u.RefreshToken) .SingleOrDefaultAsync(u => u.PhoneNumber.Equals(phone), cancellationToken); if (user == null) { throw new BadRequestException("کاربری با این شماره تلفن وجود ندارد!", HttpStatusCode.BadRequest); } var refreshToken = _tokenFactory.GenerateToken(); HandleRefreshToken(user, refreshToken); await _userRepository.UpdateSecurityStampAsync(user, cancellationToken); var jwt = await _jwtService.GenerateAsync(user); var token = new TokenSelectRequest { access_token = jwt.access_token, expires_in = jwt.expires_in, refresh_token = refreshToken }; return(token); }
public async Task <ApiResult <TokenSelectRequest> > Login(TokenRequest tokenRequest, CancellationToken cancellationToken) { //if (!tokenRequest.grant_type.Equals("password", StringComparison.OrdinalIgnoreCase)) // throw new Exception("OAuth flow is not password."); var user = await _userManager.FindByNameAsync(tokenRequest.username); if (user == null) { throw new BadRequestException("نام کاربری یا رمز عبور اشتباه است"); } var isPasswordValid = await _userManager.CheckPasswordAsync(user, tokenRequest.password); if (!isPasswordValid) { throw new BadRequestException("نام کاربری یا رمز عبور اشتباه است"); } var jwt = await _jwtService.GenerateAsync(user); var token = new TokenSelectRequest { access_token = jwt.access_token, expires_in = jwt.expires_in }; return(token); }
public override async Task <ApiResult <PrintingHouseSelectDto> > Create(PrintingHouseDto dto, CancellationToken cancellationToken) { dto.UserDto.PhoneNumber = dto.UserDto.UserName; var user = dto.UserDto.ToEntity(Mapper); var addUser = await _userManager.CreateAsync(user, dto.UserDto.Password); user = await _userManager.FindByNameAsync(user.UserName); var addToRole = await _userManager.AddToRoleAsync(user, PredefinedRoles.PrintingHouse.ToString()); //var userSelectDto = await _userRepository.TableNoTracking.ProjectTo<UserSelectDto>(Mapper.ConfigurationProvider) // .SingleOrDefaultAsync(p => p.Id.Equals(user.Id), cancellationToken); var printingHouseWallet = new PrintingHouseWallet { Iban = dto.Iban, Cash = 0 }; await _phWalletRepository.AddAsync(printingHouseWallet, cancellationToken); var printingHouse = dto.ToEntity(Mapper); printingHouse.PrintingHouseWalletId = printingHouseWallet.Id; printingHouse.User = user; printingHouse.Wallet = printingHouseWallet; await Repository.AddAsync(printingHouse, cancellationToken); var resultDto = await Repository.TableNoTracking .Include(ph => ph.User) .Include(ph => ph.Wallet) .ProjectTo <PrintingHouseSelectDto>(Mapper.ConfigurationProvider) .SingleOrDefaultAsync(p => p.Id.Equals(printingHouse.Id), cancellationToken); //resultDto.UserSelectDto = userSelectDto; //return resultDto; var jwt = await _jwtService.GenerateAsync(user); var token = new TokenSelectRequest { access_token = jwt.access_token, expires_in = jwt.expires_in }; resultDto.TokenSelectRequest = token; return(resultDto); }
public async Task <TokenSelectRequest> Handle(RefreshTokenDto rtd, CancellationToken cancellationToken) { var cp = _jwtService.GetPrincipalFromToken(rtd.access_token, _siteSetting.JwtSettings.SecretKey); // invalid token/signing key was passed and we can't extract user claims if (cp == null) { throw new BadRequestException("Unable to extract claims out of the provided token!", HttpStatusCode.BadRequest); } var id = cp.Claims.First(c => c.Type.Equals(ClaimTypes.NameIdentifier)); var user = await _userRepository.TableNoTracking.Include(u => u.RefreshToken) .SingleOrDefaultAsync(u => u.Id.Equals(int.Parse(id.Value)), cancellationToken); var refreshTokenIsValid = user.RefreshToken != null && (user.RefreshToken.Active && user.RefreshToken.Token.Equals(rtd.refresh_token)); if (!refreshTokenIsValid) { throw new BadRequestException("Refresh-Token is not valid!", HttpStatusCode.BadRequest); } var refreshToken = _tokenFactory.GenerateToken(); var rt = new RefreshToken(refreshToken, DateTime.UtcNow.AddDays(_siteSetting.JwtSettings.RefreshTokenExpirationDays), user.Id); user.RefreshToken.Token = rt.Token; user.RefreshToken.Expires = rt.Expires; await _userRepository.UpdateSecurityStampAsync(user, cancellationToken); var jwt = await _jwtService.GenerateAsync(user); var token = new TokenSelectRequest { access_token = jwt.access_token, expires_in = jwt.expires_in, refresh_token = refreshToken }; return(token); }
public override async Task <ApiResult <CustomerSelectDto> > Create(CustomerDto dto, CancellationToken cancellationToken) { dto.UserDto.PhoneNumber = dto.UserDto.UserName; dto.UserDto.Email = "np" + dto.UserDto.PhoneNumber + "@printer.ir"; var user = dto.UserDto.ToEntity(Mapper); var addUser = await _userManager.CreateAsync(user, dto.UserDto.Password); user = await _userManager.FindByIdAsync(user.Id.ToString()); var addToRole = await _userManager.AddToRoleAsync(user, dto.DiscriminatorRole.ToString()); var userSelectDto = await _userRepository.TableNoTracking.ProjectTo <UserSelectDto>(Mapper.ConfigurationProvider) .SingleOrDefaultAsync(p => p.Id.Equals(user.Id), cancellationToken); var customer = dto.ToEntity(Mapper); customer.User = user; await Repository.AddAsync(customer, cancellationToken); var resultDto = await Repository.TableNoTracking.Include(c => c.User) .ProjectTo <CustomerSelectDto>(Mapper.ConfigurationProvider) .SingleOrDefaultAsync(p => p.Id.Equals(customer.Id), cancellationToken); //resultDto.UserSelectDto = userSelectDto; //return resultDto; var jwt = await _jwtService.GenerateAsync(user); var token = new TokenSelectRequest { access_token = jwt.access_token, expires_in = jwt.expires_in }; resultDto.TokenSelectRequest = token; return(resultDto); }