1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package net.sf.jguard.core.authentication.configuration;
29
30
31 import java.security.AccessController;
32 import java.security.Policy;
33 import java.security.PrivilegedAction;
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.Collection;
37 import java.util.HashMap;
38 import java.util.Iterator;
39 import java.util.List;
40 import java.util.Map;
41
42 import javax.security.auth.AuthPermission;
43 import javax.security.auth.login.AppConfigurationEntry;
44 import javax.security.auth.login.Configuration;
45 import net.sf.jguard.core.CoreConstants;
46 import net.sf.jguard.core.PolicyEnforcementPointOptions;
47 import net.sf.jguard.core.authentication.manager.AuthenticationHelper;
48 import net.sf.jguard.core.authentication.manager.AuthenticationManager;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52
53
54
55
56
57
58
59
60 public final class JGuardConfiguration extends Configuration {
61
62 private Collection internalConfigs = null;
63 private Map<String,List> appConfigurations = null;
64 private static Logger logger = LoggerFactory.getLogger(JGuardConfiguration.class.getName());
65
66
67
68 public JGuardConfiguration() {
69 super();
70 logger.debug("##### JGuardConfiguration #####");
71
72 internalConfigs = new ArrayList();
73 appConfigurations = new HashMap<String,List>();
74 final JGuardConfiguration jconf = this;
75 final String applicationName = System.getProperty(CoreConstants.APPLICATION_NAME_SYSTEM_PROPERTY);
76 final String configurationLocation = System.getProperty(CoreConstants.AUTHENTICATION_CONFIGURATION_FILE);
77 if(applicationName==null ||"".equals(applicationName)){
78 throw new IllegalStateException(CoreConstants.APPLICATION_NAME_SYSTEM_PROPERTY+" system property has not been set");
79 }
80 String appHomePath = System.getProperty(CoreConstants.APPLICATION_HOME_PATH);
81 if(appHomePath!=null && !appHomePath.endsWith("/")){
82 appHomePath+="/";
83 }
84
85 if(appHomePath==null){
86 appHomePath="";
87 }
88 loadConfigDataAndAuthenticationManager(applicationName, configurationLocation,jconf,appHomePath);
89
90
91
92 }
93
94
95
96
97 public JGuardConfiguration(String applicationName,String configurationLocation,String appHomePath) {
98 super();
99 logger.debug("##### JGuardConfiguration #####");
100
101 internalConfigs = new ArrayList();
102 appConfigurations = new HashMap<String,List>();
103 final JGuardConfiguration jconf = this;
104
105 if(applicationName==null ||"".equals(applicationName)){
106 throw new IllegalStateException(" String applicationName argument in the constructor is empty or null");
107 }
108
109 loadConfigDataAndAuthenticationManager(applicationName,configurationLocation,jconf,appHomePath);
110
111 }
112
113
114
115
116
117
118 public void refresh() {
119 AccessController.checkPermission(new AuthPermission("refreshLoginConfiguration"));
120
121 if(internalConfigs.size()>0){
122 Iterator itConfigs = internalConfigs.iterator();
123 while(itConfigs.hasNext()){
124 Configuration tempConfig = (Configuration) itConfigs.next();
125 tempConfig.refresh();
126 }
127 }
128
129 }
130
131
132
133
134
135
136
137 public AppConfigurationEntry[] getAppConfigurationEntry(
138 String applicationName) {
139 Collection appInternalEntries = new ArrayList();
140 Iterator itConfigs = internalConfigs.iterator();
141 while(itConfigs.hasNext()){
142 Configuration tempConfig = (Configuration) itConfigs.next();
143 if (tempConfig == null){
144 itConfigs.remove();
145 logger.warn("the default Configuration implementation has been removed from the JGuardConfiguration which imported it");
146 } else if( tempConfig.getAppConfigurationEntry(applicationName)!= null){
147 appInternalEntries.addAll(Arrays.asList(tempConfig.getAppConfigurationEntry(applicationName)));
148 }
149 }
150
151 List jGuardAppConfigEntries = (List)appConfigurations.get(applicationName);
152
153 if(jGuardAppConfigEntries!=null){
154 appInternalEntries.addAll(jGuardAppConfigEntries);
155 }
156 if(appInternalEntries.size()>0){
157 return (AppConfigurationEntry[]) appInternalEntries.toArray(new AppConfigurationEntry[appInternalEntries.size()]);
158 }
159
160 return null;
161
162 }
163
164
165
166
167
168
169
170
171 public void addConfigEntriesForApplication(String applicationName,List entries) {
172 if(entries == null || entries.size() == 0){
173 logger.warn(" entries provided are null or empty ");
174 return;
175 }
176
177 List applicationEntries = appConfigurations.get(applicationName);
178 if(applicationEntries==null){
179
180 appConfigurations.put(applicationName,entries);
181 }
182
183
184
185
186 }
187
188
189
190
191
192
193
194
195 public void addConfigEntriesLikeApplication(String applicationName,String applicationTemplateName) {
196 List applicationEntries = appConfigurations.get(applicationTemplateName);
197 if(applicationEntries== null){
198 logger.error(" there is no applications registered with your applicationName and password ");
199 return;
200 }
201 appConfigurations.put(applicationName,applicationEntries);
202 }
203
204
205
206
207
208
209
210 protected void includeConfiguration(Configuration configuration){
211
212 if(!configuration.getClass().getName().equals(JGuardConfiguration.class.getName())
213 &&!internalConfigs.contains(configuration)){
214 internalConfigs.add(configuration);
215 }
216 }
217
218 private boolean loadConfigDataAndAuthenticationManager(final String applicationName,final String configurationLocation , final JGuardConfiguration jconf,String appHomePath) throws IllegalArgumentException {
219 final String applicationHomePath = appHomePath;
220 final JGuardConfiguration conf = this;
221 AccessController.doPrivileged(new PrivilegedAction() {
222 public Object run() {
223 logger.debug("##### Policy.getPolicy= #####"+Policy.getPolicy().getClass().getName());
224 Map authenticationSettings = ConfigurationHelper.loadConfiguration(configurationLocation, applicationHomePath);
225
226
227 Map authManagerOptions = (Map)authenticationSettings.get(CoreConstants.AUTHENTICATION_MANAGER_OPTIONS);
228 authManagerOptions.put(PolicyEnforcementPointOptions.APPLICATION_NAME.getLabel(), applicationName);
229
230
231 List webappEntries = ConfigurationHelper.buildAppConfigurationEntries(applicationName, authenticationSettings, true);
232 addConfigEntriesForApplication(applicationName, webappEntries);
233
234 String authenticationScope = (String)authenticationSettings.get(CoreConstants.SCOPE);
235 if(CoreConstants.JVM_SCOPE.equalsIgnoreCase(authenticationScope)){
236 boolean includeConfigFromJavaParam = Boolean.valueOf((String)authenticationSettings.get(CoreConstants.INCLUDE_CONFIG_FROM_JAVA_PARAM));
237 ConfigurationHelper.installConfiguration(conf,includeConfigFromJavaParam);
238 }
239
240 AuthenticationManager authenticationManager = AuthenticationHelper.initAuthenticationManager(jconf, authenticationSettings, applicationName);
241 return authenticationManager;
242 }
243 });
244 return false;
245 }
246
247
248
249 }