def test_to_dict(self): org_desc = OrganizationDesc() org_desc.add_display_name("Foo Testing", "en") org_desc.add_name("Testing Co.", "en") org_desc.add_url("https://test.example.com", "en") contact_desc = ContactPersonDesc() contact_desc.contact_type = "test" contact_desc.given_name = "First" contact_desc.sur_name = "Tester" contact_desc.add_email_address("*****@*****.**") ui_desc = UIInfoDesc() ui_desc.add_description("test", "en") ui_desc.add_display_name("my company", "en") ui_desc.add_logo("http://example.com/logo.jpg", 80, 80, "en") desc = MetadataDescription("my_entity") desc.organization = org_desc desc.add_contact_person(contact_desc) desc.ui_info = ui_desc serialized = desc.to_dict() assert serialized["entityid"] == "my_entity" assert serialized["organization"] assert serialized["contact_person"] assert serialized["service"]["idp"]["ui_info"]
def get_metadata_desc(self): """ See super class satosa.backends.backend_base.BackendModule#get_metadata_desc :rtype: satosa.metadata_creation.description.MetadataDescription """ entity_descriptions = [] idp_entities = self.sp.metadata.with_descriptor("idpsso") for entity_id, entity in idp_entities.items(): description = MetadataDescription(urlsafe_b64encode(entity_id.encode("utf-8")).decode("utf-8")) # Add organization info try: organization_info = entity["organization"] except KeyError: pass else: organization = OrganizationDesc() for name_info in organization_info.get("organization_name", []): organization.add_name(name_info["text"], name_info["lang"]) for display_name_info in organization_info.get("organization_display_name", []): organization.add_display_name(display_name_info["text"], display_name_info["lang"]) for url_info in organization_info.get("organization_url", []): organization.add_url(url_info["text"], url_info["lang"]) description.organization = organization # Add contact person info try: contact_persons = entity["contact_person"] except KeyError: pass else: for person in contact_persons: person_desc = ContactPersonDesc() person_desc.contact_type = person.get("contact_type") for address in person.get('email_address', []): person_desc.add_email_address(address["text"]) if "given_name" in person: person_desc.given_name = person["given_name"]["text"] if "sur_name" in person: person_desc.sur_name = person["sur_name"]["text"] description.add_contact_person(person_desc) # Add UI info ui_info = self.sp.metadata.extension(entity_id, "idpsso_descriptor", "{}&UIInfo".format(UI_NAMESPACE)) if ui_info: ui_info = ui_info[0] ui_info_desc = UIInfoDesc() for desc in ui_info.get("description", []): ui_info_desc.add_description(desc["text"], desc["lang"]) for name in ui_info.get("display_name", []): ui_info_desc.add_display_name(name["text"], name["lang"]) for logo in ui_info.get("logo", []): ui_info_desc.add_logo(logo["text"], logo["width"], logo["height"], logo.get("lang")) description.ui_info = ui_info_desc entity_descriptions.append(description) return entity_descriptions
def get_metadata_desc(self): """ See super class satosa.backends.backend_base.BackendModule#get_metadata_desc :rtype: satosa.metadata_creation.description.MetadataDescription """ entity_descriptions = [] idp_entities = self.sp.metadata.with_descriptor("idpsso") for entity_id, entity in idp_entities.items(): description = MetadataDescription(urlsafe_b64encode(entity_id.encode("utf-8")).decode("utf-8")) # Add organization info try: organization_info = entity["organization"] except KeyError: pass else: organization = OrganizationDesc() for name_info in organization_info.get("organization_name", []): organization.add_name(name_info["text"], name_info["lang"]) for display_name_info in organization_info.get("organization_display_name", []): organization.add_display_name(display_name_info["text"], display_name_info["lang"]) for url_info in organization_info.get("organization_url", []): organization.add_url(url_info["text"], url_info["lang"]) description.organization = organization # Add contact person info try: contact_persons = entity["contact_person"] except KeyError: pass else: for person in contact_persons: person_desc = ContactPersonDesc() person_desc.contact_type = person.get("contact_type") for address in person.get('email_address', []): person_desc.add_email_address(address["text"]) if "given_name" in person: person_desc.given_name = person["given_name"]["text"] if "sur_name" in person: person_desc.sur_name = person["sur_name"]["text"] description.add_contact_person(person_desc) # Add UI info ui_info = self.sp.metadata.extension(entity_id, "idpsso_descriptor", "{}&UIInfo".format(UI_NAMESPACE)) if ui_info: ui_info = ui_info[0] ui_info_desc = UIInfoDesc() for desc in ui_info.get("description", []): ui_info_desc.add_description(desc["text"], desc["lang"]) for name in ui_info.get("display_name", []): ui_info_desc.add_display_name(name["text"], name["lang"]) for logo in ui_info.get("logo", []): ui_info_desc.add_logo(logo["text"], logo["width"], logo["height"], logo.get("lang")) description.ui_info = ui_info_desc entity_descriptions.append(description) return entity_descriptions
def test_set_ui_info_rejects_bad_input(self): desc = MetadataDescription("my_entity") with pytest.raises(TypeError): desc.ui_info = "bad input"
def get_metadata_desc_for_oauth_backend(entity_id, config): """ Returns a SAML metadata entity (IdP) descriptor for a configured OAuth/OpenID Connect Backend. :param entity_id: If entity_id is None, the id will be retrieved from the config :type entity_id: str :param config: The backend module config :type config: dict[str, Any] :return: metadata description :rtype: satosa.metadata_creation.description.MetadataDescription """ metadata_description = [] entity_id = urlsafe_b64encode(entity_id.encode("utf-8")).decode("utf-8") description = MetadataDescription(entity_id) if "entity_info" in config: entity_info = config["entity_info"] # Add contact person information for contact_person in entity_info.get("contact_person", []): person = ContactPersonDesc() if "contact_type" in contact_person: person.contact_type = contact_person["contact_type"] for address in contact_person.get("email_address", []): person.add_email_address(address) if "given_name" in contact_person: person.given_name = contact_person["given_name"] if "sur_name" in contact_person: person.sur_name = contact_person["sur_name"] description.add_contact_person(person) # Add organization information if "organization" in entity_info: organization_info = entity_info["organization"] organization = OrganizationDesc() for name_info in organization_info.get("organization_name", []): organization.add_name(name_info[0], name_info[1]) for display_name_info in organization_info.get( "organization_display_name", []): organization.add_display_name(display_name_info[0], display_name_info[1]) for url_info in organization_info.get("organization_url", []): organization.add_url(url_info[0], url_info[1]) description.organization = organization # Add ui information if "ui_info" in entity_info: ui_info = entity_info["ui_info"] ui_description = UIInfoDesc() for desc in ui_info.get("description", []): ui_description.add_description(desc[0], desc[1]) for name in ui_info.get("display_name", []): ui_description.add_display_name(name[0], name[1]) for logo in ui_info.get("logo", []): ui_description.add_logo(logo["image"], logo["width"], logo["height"], logo["lang"]) description.ui_info = ui_description metadata_description.append(description) return metadata_description