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