From b195125202e028287b94ddffbf5be50911dbd20b Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Wed, 14 Mar 2018 17:41:50 +0800 Subject: save authentication with save auth_complete MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✗ testapi -u xxx -p xxxxx -v initialize_app (testapi) pod create '{}' authenticating..... Create failed: name Missing (testapi) pod create '{}' Create failed: name Missing Change-Id: I9de0949b0bf203032a7b0763e791bd0cd10de7fb Signed-off-by: SerenaFeng --- testapi/testapi-client/testapiclient/main.py | 2 +- .../testapiclient/utils/clientmanager.py | 27 ++++++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) (limited to 'testapi/testapi-client/testapiclient') diff --git a/testapi/testapi-client/testapiclient/main.py b/testapi/testapi-client/testapiclient/main.py index 22a8fbd..a448146 100644 --- a/testapi/testapi-client/testapiclient/main.py +++ b/testapi/testapi-client/testapiclient/main.py @@ -36,7 +36,7 @@ class TestAPIClient(app.App): def prepare_to_run_command(self, cmd): self.LOG.debug('prepare_to_run_command %s', cmd.__class__.__name__) - if self.options.u: + if self.client_manager.auth_required: self.client_manager.auth() def clean_up(self, cmd, result, err): diff --git a/testapi/testapi-client/testapiclient/utils/clientmanager.py b/testapi/testapi-client/testapiclient/utils/clientmanager.py index 7e4e630..4401231 100644 --- a/testapi/testapi-client/testapiclient/utils/clientmanager.py +++ b/testapi/testapi-client/testapiclient/utils/clientmanager.py @@ -2,9 +2,12 @@ import httplib import json import os import urllib +import logging import requests +LOG = logging.getLogger(__name__) + class ClientManager(object): headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} @@ -12,19 +15,33 @@ class ClientManager(object): def __init__(self, cli_options=None): self.cli_options = cli_options self.session = requests.Session() + self._auth_completed = False + + @property + def auth_required(self): + return self._auth() + + def _auth(self): + return { + 'name': self.cli_options.u, + 'pass': self.cli_options.p + } if self.cli_options.u else None def auth(self): + + if self._auth_completed: + return + hostname = '{}{}{}'.format(os.environ.get('testapi_cas_auth_url'), urllib.quote(os.environ.get('testapi_url')), os.environ.get('testapi_cas_signin_return')) - data = { - 'name': self.cli_options.u, - 'pass': self.cli_options.p, - 'form_id': 'user_login' - } + data = self._auth() + data.update({'form_id': 'user_login'}) + LOG.debug('authenticating.....') response = self.session.post(hostname, data) if "login" in response.text: raise Exception('Authenticate failed') + self._auth_completed = True def get(self, url): return self._parse_response('Get', -- cgit 1.2.3-korg