Skip to content

Commit e212966

Browse files
committed
feat: add metadata_store to context
Added a function that collects metadata for swamid-satosa metainfo plugin for non-SAML backends. The metadata is collected into dictionary and added to the context. The functionality added is similar to saml backend where the context is decorated with metadata of mdstore type.
1 parent a626259 commit e212966

File tree

6 files changed

+39
-0
lines changed

6 files changed

+39
-0
lines changed

src/satosa/backends/apple.py

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
from oic.oauth2.message import Message
77
from oic.oic.message import AuthorizationResponse
88
import satosa.logging_util as lu
9+
from .oauth import _get_metadata_to_decorate
10+
from ..context import Context
11+
from ..exception import SATOSAAuthenticationError
12+
913
from ..exception import SATOSAAuthenticationError
1014
import json
1115
import requests
@@ -110,6 +114,7 @@ def response_endpoint(self, context, *args):
110114
raise SATOSAAuthenticationError(context.state, "No user info available.")
111115

112116
all_user_claims = dict(list(userinfo.items()) + list(id_token_claims.items()))
117+
context.decorate(Context.KEY_METADATA_STORE, _get_metadata_to_decorate(self.config))
113118

114119
# convert "string or Boolean" claims to actual booleans
115120
for bool_claim_name in ["email_verified", "is_private_email"]:

src/satosa/backends/github.py

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from oic.oauth2.message import AuthorizationResponse
1111

1212
from satosa.backends.oauth import _OAuthBackend
13+
from .oauth import _get_metadata_to_decorate
14+
from satosa.context import Context
1315
from satosa.internal import AuthenticationInformation
1416
from satosa.internal import InternalData
1517
from satosa.response import Redirect
@@ -99,6 +101,7 @@ def _authn_response(self, context):
99101
internal_response.attributes = self.converter.to_internal(
100102
self.external_type, user_info)
101103
internal_response.subject_id = str(user_info[self.user_id_attr])
104+
context.decorate(Context.KEY_METADATA_STORE, _get_metadata_to_decorate(self.config))
102105
return self.auth_callback_func(context, internal_response)
103106

104107
def user_information(self, access_token):

src/satosa/backends/linkedin.py

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from oic.oauth2.message import AuthorizationResponse
1111

1212
from satosa.backends.oauth import _OAuthBackend
13+
from .oauth import _get_metadata_to_decorate
14+
from satosa.context import Context
1315
from satosa.internal import AuthenticationInformation
1416
from satosa.internal import InternalData
1517
from satosa.response import Redirect
@@ -110,6 +112,7 @@ def _authn_response(self, context):
110112
self.external_type, user_info)
111113

112114
internal_response.subject_id = user_info[self.user_id_attr]
115+
context.decorate(Context.KEY_METADATA_STORE, _get_metadata_to_decorate(self.config))
113116
return self.auth_callback_func(context, internal_response)
114117

115118
def user_information(self, access_token, api):

src/satosa/backends/oauth.py

+21
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from oic.utils.authn.authn_context import UNSPECIFIED
1313

1414
import satosa.logging_util as lu
15+
from satosa.context import Context
1516
from satosa.internal import AuthenticationInformation
1617
from satosa.internal import InternalData
1718
from satosa.exception import SATOSAAuthenticationError
@@ -145,6 +146,7 @@ def _authn_response(self, context):
145146
internal_response = InternalData(auth_info=self.auth_info(context.request))
146147
internal_response.attributes = self.converter.to_internal(self.external_type, user_info)
147148
internal_response.subject_id = user_info[self.user_id_attr]
149+
context.decorate(Context.KEY_METADATA_STORE, _get_metadata_to_decorate(self.config))
148150
return self.auth_callback_func(context, internal_response)
149151

150152
def auth_info(self, request):
@@ -331,3 +333,22 @@ def get_metadata_desc_for_oauth_backend(entity_id, config):
331333

332334
metadata_description.append(description)
333335
return metadata_description
336+
337+
338+
def _get_metadata_to_decorate(config):
339+
metadata_dict = {}
340+
if "entity_info" in config:
341+
entity_info = config["entity_info"]
342+
if "ui_info" in entity_info:
343+
ui_info = entity_info["ui_info"]
344+
for name in ui_info.get("display_name", []):
345+
if name[1] == "en":
346+
metadata_dict["client_name"] = name[0]
347+
metadata_dict["client_name#" + name[1]] = name[0]
348+
for logo in ui_info.get("logo", []):
349+
if logo["lang"] == "en":
350+
metadata_dict["logo_uri"] = logo["image"]
351+
metadata_dict["logo_width"] = logo["width"]
352+
metadata_dict["logo_height"] = logo["height"]
353+
metadata_dict["logo_uri#" + logo["lang"]] = logo["image"]
354+
return metadata_dict

src/satosa/backends/openid_connect.py

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
from ..exception import SATOSAAuthenticationError
2323
from ..exception import SATOSAError
2424
from ..exception import SATOSAMissingStateError
25+
from .oauth import _get_metadata_to_decorate
26+
from ..context import Context
27+
from ..exception import SATOSAAuthenticationError, SATOSAError
2528
from ..response import Redirect
2629

2730

@@ -242,6 +245,7 @@ def response_endpoint(self, context, *args):
242245
logger.error(logline)
243246
raise SATOSAAuthenticationError(context.state, "No user info available.")
244247

248+
context.decorate(Context.KEY_METADATA_STORE, _get_metadata_to_decorate(self.config))
245249
all_user_claims = dict(list(userinfo.items()) + list(id_token_claims.items()))
246250
msg = "UserInfo: {}".format(all_user_claims)
247251
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)

src/satosa/backends/orcid.py

+3
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
from oic.utils.authn.authn_context import UNSPECIFIED
1010
from oic.oauth2.consumer import stateID
1111
from oic.oauth2.message import AuthorizationResponse
12+
from .oauth import _get_metadata_to_decorate
1213

1314
from satosa.backends.oauth import _OAuthBackend
15+
from satosa.context import Context
1416
from satosa.internal import InternalData
1517
from satosa.internal import AuthenticationInformation
1618
from satosa.util import rndstr
@@ -79,6 +81,7 @@ def _authn_response(self, context):
7981
internal_response.attributes = self.converter.to_internal(
8082
self.external_type, user_info)
8183
internal_response.subject_id = user_info[self.user_id_attr]
84+
context.decorate(Context.KEY_METADATA_STORE, _get_metadata_to_decorate(self.config))
8285
return self.auth_callback_func(context, internal_response)
8386

8487
def user_information(self, access_token, orcid, name=None):

0 commit comments

Comments
 (0)