Пример #1
0
        /// <summary>
        /// Read from database if this user is registered and authorized to login
        /// </summary>
        /// <param name="requset"></param>
        /// <returns></returns>
        internal async Task <LoginResposeModel> AuthorizeFromDatabase(LoginRequsetModel requset)
        {
            LoginResposeModel result = new LoginResposeModel();

            //Since plain-text password is not saved in db, then it has to be hashed to find it in db
            var hashedPassword = await GetHashedPassword(requset.Username, requset.Password);

            IsError = string.IsNullOrEmpty(hashedPassword);
            try
            {
                if (!IsError)
                {
                    _signedInUser = _userRepository.GetUser(requset.Username, hashedPassword);

                    result.IsAuthorized = _signedInUser != null;
                    result.UserLevel    = _signedInUser.UserLevel;
                }
            }
            catch (Exception e)
            {
                IsError = true;
                _logger.Error(e, "Failed to get user record");
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Login user implementation
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <LoginResposeModel> LoginUser(LoginRequsetModel request)
        {
            LoginResposeModel result = new LoginResposeModel();

            //Try to get from the cache first
            result = AuthorizeFromCache(request);

            //If not available, search from db
            if (!result.IsAuthorized)
            {
                result = await AuthorizeFromDatabase(request);
            }

            //Prepare response and cache it
            if (result.IsAuthorized && !IsError)
            {
                result.Success        = true;
                result.LastActiveTime = DateTimeOffset.UtcNow;
                result.Username       = request.Username;

                if (string.IsNullOrEmpty(result.AccessToken))
                {
                    result.AccessToken     = CreateAccessToken(request.Username);
                    result.FirstActiveTime = DateTimeOffset.UtcNow;
                }

                _cacheManagement.SetOnly(request.Username, result);
            }

            return(result);
        }
Пример #3
0
        /// <summary>
        /// Read from the cache if the user is still logged in
        /// </summary>
        /// <param name="requset"></param>
        /// <returns></returns>
        internal LoginResposeModel AuthorizeFromCache(LoginRequsetModel requset)
        {
            LoginResposeModel result = new LoginResposeModel();

            var cachedItem = _cacheManagement.GetOnly(requset.Username) as LoginResposeModel;

            if (cachedItem != null)
            {
                result = cachedItem;
            }

            return(result);
        }
Пример #4
0
        /// <summary>
        /// When logout, Remove the logged in user from the cache
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Task <LoginResposeModel> LogoutUser(LoginRequsetModel request)
        {
            var result = new LoginResposeModel();

            try
            {
                _cacheManagement.Expire(request.Username);
                result.Success = true;
            }
            catch (Exception e)
            {
                IsError = true;
                _logger.Error(e, "Failed to logout user");
            }

            return(Task.FromResult(result));
        }