Skip to content

Commit 4c0b68e

Browse files
Merge pull request #426 from REANNZ/feature/custom_routing-default_backend
DecideBackendByRequester: add default_backend setting
2 parents 103f477 + ec0f620 commit 4c0b68e

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module: satosa.micro_services.custom_routing.DecideBackendByRequester
2+
name: DecideBackendByRequester
3+
config:
4+
default_backend: Saml2
5+
requester_mapping:
6+
'requestor-id': 'backend_custom'
7+
8+

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[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: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from satosa.internal import InternalData
1010
from satosa.micro_services.custom_routing import DecideIfRequesterIsAllowed
1111
from satosa.micro_services.custom_routing import DecideBackendByTargetIssuer
12+
from satosa.micro_services.custom_routing import DecideBackendByRequester
1213

1314

1415
TARGET_ENTITY = "entity1"
@@ -202,3 +203,51 @@ def test_when_target_is_mapped_choose_mapping_backend(self):
202203
data.requester = 'somebody else'
203204
newctx, newdata = self.plugin.process(self.context, data)
204205
assert newctx.target_backend == 'mapped_backend'
206+
207+
208+
class TestDecideBackendByRequester(TestCase):
209+
def setUp(self):
210+
context = Context()
211+
context.state = State()
212+
213+
config = {
214+
'requester_mapping': {
215+
'test_requester': 'mapped_backend',
216+
},
217+
}
218+
219+
plugin = DecideBackendByRequester(
220+
config=config,
221+
name='test_decide_service',
222+
base_url='https://satosa.example.org',
223+
)
224+
plugin.next = lambda ctx, data: (ctx, data)
225+
226+
self.config = config
227+
self.context = context
228+
self.plugin = plugin
229+
230+
def test_when_requester_is_not_mapped_and_no_default_backend_skip(self):
231+
data = InternalData(requester='other_test_requester')
232+
newctx, newdata = self.plugin.process(self.context, data)
233+
assert not newctx.target_backend
234+
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+
249+
def test_when_requester_is_mapped_choose_mapping_backend(self):
250+
data = InternalData(requester='test_requester')
251+
data.requester = 'test_requester'
252+
newctx, newdata = self.plugin.process(self.context, data)
253+
assert newctx.target_backend == 'mapped_backend'

0 commit comments

Comments
 (0)