|
13 | 13 |
|
14 | 14 | from base64 import b64encode |
15 | 15 | from urllib import quote_plus |
| 16 | +from lxml import etree |
16 | 17 |
|
17 | 18 | from onelogin.saml2.settings import OneLogin_Saml2_Settings |
18 | 19 | from onelogin.saml2.response import OneLogin_Saml2_Response |
@@ -57,6 +58,8 @@ def __init__(self, request_data, old_settings=None, custom_base_path=None): |
57 | 58 | self.__errors = [] |
58 | 59 | self.__error_reason = None |
59 | 60 | self.__last_request_id = None |
| 61 | + self.__last_request_xml = None |
| 62 | + self.__last_response_xml = None |
60 | 63 |
|
61 | 64 | def get_settings(self): |
62 | 65 | """ |
@@ -90,7 +93,7 @@ def process_response(self, request_id=None): |
90 | 93 | if 'post_data' in self.__request_data and 'SAMLResponse' in self.__request_data['post_data']: |
91 | 94 | # AuthnResponse -- HTTP_POST Binding |
92 | 95 | response = OneLogin_Saml2_Response(self.__settings, self.__request_data['post_data']['SAMLResponse']) |
93 | | - |
| 96 | + self.__last_response_xml = response.get_xml_document() |
94 | 97 | if response.is_valid(self.__request_data, request_id): |
95 | 98 | self.__attributes = response.get_attributes() |
96 | 99 | self.__nameid = response.get_nameid() |
@@ -290,7 +293,7 @@ def login(self, return_to=None, force_authn=False, is_passive=False, set_nameid_ |
290 | 293 |
|
291 | 294 | saml_request = authn_request.get_request() |
292 | 295 | parameters = {'SAMLRequest': saml_request} |
293 | | - |
| 296 | + self.__last_request_xml = authn_request.get_request_as_xml() |
294 | 297 | if return_to is not None: |
295 | 298 | parameters['RelayState'] = return_to |
296 | 299 | else: |
@@ -451,3 +454,23 @@ def __build_signature(self, saml_data, relay_state, saml_type, sign_algorithm=On |
451 | 454 |
|
452 | 455 | signature = dsig_ctx.signBinary(str(msg), sign_algorithm_transform) |
453 | 456 | return b64encode(signature) |
| 457 | + |
| 458 | + def get_last_response_xml(self): |
| 459 | + """ |
| 460 | + Retrieves the decrypted XML of the last SAML response |
| 461 | +
|
| 462 | + :returns: SAML response XML |
| 463 | + :rtype: string|None |
| 464 | + """ |
| 465 | + if self.__last_response_xml: |
| 466 | + return etree.tostring(self.__last_response_xml, pretty_print=True) |
| 467 | + |
| 468 | + def get_last_request_xml(self): |
| 469 | + """ |
| 470 | + Retrieves the raw XML sent in the last SAML request |
| 471 | +
|
| 472 | + :returns: SAML request XML |
| 473 | + :rtype: string|None |
| 474 | + """ |
| 475 | + if self.__last_request_xml: |
| 476 | + return self.__last_request_xml |
0 commit comments