public async Task <User> Handle(Query request, CancellationToken ct) { var user = await _userManager.FindByEmailAsync(request.Email); if (user == null) { throw new RestException(HttpStatusCode.Unauthorized); } var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, lockoutOnFailure : false); if (result.Succeeded) { user.RefreshToken = _jwtGenerator.CreateRefreshToken(); user.RefreshTokenExpiry = DateTime.UtcNow.AddDays(30); await _userManager.UpdateAsync(user); return(new User() { DisplayName = user.DisplayName, Token = _jwtGenerator.CreateToken(user), RefreshToken = user.RefreshToken, Username = user.UserName, Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url }); } throw new RestException(HttpStatusCode.Unauthorized); }
public async Task <UserDto> Handle(Query request, CancellationToken cancellationToken) { IdentityUser identityUser = await _unitOfWork.IdentityUserRepo.FindFirstAsync(request.UserName, cancellationToken); if (identityUser == null) { throw new CustomException(HttpStatusCode.BadRequest); } //If recently expired token is matching with token in request please return recently generated token //This will be the case when two concurrent http request comes from same client and one request updates refresh token else if (request.RefreshToken == identityUser.PreviousRefreshToken && identityUser.PreviousRefreshTokenExpiry > HelperFunc.GetCurrentDateTime()) { return(_mapperHelper.Map <IdentityUser, UserDto>(identityUser)); } //Check if current refresh token is matching and valid else if (request.RefreshToken == identityUser.RefreshToken && identityUser.RefreshTokenExpiry > HelperFunc.GetCurrentDateTime()) { //If current valid token is expired, generate new token and return it. //else return existing token that is still valid. if (request.RefreshToken == identityUser.RefreshToken) { identityUser.PreviousRefreshToken = identityUser.RefreshToken; identityUser.PreviousRefreshTokenExpiry = HelperFunc.GetCurrentDateTime().AddMinutes(_PREVIOUS_REFRESH_TOKEN_EXPIRES_IN_SEC); identityUser.RefreshToken = _jwtGenerator.CreateRefreshToken(); identityUser.RefreshTokenExpiry = HelperFunc.GetCurrentDateTime().AddDays(_REFRESH_TOKEN_EXPIRS_IN_DAYS); _unitOfWork.IdentityUserRepo.Update(identityUser); await _unitOfWork.SaveAsync(cancellationToken); } return(_mapperHelper.Map <IdentityUser, UserDto>(identityUser)); } throw new CustomException(HttpStatusCode.BadRequest); }
public IdentityUser Resolve(Register.Command source, AppUser dest, IdentityUser destMember, ResolutionContext context) { string salt = _cryptoHelper.CreateBase64Salt(); return(new IdentityUser { UserName = source.UserName, Salt = salt, Passoword = _cryptoHelper.GenerateHash(source.Password, salt), RefreshToken = _jwtGenerator.CreateRefreshToken(), RefreshTokenExpiry = HelperFunc.GetCurrentDateTime().AddDays(30) }); }
public async Task <User> Handle(Query request, CancellationToken ct) { var userInfo = await _facebookAccessor.FacebookLogin(request.AccessToken); if (userInfo == null) { throw new RestException(HttpStatusCode.BadRequest, new { User = "******" }); } var user = await _userManager.FindByEmailAsync(userInfo.Email); if (user == null) { user = new AppUser { DisplayName = userInfo.Name, Id = userInfo.Id, Email = userInfo.Email, UserName = "******" + userInfo.Id, RefreshToken = _jwtGenerator.CreateRefreshToken(), RefreshTokenExpiry = DateTime.UtcNow.AddDays(30) }; var photo = new Photo { Id = "fb_" + userInfo.Id, Url = userInfo.Picture.Data.Url, IsMain = true }; user.Photos.Add(photo); var result = await _userManager.CreateAsync(user); if (!result.Succeeded) { throw new RestException(HttpStatusCode.BadRequest, new { User = "******" }); } } return(new User { DisplayName = user.DisplayName, Token = _jwtGenerator.CreateToken(user), RefreshToken = user.RefreshToken, Username = user.UserName, Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url }); }
public async Task <User> Handle(Command request, CancellationToken ct) { if (await _context.Users.Where(u => u.Email == request.Email).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { Email = "Email already exists" }); } if (await _context.Users.Where(u => u.UserName == request.Username).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { Username = "******" }); } var user = new AppUser { DisplayName = request.DisplayName, UserName = request.Username, Email = request.Email, RefreshToken = _jwtGenerator.CreateRefreshToken(), RefreshTokenExpiry = DateTime.UtcNow.AddDays(30) }; var result = await _userManager.CreateAsync(user, request.Password); if (result.Succeeded) { return(new User { DisplayName = user.DisplayName, Token = _jwtGenerator.CreateToken(user), RefreshToken = user.RefreshToken, Username = user.UserName, Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url }); } throw new Exception("Problem creating user."); }
public async Task <User> Handle(Query request, CancellationToken ct) { var user = await _userManager.FindByNameAsync(request.Username); if (user == null || user.RefreshToken != request.RefreshToken || user.RefreshTokenExpiry < DateTime.UtcNow) { throw new RestException(HttpStatusCode.Unauthorized); } user.RefreshToken = _jwtGenerator.CreateRefreshToken(); user.RefreshTokenExpiry = DateTime.Now.AddDays(30); await _userManager.UpdateAsync(user); return(new User { DisplayName = user.DisplayName, Token = _jwtGenerator.CreateToken(user), RefreshToken = user.RefreshToken, Username = user.UserName, Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url }); }
public async Task <UserDto> Handle(Command request, CancellationToken cancellationToken) { IdentityUser identityUser = await _unitOfWork.IdentityUserRepo.FindFirstAsync(request.UserName, cancellationToken); if (identityUser == null) { throw new CustomException(HttpStatusCode.Unauthorized); } if (_cryptoHelper.GenerateHash(request.Password, identityUser.Salt) == identityUser.Passoword) { identityUser.PreviousRefreshToken = null; identityUser.PreviousRefreshTokenExpiry = null; identityUser.RefreshToken = _jwtGenerator.CreateRefreshToken(); identityUser.RefreshTokenExpiry = HelperFunc.GetCurrentDateTime().AddDays(30); _unitOfWork.IdentityUserRepo.Update(identityUser); await _unitOfWork.SaveAsync(cancellationToken); return(_mapperHelper.Map <IdentityUser, UserDto>(identityUser)); } throw new CustomException(HttpStatusCode.Unauthorized); }