Lots of code cleanup
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / profile / AbstractSAMLProfileHandler.java
1 /*
2  * Copyright [2007] [University Corporation for Advanced Internet Development, Inc.]
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package edu.internet2.middleware.shibboleth.idp.profile;
18
19 import javax.servlet.ServletRequest;
20 import javax.servlet.ServletResponse;
21 import javax.servlet.http.HttpServletRequest;
22 import javax.xml.namespace.QName;
23
24 import org.apache.log4j.Logger;
25 import org.opensaml.common.IdentifierGenerator;
26 import org.opensaml.common.binding.decoding.MessageDecoderFactory;
27 import org.opensaml.common.binding.encoding.MessageEncoderFactory;
28 import org.opensaml.saml2.metadata.provider.MetadataProvider;
29
30 import edu.internet2.middleware.shibboleth.common.log.AuditLogEntry;
31 import edu.internet2.middleware.shibboleth.common.profile.ProfileRequest;
32 import edu.internet2.middleware.shibboleth.common.profile.ProfileResponse;
33 import edu.internet2.middleware.shibboleth.common.profile.provider.AbstractShibbolethProfileHandler;
34 import edu.internet2.middleware.shibboleth.common.relyingparty.provider.SAMLMDRelyingPartyConfigurationManager;
35 import edu.internet2.middleware.shibboleth.idp.session.Session;
36
37 /**
38  * Base class for SAML profile handlers.
39  */
40 public abstract class AbstractSAMLProfileHandler extends
41         AbstractShibbolethProfileHandler<SAMLMDRelyingPartyConfigurationManager, Session> {
42
43     /** SAML message audit log. */
44     private final Logger auditLog = Logger.getLogger(AuditLogEntry.AUDIT_LOGGER_NAME);
45
46     /** Generator of IDs which may be used for SAML assertions, requests, etc. */
47     private IdentifierGenerator idGenerator;
48
49     /** Factory of message decoders. */
50     private MessageDecoderFactory decoderFactory;
51
52     /** Factory of message encoders. */
53     private MessageEncoderFactory encoderFactory;
54
55     /** Constructor. */
56     protected AbstractSAMLProfileHandler() {
57         super();
58     }
59
60     /**
61      * Gets an ID generator which may be used for SAML assertions, requests, etc.
62      * 
63      * @return ID generator
64      */
65     public IdentifierGenerator getIdGenerator() {
66         return idGenerator;
67     }
68     
69     /**
70      * Gets an ID generator which may be used for SAML assertions, requests, etc.
71      * 
72      * @param generator an ID generator which may be used for SAML assertions, requests, etc
73      */
74     public void setIdGenerator(IdentifierGenerator generator){
75         idGenerator = generator;
76     }
77
78     /**
79      * Gets the factory used to build new message decoders.
80      * 
81      * @return factory used to build new message decoders
82      */
83     public MessageDecoderFactory getMessageDecoderFactory() {
84         return decoderFactory;
85     }
86
87     /**
88      * Sets the factory used to build new message decoders.
89      * 
90      * @param factory factory used to build new message decoders
91      */
92     public void setMessageDecoderFactory(MessageDecoderFactory factory) {
93         decoderFactory = factory;
94     }
95
96     /**
97      * Gets the factory used to build message encoders.
98      * 
99      * @return factory used to build message encoders
100      */
101     public MessageEncoderFactory getMessageEncoderFactory() {
102         return encoderFactory;
103     }
104
105     /**
106      * Sets the factory used to build message encoders.
107      * 
108      * @param factory factory used to build message encoders
109      */
110     public void setMessageEncoderFactory(MessageEncoderFactory factory) {
111         encoderFactory = factory;
112     }
113
114     /**
115      * A convenience method for retrieving the SAML metadata provider from the relying party manager.
116      * 
117      * @return the metadata provider or null
118      */
119     public MetadataProvider getMetadataProvider() {
120         SAMLMDRelyingPartyConfigurationManager rpcManager = getRelyingPartyConfigurationManager();
121         if (rpcManager != null) {
122             return rpcManager.getMetadataProvider();
123         }
124
125         return null;
126     }
127
128     /**
129      * Gets the audit log for this handler.
130      * 
131      * @return audit log for this handler
132      */
133     protected Logger getAduitLog() {
134         return auditLog;
135     }
136
137     /**
138      * Gets the user's session ID from the current request.
139      * 
140      * @param request current request
141      * 
142      * @return user's session ID
143      */
144     protected String getUserSessionId(ProfileRequest<ServletRequest> request) {
145         HttpServletRequest rawRequest = (HttpServletRequest) request.getRawRequest();
146         if (rawRequest != null) {
147             return (String) rawRequest.getSession().getAttribute(Session.HTTP_SESSION_BINDING_ATTRIBUTE);
148         }
149
150         return null;
151     }
152     
153     /**
154      * Contextual object used to accumlate information as profile requests are being processed.
155      */
156     protected class SAMLProfileRequestContext extends ShibbolethProfileRequestContext {
157         
158         /** Role descriptor name that the asserting party is operating in. */
159         private QName assertingPartyRole;
160         
161         /** Role descriptor name that the relying party is operating in. */
162         private QName relyingPartyRole;
163         
164         /**
165          * Constructor.
166          * 
167          * @param request current profile request
168          * @param response current profile response
169          */
170         public SAMLProfileRequestContext(ProfileRequest<ServletRequest> request,
171                 ProfileResponse<ServletResponse> response) {
172             super(request, response);
173         }
174
175         /**
176          * Gets the role descriptor name that the asserting party is operating in.
177          * 
178          * @return role descriptor name that the asserting party is operating in
179          */
180         public QName getAssertingPartyRole() {
181             return assertingPartyRole;
182         }
183
184         /**
185          * Sets the role descriptor name that the asserting party is operating in.
186          * 
187          * @param role role descriptor name that the asserting party is operating in
188          */
189         public void setAssertingPartyRole(QName role) {
190             assertingPartyRole = role;
191         }
192
193         /**
194          * Gets the role descriptor name that the relying party is operating in.
195          * 
196          * @return role descriptor name that the relying party is operating in
197          */
198         public QName getRelyingPartyRole() {
199             return relyingPartyRole;
200         }
201
202         /**
203          * Sets the role descriptor name that the relying party is operating in.
204          * 
205          * @param role role descriptor name that the relying party is operating in
206          */
207         public void setRelyingPartyRole(QName role) {
208             relyingPartyRole = role;
209         }
210     }
211 }