/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.settings.authentication.ldap.web.internal.portlet.action;
import com.liferay.portal.kernel.portlet.bridges.mvc.BaseFormMVCActionCommand;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.PermissionThreadLocal;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.security.ldap.authenticator.configuration.LDAPAuthConfiguration;
import com.liferay.portal.security.ldap.configuration.ConfigurationProvider;
import com.liferay.portal.security.ldap.constants.LDAPConstants;
import com.liferay.portal.security.ldap.exportimport.configuration.LDAPExportConfiguration;
import com.liferay.portal.security.ldap.exportimport.configuration.LDAPImportConfiguration;
import com.liferay.portal.settings.web.constants.PortalSettingsPortletKeys;
import java.util.Dictionary;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Tomas Polesovsky
*/
@Component(
immediate = true,
property = {
"javax.portlet.name=" + PortalSettingsPortletKeys.PORTAL_SETTINGS,
"mvc.command.name=/portal_settings/ldap"
},
service = MVCActionCommand.class
)
public class PortalSettingsLDAPFormMVCActionCommand
extends BaseFormMVCActionCommand {
@Override
protected void doProcessAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception {
ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
WebKeys.THEME_DISPLAY);
PermissionChecker permissionChecker =
PermissionThreadLocal.getPermissionChecker();
if (!permissionChecker.isCompanyAdmin(themeDisplay.getCompanyId())) {
SessionErrors.add(actionRequest, PrincipalException.class);
actionResponse.setRenderParameter("mvcPath", "/error.jsp");
return;
}
updateBooleanProperties(
actionRequest, _ldapAuthConfigurationProvider,
themeDisplay.getCompanyId(), LDAPConstants.AUTH_ENABLED,
LDAPConstants.AUTH_REQUIRED, LDAPConstants.PASSWORD_POLICY_ENABLED);
updateStringProperties(
actionRequest, _ldapAuthConfigurationProvider,
themeDisplay.getCompanyId(), LDAPConstants.AUTH_METHOD,
LDAPConstants.PASSWORD_ENCRYPTION_ALGORITHM);
updateBooleanProperties(
actionRequest, _ldapExportConfigurationProvider,
themeDisplay.getCompanyId(), LDAPConstants.EXPORT_ENABLED,
LDAPConstants.EXPORT_GROUP_ENABLED);
updateBooleanProperties(
actionRequest, _ldapImportConfigurationProvider,
themeDisplay.getCompanyId(),
LDAPConstants.IMPORT_CREATE_ROLE_PER_GROUP,
LDAPConstants.IMPORT_ENABLED,
LDAPConstants.IMPORT_GROUP_CACHE_ENABLED,
LDAPConstants.IMPORT_ON_STARTUP,
LDAPConstants.IMPORT_USER_PASSWORD_AUTOGENERATED,
LDAPConstants.IMPORT_USER_PASSWORD_DEFAULT,
LDAPConstants.IMPORT_USER_PASSWORD_ENABLED);
updateIntegerProperties(
actionRequest, _ldapImportConfigurationProvider,
themeDisplay.getCompanyId(), LDAPConstants.IMPORT_INTERVAL);
updateLongProperties(
actionRequest, _ldapImportConfigurationProvider,
themeDisplay.getCompanyId(),
LDAPConstants.IMPORT_LOCK_EXPIRATION_TIME);
updateStringProperties(
actionRequest, _ldapImportConfigurationProvider,
themeDisplay.getCompanyId(), LDAPConstants.IMPORT_METHOD,
LDAPConstants.IMPORT_USER_PASSWORD_DEFAULT,
LDAPConstants.IMPORT_USER_SYNC_STRATEGY);
}
@Override
protected void doValidateForm(
ActionRequest actionRequest, ActionResponse actionResponse) {
ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
WebKeys.THEME_DISPLAY);
LDAPImportConfiguration ldapImportConfiguration =
_ldapImportConfigurationProvider.getConfiguration(
themeDisplay.getCompanyId());
if (!ldapImportConfiguration.importUserPasswordAutogenerated()) {
return;
}
boolean ldapExportEnabled = ParamUtil.getBoolean(
actionRequest, "ldap--" + LDAPConstants.EXPORT_ENABLED + "--");
boolean ldapImportEnabled = ParamUtil.getBoolean(
actionRequest, "ldap--" + LDAPConstants.IMPORT_ENABLED + "--");
if (ldapExportEnabled && ldapImportEnabled) {
SessionErrors.add(
actionRequest, "ldapExportAndImportOnPasswordAutogeneration");
}
}
@Reference(
target = "(factoryPid=com.liferay.portal.security.ldap.authenticator.configuration.LDAPAuthConfiguration)",
unbind = "-"
)
protected void setLDAPAuthConfigurationProvider(
ConfigurationProvider<LDAPAuthConfiguration>
ldapAuthConfigurationProvider) {
_ldapAuthConfigurationProvider = ldapAuthConfigurationProvider;
}
@Reference(
target = "(factoryPid=com.liferay.portal.security.ldap.exportimport.configuration.LDAPExportConfiguration)",
unbind = "-"
)
protected void setLDAPExportConfigurationProvider(
ConfigurationProvider<LDAPExportConfiguration>
ldapExportConfigurationProvider) {
_ldapExportConfigurationProvider = ldapExportConfigurationProvider;
}
@Reference(
target = "(factoryPid=com.liferay.portal.security.ldap.exportimport.configuration.LDAPImportConfiguration)",
unbind = "-"
)
protected void setLDAPImportConfigurationProvider(
ConfigurationProvider<LDAPImportConfiguration>
ldapImportConfigurationProvider) {
_ldapImportConfigurationProvider = ldapImportConfigurationProvider;
}
protected void updateBooleanProperties(
ActionRequest actionRequest,
ConfigurationProvider<?> configurationProvider, long companyId,
String... propertyNames) {
Dictionary<String, Object> properties =
configurationProvider.getConfigurationProperties(companyId);
for (String propertyName : propertyNames) {
boolean value = ParamUtil.getBoolean(
actionRequest, "ldap--" + propertyName + "--");
properties.put(propertyName, value);
}
configurationProvider.updateProperties(companyId, properties);
}
protected void updateIntegerProperties(
ActionRequest actionRequest,
ConfigurationProvider<?> configurationProvider, long companyId,
String... propertyNames) {
Dictionary<String, Object> properties =
configurationProvider.getConfigurationProperties(companyId);
for (String propertyName : propertyNames) {
int value = ParamUtil.getInteger(
actionRequest, "ldap--" + propertyName + "--");
properties.put(propertyName, value);
}
configurationProvider.updateProperties(companyId, properties);
}
protected void updateLongProperties(
ActionRequest actionRequest,
ConfigurationProvider<?> configurationProvider, long companyId,
String... propertyNames) {
Dictionary<String, Object> properties =
configurationProvider.getConfigurationProperties(companyId);
for (String propertyName : propertyNames) {
long value = ParamUtil.getLong(
actionRequest, "ldap--" + propertyName + "--");
properties.put(propertyName, value);
}
configurationProvider.updateProperties(companyId, properties);
}
protected void updateStringProperties(
ActionRequest actionRequest,
ConfigurationProvider<?> configurationProvider, long companyId,
String... propertyNames) {
Dictionary<String, Object> properties =
configurationProvider.getConfigurationProperties(companyId);
for (String propertyName : propertyNames) {
String value = ParamUtil.getString(
actionRequest, "ldap--" + propertyName + "--");
properties.put(propertyName, value);
}
configurationProvider.updateProperties(companyId, properties);
}
private ConfigurationProvider<LDAPAuthConfiguration>
_ldapAuthConfigurationProvider;
private ConfigurationProvider<LDAPExportConfiguration>
_ldapExportConfigurationProvider;
private ConfigurationProvider<LDAPImportConfiguration>
_ldapImportConfigurationProvider;
}