1
19
20 package com.liferay.portlet.enterpriseadmin.action;
21
22 import com.liferay.portal.kernel.servlet.SessionErrors;
23 import com.liferay.portal.kernel.util.Constants;
24 import com.liferay.portal.kernel.util.ParamUtil;
25 import com.liferay.portal.kernel.util.Validator;
26 import com.liferay.portal.model.Company;
27 import com.liferay.portal.model.RoleConstants;
28 import com.liferay.portal.security.auth.PrincipalException;
29 import com.liferay.portal.security.ldap.PortalLDAPUtil;
30 import com.liferay.portal.service.CompanyServiceUtil;
31 import com.liferay.portal.service.RoleLocalServiceUtil;
32 import com.liferay.portal.servlet.filters.sso.cas.CASFilter;
33 import com.liferay.portal.struts.PortletAction;
34 import com.liferay.portal.util.PortalUtil;
35 import com.liferay.portal.util.PrefsPropsUtil;
36 import com.liferay.portal.util.PropsKeys;
37 import com.liferay.util.ldap.LDAPUtil;
38
39 import javax.portlet.ActionRequest;
40 import javax.portlet.ActionResponse;
41 import javax.portlet.PortletConfig;
42 import javax.portlet.PortletPreferences;
43
44 import org.apache.struts.action.ActionForm;
45 import org.apache.struts.action.ActionMapping;
46
47
54 public class EditSettingsAction extends PortletAction {
55
56 public void processAction(
57 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
58 ActionRequest actionRequest, ActionResponse actionResponse)
59 throws Exception {
60
61 long companyId = PortalUtil.getCompanyId(actionRequest);
62 long userId = PortalUtil.getUserId(actionRequest);
63
64 if (!RoleLocalServiceUtil.hasUserRole(
65 userId, companyId, RoleConstants.ADMINISTRATOR, true)) {
66
67 SessionErrors.add(
68 actionRequest, PrincipalException.class.getName());
69
70 setForward(actionRequest, "portlet.enterprise_admin.error");
71
72 return;
73 }
74
75 PortletPreferences prefs = PrefsPropsUtil.getPreferences(companyId);
76
77 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
78
79 if (cmd.equals("updateCAS")) {
80 updateCAS(actionRequest, companyId, prefs);
81 }
82 else if (cmd.equals("updateDefaultGroupsAndRoles")) {
83 updateDefaultGroupsAndRoles(actionRequest, prefs);
84 }
85 else if (cmd.equals("updateEmails")) {
86 updateEmails(actionRequest, prefs);
87 }
88 else if (cmd.equals("updateLdap")) {
89 updateLdap(actionRequest, companyId, prefs);
90 }
91 else if (cmd.equals("updateMailHostNames")) {
92 updateMailHostNames(actionRequest, prefs);
93 }
94 else if (cmd.equals("updateNtlm")) {
95 updateNtlm(actionRequest, companyId, prefs);
96 }
97 else if (cmd.equals("updateOpenId")) {
98 updateOpenId(actionRequest, prefs);
99 }
100 else if (cmd.equals("updateOpenSSO")) {
101 updateOpenSSO(actionRequest, companyId, prefs);
102 }
103 else if (cmd.equals("updateReservedUsers")) {
104 updateReservedUsers(actionRequest, prefs);
105 }
106 else if (cmd.equals("updateSecurity")) {
107 updateSecurity(actionRequest);
108 }
109 else if (cmd.equals("updateSiteMinder")) {
110 updateSiteMinder(actionRequest, companyId, prefs);
111 }
112
113 if (SessionErrors.isEmpty(actionRequest)) {
114 if (!cmd.equals("updateLdap") && !cmd.equals("updateSecurity")) {
115 prefs.store();
116 }
117
118 sendRedirect(actionRequest, actionResponse);
119 }
120 else {
121 setForward(actionRequest, "portlet.enterprise_admin.view");
122 }
123 }
124
125 protected void updateCAS(
126 ActionRequest actionRequest, long companyId,
127 PortletPreferences prefs)
128 throws Exception {
129
130 boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
131 boolean importFromLdap = ParamUtil.getBoolean(
132 actionRequest, "importFromLdap");
133 String loginUrl = ParamUtil.getString(actionRequest, "loginUrl");
134 String logoutUrl = ParamUtil.getString(actionRequest, "logoutUrl");
135 String serverName = ParamUtil.getString(actionRequest, "serverName");
136 String serviceUrl = ParamUtil.getString(actionRequest, "serviceUrl");
137 String validateUrl = ParamUtil.getString(actionRequest, "validateUrl");
138
139 prefs.setValue(
140 PropsKeys.CAS_AUTH_ENABLED, String.valueOf(enabled));
141 prefs.setValue(
142 PropsKeys.CAS_IMPORT_FROM_LDAP, String.valueOf(importFromLdap));
143 prefs.setValue(PropsKeys.CAS_LOGIN_URL, loginUrl);
144 prefs.setValue(PropsKeys.CAS_LOGOUT_URL, logoutUrl);
145 prefs.setValue(PropsKeys.CAS_SERVER_NAME, serverName);
146 prefs.setValue(PropsKeys.CAS_SERVICE_URL, serviceUrl);
147 prefs.setValue(PropsKeys.CAS_VALIDATE_URL, validateUrl);
148
149 prefs.store();
150
151 CASFilter.reload(companyId);
152 }
153
154 protected void updateDefaultGroupsAndRoles(
155 ActionRequest actionRequest, PortletPreferences prefs)
156 throws Exception {
157
158 String defaultGroupNames = ParamUtil.getString(
159 actionRequest, "defaultGroupNames");
160 String defaultRoleNames = ParamUtil.getString(
161 actionRequest, "defaultRoleNames");
162 String defaultUserGroupNames = ParamUtil.getString(
163 actionRequest, "defaultUserGroupNames");
164
165 prefs.setValue(PropsKeys.ADMIN_DEFAULT_GROUP_NAMES, defaultGroupNames);
166 prefs.setValue(PropsKeys.ADMIN_DEFAULT_ROLE_NAMES, defaultRoleNames);
167 prefs.setValue(
168 PropsKeys.ADMIN_DEFAULT_USER_GROUP_NAMES, defaultUserGroupNames);
169 }
170
171 protected void updateEmails(
172 ActionRequest actionRequest, PortletPreferences prefs)
173 throws Exception {
174
175 String tabs3 = ParamUtil.getString(actionRequest, "tabs3");
176
177 if (tabs3.equals("account-created-notification")) {
178 String emailUserAddedEnabled = ParamUtil.getString(
179 actionRequest, "emailUserAddedEnabled");
180 String emailUserAddedSubject = ParamUtil.getString(
181 actionRequest, "emailUserAddedSubject");
182 String emailUserAddedBody = ParamUtil.getString(
183 actionRequest, "emailUserAddedBody");
184
185 if (Validator.isNull(emailUserAddedSubject)) {
186 SessionErrors.add(actionRequest, "emailUserAddedSubject");
187 }
188 else if (Validator.isNull(emailUserAddedBody)) {
189 SessionErrors.add(actionRequest, "emailUserAddedBody");
190 }
191 else {
192 prefs.setValue(
193 PropsKeys.ADMIN_EMAIL_USER_ADDED_ENABLED,
194 emailUserAddedEnabled);
195 prefs.setValue(
196 PropsKeys.ADMIN_EMAIL_USER_ADDED_SUBJECT,
197 emailUserAddedSubject);
198 prefs.setValue(
199 PropsKeys.ADMIN_EMAIL_USER_ADDED_BODY, emailUserAddedBody);
200 }
201 }
202 else if (tabs3.equals("password-changed-notification")) {
203 String emailPasswordSentEnabled = ParamUtil.getString(
204 actionRequest, "emailPasswordSentEnabled");
205 String emailPasswordSentSubject = ParamUtil.getString(
206 actionRequest, "emailPasswordSentSubject");
207 String emailPasswordSentBody = ParamUtil.getString(
208 actionRequest, "emailPasswordSentBody");
209
210 if (Validator.isNull(emailPasswordSentSubject)) {
211 SessionErrors.add(actionRequest, "emailPasswordSentSubject");
212 }
213 else if (Validator.isNull(emailPasswordSentBody)) {
214 SessionErrors.add(actionRequest, "emailPasswordSentBody");
215 }
216 else {
217 prefs.setValue(
218 PropsKeys.ADMIN_EMAIL_PASSWORD_SENT_ENABLED,
219 emailPasswordSentEnabled);
220 prefs.setValue(
221 PropsKeys.ADMIN_EMAIL_PASSWORD_SENT_SUBJECT,
222 emailPasswordSentSubject);
223 prefs.setValue(
224 PropsKeys.ADMIN_EMAIL_PASSWORD_SENT_BODY,
225 emailPasswordSentBody);
226 }
227 }
228 else {
229 String emailFromName = ParamUtil.getString(
230 actionRequest, "emailFromName");
231 String emailFromAddress = ParamUtil.getString(
232 actionRequest, "emailFromAddress");
233
234 if (Validator.isNull(emailFromName)) {
235 SessionErrors.add(actionRequest, "emailFromName");
236 }
237 else if (!Validator.isEmailAddress(emailFromAddress)) {
238 SessionErrors.add(actionRequest, "emailFromAddress");
239 }
240 else {
241 prefs.setValue(PropsKeys.ADMIN_EMAIL_FROM_NAME, emailFromName);
242 prefs.setValue(
243 PropsKeys.ADMIN_EMAIL_FROM_ADDRESS, emailFromAddress);
244 }
245 }
246 }
247
248 protected void updateLdap(
249 ActionRequest actionRequest, long companyId,
250 PortletPreferences prefs)
251 throws Exception {
252
253 boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
254 boolean required = ParamUtil.getBoolean(actionRequest, "required");
255 String baseProviderURL = ParamUtil.getString(
256 actionRequest, "baseProviderURL");
257 String baseDN = ParamUtil.getString(actionRequest, "baseDN");
258 String principal = ParamUtil.getString(actionRequest, "principal");
259 String credentials = ParamUtil.getString(actionRequest, "credentials");
260 String searchFilter = ParamUtil.getString(
261 actionRequest, "searchFilter");
262 String userDefaultObjectClasses = ParamUtil.getString(
263 actionRequest, "userDefaultObjectClasses");
264
265 String userMappings =
266 "screenName=" +
267 ParamUtil.getString(actionRequest, "userMappingScreenName") +
268 "\npassword=" +
269 ParamUtil.getString(actionRequest, "userMappingPassword") +
270 "\nemailAddress=" +
271 ParamUtil.getString(actionRequest, "userMappingEmailAddress") +
272 "\nfullName=" +
273 ParamUtil.getString(actionRequest, "userMappingFullName") +
274 "\nfirstName=" +
275 ParamUtil.getString(actionRequest, "userMappingFirstName") +
276 "\nlastName=" +
277 ParamUtil.getString(actionRequest, "userMappingLastName") +
278 "\njobTitle=" +
279 ParamUtil.getString(actionRequest, "userMappingJobTitle") +
280 "\ngroup=" + ParamUtil.getString(actionRequest, "userMappingGroup");
281
282 String groupMappings =
283 "groupName=" +
284 ParamUtil.getString(actionRequest, "groupMappingGroupName") +
285 "\ndescription=" +
286 ParamUtil.getString(actionRequest, "groupMappingDescription") +
287 "\nuser=" + ParamUtil.getString(actionRequest, "groupMappingUser");
288
289 boolean importEnabled = ParamUtil.getBoolean(
290 actionRequest, "importEnabled");
291 boolean importOnStartup = ParamUtil.getBoolean(
292 actionRequest, "importOnStartup");
293 long importInterval = ParamUtil.getLong(
294 actionRequest, "importInterval");
295 String importUserSearchFilter = ParamUtil.getString(
296 actionRequest, "importUserSearchFilter");
297 String importGroupSearchFilter = ParamUtil.getString(
298 actionRequest, "importGroupSearchFilter");
299 boolean exportEnabled = ParamUtil.getBoolean(
300 actionRequest, "exportEnabled");
301 String usersDN = ParamUtil.getString(actionRequest, "usersDN");
302 String groupsDN = ParamUtil.getString(actionRequest, "groupsDN");
303 boolean passwordPolicyEnabled = ParamUtil.getBoolean(
304 actionRequest, "passwordPolicyEnabled");
305
306 try {
307 if (enabled) {
308 String fullProviderURL = LDAPUtil.getFullProviderURL(
309 baseProviderURL, baseDN);
310
311 PortalLDAPUtil.getContext(
312 companyId, fullProviderURL, principal, credentials);
313 }
314 }
315 catch (Exception e) {
316 SessionErrors.add(actionRequest, "ldapAuthentication");
317
318 return;
319 }
320
321 prefs.setValue(PropsKeys.LDAP_AUTH_ENABLED, String.valueOf(enabled));
322 prefs.setValue(PropsKeys.LDAP_AUTH_REQUIRED, String.valueOf(required));
323 prefs.setValue(PropsKeys.LDAP_BASE_PROVIDER_URL, baseProviderURL);
324 prefs.setValue(PropsKeys.LDAP_BASE_DN, baseDN);
325 prefs.setValue(PropsKeys.LDAP_SECURITY_PRINCIPAL, principal);
326 prefs.setValue(PropsKeys.LDAP_SECURITY_CREDENTIALS, credentials);
327 prefs.setValue(PropsKeys.LDAP_AUTH_SEARCH_FILTER, searchFilter);
328 prefs.setValue(
329 PropsKeys.LDAP_USER_DEFAULT_OBJECT_CLASSES,
330 userDefaultObjectClasses);
331 prefs.setValue(PropsKeys.LDAP_USER_MAPPINGS, userMappings);
332 prefs.setValue(PropsKeys.LDAP_GROUP_MAPPINGS, groupMappings);
333 prefs.setValue(
334 PropsKeys.LDAP_IMPORT_ENABLED, String.valueOf(importEnabled));
335 prefs.setValue(
336 PropsKeys.LDAP_IMPORT_ON_STARTUP, String.valueOf(importOnStartup));
337 prefs.setValue(
338 PropsKeys.LDAP_IMPORT_INTERVAL, String.valueOf(importInterval));
339 prefs.setValue(
340 PropsKeys.LDAP_IMPORT_USER_SEARCH_FILTER, importUserSearchFilter);
341 prefs.setValue(
342 PropsKeys.LDAP_IMPORT_GROUP_SEARCH_FILTER, importGroupSearchFilter);
343 prefs.setValue(
344 PropsKeys.LDAP_EXPORT_ENABLED, String.valueOf(exportEnabled));
345 prefs.setValue(PropsKeys.LDAP_USERS_DN, usersDN);
346 prefs.setValue(PropsKeys.LDAP_GROUPS_DN, groupsDN);
347 prefs.setValue(
348 PropsKeys.LDAP_PASSWORD_POLICY_ENABLED,
349 String.valueOf(passwordPolicyEnabled));
350
351 prefs.store();
352 }
353
354 protected void updateMailHostNames(
355 ActionRequest actionRequest, PortletPreferences prefs)
356 throws Exception {
357
358 String mailHostNames = ParamUtil.getString(
359 actionRequest, "mailHostNames");
360
361 prefs.setValue(PropsKeys.ADMIN_MAIL_HOST_NAMES, mailHostNames);
362 }
363
364 protected void updateNtlm(
365 ActionRequest actionRequest, long companyId,
366 PortletPreferences prefs)
367 throws Exception {
368
369 boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
370 String domainController = ParamUtil.getString(
371 actionRequest, "domainController");
372 String domain = ParamUtil.getString(actionRequest, "domain");
373
374 prefs.setValue(
375 PropsKeys.NTLM_AUTH_ENABLED, String.valueOf(enabled));
376 prefs.setValue(PropsKeys.NTLM_DOMAIN_CONTROLLER, domainController);
377 prefs.setValue(PropsKeys.NTLM_DOMAIN, domain);
378
379 prefs.store();
380 }
381
382 protected void updateOpenId(
383 ActionRequest actionRequest, PortletPreferences prefs)
384 throws Exception {
385
386 boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
387
388 prefs.setValue(PropsKeys.OPEN_ID_AUTH_ENABLED, String.valueOf(enabled));
389
390 prefs.store();
391 }
392
393 protected void updateOpenSSO(
394 ActionRequest actionRequest, long companyId,
395 PortletPreferences prefs)
396 throws Exception {
397
398 boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
399 String loginUrl = ParamUtil.getString(actionRequest, "loginUrl");
400 String logoutUrl = ParamUtil.getString(actionRequest, "logoutUrl");
401 String serviceUrl = ParamUtil.getString(actionRequest, "serviceUrl");
402 String screenName = ParamUtil.getString(
403 actionRequest, "screenNameAttr");
404 String emailAddress = ParamUtil.getString(
405 actionRequest, "emailAddressAttr");
406 String firstName = ParamUtil.getString(actionRequest, "firstNameAttr");
407 String lastName = ParamUtil.getString(actionRequest, "lastNameAttr");
408
409 prefs.setValue(
410 PropsKeys.OPEN_SSO_AUTH_ENABLED, String.valueOf(enabled));
411 prefs.setValue(PropsKeys.OPEN_SSO_LOGIN_URL, loginUrl);
412 prefs.setValue(PropsKeys.OPEN_SSO_LOGOUT_URL, logoutUrl);
413 prefs.setValue(PropsKeys.OPEN_SSO_SERVICE_URL, serviceUrl);
414 prefs.setValue(PropsKeys.OPEN_SSO_SCREEN_NAME_ATTR, screenName);
415 prefs.setValue(PropsKeys.OPEN_SSO_EMAIL_ADDRESS_ATTR, emailAddress);
416 prefs.setValue(PropsKeys.OPEN_SSO_FIRST_NAME_ATTR, firstName);
417 prefs.setValue(PropsKeys.OPEN_SSO_LAST_NAME_ATTR, lastName);
418
419 prefs.store();
420 }
421
422 protected void updateReservedUsers(
423 ActionRequest actionRequest, PortletPreferences prefs)
424 throws Exception {
425
426 String reservedScreenNames = ParamUtil.getString(
427 actionRequest, "reservedScreenNames");
428 String reservedEmailAddresses = ParamUtil.getString(
429 actionRequest, "reservedEmailAddresses");
430
431 prefs.setValue(
432 PropsKeys.ADMIN_RESERVED_SCREEN_NAMES, reservedScreenNames);
433 prefs.setValue(
434 PropsKeys.ADMIN_RESERVED_EMAIL_ADDRESSES, reservedEmailAddresses);
435 }
436
437 protected void updateSecurity(ActionRequest actionRequest)
438 throws Exception {
439
440 Company company = PortalUtil.getCompany(actionRequest);
441
442 String authType = ParamUtil.getString(actionRequest, "authType");
443 boolean autoLogin = ParamUtil.getBoolean(actionRequest, "autoLogin");
444 boolean sendPassword = ParamUtil.getBoolean(
445 actionRequest, "sendPassword");
446 boolean strangers = ParamUtil.getBoolean(actionRequest, "strangers");
447 boolean strangersWithMx = ParamUtil.getBoolean(
448 actionRequest, "strangersWithMx");
449 boolean strangersVerify = ParamUtil.getBoolean(
450 actionRequest, "strangersVerify");
451
452 CompanyServiceUtil.updateSecurity(
453 company.getCompanyId(), authType, autoLogin, sendPassword,
454 strangers, strangersWithMx, strangersVerify,
455 company.isCommunityLogo());
456 }
457
458 protected void updateSiteMinder(
459 ActionRequest actionRequest, long companyId,
460 PortletPreferences prefs)
461 throws Exception {
462
463 boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
464 boolean importFromLdap = ParamUtil.getBoolean(
465 actionRequest, "importFromLdap");
466 String userHeader = ParamUtil.getString(actionRequest, "userHeader");
467
468 prefs.setValue(
469 PropsKeys.SITEMINDER_AUTH_ENABLED, String.valueOf(enabled));
470 prefs.setValue(
471 PropsKeys.SITEMINDER_IMPORT_FROM_LDAP,
472 String.valueOf(importFromLdap));
473 prefs.setValue(PropsKeys.SITEMINDER_USER_HEADER, userHeader);
474
475 prefs.store();
476 }
477
478 }