Esempio n. 1
0
        // TODO: Check for user in domain || Not necessary if we checking email??
        public DataAccess.Models.User Invoke(Models.UserModel user)
        {
            if (!user.IsValid() || userRepository.FindBy(x => x.Email == user.Email).Count() > 0)
            {
                return(null);
            }

            var newUser = AutoMapper.Mapper.Map <DataAccess.Models.User>(user);

            newUser.PasswordSalt = hasher.GenerateRandomSalt();
            newUser.PasswordHash = hasher.CreatePasswordHash(user.Password, newUser.PasswordSalt);

            userRepository.Add(newUser);

            var newUserToken = new DataAccess.Models.UserToken
            {
                User        = newUser,
                SecretToken = hasher.GenerateRandomGuid()
            };

            userTokenRepository.Add(newUserToken);
            _unitOfWork.Save();

            return(newUser);
        }
Esempio n. 2
0
        public string Invoke(Guid userId)
        {
            if (userId == Guid.Empty)
            {
                return(string.Empty);
            }

            var user = userRepository.GetById(userId);

            if (user == null)
            {
                return(string.Empty);
            }

            var token = userTokenRepository.GetById(userId);

            if (token != null)
            {
                userTokenRepository.Delete(token);
            }

            var userToken = new DataAccess.Models.UserToken
            {
                User        = user,
                SecretToken = hasher.GenerateRandomGuid()
            };

            userTokenRepository.Add(userToken);
            _unitOfWork.Save();

            return(userToken.SecretToken);
        }
Esempio n. 3
0
        public Task SetTokenAsync(ApplicationUser user, string loginProvider, string name, string value, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            if (string.IsNullOrWhiteSpace(loginProvider))
            {
                throw new ArgumentNullException(nameof(loginProvider));
            }

            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            var userTokenEntity = new UserToken
            {
                LoginProvider = loginProvider,
                Name          = name,
                Value         = value,
                UserId        = user.Id
            };

            _userTokenRepository.Add(userTokenEntity);

            return(Task.CompletedTask);
        }
        public async Task AddUserTokenAsync(UserToken userToken)
        {
            if (!_configuration.Value.AllowMultipleLoginsFromTheSameUser)
            {
                await InvalidateUserTokensAsync(userToken.UserId);
            }
            await DeleteTokensWithSameRefreshTokenSourceAsync(userToken.RefreshTokenIdHashSource);

            _userTokenRepository.Add(userToken);
            await _userTokenRepository.SaveChanges();
        }
Esempio n. 5
0
        /// <summary>
        /// Get a new token for the parametrized user
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task <UserToken> GetNewTokenAsync(User user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            UserToken userToken = _userTokenRepository.GetByUser(user);

            if (userToken == null)
            {
                userToken = UserToken.Create(user, _appSettings.TokenExpirationInHours);
                _userTokenRepository.Add(userToken);
            }
            else
            {
                userToken.CreateToken(_appSettings.TokenExpirationInHours);
                _userTokenRepository.Update(userToken);
            }
            await _userTokenRepository.SaveChangesAsync();

            return(userToken);
        }
Esempio n. 6
0
        private static TokenResponse GenerateAccessTokenResponse(IUserTokenRepository userTokenRepository, IOAuth appSettingsOAuth, long userId, string userRole, string username)
        {
            string nonce       = GenerateNonce();
            string accessToken = GenerateAccessToken(
                userId: userId,
                userRole: userRole,
                nonce: nonce,
                secretKey: appSettingsOAuth.SecretKey,
                issuer: appSettingsOAuth.Issuer,
                expiresAfter: appSettingsOAuth.AccessTokenExpires);
            string refreshToken = GenerateRefreshToken();
            string checksum     = (refreshToken + username).GetSHA256HashString();

            userTokenRepository.Add(refreshToken, userId, nonce, appSettingsOAuth.RefreshTokenExpires, checksum);
            userTokenRepository.RemoveExpired();

            return(new TokenResponse
            {
                AccessToken = accessToken,
                TokenType = "bearer",
                ExpiresIn = appSettingsOAuth.AccessTokenExpires,
                RefreshToken = refreshToken
            });
        }