1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.mylutece.modules.saml.authentication.checkers;
35
36 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.engine.BootStrap;
37 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.engine.SAMLResponseManager;
38 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.exceptions.InvalidAttributeException;
39 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.exceptions.SAMLParsingException;
40 import fr.paris.lutece.portal.service.util.AppLogService;
41
42 import org.opensaml.saml2.core.Attribute;
43 import org.opensaml.saml2.metadata.RequestedAttribute;
44
45 import java.util.Iterator;
46 import java.util.List;
47
48
49 public class RequiredAttributesChecker implements SAMLChecker
50 {
51 public void check( SAMLResponseManager responseManager )
52 throws InvalidAttributeException, SAMLParsingException
53 {
54 List<Attribute> assertionAttributes = responseManager.getAssertionAttributes( );
55
56 List<RequestedAttribute> requestedAttributes = BootStrap.getInstance( ).getSpMetaDataManager( )
57 .getRequestedAttributes( );
58
59
60 Iterator<RequestedAttribute> iterReq = requestedAttributes.listIterator( );
61 RequestedAttribute requestedAttribute;
62
63 while ( iterReq.hasNext( ) )
64 {
65 requestedAttribute = iterReq.next( );
66
67 if ( requestedAttribute.isRequired( ) )
68 {
69 boolean found = false;
70 Iterator<Attribute> iter = assertionAttributes.listIterator( );
71 Attribute assertionAttribute;
72
73 while ( iter.hasNext( ) )
74 {
75 assertionAttribute = iter.next( );
76
77 if ( assertionAttribute.getName( ).equalsIgnoreCase( requestedAttribute.getName( ) ) )
78 {
79 found = true;
80
81 break;
82 }
83 }
84
85 if ( !found )
86 {
87 String message = "L'attribut obligatoire [" + requestedAttribute.getName( ) +
88 "] est absent de l'assertion.";
89 AppLogService.info( message );
90 throw new InvalidAttributeException( message );
91 }
92 }
93 }
94 }
95 }