18
18
from satosa .exception import SATOSAError
19
19
from satosa .micro_services .base import ResponseMicroService
20
20
from satosa .response import Redirect
21
+ from satosa .frontends .saml2 import SAMLVirtualCoFrontend
22
+ from satosa .routing import STATE_KEY as ROUTING_STATE_KEY
21
23
22
24
23
25
logger = logging .getLogger (__name__ )
@@ -399,22 +401,36 @@ def process(self, context, data):
399
401
Default interface for microservices. Process the input data for
400
402
the input context.
401
403
"""
402
- issuer = data .auth_info .issuer
404
+ state = context .state
405
+ session_id = lu .get_session_id (state )
406
+
403
407
requester = data .requester
404
- config = self .config .get (requester ) or self .config ["default" ]
408
+ issuer = data .auth_info .issuer
409
+
410
+ frontend_name = state .get (ROUTING_STATE_KEY )
411
+ co_entity_id_key = SAMLVirtualCoFrontend .KEY_CO_ENTITY_ID
412
+ co_entity_id = state .get (frontend_name , {}).get (co_entity_id_key )
413
+
414
+ entity_ids = [requester , issuer , co_entity_id , "default" ]
415
+
416
+ config , entity_id = next ((self .config .get (e ), e )
417
+ for e in entity_ids if self .config .get (e ))
418
+
405
419
msg = {
406
420
"message" : "entityID for the involved entities" ,
407
421
"requester" : requester ,
408
422
"issuer" : issuer ,
409
423
"config" : self ._filter_config (config ),
410
424
}
411
- logline = lu .LOG_FMT .format (id = lu .get_session_id (context .state ), message = msg )
425
+ if co_entity_id :
426
+ msg ["co_entity_id" ] = co_entity_id
427
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
412
428
logger .debug (logline )
413
429
414
- # Ignore this SP entirely if so configured.
430
+ # Ignore this entityID entirely if so configured.
415
431
if config ["ignore" ]:
416
- msg = "Ignoring SP {}" .format (requester )
417
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
432
+ msg = "Ignoring entityID {}" .format (entity_id )
433
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
418
434
logger .info (logline )
419
435
return super ().process (context , data )
420
436
@@ -439,7 +455,7 @@ def process(self, context, data):
439
455
if filter_value
440
456
]
441
457
msg = {"message" : "Search filters" , "filter_values" : filter_values }
442
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
458
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
443
459
logger .debug (logline )
444
460
445
461
# Initialize an empty LDAP record. The first LDAP record found using
@@ -453,7 +469,7 @@ def process(self, context, data):
453
469
"message" : "LDAP server host" ,
454
470
"server host" : connection .server .host ,
455
471
}
456
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
472
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
457
473
logger .debug (logline )
458
474
459
475
for filter_val in filter_values :
@@ -463,7 +479,7 @@ def process(self, context, data):
463
479
"message" : "LDAP query with constructed search filter" ,
464
480
"search filter" : search_filter ,
465
481
}
466
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
482
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
467
483
logger .debug (logline )
468
484
469
485
attributes = (
@@ -485,14 +501,14 @@ def process(self, context, data):
485
501
exp_msg = "Caught unhandled exception: {}" .format (err )
486
502
487
503
if exp_msg :
488
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = exp_msg )
504
+ logline = lu .LOG_FMT .format (id = session_id , message = exp_msg )
489
505
logger .error (logline )
490
506
return super ().process (context , data )
491
507
492
508
if not results :
493
509
msg = "Querying LDAP server: No results for {}."
494
510
msg = msg .format (filter_val )
495
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
511
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
496
512
logger .debug (logline )
497
513
continue
498
514
@@ -502,10 +518,10 @@ def process(self, context, data):
502
518
responses = connection .get_response (results )[0 ]
503
519
504
520
msg = "Done querying LDAP server"
505
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
521
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
506
522
logger .debug (logline )
507
523
msg = "LDAP server returned {} records" .format (len (responses ))
508
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
524
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
509
525
logger .info (logline )
510
526
511
527
# For now consider only the first record found (if any).
@@ -514,7 +530,7 @@ def process(self, context, data):
514
530
msg = "LDAP server returned {} records using search filter"
515
531
msg = msg + " value {}"
516
532
msg = msg .format (len (responses ), filter_val )
517
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
533
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
518
534
logger .warning (logline )
519
535
record = responses [0 ]
520
536
break
@@ -524,7 +540,7 @@ def process(self, context, data):
524
540
if config ["clear_input_attributes" ]:
525
541
msg = "Clearing values for these input attributes: {}"
526
542
msg = msg .format (data .attributes )
527
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
543
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
528
544
logger .debug (logline )
529
545
data .attributes = {}
530
546
@@ -549,7 +565,7 @@ def process(self, context, data):
549
565
"DN" : record ["dn" ],
550
566
"attributes" : record ["attributes" ],
551
567
}
552
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
568
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
553
569
logger .debug (logline )
554
570
555
571
# Populate attributes as configured.
@@ -573,11 +589,11 @@ def process(self, context, data):
573
589
# may use it if required.
574
590
context .decorate (KEY_FOUND_LDAP_RECORD , record )
575
591
msg = "Added record {} to context" .format (record )
576
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
592
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
577
593
logger .debug (logline )
578
594
else :
579
595
msg = "No record found in LDAP so no attributes will be added"
580
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
596
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
581
597
logger .warning (logline )
582
598
on_ldap_search_result_empty = config ["on_ldap_search_result_empty" ]
583
599
if on_ldap_search_result_empty :
@@ -592,11 +608,11 @@ def process(self, context, data):
592
608
encoded_idp_entity_id ,
593
609
)
594
610
msg = "Redirecting to {}" .format (url )
595
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
611
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
596
612
logger .info (logline )
597
613
return Redirect (url )
598
614
599
615
msg = "Returning data.attributes {}" .format (data .attributes )
600
- logline = lu .LOG_FMT .format (id = lu . get_session_id ( context . state ) , message = msg )
616
+ logline = lu .LOG_FMT .format (id = session_id , message = msg )
601
617
logger .debug (logline )
602
618
return super ().process (context , data )
0 commit comments