@@ -565,9 +565,21 @@ def get_sp_metadata(self):
565565 # Sign metadata
566566 if 'signMetadata' in self .__security and self .__security ['signMetadata' ] is not False :
567567 if self .__security ['signMetadata' ] is True :
568- key_file_name = 'sp.key'
569- cert_file_name = 'sp.crt'
568+ # Use the SP's normal key to sign the metadata:
569+ if not cert :
570+ raise OneLogin_Saml2_Error (
571+ 'Cannot sign metadata: missing SP public key certificate.' ,
572+ OneLogin_Saml2_Error .PUBLIC_CERT_FILE_NOT_FOUND
573+ )
574+ cert_metadata = cert
575+ key_metadata = self .get_sp_key ()
576+ if not key_metadata :
577+ raise OneLogin_Saml2_Error (
578+ 'Cannot sign metadata: missing SP private key.' ,
579+ OneLogin_Saml2_Error .PRIVATE_KEY_FILE_NOT_FOUND
580+ )
570581 else :
582+ # Use a custom key to sign the metadata:
571583 if ('keyFileName' not in self .__security ['signMetadata' ] or
572584 'certFileName' not in self .__security ['signMetadata' ]):
573585 raise OneLogin_Saml2_Error (
@@ -576,30 +588,28 @@ def get_sp_metadata(self):
576588 )
577589 key_file_name = self .__security ['signMetadata' ]['keyFileName' ]
578590 cert_file_name = self .__security ['signMetadata' ]['certFileName' ]
579- key_metadata_file = self .__paths ['cert' ] + key_file_name
580- cert_metadata_file = self .__paths ['cert' ] + cert_file_name
581-
582- if not exists (key_metadata_file ):
583- raise OneLogin_Saml2_Error (
584- 'Private key file not found: %s' ,
585- OneLogin_Saml2_Error .PRIVATE_KEY_FILE_NOT_FOUND ,
586- key_metadata_file
587- )
591+ key_metadata_file = self .__paths ['cert' ] + key_file_name
592+ cert_metadata_file = self .__paths ['cert' ] + cert_file_name
588593
589- if not exists (cert_metadata_file ):
590- raise OneLogin_Saml2_Error (
591- 'Public cert file not found: %s' ,
592- OneLogin_Saml2_Error .PUBLIC_CERT_FILE_NOT_FOUND ,
593- cert_metadata_file
594- )
595-
596- f_metadata_key = open (key_metadata_file , 'r' )
597- key_metadata = f_metadata_key .read ()
598- f_metadata_key .close ()
594+ try :
595+ with open (key_metadata_file , 'r' ) as f_metadata_key :
596+ key_metadata = f_metadata_key .read ()
597+ except IOError :
598+ raise OneLogin_Saml2_Error (
599+ 'Private key file not readable: %s' ,
600+ OneLogin_Saml2_Error .PRIVATE_KEY_FILE_NOT_FOUND ,
601+ key_metadata_file
602+ )
599603
600- f_metadata_cert = open (cert_metadata_file , 'r' )
601- cert_metadata = f_metadata_cert .read ()
602- f_metadata_cert .close ()
604+ try :
605+ with open (cert_metadata_file , 'r' ) as f_metadata_cert :
606+ cert_metadata = f_metadata_cert .read ()
607+ except IOError :
608+ raise OneLogin_Saml2_Error (
609+ 'Public cert file not readable: %s' ,
610+ OneLogin_Saml2_Error .PUBLIC_CERT_FILE_NOT_FOUND ,
611+ cert_metadata_file
612+ )
603613
604614 metadata = OneLogin_Saml2_Metadata .sign_metadata (metadata , key_metadata , cert_metadata )
605615
0 commit comments