fixes
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / profile / saml1 / AbstractProfileHandler.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.saml1;
18
19 import javax.servlet.ServletRequest;
20
21 import org.apache.log4j.Logger;
22 import org.opensaml.Configuration;
23 import org.opensaml.common.SAMLObject;
24 import org.opensaml.common.SAMLVersion;
25 import org.opensaml.common.binding.BindingException;
26 import org.opensaml.common.impl.SecureRandomIdentifierGenerator;
27 import org.opensaml.xml.XMLObjectBuilderFactory;
28
29 import edu.internet2.middleware.shibboleth.common.attribute.resolver.AttributeResolver;
30 import edu.internet2.middleware.shibboleth.common.profile.ProfileHandler;
31
32 /**
33  * Common implementation details for profile handlers.
34  */
35 public abstract class AbstractProfileHandler implements ProfileHandler {
36
37     /** SAML Version for this profile handler. */
38     public static final SAMLVersion SAML_VERSION = SAMLVersion.VERSION_11;
39
40     /** Class logger. */
41     private static Logger log = Logger.getLogger(AbstractProfileHandler.class);
42     
43     /** For building XML. */
44     private XMLObjectBuilderFactory builderFactory;
45
46     /** For generating random ids. */
47     private SecureRandomIdentifierGenerator idGenerator;
48
49     /** For resolving attributes. */
50     private AttributeResolver resolver;
51
52     /** To determine releasable attributes. */
53     private FilteringEngine engine;
54
55     /**
56      * Default constructor.
57      */
58     public AbstractProfileHandler() {
59         builderFactory = Configuration.getBuilderFactory();
60         idGenerator = new SecureRandomIdentifierGenerator();
61     }
62
63     /**
64      * Returns the XML builder factory.
65      * 
66      * @return Returns the builderFactory.
67      */
68     public XMLObjectBuilderFactory getBuilderFactory() {
69         return builderFactory;
70     }
71
72     /**
73      * Returns the id generator.
74      * 
75      * @return Returns the idGenerator.
76      */
77     public SecureRandomIdentifierGenerator getIdGenerator() {
78         return idGenerator;
79     }
80
81     /**
82      * Sets the attribute resolver.
83      * 
84      * @param r <code>AttributeResolver</code>
85      */
86     public void setAttributeResolver(AttributeResolver r) {
87         resolver = r;
88     }
89
90     /**
91      * Returns the attribute resolver.
92      * 
93      * @return <code>AttributeResolver</code>
94      */
95     public AttributeResolver getAttributeResolver() {
96         return resolver;
97     }
98
99     /**
100      * Sets the filter engine.
101      * 
102      * @param e <code>FilterEngine</code>
103      */
104     public void setFilterEngine(FilteringEngine e) {
105         engine = e;
106     }
107
108     /**
109      * Returns the filter engine.
110      * 
111      * @return <code>FilterEngine</code>
112      */
113     public FilteringEngine getFilteringEngine() {
114         return engine;
115     }
116     
117     /**
118      * This decodes the attribute query message from the supplied request.
119      * 
120      * @param request <code>ServletRequest</code>
121      * @return <code>SAMLObject</code>
122      * @throws BindingException if the request cannot be decoded
123      */
124     protected SAMLObject decodeMessage(ServletRequest request) throws BindingException {
125         // call decode method on decoder
126         decoder.setRequest(request);
127         decoder.decode();
128         if (log.isDebugEnabled()) {
129             log.debug("decoded servlet request");
130         }
131
132         // get SAMLMessage from the decoder
133         final SAMLObject message = decoder.getSAMLMessage();
134         if (log.isDebugEnabled()) {
135             log.debug("retrieved attribute query message from decoder: " + message);
136         }
137
138         return message;
139     }
140     
141
142     /**
143      * This encodes the supplied response.
144      * 
145      * @param response <code>SAMLObject</code>
146      * @throws BindingException if the response cannot be encoded
147      */
148     protected void encodeResponse(SAMLObject response) throws BindingException {
149         encoder.setSAMLMessage(response);
150         encoder.encode();
151         if (log.isDebugEnabled()) {
152             log.debug("encoded saml1 response");
153         }
154     }    
155 }