Skip to content

Commit c0a7f22

Browse files
skanctc00kiemon5ter
authored andcommitted
Completes the support for the mdui:UIInfo element
Adds: - keywords - information_url - privacy_statement_url
1 parent 69b532a commit c0a7f22

File tree

4 files changed

+79
-2
lines changed

4 files changed

+79
-2
lines changed

src/satosa/backends/oauth.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,14 @@ def get_metadata_desc_for_oauth_backend(entity_id, config):
319319
ui_description.add_display_name(name[0], name[1])
320320
for logo in ui_info.get("logo", []):
321321
ui_description.add_logo(logo["image"], logo["width"], logo["height"], logo["lang"])
322+
for keywords in ui_info.get("keywords", []):
323+
ui_description.add_keywords(keywords.get("text", []), keywords.get("lang"))
324+
for information_url in ui_info.get("information_url", []):
325+
ui_description.add_information_url(information_url.get("text"), information_url.get("lang"))
326+
for privacy_statement_url in ui_info.get("privacy_statement_url", []):
327+
ui_description.add_information_url(
328+
privacy_statement_url.get("text"), privacy_statement_url.get("lang")
329+
)
322330

323331
description.ui_info = ui_description
324332

src/satosa/backends/saml2.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,14 @@ def get_metadata_desc(self):
623623
ui_info_desc.add_display_name(name["text"], name["lang"])
624624
for logo in ui_info.get("logo", []):
625625
ui_info_desc.add_logo(logo["text"], logo["width"], logo["height"], logo.get("lang"))
626+
for keywords in ui_info.get("keywords", []):
627+
ui_info_desc.add_keywords(keywords.get("text", []), keywords.get("lang"))
628+
for information_url in ui_info.get("information_url", []):
629+
ui_info_desc.add_information_url(information_url.get("text"), information_url.get("lang"))
630+
for privacy_statement_url in ui_info.get("privacy_statement_url", []):
631+
ui_info_desc.add_privacy_statement_url(
632+
privacy_statement_url.get("text"), privacy_statement_url.get("lang")
633+
)
626634
description.ui_info = ui_info_desc
627635

628636
entity_descriptions.append(description)

src/satosa/metadata_creation/description.py

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ def __init__(self):
5252
self._description = []
5353
self._display_name = []
5454
self._logos = []
55+
self._keywords = []
56+
self._information_url = []
57+
self._privacy_statement_url = []
5558

5659
def add_description(self, text, lang):
5760
"""
@@ -96,6 +99,52 @@ def add_logo(self, text, width, height, lang=None):
9699
logo_entry["lang"] = lang
97100
self._logos.append(logo_entry)
98101

102+
def add_keywords(self, text, lang):
103+
"""
104+
Binds keywords to the given language
105+
:type text: List
106+
:type lang: str
107+
108+
:param text: List of keywords
109+
:param lang: language
110+
"""
111+
112+
if text:
113+
self._keywords.append(
114+
{
115+
"text": [_keyword.replace(" ", "+") for _keyword in text],
116+
"lang": lang if lang else "en",
117+
}
118+
)
119+
120+
def add_information_url(self, text, lang):
121+
"""
122+
Binds information_url to the given language
123+
:type text: str
124+
:type lang: str
125+
126+
:param text: Information URL
127+
:param lang: language
128+
"""
129+
130+
if text:
131+
self._information_url.append({"text": text, "lang": lang if lang else "en"})
132+
133+
def add_privacy_statement_url(self, text, lang):
134+
"""
135+
Binds privacy_statement_url to the given language
136+
:type text: str
137+
:type lang: str
138+
139+
:param text: Privacy statement URL
140+
:param lang: language
141+
"""
142+
143+
if text:
144+
self._privacy_statement_url.append(
145+
{"text": text, "lang": lang if lang else "en"}
146+
)
147+
99148
def to_dict(self):
100149
"""
101150
Returns a dictionary representation of the UIInfoDesc object.
@@ -110,6 +159,12 @@ def to_dict(self):
110159
ui_info["display_name"] = self._display_name
111160
if self._logos:
112161
ui_info["logo"] = self._logos
162+
if self._keywords:
163+
ui_info["keywords"] = self._keywords
164+
if self._information_url:
165+
ui_info["information_url"] = self._information_url
166+
if self._privacy_statement_url:
167+
ui_info["privacy_statement_url"] = self._privacy_statement_url
113168
return {"service": {"idp": {"ui_info": ui_info}}} if ui_info else {}
114169

115170

@@ -227,9 +282,9 @@ def to_dict(self):
227282
if self._organization:
228283
description.update(self._organization.to_dict())
229284
if self._contact_person:
230-
description['contact_person'] = []
285+
description["contact_person"] = []
231286
for person in self._contact_person:
232-
description['contact_person'].append(person.to_dict())
287+
description["contact_person"].append(person.to_dict())
233288
if self._ui_info:
234289
description.update(self._ui_info.to_dict())
235290
return description

tests/satosa/metadata_creation/test_description.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,18 @@ def test_to_dict(self):
2424
desc.add_description("test", "en")
2525
desc.add_display_name("my company", "en")
2626
desc.add_logo("logo.jpg", 80, 80, "en")
27+
desc.add_keywords(["kw1", "kw2"], "en")
28+
desc.add_information_url("https://test", "en")
29+
desc.add_privacy_statement_url("https://test", "en")
2730

2831
serialized = desc.to_dict()
2932
ui_info = serialized["service"]["idp"]["ui_info"]
3033
assert ui_info["description"] == [{"text": "test", "lang": "en"}]
3134
assert ui_info["display_name"] == [{"text": "my company", "lang": "en"}]
3235
assert ui_info["logo"] == [{"text": "logo.jpg", "width": 80, "height": 80, "lang": "en"}]
36+
assert ui_info["keywords"] == [{"text": ["kw1", "kw2"], "lang": "en"}]
37+
assert ui_info["information_url"] == [{"text": "https://test", "lang": "en"}]
38+
assert ui_info["privacy_statement_url"] == [{"text": "https://test", "lang": "en"}]
3339

3440
def test_to_dict_for_logo_without_lang(self):
3541
desc = UIInfoDesc()

0 commit comments

Comments
 (0)