55from saml2 .sigver import security_context
66
77from ..metadata_creation .saml_metadata import create_entity_descriptors
8+ from ..metadata_creation .saml_metadata import create_entity_descriptor_metadata
89from ..metadata_creation .saml_metadata import create_signed_entity_descriptor
910from ..satosa_config import SATOSAConfig
1011
@@ -16,44 +17,58 @@ def _get_security_context(key, cert):
1617 return security_context (conf )
1718
1819
19- def _create_split_entity_descriptors (entities , secc , valid ):
20+ def _create_split_entity_descriptors (entities , secc , valid , sign = True ):
2021 output = []
2122 for module_name , eds in entities .items ():
2223 for i , ed in enumerate (eds ):
23- output .append ((create_signed_entity_descriptor (ed , secc , valid ), "{}_{}.xml" .format (module_name , i )))
24+ ed_str = (
25+ create_signed_entity_descriptor (ed , secc , valid )
26+ if sign
27+ else create_entity_descriptor_metadata (ed , valid )
28+ )
29+ output .append ((ed_str , "{}_{}.xml" .format (module_name , i )))
2430
2531 return output
2632
2733
28- def _create_merged_entities_descriptors (entities , secc , valid , name ):
34+ def _create_merged_entities_descriptors (entities , secc , valid , name , sign = True ):
2935 output = []
3036 frontend_entity_descriptors = [e for sublist in entities .values () for e in sublist ]
3137 for frontend in frontend_entity_descriptors :
32- output .append ((create_signed_entity_descriptor (frontend , secc , valid ), name ))
38+ ed_str = (
39+ create_signed_entity_descriptor (frontend , secc , valid )
40+ if sign
41+ else create_entity_descriptor_metadata (frontend , valid )
42+ )
43+ output .append ((ed_str , name ))
3344
3445 return output
3546
3647
3748def create_and_write_saml_metadata (proxy_conf , key , cert , dir , valid , split_frontend_metadata = False ,
38- split_backend_metadata = False ):
49+ split_backend_metadata = False , sign = True ):
3950 """
4051 Generates SAML metadata for the given PROXY_CONF, signed with the given KEY and associated CERT.
4152 """
4253 satosa_config = SATOSAConfig (proxy_conf )
43- secc = _get_security_context (key , cert )
54+
55+ if sign and (not key or not cert ):
56+ raise ValueError ("Key and cert are required when signing" )
57+ secc = _get_security_context (key , cert ) if sign else None
58+
4459 frontend_entities , backend_entities = create_entity_descriptors (satosa_config )
4560
4661 output = []
4762 if frontend_entities :
4863 if split_frontend_metadata :
49- output .extend (_create_split_entity_descriptors (frontend_entities , secc , valid ))
64+ output .extend (_create_split_entity_descriptors (frontend_entities , secc , valid , sign ))
5065 else :
51- output .extend (_create_merged_entities_descriptors (frontend_entities , secc , valid , "frontend.xml" ))
66+ output .extend (_create_merged_entities_descriptors (frontend_entities , secc , valid , "frontend.xml" , sign ))
5267 if backend_entities :
5368 if split_backend_metadata :
54- output .extend (_create_split_entity_descriptors (backend_entities , secc , valid ))
69+ output .extend (_create_split_entity_descriptors (backend_entities , secc , valid , sign ))
5570 else :
56- output .extend (_create_merged_entities_descriptors (backend_entities , secc , valid , "backend.xml" ))
71+ output .extend (_create_merged_entities_descriptors (backend_entities , secc , valid , "backend.xml" , sign ))
5772
5873 for metadata , filename in output :
5974 path = os .path .join (dir , filename )
@@ -64,8 +79,8 @@ def create_and_write_saml_metadata(proxy_conf, key, cert, dir, valid, split_fron
6479
6580@click .command ()
6681@click .argument ("proxy_conf" )
67- @click .argument ("key" )
68- @click .argument ("cert" )
82+ @click .argument ("key" , required = False )
83+ @click .argument ("cert" , required = False )
6984@click .option ("--dir" ,
7085 type = click .Path (exists = True , file_okay = False , dir_okay = True , writable = True , readable = False ,
7186 resolve_path = False ),
@@ -75,5 +90,7 @@ def create_and_write_saml_metadata(proxy_conf, key, cert, dir, valid, split_fron
7590 help = "Create one entity descriptor per file for the frontend metadata" )
7691@click .option ("--split-backend" , is_flag = True , type = click .BOOL , default = False ,
7792 help = "Create one entity descriptor per file for the backend metadata" )
78- def construct_saml_metadata (proxy_conf , key , cert , dir , valid , split_frontend , split_backend ):
79- create_and_write_saml_metadata (proxy_conf , key , cert , dir , valid , split_frontend , split_backend )
93+ @click .option ("--sign/--no-sign" , is_flag = True , type = click .BOOL , default = True ,
94+ help = "Sign the generated metadata" )
95+ def construct_saml_metadata (proxy_conf , key , cert , dir , valid , split_frontend , split_backend , sign ):
96+ create_and_write_saml_metadata (proxy_conf , key , cert , dir , valid , split_frontend , split_backend , sign )
0 commit comments