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.metadata;
35
36 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.config.ConfigProperties;
37 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.config.Constants;
38 import fr.paris.lutece.plugins.mylutece.modules.saml.authentication.exceptions.SAMLParsingException;
39
40 import org.apache.log4j.Logger;
41
42 import org.opensaml.common.xml.SAMLConstants;
43
44 import org.opensaml.saml2.metadata.AssertionConsumerService;
45 import org.opensaml.saml2.metadata.AttributeConsumingService;
46 import org.opensaml.saml2.metadata.RequestedAttribute;
47 import org.opensaml.saml2.metadata.SPSSODescriptor;
48
49 import java.io.InputStream;
50
51 import java.util.List;
52
53
54 public class SPMetadataManager extends MetadataManager
55 {
56 private static Logger _logger = Logger.getLogger( IDPMetadataManager.class );
57
58 @Override
59 public void loadMetadata( String inFilePath )
60 {
61
62 if ( inFilePath == null )
63 {
64 inFilePath = ConfigProperties.getInstance( ).getProperty( Constants.SP_METADATA_FILE_PROP );
65 }
66
67 InputStream stream = this.getClass( ).getResourceAsStream( inFilePath );
68 loadMetadata( stream );
69 }
70
71
72
73
74
75 protected void validateContent( ) throws SAMLParsingException
76 {
77
78 SPSSODescriptor spSSODescriptor = metaData.getSPSSODescriptor( SAMLConstants.SAML20P_NS );
79
80 if ( spSSODescriptor == null )
81 {
82 String message = "Les metadonn�es devraient contenir un SPSSODescriptor";
83 _logger.warn( message );
84 throw new SAMLParsingException( message );
85 }
86
87
88 List<AttributeConsumingService> attributeConsumingService = spSSODescriptor.getAttributeConsumingServices( );
89
90 if ( attributeConsumingService.size( ) != 1 )
91 {
92 String message = "SPSSODescriptor devraient contenir un et un seul AttributeConsumingService";
93 _logger.warn( message );
94 throw new SAMLParsingException( message );
95 }
96
97
98 List<AssertionConsumerService> assertionConsumerService = spSSODescriptor.getAssertionConsumerServices( );
99
100 if ( assertionConsumerService.size( ) != 1 )
101 {
102 String message = "SPSSODescriptor devraient contenir un et un seul AssertionConsumerServices";
103 _logger.warn( message );
104 throw new SAMLParsingException( message );
105 }
106 }
107
108
109
110
111
112
113 public List<RequestedAttribute> getRequestedAttributes( )
114 throws SAMLParsingException
115 {
116 return getAttributeConsumingService( ).getRequestAttributes( );
117 }
118
119 private SPSSODescriptor getSPSSODescriptor( )
120 {
121 return metaData.getSPSSODescriptor( SAMLConstants.SAML20P_NS );
122 }
123
124 private AttributeConsumingService getAttributeConsumingService( )
125 {
126 return getSPSSODescriptor( ).getAttributeConsumingServices( ).get( 0 );
127 }
128
129 public AssertionConsumerService getAssertionConsumerService( )
130 {
131 return getSPSSODescriptor( ).getAssertionConsumerServices( ).get( 0 );
132 }
133 }