Begin fleshing out request/response profile objects
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / profile / ShibbolethProfileRequest.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.http.HttpServletRequest;
20
21 import org.opensaml.common.binding.BindingException;
22 import org.opensaml.common.binding.MessageDecoder;
23 import org.opensaml.xml.XMLObject;
24
25 import edu.internet2.middleware.shibboleth.common.profile.ProfileRequest;
26 import edu.internet2.middleware.shibboleth.common.relyingparty.RelyingPartyConfiguration;
27 import edu.internet2.middleware.shibboleth.common.relyingparty.RelyingPartyManager;
28 import edu.internet2.middleware.shibboleth.common.session.SessionManager;
29 import edu.internet2.middleware.shibboleth.idp.session.Session;
30
31 /**
32  * Shibboleth {@link ProfileRequest}.
33  */
34 public class ShibbolethProfileRequest implements ProfileRequest<HttpServletRequest, Session> {
35
36     /** Decoder used to decode the incomming request. */
37     private MessageDecoder<HttpServletRequest> messageDecoder;
38
39     /** The in comming request. */
40     private HttpServletRequest rawRequest;
41
42     /** Configuration information for the requesting party. */
43     private RelyingPartyConfiguration rpConfiguration;
44
45     /** The decoded request message. */
46     private XMLObject decodedMessage;
47
48     /** The current user session. */
49     private Session userSession;
50
51     /**
52      * Constructor.
53      * 
54      * @param request the incomming HTTP request
55      * @param decoder the decoder for the request, all information but the request must be set already
56      * @param sessionManager the manager of current user sessions
57      * @param rpConfigManager the relying party configuration manager
58      */
59     public ShibbolethProfileRequest(HttpServletRequest request, MessageDecoder<HttpServletRequest> decoder,
60             SessionManager<Session> sessionManager, RelyingPartyManager rpConfigManager){
61
62         rawRequest = request;
63         userSession = sessionManager.getSession(request.getSession().getId());
64         messageDecoder = decoder;
65     }
66
67     /** {@inheritDoc} */
68     public MessageDecoder<HttpServletRequest> getMessageDecoder() {
69         return messageDecoder;
70     }
71
72     /** {@inheritDoc} */
73     public HttpServletRequest getRawRequest() {
74         return rawRequest;
75     }
76
77     /** {@inheritDoc} */
78     public RelyingPartyConfiguration getRelyingPartyConfiguration() {
79         return rpConfiguration;
80     }
81
82     /** {@inheritDoc} */
83     public synchronized XMLObject getRequest() throws BindingException{
84         if(decodedMessage == null){
85             messageDecoder.setRequest(rawRequest);
86             messageDecoder.decode();
87             decodedMessage = messageDecoder.getSAMLMessage();
88         }
89         return decodedMessage;
90     }
91
92     /** {@inheritDoc} */
93     public Session getSession() {
94         return userSession;
95     }
96 }