Feed shibboleth.xml configuration data to Filter
[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 edu.internet2.middleware.shibboleth.common.AAP;
21 import edu.internet2.middleware.shibboleth.common.AttributeRule;
22 import edu.internet2.middleware.shibboleth.resource.FilterSupport;
23 import edu.internet2.middleware.shibboleth.serviceprovider.ServiceProviderConfig.ApplicationInfo;
24
25 /**
26  * Provide access from the Filter to the /shibboleth configuration and Sessions.
27  * 
28  * @author Howard Gilbert
29  */
30 public class FilterSupportImpl implements FilterSupport {
31     
32     public static ServiceProviderContext context = ServiceProviderContext.getInstance();
33
34     /**
35      * Given a Resource URL, go to the RequestMap logic to find an applicationId.
36      * 
37      * @param url The URL of the Resource presented by the browser
38      * @return applicationId string
39      */
40     public String getApplicationId(String url) {
41         ServiceProviderConfig config = context.getServiceProviderConfig();
42         String applicationId = config.mapRequest(url);
43         return applicationId;
44     }
45     
46     /**
47      * Get the "providerId" (site name) of the ServiceProvider
48      * 
49      * @param applicationId 
50      * @return providerId string
51      */
52     public String getProviderId(String applicationId) {
53         ServiceProviderConfig config = context.getServiceProviderConfig();
54         ApplicationInfo application = config.getApplication(applicationId);
55         String providerId = application.getApplicationConfig().getProviderId();
56         return providerId;
57     }
58     
59     /**
60      * Get the URL of the local AuthenticationAssertionConsumerServlet.
61      * 
62      * @param applicationId
63      * @return URL string
64      */
65     public String getShireUrl(String applicationId) {
66         ServiceProviderConfig config = context.getServiceProviderConfig();
67         ApplicationInfo application = config.getApplication(applicationId);
68         String shireUrl = application.getApplicationConfig().getSessions().getShireURL();
69         return shireUrl;
70     }
71     
72     /**
73      * Get the URL to which the Browser should be initially redirected.
74      * 
75      * @param applicationId
76      * @return URL string
77      */
78     public String getWayfUrl(String applicationId) {
79         ServiceProviderConfig config = context.getServiceProviderConfig();
80         ApplicationInfo application = config.getApplication(applicationId);
81         String wayfUrl = application.getApplicationConfig().getSessions().getWayfURL();
82         return wayfUrl;
83     }
84     
85         /**
86          * Does the requested resource require Shibboleth authentication?
87          * 
88          * @param url  request url
89          * @return     true if Shibboleth is required
90          */
91         public boolean isProtected(String url) {
92             // TODO Add some real logic. This is just a placeholder
93             if (url.endsWith("test.txt"))
94                 return true;
95             return false;
96         }
97
98         /**
99          * Get attributes for this Session 
100          * 
101          * @param sessionId
102          * @param applicationId
103          * @return Map of (attribute,value) pairs
104          */
105     public Map /*<String,String>*/ 
106     getSessionAttributes(String sessionId, String applicationId) {
107         SessionManager sm = context.getSessionManager();
108         Session session = 
109             sm.findSession(sessionId, applicationId);
110         if (session==null)
111             return null;
112         Map /*<String,String>*/ attributes = SessionManager.mapAttributes(session);
113         return attributes;
114     }
115
116     /**
117      * Map attribute name to pseudo-HTTP-Headers
118      * 
119      * @param attributeName
120      * @param applicationId
121      * @return null or Header name string
122      */
123     public String getHeader(String attributeName, String applicationId) {
124         ServiceProviderConfig config = context.getServiceProviderConfig();
125         ApplicationInfo application = config.getApplication(applicationId);
126         AAP[] providers = application.getAAPProviders();
127         for (int i=0;i<providers.length;i++) {
128             AAP aap = providers[i];
129             AttributeRule rule = aap.lookup(attributeName, null);
130             if (rule!=null)
131                 return rule.getHeader();
132         }
133         return null;
134     }
135
136
137 }