Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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
            });
        }