Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_get_metadata_desc_with_logo_without_lang(self, sp_conf, idp_conf):
# add logo without 'lang'
idp_conf["service"]["idp"]["ui_info"]["logo"] = [{"text": "https://idp.example.com/static/logo.png",
"width": "120", "height": "60"}]
sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)]
# instantiate new backend, with a single backing IdP
samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend")
entity_descriptions = samlbackend.get_metadata_desc()
assert len(entity_descriptions) == 1
idp_desc = entity_descriptions[0].to_dict()
assert idp_desc["entityid"] == urlsafe_b64encode(idp_conf["entityid"].encode("utf-8")).decode("utf-8")
assert idp_desc["contact_person"] == idp_conf["contact_person"]
assert idp_desc["organization"]["name"][0] == tuple(idp_conf["organization"]["name"][0])
assert idp_desc["organization"]["display_name"][0] == tuple(idp_conf["organization"]["display_name"][0])
assert idp_desc["organization"]["url"][0] == tuple(idp_conf["organization"]["url"][0])
expected_ui_info = idp_conf["service"]["idp"]["ui_info"]
ui_info = idp_desc["service"]["idp"]["ui_info"]
assert ui_info["display_name"] == expected_ui_info["display_name"]
def test_always_redirect_to_discovery_service_if_using_mdq(self, context, sp_conf, idp_conf):
# one IdP in the metadata, but MDQ also configured so should always redirect to the discovery service
sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)]
sp_conf["metadata"]["mdq"] = ["https://mdq.example.com"]
samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf, "disco_srv": DISCOSRV_URL,},
"base_url", "saml_backend")
resp = samlbackend.start_auth(context, InternalData())
self.assert_redirect_to_discovery_server(resp, sp_conf)
def test_redirect_to_idp_if_only_one_idp_in_metadata(self, context, sp_conf, idp_conf):
sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)]
# instantiate new backend, without any discovery service configured
samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend")
resp = samlbackend.start_auth(context, InternalData())
self.assert_redirect_to_idp(resp, idp_conf)
def test_backend_reads_encryption_key_from_key_file(self, sp_conf):
sp_conf["key_file"] = os.path.join(TEST_RESOURCE_BASE_PATH, "encryption_key.pem")
samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf,
"disco_srv": DISCOSRV_URL},
"base_url", "samlbackend")
assert samlbackend.encryption_keys
def test_get_metadata_desc(self, sp_conf, idp_conf):
sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)]
# instantiate new backend, with a single backing IdP
samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend")
entity_descriptions = samlbackend.get_metadata_desc()
assert len(entity_descriptions) == 1
idp_desc = entity_descriptions[0].to_dict()
assert idp_desc["entityid"] == urlsafe_b64encode(idp_conf["entityid"].encode("utf-8")).decode("utf-8")
assert idp_desc["contact_person"] == idp_conf["contact_person"]
assert idp_desc["organization"]["name"][0] == tuple(idp_conf["organization"]["name"][0])
assert idp_desc["organization"]["display_name"][0] == tuple(idp_conf["organization"]["display_name"][0])
assert idp_desc["organization"]["url"][0] == tuple(idp_conf["organization"]["url"][0])
expected_ui_info = idp_conf["service"]["idp"]["ui_info"]
ui_info = idp_desc["service"]["idp"]["ui_info"]
assert ui_info["display_name"] == expected_ui_info["display_name"]
def test_backend_reads_encryption_key_from_encryption_keypair(self, sp_conf):
del sp_conf["key_file"]
sp_conf["encryption_keypairs"] = [{"key_file": os.path.join(TEST_RESOURCE_BASE_PATH, "encryption_key.pem")}]
samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf,
"disco_srv": DISCOSRV_URL},
"base_url", "samlbackend")
assert samlbackend.encryption_keys
def create_backend(self, sp_conf, idp_conf):
self.setup_test_config(sp_conf, idp_conf)
self.samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf,
"disco_srv": DISCOSRV_URL},
"base_url",
"samlbackend")
def test_authn_response_with_encrypted_assertion(self, sp_conf, context):
with open(os.path.join(TEST_RESOURCE_BASE_PATH,
"idp_metadata_for_encrypted_signed_auth_response.xml")) as idp_metadata_file:
sp_conf["metadata"]["inline"] = [idp_metadata_file.read()]
samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf,
"disco_srv": DISCOSRV_URL},
"base_url", "samlbackend")
response_binding = BINDING_HTTP_REDIRECT
relay_state = "test relay state"
with open(os.path.join(TEST_RESOURCE_BASE_PATH,
"auth_response_with_encrypted_signed_assertion.xml")) as auth_response_file:
auth_response = auth_response_file.read()
context.request = {"SAMLResponse": deflate_and_base64_encode(auth_response), "RelayState": relay_state}
context.state[self.samlbackend.name] = {"relay_state": relay_state}
with open(os.path.join(TEST_RESOURCE_BASE_PATH, "encryption_key.pem")) as encryption_key_file:
samlbackend.encryption_keys = [encryption_key_file.read()]
assertion_issued_at = 1479315212
with patch('saml2.validate.time_util.shift_time') as mock_shift_time, \
:param option: The creation settings
"""
conf_mod = SATOSAConfig(option.config_file)
frontend_modules = load_frontends(conf_mod, None, conf_mod.INTERNAL_ATTRIBUTES).values()
backend_modules = load_backends(conf_mod, None, conf_mod.INTERNAL_ATTRIBUTES).values()
frontend_names = [p.name for p in frontend_modules]
backend_names = [p.name for p in backend_modules]
logger.info("Loaded frontend plugins: {}".format(frontend_names))
logger.info("Loaded backend plugins: {}".format(backend_names))
backend_metadata = {}
if option.generate_backend:
for plugin_module in backend_modules:
if isinstance(plugin_module, SAMLBackend):
logger.info("Generating saml backend '%s' metadata..." % plugin_module.name)
backend_metadata[plugin_module.name] = _make_metadata(plugin_module.config["config"], option)
frontend_metadata = {}
if option.generate_frontend:
for frontend in frontend_modules:
if isinstance(frontend, SAMLMirrorFrontend):
frontend_metadata[frontend.name] = []
for plugin_module in backend_modules:
provider = plugin_module.name
logger.info(
"Creating metadata for frontend '{}' and backend '{}'".format(frontend.name,
provider))
meta_desc = backend_modules[provider].get_metadata_desc()
for desc in meta_desc: