@@ -13,12 +13,6 @@ from os import chmod, chown, getenv
1313from os .path import isfile
1414from shutil import copyfile
1515import sys
16- try :
17- # Python 3
18- from urllib .parse import urlencode
19- except ImportError :
20- # Python 2
21- from urllib import urlencode
2216
2317# Third party library imports
2418from configparser import ConfigParser , NoOptionError , NoSectionError
@@ -37,7 +31,7 @@ if sys.version_info < (3, 0):
3731# Debug
3832# from pdb import set_trace as st
3933
40- VERSION = '%(prog)s 1.4.5 '
34+ VERSION = '%(prog)s 1.5.0 '
4135
4236def read_conf (conf_path ):
4337 """
@@ -79,7 +73,6 @@ def read_conf(conf_path):
7973
8074 return user_metadata
8175
82-
8376def print_result (result ):
8477 """ Display result """
8578 date_formatted = datetime .strptime (result ['expiration' ], '%Y-%m-%d %H:%M:%S' )
@@ -110,44 +103,49 @@ class CASSH(object):
110103 self .auth = user_metadata ['auth' ]
111104 self .realname = user_metadata ['realname' ]
112105
113-
114- def auth_url (self , prefix = None ):
106+ def get_data (self , prefix = None ):
115107 """
116- Return a xxx=xxx to put at the end of a GET request.
108+ Return data for a POST request.
117109 """
110+ data = {}
118111 passwd_message = 'Please type your LDAP password (user=%s): ' % self .realname
119112 if self .auth == 'ldap' :
120- auth = {'realname' : self .realname , 'password' : getpass (passwd_message )}
121- if prefix is not None :
122- auth .update (prefix )
123- return '?%s' % urlencode (auth )
124- else :
125- if prefix is None :
126- return ''
127- return '?%s' % urlencode (prefix )
113+ data .update ({'realname' : self .realname , 'password' : getpass (passwd_message )})
114+ if prefix is not None :
115+ data .update (prefix )
116+ return data
128117
129118 def admin (self , username , action , set_value = None ):
130119 """
131120 Admin CLI
132121 """
122+ payload = self .get_data ()
133123 try :
134124 if action == 'revoke' :
135- req = self .session .get (self .url + '/admin/' + username + \
136- self .auth_url (prefix = {'revoke' : True }), verify = False )
125+ payload .update ({'revoke' : True })
126+ req = self .session .post (self .url + '/admin/' + username , \
127+ data = payload , \
128+ verify = False )
137129 elif action == 'active' :
138- req = self .session .get (self .url + '/admin/' + username + \
139- self .auth_url (), verify = False )
130+ req = self .session .post (self .url + '/admin/' + username , \
131+ data = payload , \
132+ verify = False )
140133 elif action == 'delete' :
141- req = self .session .delete (self .url + '/admin/' + username + \
142- self .auth_url (), verify = False )
134+ req = self .session .delete (self .url + '/admin/' + username , \
135+ data = payload , \
136+ verify = False )
143137 elif action == 'set' :
144138 set_value_dict = {}
145139 set_value_dict [set_value .split ('=' )[0 ]] = set_value .split ('=' )[1 ]
146- req = self .session .post (self .url + '/admin/' + username + \
147- self .auth_url (prefix = set_value_dict ), verify = False )
140+ payload .update (set_value_dict )
141+ req = self .session .patch (self .url + '/admin/' + username , \
142+ data = payload , \
143+ verify = False )
148144 elif action == 'status' :
149- req = self .session .get (self .url + '/admin/' + username + \
150- self .auth_url (prefix = {'status' : True }), verify = False )
145+ payload .update ({'status' : True })
146+ req = self .session .post (self .url + '/admin/' + username , \
147+ data = payload , \
148+ verify = False )
151149 try :
152150 result = loads (req .text )
153151 except ValueError :
@@ -174,10 +172,15 @@ class CASSH(object):
174172 """
175173 Add a public key.
176174 """
175+ payload = self .get_data ()
177176 pubkey = open ('%s.pub' % self .key_path , 'rb' )
177+ payload .update ({'pubkey' : pubkey .read ().replace (' ' , '%20' )})
178+ pubkey .close ()
178179 try :
179- req = self .session .put (self .url + '/client' + \
180- self .auth_url (prefix = {'username' : self .name }), data = pubkey , verify = False )
180+ payload .update ({'username' : self .name })
181+ req = self .session .put (self .url + '/client' , \
182+ data = payload , \
183+ verify = False )
181184 except ConnectionError :
182185 print ('Connection error : %s' % self .url )
183186 exit (1 )
@@ -187,15 +190,17 @@ class CASSH(object):
187190 """
188191 Sign a public key.
189192 """
193+ payload = self .get_data ()
190194 pubkey = open ('%s.pub' % self .key_path , 'rb' )
195+ payload .update ({'pubkey' : pubkey .read ().replace (' ' , '%20' )})
196+ pubkey .close ()
197+ payload .update ({'username' : self .name })
191198 try :
192199 if force :
193- req = self .session .post (self .url + '/client' + \
194- self .auth_url (prefix = {'username' : self .name , 'admin_force' : True }), \
195- data = pubkey , verify = False )
196- else :
197- req = self .session .post (self .url + '/client' + \
198- self .auth_url (prefix = {'username' : self .name }), data = pubkey , verify = False )
200+ payload .update ({'admin_force' : True })
201+ req = self .session .post (self .url + '/client' , \
202+ data = payload , \
203+ verify = False )
199204 except ConnectionError :
200205 print ('Connection error : %s' % self .url )
201206 exit (1 )
@@ -222,8 +227,10 @@ class CASSH(object):
222227 """
223228 Get status of public key.
224229 """
230+ payload = self .get_data ()
225231 try :
226- req = self .session .get (self .url + '/client' + self .auth_url (),\
232+ req = self .session .post (self .url + '/client/status' , \
233+ data = payload , \
227234 verify = False )
228235 except ConnectionError :
229236 print ('Connection error : %s' % self .url )
@@ -243,7 +250,8 @@ class CASSH(object):
243250 Get CA public key.
244251 """
245252 try :
246- req = self .session .get (self .url + '/ca' , verify = False )
253+ req = self .session .get (self .url + '/ca' , \
254+ verify = False )
247255 except ConnectionError :
248256 print ('Connection error : %s' % self .url )
249257 exit (1 )
@@ -254,7 +262,8 @@ class CASSH(object):
254262 Get CA KRL.
255263 """
256264 try :
257- req = self .session .get (self .url + '/krl' , verify = False )
265+ req = self .session .get (self .url + '/krl' , \
266+ verify = False )
258267 except ConnectionError :
259268 print ('Connection error : %s' % self .url )
260269 exit (1 )
0 commit comments