Rename AssertionConsumer
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / serviceprovider / FilterSupportImpl.java
1 /*
2  * Copyright [2005] [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 /*
18  * FilterSupportImpl.java
19  * 
20  * Provide access to the Filter to configuration information
21  * and Session data.
22  */
23 package edu.internet2.middleware.shibboleth.serviceprovider;
24
25 import java.util.Map;
26
27 import javax.servlet.http.HttpServletRequest;
28
29 import org.opensaml.SAMLException;
30
31 import x0.maceShibbolethTargetConfig1.SessionsDocument.Sessions;
32
33 import edu.internet2.middleware.shibboleth.aap.AAP;
34 import edu.internet2.middleware.shibboleth.aap.AttributeRule;
35 import edu.internet2.middleware.shibboleth.resource.FilterSupport;
36 import edu.internet2.middleware.shibboleth.serviceprovider.ServiceProviderConfig.ApplicationInfo;
37
38 /**
39  * Provide access from the Filter to the /shibboleth configuration and Sessions.
40  * 
41  * @author Howard Gilbert
42  */
43 public class FilterSupportImpl implements FilterSupport {
44     
45     public static ServiceProviderContext context = ServiceProviderContext.getInstance();
46
47     /**
48      * Given a Resource URL, go to the RequestMap logic to find an applicationId.
49      * 
50      * @param url The URL of the Resource presented by the browser
51      * @return applicationId string
52      */
53     public String getApplicationId(String url) {
54         ServiceProviderConfig config = context.getServiceProviderConfig();
55         String applicationId = config.mapRequest(url);
56         return applicationId;
57     }
58     
59     /**
60      * Get the "providerId" (site name) of the ServiceProvider
61      * 
62      * @param applicationId 
63      * @return providerId string
64      */
65     public String getProviderId(String applicationId) {
66         ServiceProviderConfig config = context.getServiceProviderConfig();
67         ApplicationInfo application = config.getApplication(applicationId);
68         String providerId = application.getApplicationConfig().getProviderId();
69         return providerId;
70     }
71     
72     /**
73      * Get the URL of the local AssertionConsumerServlet.
74      * 
75      * @param applicationId
76      * @return URL string
77      */
78     public String getShireUrl(String applicationId) {
79         ServiceProviderConfig config = context.getServiceProviderConfig();
80         ApplicationInfo application = config.getApplication(applicationId);
81         String shireUrl = application.getApplicationConfig().getSessions().getShireURL();
82         return shireUrl;
83     }
84     
85     /**
86      * Get the URL to which the Browser should be initially redirected.
87      * 
88      * @param applicationId
89      * @return URL string
90      */
91     public String getWayfUrl(String applicationId) {
92         ServiceProviderConfig config = context.getServiceProviderConfig();
93         ApplicationInfo application = config.getApplication(applicationId);
94         String wayfUrl = application.getApplicationConfig().getSessions().getWayfURL();
95         return wayfUrl;
96     }
97     
98         /**
99          * Does the requested resource require Shibboleth authentication?
100          * 
101          * @param url  request url
102          * @return     true if Shibboleth is required
103          */
104         public boolean isProtected(String url) {
105             // TODO Add some real logic. This is just a placeholder
106             if (url.endsWith("test.txt"))
107                 return true;
108             return false;
109         }
110
111         /**
112          * Get attributes for this Session 
113          * 
114          * @param sessionId
115          * @param applicationId
116          * @return Map of (attribute,value) pairs
117          */
118     public Map /*<String,String>*/ 
119     getSessionAttributes(String sessionId, String applicationId) {
120         SessionManager sm = context.getSessionManager();
121         Session session = 
122             sm.findSession(sessionId, applicationId);
123         if (session==null)
124             return null;
125         Map /*<String,String>*/ attributes = SessionManager.mapAttributes(session);
126         return attributes;
127     }
128
129     /**
130      * Map attribute name to pseudo-HTTP-Headers
131      * 
132      * @param attributeName
133      * @param applicationId
134      * @return null or Header name string
135      */
136     public String getHeader(String attributeName, String applicationId) {
137         ServiceProviderConfig config = context.getServiceProviderConfig();
138         ApplicationInfo application = config.getApplication(applicationId);
139         AAP[] providers = application.getAAPProviders();
140         for (int i=0;i<providers.length;i++) {
141             AAP aap = providers[i];
142             AttributeRule rule = aap.lookup(attributeName, null);
143             if (rule!=null)
144                 return rule.getHeader();
145         }
146         return null;
147     }
148
149     /**
150      * @param ipaddr
151      * @param request
152      * @param applicationId
153      * @param shireURL
154      * @param providerId
155      * @return
156      */
157     public String createSessionFromPost(
158             String ipaddr, 
159             HttpServletRequest request, 
160             String applicationId, 
161             String shireURL, 
162             String providerId,
163             String emptySessionId) {
164         String sessionid;
165         try {
166             sessionid = AssertionConsumerServlet.createSessionFromPost(
167                     ipaddr, request, applicationId, shireURL, providerId,emptySessionId);
168         } catch (SAMLException e) {
169             return null;
170         }
171         return sessionid;
172     }
173
174
175     public boolean getShireSSL(String applicationId) {
176         ServiceProviderConfig config = context.getServiceProviderConfig();
177         ApplicationInfo appinfo = config.getApplication(applicationId);
178         Sessions appSessionValues = appinfo.getApplicationConfig().getSessions();
179         return appSessionValues.getShireSSL();
180     }
181
182     /**
183      * Create empty Session so SessionID can be written as a Cookie
184      * before redirecting the Browser to the IDP.
185      * 
186      * @param applicationId
187      * @return SessionId of empty session
188      */
189     public String createSession(String applicationId) {
190         return context.getSessionManager().newSession(
191                 applicationId, null, null, null, null, null);
192     }
193 }