5
5
from saml2 .sigver import security_context
6
6
7
7
from ..metadata_creation .saml_metadata import create_entity_descriptors
8
+ from ..metadata_creation .saml_metadata import create_entity_descriptor_metadata
8
9
from ..metadata_creation .saml_metadata import create_signed_entity_descriptor
9
10
from ..satosa_config import SATOSAConfig
10
11
@@ -16,44 +17,58 @@ def _get_security_context(key, cert):
16
17
return security_context (conf )
17
18
18
19
19
- def _create_split_entity_descriptors (entities , secc , valid ):
20
+ def _create_split_entity_descriptors (entities , secc , valid , sign = True ):
20
21
output = []
21
22
for module_name , eds in entities .items ():
22
23
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 )))
24
30
25
31
return output
26
32
27
33
28
- def _create_merged_entities_descriptors (entities , secc , valid , name ):
34
+ def _create_merged_entities_descriptors (entities , secc , valid , name , sign = True ):
29
35
output = []
30
36
frontend_entity_descriptors = [e for sublist in entities .values () for e in sublist ]
31
37
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 ))
33
44
34
45
return output
35
46
36
47
37
48
def 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 ):
39
50
"""
40
51
Generates SAML metadata for the given PROXY_CONF, signed with the given KEY and associated CERT.
41
52
"""
42
53
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
+
44
59
frontend_entities , backend_entities = create_entity_descriptors (satosa_config )
45
60
46
61
output = []
47
62
if frontend_entities :
48
63
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 ))
50
65
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 ))
52
67
if backend_entities :
53
68
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 ))
55
70
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 ))
57
72
58
73
for metadata , filename in output :
59
74
path = os .path .join (dir , filename )
@@ -64,8 +79,8 @@ def create_and_write_saml_metadata(proxy_conf, key, cert, dir, valid, split_fron
64
79
65
80
@click .command ()
66
81
@click .argument ("proxy_conf" )
67
- @click .argument ("key" )
68
- @click .argument ("cert" )
82
+ @click .argument ("key" , required = False )
83
+ @click .argument ("cert" , required = False )
69
84
@click .option ("--dir" ,
70
85
type = click .Path (exists = True , file_okay = False , dir_okay = True , writable = True , readable = False ,
71
86
resolve_path = False ),
@@ -75,5 +90,7 @@ def create_and_write_saml_metadata(proxy_conf, key, cert, dir, valid, split_fron
75
90
help = "Create one entity descriptor per file for the frontend metadata" )
76
91
@click .option ("--split-backend" , is_flag = True , type = click .BOOL , default = False ,
77
92
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