@@ -557,9 +557,21 @@ def get_sp_metadata(self):
557557 # Sign metadata
558558 if 'signMetadata' in self .__security and self .__security ['signMetadata' ] is not False :
559559 if self .__security ['signMetadata' ] is True :
560- key_file_name = 'sp.key'
561- cert_file_name = 'sp.crt'
560+ # Use the SP's normal key to sign the metadata:
561+ if not cert :
562+ raise OneLogin_Saml2_Error (
563+ 'Cannot sign metadata: missing SP public key certificate.' ,
564+ OneLogin_Saml2_Error .PUBLIC_CERT_FILE_NOT_FOUND
565+ )
566+ cert_metadata = cert
567+ key_metadata = self .get_sp_key ()
568+ if not key_metadata :
569+ raise OneLogin_Saml2_Error (
570+ 'Cannot sign metadata: missing SP private key.' ,
571+ OneLogin_Saml2_Error .PRIVATE_KEY_FILE_NOT_FOUND
572+ )
562573 else :
574+ # Use a custom key to sign the metadata:
563575 if ('keyFileName' not in self .__security ['signMetadata' ] or
564576 'certFileName' not in self .__security ['signMetadata' ]):
565577 raise OneLogin_Saml2_Error (
@@ -568,30 +580,28 @@ def get_sp_metadata(self):
568580 )
569581 key_file_name = self .__security ['signMetadata' ]['keyFileName' ]
570582 cert_file_name = self .__security ['signMetadata' ]['certFileName' ]
571- key_metadata_file = self .__paths ['cert' ] + key_file_name
572- cert_metadata_file = self .__paths ['cert' ] + cert_file_name
573-
574- if not exists (key_metadata_file ):
575- raise OneLogin_Saml2_Error (
576- 'Private key file not found: %s' ,
577- OneLogin_Saml2_Error .PRIVATE_KEY_FILE_NOT_FOUND ,
578- key_metadata_file
579- )
583+ key_metadata_file = self .__paths ['cert' ] + key_file_name
584+ cert_metadata_file = self .__paths ['cert' ] + cert_file_name
580585
581- if not exists (cert_metadata_file ):
582- raise OneLogin_Saml2_Error (
583- 'Public cert file not found: %s' ,
584- OneLogin_Saml2_Error .PUBLIC_CERT_FILE_NOT_FOUND ,
585- cert_metadata_file
586- )
587-
588- f_metadata_key = open (key_metadata_file , 'r' )
589- key_metadata = f_metadata_key .read ()
590- f_metadata_key .close ()
586+ try :
587+ with open (key_metadata_file , 'r' ) as f_metadata_key :
588+ key_metadata = f_metadata_key .read ()
589+ except IOError :
590+ raise OneLogin_Saml2_Error (
591+ 'Private key file not readable: %s' ,
592+ OneLogin_Saml2_Error .PRIVATE_KEY_FILE_NOT_FOUND ,
593+ key_metadata_file
594+ )
591595
592- f_metadata_cert = open (cert_metadata_file , 'r' )
593- cert_metadata = f_metadata_cert .read ()
594- f_metadata_cert .close ()
596+ try :
597+ with open (cert_metadata_file , 'r' ) as f_metadata_cert :
598+ cert_metadata = f_metadata_cert .read ()
599+ except IOError :
600+ raise OneLogin_Saml2_Error (
601+ 'Public cert file not readable: %s' ,
602+ OneLogin_Saml2_Error .PUBLIC_CERT_FILE_NOT_FOUND ,
603+ cert_metadata_file
604+ )
595605
596606 metadata = OneLogin_Saml2_Metadata .sign_metadata (metadata , key_metadata , cert_metadata )
597607
0 commit comments