public async Task <IdentificationResponse> Handle(IdentificationCommand request, CancellationToken cancellationToken) { ArmUser user = null; UserDevice device = null; if (!string.IsNullOrEmpty(request.Login) && !string.IsNullOrEmpty(request.Password)) { user = await _userRepository.GetUserByCredentials(request.Login, request.Password); if (user != null) { await UpdateUserDevice(user, request.Device); } } else if (!string.IsNullOrEmpty(request.Token)) { device = await _deviceRepository.GetDeviceByToken(request.Token); if (device != null && device.Name == request.Device) { user = device.ArmUser; } } var response = new IdentificationResponse { Login = user.Login, Name = user.Name, RefreshToken = device.Token, RefreshTokenExpireDate = (DateTime)device.TokenExpireDate }; return(response); }
private async Task <UserDevice> UpdateUserDevice(ArmUser user, string deviceName) { var userDevice = user.Devices.SingleOrDefault(x => x.Name == deviceName); if (userDevice == null) { userDevice = UserDevice.Create(Guid.NewGuid(), deviceName, DateTime.Now, user.Id, GenerateRefreshToken(), DateTime.Now, DateTime.Now.AddMinutes(_options.RefreshTokenLifetimeMinutes)); await _deviceRepository.AddAsync(userDevice); } else { userDevice.Token = GenerateRefreshToken(); userDevice.TokenCreateDate = DateTime.Now; userDevice.TokenExpireDate = DateTime.Now.AddMinutes(_options.RefreshTokenLifetimeMinutes); await _deviceRepository.UpdateAsync(userDevice); } return(userDevice); }
public JwtTokenResult GenerateToken(ArmUser user) { var expiration = TimeSpan.FromMinutes(_tokenOptions.TokenExpiryInMinutes); var claimsIdentity = user.BuildClaims(); var jwt = new JwtSecurityToken( _tokenOptions.Issuer, _tokenOptions.Audience, claimsIdentity.Claims, DateTime.UtcNow, DateTime.UtcNow.Add(expiration), new SigningCredentials(_tokenOptions.SigningKey, SecurityAlgorithms.HmacSha256)); var accessToken = new JwtSecurityTokenHandler().WriteToken(jwt); return(new JwtTokenResult { Token = accessToken, Expires = expiration }); }