public async Task <VsfResponse> GetUser(string userId)
 {
     using (await UserLocker.LockAsync(userId))
     {
         return(new VsfSuccessResponse <VsfUser>(await _userAdapter.GetUserById(userId)));
     }
 }
        public async Task <VsfResponse> UpdateUser(string userId, UserUpdateModel userUpdateModel)
        {
            using (await UserLocker.LockAsync(userId))
            {
                if (await _userAdapter.UpdateUser(userId, userUpdateModel.Customer))
                {
                    return(new VsfSuccessResponse <VsfUser>(await _userAdapter.GetUserById(userId)));
                }

                return(new VsfErrorResponse("User update failed."));
            }
        }
        public async Task <VsfResponse> ChangePassword(string userId, ChangePasswordModel changePasswordModel)
        {
            using (await UserLocker.LockAsync(userId))
            {
                if (!await _userAdapter.ChangePassword(userId,
                                                       changePasswordModel.CurrentPassword, changePasswordModel.NewPassword))
                {
                    return(new VsfErrorResponse("The password doesn't match this account."));
                }

                return(new VsfSuccessResponse <string>("Password changed."));
            }
        }
        public async Task <VsfResponse> CreateLoginResponse(UserLoginModel userLoginModel)
        {
            var user = await _userAdapter.GetUserByCredentials(userLoginModel.Username, userLoginModel.Password);

            if (user == null)
            {
                return(new VsfErrorResponse("You did not sign in correctly or your account is temporarily disabled."));
            }

            using (await UserLocker.LockAsync(user.Id))
            {
                var userClaims = _userClaimsProvider.GetClaims(user).ToList();
                var authToken  = await _userTokenProvider.GenerateNewToken(userClaims);

                var refreshToken = await _userTokenProvider.GenerateNewRefreshToken(userClaims);

                return(new LoginResponse(authToken, refreshToken));
            }
        }