Skip to content

Commit 1a18ba7

Browse files
author
Rebecka Gulliksson
committed
Use requester_name in the consent module.
This allows for better i18n in the consent UI, since InternalRequest.requester_name contains all display names of the requester separated by language.
1 parent bc035f7 commit 1a18ba7

File tree

4 files changed

+26
-8
lines changed

4 files changed

+26
-8
lines changed

src/satosa/base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ def _auth_req_callback_func(self, context, internal_request):
102102
state = context.state
103103
state[STATE_KEY] = {"requester": internal_request.requester}
104104
# TODO consent module should manage any state it needs by itself
105-
context.state[consent.STATE_KEY] = {"filter": internal_request.approved_attributes or []}
105+
context.state[consent.STATE_KEY] = {"filter": internal_request.approved_attributes or [],
106+
"requester_name": internal_request.requester_name}
106107
satosa_logging(logger, logging.INFO,
107108
"Requesting provider: {}".format(internal_request.requester), state)
108109

src/satosa/micro_services/consent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def _approve_new_consent(self, context, internal_response, id_hash):
8585
"attr": internal_response.attributes,
8686
"id": id_hash,
8787
"redirect_endpoint": "%s/consent%s" % (self.base_url, self.endpoint),
88-
"requester_name": internal_response.requester
88+
"requester_name": context.state[STATE_KEY]["requester_name"]
8989
}
9090
if self.locked_attr:
9191
consent_args["locked_attrs"] = [self.locked_attr]

tests/satosa/micro_services/test_consent.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def assert_redirect(self, redirect_resp, expected_ticket):
7070
ticket = parsed_url["ticket"][0]
7171
assert ticket == expected_ticket
7272

73-
def assert_registration_req(self, request, internal_response, sign_key_path, base_url):
73+
def assert_registration_req(self, request, internal_response, sign_key_path, base_url, requester_name):
7474
split_path = request.path_url.lstrip("/").split("/")
7575
assert len(split_path) == 2
7676
jwks = split_path[1]
@@ -83,7 +83,7 @@ def assert_registration_req(self, request, internal_response, sign_key_path, bas
8383
consent_args = jws.msg
8484
assert consent_args["attr"] == internal_response.attributes
8585
assert consent_args["redirect_endpoint"] == base_url + "/consent/handle_consent"
86-
assert consent_args["requester_name"] == internal_response.requester
86+
assert consent_args["requester_name"] == requester_name
8787
assert consent_args["locked_attrs"] == [USER_ID_ATTR]
8888
assert "id" in consent_args
8989

@@ -150,7 +150,9 @@ def test_consent_full_flow(self, context, consent_config, internal_response, int
150150
consent_verify_endpoint_regex, consent_registration_endpoint_regex):
151151
expected_ticket = "my_ticket"
152152

153-
context.state[consent.STATE_KEY] = {"filter": internal_request.approved_attributes}
153+
requester_name = [{"lang": "en", "text": "test requester"}]
154+
context.state[consent.STATE_KEY] = {"filter": internal_request.approved_attributes,
155+
"requester_name": requester_name}
154156

155157
with responses.RequestsMock() as rsps:
156158
rsps.add(responses.GET, consent_verify_endpoint_regex, status=401)
@@ -162,7 +164,8 @@ def test_consent_full_flow(self, context, consent_config, internal_response, int
162164
self.assert_registration_req(rsps.calls[1].request,
163165
internal_response,
164166
consent_config["sign_key"],
165-
self.consent_module.base_url)
167+
self.consent_module.base_url,
168+
requester_name)
166169

167170
with responses.RequestsMock() as rsps:
168171
# Now consent has been given, consent service returns 200 OK
@@ -184,15 +187,16 @@ def test_consent_not_given(self, context, consent_config, internal_response, int
184187
responses.add(responses.GET, consent_registration_endpoint_regex, status=200,
185188
body=expected_ticket)
186189

187-
context.state[consent.STATE_KEY] = {"filter": []}
190+
context.state[consent.STATE_KEY] = {"filter": [], "requester_name": None}
188191

189192
resp = self.consent_module.process(context, internal_response)
190193

191194
self.assert_redirect(resp, expected_ticket)
192195
self.assert_registration_req(responses.calls[1].request,
193196
internal_response,
194197
consent_config["sign_key"],
195-
self.consent_module.base_url)
198+
self.consent_module.base_url,
199+
None)
196200

197201
new_context = Context()
198202
new_context.state = context.state

tests/satosa/test_base.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from satosa.exception import SATOSAConfigurationError
99
from satosa.internal_data import InternalResponse, AuthenticationInformation, UserIdHasher, InternalRequest, \
1010
UserIdHashType
11+
from satosa.micro_services import consent
1112
from satosa.satosa_config import SATOSAConfig
1213

1314

@@ -56,6 +57,18 @@ def test_auth_resp_callback_func_user_id_from_attrs_is_used_to_override_user_id(
5657
context.state)
5758
assert internal_resp.user_id == expected_user_id
5859

60+
def test_auth_req_callback_stores_state_for_consent(self, context, satosa_config):
61+
base = SATOSABase(satosa_config)
62+
63+
context.target_backend = satosa_config["BACKEND_MODULES"][0]["name"]
64+
requester_name = [{"lang": "en", "text": "Test EN"}, {"lang": "sv", "text": "Test SV"}]
65+
internal_req = InternalRequest(UserIdHashType.transient, None, requester_name)
66+
internal_req.approved_attributes = ["attr1", "attr2"]
67+
base._auth_req_callback_func(context, internal_req)
68+
69+
assert context.state[consent.STATE_KEY]["requester_name"] == internal_req.requester_name
70+
assert context.state[consent.STATE_KEY]["filter"] == internal_req.approved_attributes
71+
5972
def test_account_linking_callback_func_hashes_all_specified_attributes(self, context, satosa_config):
6073
satosa_config["INTERNAL_ATTRIBUTES"]["hash"] = ["user_id", "mail"]
6174
base = SATOSABase(satosa_config)

0 commit comments

Comments
 (0)