コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }