Skip to content

Commit ec0f620

Browse files
new: DecideBackendByRequester: add default_backend setting
To avoid having to spell out all requesters: with default backend, only exceptions/overrides need to be listed.
1 parent da2c135 commit ec0f620

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

example/plugins/microservices/custom_routing_decide_by_requester.yaml.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module: satosa.micro_services.custom_routing.DecideBackendByRequester
22
name: DecideBackendByRequester
33
config:
4+
default_backend: Saml2
45
requester_mapping:
56
'requestor-id': 'backend_custom'
67

src/satosa/micro_services/custom_routing.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,21 @@ def __init__(self, config, *args, **kwargs):
6767
"""
6868
Constructor.
6969
:param config: mapping from requester identifier to
70-
backend module name under the key 'requester_mapping'
70+
backend module name under the key 'requester_mapping'.
71+
May also include default backend under key 'default_backend'.
7172
:type config: Dict[str, Dict[str, str]]
7273
"""
7374
super().__init__(*args, **kwargs)
7475
self.requester_mapping = config['requester_mapping']
76+
self.default_backend = config.get('default_backend')
7577

7678
def process(self, context, data):
7779
"""
7880
Will modify the context.target_backend attribute based on the requester identifier.
7981
:param context: request context
8082
:param data: the internal request
8183
"""
82-
context.target_backend = self.requester_mapping.get(data.requester)
84+
context.target_backend = self.requester_mapping.get(data.requester) or self.default_backend
8385
return super().process(context, data)
8486

8587

tests/satosa/micro_services/test_custom_routing.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,25 @@ def setUp(self):
227227
self.context = context
228228
self.plugin = plugin
229229

230-
def test_when_requester_is_not_mapped_skip(self):
230+
def test_when_requester_is_not_mapped_and_no_default_backend_skip(self):
231231
data = InternalData(requester='other_test_requester')
232232
newctx, newdata = self.plugin.process(self.context, data)
233233
assert not newctx.target_backend
234234

235+
def test_when_requester_is_not_mapped_choose_default_backend(self):
236+
# override config to set default backend
237+
self.config['default_backend'] = 'default_backend'
238+
self.plugin = DecideBackendByRequester(
239+
config=self.config,
240+
name='test_decide_service',
241+
base_url='https://satosa.example.org',
242+
)
243+
self.plugin.next = lambda ctx, data: (ctx, data)
244+
245+
data = InternalData(requester='other_test_requester')
246+
newctx, newdata = self.plugin.process(self.context, data)
247+
assert newctx.target_backend == 'default_backend'
248+
235249
def test_when_requester_is_mapped_choose_mapping_backend(self):
236250
data = InternalData(requester='test_requester')
237251
data.requester = 'test_requester'

0 commit comments

Comments
 (0)