@@ -54,8 +54,10 @@ def acquire_token(self):
5454 'endpoint' : url .scheme + '://' + url .hostname + self .login
5555 }
5656
57- self .acquire_service_token (options )
58- self .acquire_authentication_cookie (options )
57+ if not self .acquire_service_token (options ):
58+ return False
59+ if not self .acquire_authentication_cookie (options ):
60+ return False
5961 return True
6062 except requests .exceptions .RequestException as e :
6163 self .error = "Error: {}" .format (e )
@@ -96,7 +98,13 @@ def process_service_token_response(self, response):
9698 logger = self .logger (self .process_service_token_response .__name__ )
9799 logger .debug_secrets ('response: %s\n response.content: %s' , response , response .content )
98100
99- xml = ElementTree .fromstring (response .content )
101+ try :
102+ xml = ElementTree .fromstring (response .content )
103+ except ElementTree .ParseError as e :
104+ self .error = 'An error occurred while parsing the server response: {}' .format (e )
105+ logger .error (self .error )
106+ return None
107+
100108 ns_prefixes = {'S' : '{http://www.w3.org/2003/05/soap-envelope}' ,
101109 'psf' : '{http://schemas.microsoft.com/Passport/SoapServices/SOAPFault}' ,
102110 'wst' : '{http://schemas.xmlsoap.org/ws/2005/02/trust}' ,
@@ -107,14 +115,21 @@ def process_service_token_response(self, response):
107115 if xml .find ('{0}Body/{0}Fault' .format (ns_prefixes ['S' ])) is not None :
108116 error = xml .find ('{0}Body/{0}Fault/{0}Detail/{1}error/{1}internalerror/{1}text' .format (ns_prefixes ['S' ],
109117 ns_prefixes ['psf' ]))
110- self .error = 'An error occurred while retrieving token: {0}' .format (error .text )
118+ if error is None :
119+ self .error = 'An error occurred while retrieving token from XML response.'
120+ else :
121+ self .error = 'An error occurred while retrieving token from XML response: {0}' .format (error .text )
111122 logger .error (self .error )
112123 return None
113124
114125 # extract token
115126 token = xml .find (
116127 '{0}Body/{1}RequestSecurityTokenResponse/{1}RequestedSecurityToken/{2}BinarySecurityToken' .format (
117128 ns_prefixes ['S' ], ns_prefixes ['wst' ], ns_prefixes ['wsse' ]))
129+ if token is None :
130+ self .error = 'The service token could not be extracted from the XML response.'
131+ logger .error (self .error )
132+ return None
118133 logger .debug_secrets ("token: %s" , token )
119134 return token .text
120135
0 commit comments