
Retains python2.7 compatibility for all files. Fixes only syntax errors, tests still fail on python3 for various reasons.
85 lines
2.8 KiB
Python
Executable File
85 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import argparse
|
|
import os
|
|
import sys
|
|
from saml2.metadata import entity_descriptor, metadata_tostring_fix
|
|
from saml2.metadata import entities_descriptor
|
|
from saml2.metadata import sign_entity_descriptor
|
|
|
|
from saml2.sigver import security_context
|
|
from saml2.validate import valid_instance
|
|
from saml2.config import Config
|
|
|
|
# =============================================================================
|
|
# Script that creates a SAML2 metadata file from a pysaml2 entity configuration
|
|
# file
|
|
# =============================================================================
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-v', dest='valid',
|
|
help="How long, in days, the metadata is valid from the time of creation")
|
|
parser.add_argument('-c', dest='cert', help='certificate')
|
|
parser.add_argument('-e', dest='ed', action='store_true',
|
|
help="Wrap the whole thing in an EntitiesDescriptor")
|
|
parser.add_argument('-i', dest='id',
|
|
help="The ID of the entities descriptor")
|
|
parser.add_argument('-k', dest='keyfile',
|
|
help="A file with a key to sign the metadata with")
|
|
parser.add_argument('-n', dest='name', default="")
|
|
parser.add_argument('-p', dest='path',
|
|
help="path to the configuration file")
|
|
parser.add_argument('-s', dest='sign', action='store_true',
|
|
help="sign the metadata")
|
|
parser.add_argument('-x', dest='xmlsec',
|
|
help="xmlsec binaries to be used for the signing")
|
|
parser.add_argument('-w', dest='wellknown',
|
|
help="Use wellknown namespace prefixes")
|
|
parser.add_argument(dest="config", nargs="+")
|
|
args = parser.parse_args()
|
|
|
|
valid_for = 0
|
|
nspair = {"xs": "http://www.w3.org/2001/XMLSchema"}
|
|
paths = [".", "/opt/local/bin"]
|
|
|
|
if args.valid:
|
|
# translate into hours
|
|
valid_for = int(args.valid) * 24
|
|
|
|
|
|
eds = []
|
|
for filespec in args.config:
|
|
bas, fil = os.path.split(filespec)
|
|
if bas != "":
|
|
sys.path.insert(0, bas)
|
|
if fil.endswith(".py"):
|
|
fil = fil[:-3]
|
|
cnf = Config().load_file(fil, metadata_construction=True)
|
|
if valid_for:
|
|
cnf.valid_for = valid_for
|
|
eds.append(entity_descriptor(cnf))
|
|
|
|
conf = Config()
|
|
conf.key_file = args.keyfile
|
|
conf.cert_file = args.cert
|
|
conf.debug = 1
|
|
conf.xmlsec_binary = args.xmlsec
|
|
secc = security_context(conf)
|
|
|
|
if args.id:
|
|
desc, xmldoc = entities_descriptor(eds, valid_for, args.name, args.id,
|
|
args.sign, secc)
|
|
valid_instance(desc)
|
|
print(desc.to_string(nspair))
|
|
else:
|
|
for eid in eds:
|
|
if args.sign:
|
|
assert conf.key_file
|
|
assert conf.cert_file
|
|
eid, xmldoc = sign_entity_descriptor(eid, args.id, secc)
|
|
else:
|
|
xmldoc = None
|
|
|
|
valid_instance(eid)
|
|
xmldoc = metadata_tostring_fix(eid, nspair, xmldoc)
|
|
print(xmldoc)
|