@@ -737,38 +737,44 @@ def __query_assertion(self, xpath_expr):
737737 signature_expr = '/ds:Signature/ds:SignedInfo/ds:Reference'
738738 signed_assertion_query = '/samlp:Response' + assertion_expr + signature_expr
739739 assertion_reference_nodes = self .__query (signed_assertion_query )
740+ tagid = None
740741
741742 if not assertion_reference_nodes :
742743 # Check if the message is signed
743744 signed_message_query = '/samlp:Response' + signature_expr
744745 message_reference_nodes = self .__query (signed_message_query )
745746 if message_reference_nodes :
746747 message_id = message_reference_nodes [0 ].get ('URI' )
747- final_query = "/samlp:Response[@ID='%s']/" % message_id [1 :]
748+ final_query = "/samlp:Response[@ID=$tagid]/"
749+ tagid = message_id [1 :]
748750 else :
749751 final_query = "/samlp:Response"
750752 final_query += assertion_expr
751753 else :
752754 assertion_id = assertion_reference_nodes [0 ].get ('URI' )
753- final_query = '/samlp:Response' + assertion_expr + "[@ID='%s']" % assertion_id [1 :]
755+ final_query = '/samlp:Response' + assertion_expr + "[@ID=$tagid]"
756+ tagid = assertion_id [1 :]
754757 final_query += xpath_expr
755- return self .__query (final_query )
758+ return self .__query (final_query , tagid )
756759
757- def __query (self , query ):
760+ def __query (self , query , tagid = None ):
758761 """
759762 Extracts nodes that match the query from the Response
760763
761764 :param query: Xpath Expresion
762765 :type query: String
763766
767+ :param tagid: Tag ID
768+ :type query: String
769+
764770 :returns: The queried nodes
765771 :rtype: list
766772 """
767773 if self .encrypted :
768774 document = self .decrypted_document
769775 else :
770776 document = self .document
771- return OneLogin_Saml2_XML .query (document , query )
777+ return OneLogin_Saml2_XML .query (document , query , None , tagid )
772778
773779 def __decrypt_assertion (self , xml ):
774780 """
@@ -817,7 +823,7 @@ def __decrypt_assertion(self, xml):
817823 if not uri .startswith ('#' ):
818824 break
819825 uri = uri .split ('#' )[1 ]
820- encrypted_key = OneLogin_Saml2_XML .query (encrypted_assertion_nodes [0 ], './xenc:EncryptedKey[@Id="' + uri + '"]' )
826+ encrypted_key = OneLogin_Saml2_XML .query (encrypted_assertion_nodes [0 ], './xenc:EncryptedKey[@Id=$tagid]' , None , uri )
821827 if encrypted_key :
822828 keyinfo .append (encrypted_key [0 ])
823829
0 commit comments