4141from __future__ import print_function
4242from collections import namedtuple
4343from collections import OrderedDict
44- from cookielib import MozillaCookieJar
4544from datetime import datetime
4645from getpass import getpass
4746from itertools import cycle
@@ -82,21 +81,14 @@ class Session(requests.Session):
8281 def __init__ (self ):
8382 super (Session , self ).__init__ ()
8483 self .trust_env = False
85- cookie_file = os .path .expanduser ('~/.deis/cookies.txt' )
86- cookie_dir = os .path .dirname (cookie_file )
87- self .cookies = MozillaCookieJar (cookie_file )
84+ config_dir = os .path .expanduser ('~/.deis' )
8885 self .proxies = {
8986 "http" : os .getenv ("http_proxy" ),
9087 "https" : os .getenv ("https_proxy" )
9188 }
9289 # Create the $HOME/.deis dir if it doesn't exist
93- if not os .path .isdir (cookie_dir ):
94- os .mkdir (cookie_dir , 0700 )
95- # Load existing cookies if the cookies.txt exists
96- if os .path .isfile (cookie_file ):
97- self .cookies .load ()
98- self .cookies .clear_expired_cookies ()
99- self .cookies .save ()
90+ if not os .path .isdir (config_dir ):
91+ os .mkdir (config_dir , 0700 )
10092
10193 @property
10294 def app (self ):
@@ -152,17 +144,14 @@ def _get_name_from_git_remote(self, git_root):
152144
153145 def request (self , * args , ** kwargs ):
154146 """
155- Issue an HTTP request with proper cookie handling
147+ Issue an HTTP request
156148 """
157149 url = args [1 ]
158150 if 'headers' in kwargs :
159151 kwargs ['headers' ]['Referer' ] = url
160152 else :
161153 kwargs ['headers' ] = {'Referer' : url }
162154 response = super (Session , self ).request (* args , ** kwargs )
163- self .cookies .save ()
164- # set ~/.deis/cookies.txt readable only by its owner
165- os .chmod (self .cookies .filename , 0600 )
166155 return response
167156
168157
@@ -388,16 +377,18 @@ def _dispatch(self, method, path, body=None, **kwargs):
388377 """
389378 Dispatch an API request to the active Deis controller
390379 """
391- headers = {
392- 'content-type' : 'application/json' ,
393- 'X-Deis-Version' : __version__ .rsplit ('.' , 1 )[0 ],
394- }
395380 func = getattr (self ._session , method .lower ())
396381 controller = self ._settings .get ('controller' )
397- if not controller :
382+ token = self ._settings .get ('token' )
383+ if not token :
398384 raise EnvironmentError (
399- 'No active controller . Use `deis login` or `deis register` to get started.' )
385+ 'Could not find token . Use `deis login` or `deis register` to get started.' )
400386 url = urlparse .urljoin (controller , path , ** kwargs )
387+ headers = {
388+ 'content-type' : 'application/json' ,
389+ 'X-Deis-Version' : __version__ .rsplit ('.' , 1 )[0 ],
390+ 'Authorization' : 'token {}' .format (token )
391+ }
401392 response = func (url , data = body , headers = headers )
402393 return response
403394
@@ -711,9 +702,6 @@ def auth_register(self, args):
711702 email = raw_input ('email: ' )
712703 url = urlparse .urljoin (controller , '/api/auth/register' )
713704 payload = {'username' : username , 'password' : password , 'email' : email }
714- # Clear any existing cookies
715- self ._session .cookies .clear ()
716- self ._session .cookies .save ()
717705 response = self ._session .post (url , data = payload , allow_redirects = False )
718706 if response .status_code == requests .codes .created : # @UndefinedVariable
719707 self ._settings ['controller' ] = controller
@@ -744,9 +732,8 @@ def auth_cancel(self, args):
744732 confirm = raw_input ("Cancel account \" {}\" at {}? (y/n) " .format (username , controller ))
745733 if confirm == 'y' :
746734 self ._dispatch ('delete' , '/api/auth/cancel' )
747- self ._session .cookies .clear ()
748- self ._session .cookies .save ()
749735 self ._settings ['controller' ] = None
736+ self ._settings ['token' ] = None
750737 self ._settings .save ()
751738 self ._logger .info ('Account cancelled' )
752739 else :
@@ -780,16 +767,13 @@ def auth_login(self, args):
780767 password = getpass ('password: ' )
781768 url = urlparse .urljoin (controller , '/api/auth/login/' )
782769 payload = {'username' : username , 'password' : password }
783- # clear any existing cookies
784- self ._session .cookies .clear ()
785- self ._session .cookies .save ()
786- # prime cookies for login
787- self ._session .get (url , headers = headers )
788770 # post credentials to the login URL
789771 response = self ._session .post (url , data = payload , allow_redirects = False )
790- if response .status_code == requests .codes .found : # @UndefinedVariable
772+ if response .status_code == requests .codes .ok : # @UndefinedVariable
773+ # retrieve and save the API token for future requests
791774 self ._settings ['controller' ] = controller
792775 self ._settings ['username' ] = username
776+ self ._settings ['token' ] = response .json ()['token' ]
793777 self ._settings .save ()
794778 self ._logger .info ("Logged in as {}" .format (username ))
795779 return username
@@ -802,16 +786,9 @@ def auth_logout(self, args):
802786
803787 Usage: deis auth:logout
804788 """
805- controller = self ._settings .get ('controller' )
806- if controller :
807- try :
808- self ._dispatch ('get' , '/api/auth/logout/' )
809- except requests .exceptions .ConnectionError :
810- pass
811- self ._session .cookies .clear ()
812- self ._session .cookies .save ()
813789 self ._settings ['controller' ] = None
814790 self ._settings ['username' ] = None
791+ self ._settings ['token' ] = None
815792 self ._settings .save ()
816793 self ._logger .info ('Logged out' )
817794
0 commit comments