username/pass auth handler - initial rev.
[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.http.HttpServletRequest;
21
22 import org.apache.log4j.Logger;
23 import org.opensaml.common.IdentifierGenerator;
24 import org.opensaml.common.binding.decoding.MessageDecoderFactory;
25 import org.opensaml.common.binding.encoding.MessageEncoderFactory;
26 import org.opensaml.common.impl.SecureRandomIdentifierGenerator;
27 import org.opensaml.saml2.metadata.provider.MetadataProvider;
28
29 import edu.internet2.middleware.shibboleth.common.log.AuditLogEntry;
30 import edu.internet2.middleware.shibboleth.common.profile.AbstractProfileHandler;
31 import edu.internet2.middleware.shibboleth.common.profile.ProfileRequest;
32 import edu.internet2.middleware.shibboleth.common.relyingparty.provider.SAMLMDRelyingPartyConfigurationManager;
33 import edu.internet2.middleware.shibboleth.idp.session.Session;
34
35 /**
36  * Base class for SAML profile handlers.
37  */
38 public abstract class AbstractSAMLProfileHandler extends
39         AbstractProfileHandler<SAMLMDRelyingPartyConfigurationManager, Session> {
40
41     /** SAML message audit log. */
42     private final Logger auditLog = Logger.getLogger(AuditLogEntry.AUDIT_LOGGER_NAME);
43
44     /** Generator of IDs which may be used for SAML assertions, requests, etc. */
45     private IdentifierGenerator idGenerator;
46
47     /** Factory of message decoders. */
48     private MessageDecoderFactory decoderFactory;
49
50     /** Factory of message encoders. */
51     private MessageEncoderFactory encoderFactory;
52
53     /** Constructor. */
54     protected AbstractSAMLProfileHandler() {
55         super();
56         idGenerator = new SecureRandomIdentifierGenerator();
57     }
58
59     /**
60      * Gets an ID generator which may be used for SAML assertions, requests, etc.
61      * 
62      * @return ID generator
63      */
64     public IdentifierGenerator getIdGenerator() {
65         return idGenerator;
66     }
67
68     /**
69      * Gets the factory used to build new message decoders.
70      * 
71      * @return factory used to build new message decoders
72      */
73     public MessageDecoderFactory getMessageDecoderFactory() {
74         return decoderFactory;
75     }
76
77     /**
78      * Sets the factory used to build new message decoders.
79      * 
80      * @param factory factory used to build new message decoders
81      */
82     public void setMessageDecoderFactory(MessageDecoderFactory factory) {
83         decoderFactory = factory;
84     }
85
86     /**
87      * Gets the factory used to build message encoders.
88      * 
89      * @return factory used to build message encoders
90      */
91     public MessageEncoderFactory getMessageEncoderFactory() {
92         return encoderFactory;
93     }
94
95     /**
96      * Sets the factory used to build message encoders.
97      * 
98      * @param factory factory used to build message encoders
99      */
100     public void setMessageEncoderFactory(MessageEncoderFactory factory) {
101         encoderFactory = factory;
102     }
103
104     /**
105      * A convenience method for retrieving the SAML metadata provider from the relying party manager.
106      * 
107      * @return the metadata provider or null
108      */
109     public MetadataProvider getMetadataProvider() {
110         SAMLMDRelyingPartyConfigurationManager rpcManager = getRelyingPartyConfigurationManager();
111         if (rpcManager != null) {
112             return rpcManager.getMetadataProvider();
113         }
114
115         return null;
116     }
117
118     /**
119      * Gets the audit log for this handler.
120      * 
121      * @return audit log for this handler
122      */
123     protected Logger getAduitLog() {
124         return auditLog;
125     }
126
127     /**
128      * Gets the user's session ID from the current request.
129      * 
130      * @param request current request
131      * 
132      * @return user's session ID
133      */
134     protected String getUserSessionId(ProfileRequest<ServletRequest> request) {
135         HttpServletRequest rawRequest = (HttpServletRequest) request.getRawRequest();
136         if (rawRequest != null) {
137             return (String) rawRequest.getSession().getAttribute(Session.HTTP_SESSION_BINDING_ATTRIBUTE);
138         }
139
140         return null;
141     }
142 }