Skip to content

Commit 678f20b

Browse files
author
Mathew Cano
committed
feat(client): add flag to disable SSL certificate verification
Resolves #1499. Addresses the issue when a user may not be using a proper certificate in their deis environment. This change allows the user to disable SSL verification via a command line option during auth:login. The result is saved in the user's client.json and is passed in subsequent commands made via the client.
1 parent 5b7c68e commit 678f20b

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

client/deis.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,7 @@ def _dispatch(self, method, path, body=None, **kwargs):
390390
func = getattr(self._session, method.lower())
391391
controller = self._settings.get('controller')
392392
token = self._settings.get('token')
393+
ssl_verify = self._settings.get('ssl_verify')
393394
if not token:
394395
raise EnvironmentError(
395396
'Could not find token. Use `deis login` or `deis register` to get started.')
@@ -399,7 +400,7 @@ def _dispatch(self, method, path, body=None, **kwargs):
399400
'X-Deis-Version': __api_version__.rsplit('.', 1)[0],
400401
'Authorization': 'token {}'.format(token)
401402
}
402-
response = func(url, data=body, headers=headers)
403+
response = func(url, data=body, headers=headers, verify=ssl_verify)
403404
# check for version mismatch
404405
server_api_version = response.headers.get('X_DEIS_API_VERSION')
405406
if server_api_version is not None and server_api_version != __api_version__:
@@ -789,8 +790,11 @@ def auth_login(self, args):
789790
provide a username for the account.
790791
--password=<password>
791792
provide a password for the account.
793+
--ssl-verify=false
794+
disables SSL certificate verification for API requests
792795
"""
793796
controller = args['<controller>']
797+
ssl_verify = True
794798
if not urlparse.urlparse(controller).scheme:
795799
controller = "http://{}".format(controller)
796800
username = args.get('--username')
@@ -800,15 +804,20 @@ def auth_login(self, args):
800804
password = args.get('--password')
801805
if not password:
802806
password = getpass('password: ')
807+
ssl_option = args.get('--ssl-verify')
808+
if ssl_option == 'false':
809+
ssl_verify = False
803810
url = urlparse.urljoin(controller, '/v1/auth/login/')
804811
payload = {'username': username, 'password': password}
805812
# post credentials to the login URL
806-
response = self._session.post(url, data=payload, allow_redirects=False)
813+
response = self._session.post(url, data=payload, allow_redirects=False,
814+
verify=ssl_verify)
807815
if response.status_code == requests.codes.ok:
808816
# retrieve and save the API token for future requests
809817
self._settings['controller'] = controller
810818
self._settings['username'] = username
811819
self._settings['token'] = response.json()['token']
820+
self._settings['ssl_verify'] = ssl_verify
812821
self._settings.save()
813822
self._logger.info("Logged in as {}".format(username))
814823
return username
@@ -821,9 +830,8 @@ def auth_logout(self, args):
821830
822831
Usage: deis auth:logout
823832
"""
824-
self._settings['controller'] = None
825-
self._settings['username'] = None
826-
self._settings['token'] = None
833+
for i in ['controller', 'username', 'token', 'ssl_verify']:
834+
self._settings[i] = None
827835
self._settings.save()
828836
self._logger.info('Logged out')
829837

0 commit comments

Comments
 (0)