001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.portalsettings.action;
016    
017    import com.liferay.portal.AccountNameException;
018    import com.liferay.portal.AddressCityException;
019    import com.liferay.portal.AddressStreetException;
020    import com.liferay.portal.AddressZipException;
021    import com.liferay.portal.CompanyMxException;
022    import com.liferay.portal.CompanyVirtualHostException;
023    import com.liferay.portal.CompanyWebIdException;
024    import com.liferay.portal.EmailAddressException;
025    import com.liferay.portal.LocaleException;
026    import com.liferay.portal.NoSuchCountryException;
027    import com.liferay.portal.NoSuchListTypeException;
028    import com.liferay.portal.NoSuchRegionException;
029    import com.liferay.portal.PhoneNumberException;
030    import com.liferay.portal.WebsiteURLException;
031    import com.liferay.portal.kernel.servlet.SessionErrors;
032    import com.liferay.portal.kernel.util.Constants;
033    import com.liferay.portal.kernel.util.ParamUtil;
034    import com.liferay.portal.kernel.util.PropertiesParamUtil;
035    import com.liferay.portal.kernel.util.PropsKeys;
036    import com.liferay.portal.kernel.util.UnicodeProperties;
037    import com.liferay.portal.kernel.util.Validator;
038    import com.liferay.portal.model.Address;
039    import com.liferay.portal.model.Company;
040    import com.liferay.portal.model.EmailAddress;
041    import com.liferay.portal.model.Phone;
042    import com.liferay.portal.model.Website;
043    import com.liferay.portal.security.auth.PrincipalException;
044    import com.liferay.portal.service.CompanyServiceUtil;
045    import com.liferay.portal.struts.PortletAction;
046    import com.liferay.portal.util.PortalUtil;
047    import com.liferay.portal.util.PropsValues;
048    import com.liferay.portlet.usersadmin.util.UsersAdminUtil;
049    
050    import java.util.List;
051    
052    import javax.portlet.ActionRequest;
053    import javax.portlet.ActionResponse;
054    import javax.portlet.PortletConfig;
055    import javax.portlet.RenderRequest;
056    import javax.portlet.RenderResponse;
057    
058    import org.apache.struts.action.ActionForm;
059    import org.apache.struts.action.ActionForward;
060    import org.apache.struts.action.ActionMapping;
061    
062    /**
063     * @author Brian Wing Shun Chan
064     * @author Julio Camarero
065     */
066    public class EditCompanyAction extends PortletAction {
067    
068            @Override
069            public void processAction(
070                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
071                            ActionRequest actionRequest, ActionResponse actionResponse)
072                    throws Exception {
073    
074                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
075    
076                    try {
077                            if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
078                                    validateCAS(actionRequest);
079                                    validateLDAP(actionRequest);
080    
081                                    if (!SessionErrors.isEmpty(actionRequest)) {
082                                            setForward(
083                                                    actionRequest, "portlet.portal_settings.edit_company");
084                                    }
085                                    else {
086                                            updateCompany(actionRequest);
087                                            updateDisplay(actionRequest);
088    
089                                            sendRedirect(actionRequest, actionResponse);
090                                    }
091                            }
092                    }
093                    catch (Exception e) {
094                            if (e instanceof PrincipalException) {
095                                    SessionErrors.add(actionRequest, e.getClass());
096    
097                                    setForward(actionRequest, "portlet.portal_settings.error");
098                            }
099                            else if (e instanceof AddressCityException ||
100                                             e instanceof AccountNameException ||
101                                             e instanceof AddressStreetException ||
102                                             e instanceof AddressZipException ||
103                                             e instanceof CompanyMxException ||
104                                             e instanceof CompanyVirtualHostException ||
105                                             e instanceof CompanyWebIdException ||
106                                             e instanceof EmailAddressException ||
107                                             e instanceof LocaleException ||
108                                             e instanceof NoSuchCountryException ||
109                                             e instanceof NoSuchListTypeException ||
110                                             e instanceof NoSuchRegionException ||
111                                             e instanceof PhoneNumberException ||
112                                             e instanceof WebsiteURLException) {
113    
114                                    if (e instanceof NoSuchListTypeException) {
115                                            NoSuchListTypeException nslte = (NoSuchListTypeException)e;
116    
117                                            SessionErrors.add(
118                                                    actionRequest,
119                                                    e.getClass().getName() + nslte.getType());
120                                    }
121                                    else {
122                                            SessionErrors.add(actionRequest, e.getClass(), e);
123                                    }
124    
125                                    setForward(
126                                            actionRequest, "portlet.portal_settings.edit_company");
127                            }
128                            else {
129                                    throw e;
130                            }
131                    }
132            }
133    
134            @Override
135            public ActionForward render(
136                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
137                            RenderRequest renderRequest, RenderResponse renderResponse)
138                    throws Exception {
139    
140                    return mapping.findForward(
141                            getForward(renderRequest, "portlet.portal_settings.edit_company"));
142            }
143    
144            protected void updateCompany(ActionRequest actionRequest) throws Exception {
145                    long companyId = PortalUtil.getCompanyId(actionRequest);
146    
147                    String virtualHostname = ParamUtil.getString(
148                            actionRequest, "virtualHostname");
149                    String mx = ParamUtil.getString(actionRequest, "mx");
150                    String homeURL = ParamUtil.getString(actionRequest, "homeURL");
151                    String name = ParamUtil.getString(actionRequest, "name");
152                    String legalName = ParamUtil.getString(actionRequest, "legalName");
153                    String legalId = ParamUtil.getString(actionRequest, "legalId");
154                    String legalType = ParamUtil.getString(actionRequest, "legalType");
155                    String sicCode = ParamUtil.getString(actionRequest, "sicCode");
156                    String tickerSymbol = ParamUtil.getString(
157                            actionRequest, "tickerSymbol");
158                    String industry = ParamUtil.getString(actionRequest, "industry");
159                    String type = ParamUtil.getString(actionRequest, "type");
160                    String size = ParamUtil.getString(actionRequest, "size");
161                    String languageId = ParamUtil.getString(actionRequest, "languageId");
162                    String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
163                    List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest);
164                    List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses(
165                            actionRequest);
166                    List<Phone> phones = UsersAdminUtil.getPhones(actionRequest);
167                    List<Website> websites = UsersAdminUtil.getWebsites(actionRequest);
168                    UnicodeProperties properties = PropertiesParamUtil.getProperties(
169                            actionRequest, "settings--");
170    
171                    CompanyServiceUtil.updateCompany(
172                            companyId, virtualHostname, mx, homeURL, name, legalName, legalId,
173                            legalType, sicCode, tickerSymbol, industry, type, size, languageId,
174                            timeZoneId, addresses, emailAddresses, phones, websites,
175                            properties);
176    
177                    PortalUtil.resetCDNHosts();
178            }
179    
180            protected void updateDisplay(ActionRequest actionRequest) throws Exception {
181                    Company company = PortalUtil.getCompany(actionRequest);
182    
183                    String languageId = ParamUtil.getString(actionRequest, "languageId");
184                    String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
185    
186                    CompanyServiceUtil.updateDisplay(
187                            company.getCompanyId(), languageId, timeZoneId);
188    
189                    boolean siteLogo = ParamUtil.getBoolean(
190                            actionRequest,
191                            "settings--" + PropsKeys.COMPANY_SECURITY_SITE_LOGO + "--");
192    
193                    CompanyServiceUtil.updateSecurity(
194                            company.getCompanyId(), company.getAuthType(),
195                            company.isAutoLogin(), company.isSendPassword(),
196                            company.isStrangers(), company.isStrangersWithMx(),
197                            company.isStrangersVerify(), siteLogo);
198    
199                    boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo");
200    
201                    if (deleteLogo) {
202                            CompanyServiceUtil.deleteLogo(company.getCompanyId());
203                    }
204            }
205    
206            protected void validateCAS(ActionRequest actionRequest) throws Exception {
207                    boolean casEnabled = ParamUtil.getBoolean(
208                            actionRequest, "settings--" + PropsKeys.CAS_AUTH_ENABLED + "--");
209    
210                    if (!casEnabled) {
211                            return;
212                    }
213    
214                    String casLoginURL = ParamUtil.getString(
215                            actionRequest, "settings--" + PropsKeys.CAS_LOGIN_URL + "--");
216                    String casLogoutURL = ParamUtil.getString(
217                            actionRequest, "settings--" + PropsKeys.CAS_LOGOUT_URL + "--");
218                    String casServerName = ParamUtil.getString(
219                            actionRequest, "settings--" + PropsKeys.CAS_SERVER_NAME + "--");
220                    String casServerURL = ParamUtil.getString(
221                            actionRequest, "settings--" + PropsKeys.CAS_SERVER_URL + "--");
222                    String casServiceURL = ParamUtil.getString(
223                            actionRequest, "settings--" + PropsKeys.CAS_SERVICE_URL + "--");
224                    String casNoSuchUserRedirectURL = ParamUtil.getString(
225                            actionRequest, "settings--" +
226                            PropsKeys.CAS_NO_SUCH_USER_REDIRECT_URL + "--");
227    
228                    if (!Validator.isUrl(casLoginURL)) {
229                            SessionErrors.add(actionRequest, "casLoginURLInvalid");
230                    }
231    
232                    if (!Validator.isUrl(casLogoutURL)) {
233                            SessionErrors.add(actionRequest, "casLogoutURLInvalid");
234                    }
235    
236                    if (Validator.isNull(casServerName)) {
237                            SessionErrors.add(actionRequest, "casServerNameInvalid");
238                    }
239    
240                    if (Validator.isNotNull(casServerURL) &&
241                            Validator.isNotNull(casServiceURL)) {
242    
243                            SessionErrors.add(
244                                    actionRequest, "casServerURLAndServiceURLConflict");
245                    }
246                    else if (Validator.isNull(casServerURL) &&
247                                     Validator.isNull(casServiceURL)) {
248    
249                            SessionErrors.add(actionRequest, "casServerURLAndServiceURLNotSet");
250                    }
251                    else {
252                            if (Validator.isNotNull(casServerURL) &&
253                                    !Validator.isUrl(casServerURL)) {
254    
255                                    SessionErrors.add(actionRequest, "casServerURLInvalid");
256                            }
257    
258                            if (Validator.isNotNull(casServiceURL) &&
259                                    !Validator.isUrl(casServiceURL)) {
260    
261                                    SessionErrors.add(actionRequest, "casServiceURLInvalid");
262                            }
263                    }
264    
265                    if (Validator.isNotNull(casNoSuchUserRedirectURL) &&
266                            !Validator.isUrl(casNoSuchUserRedirectURL)) {
267    
268                            SessionErrors.add(actionRequest, "casNoSuchUserURLInvalid");
269                    }
270            }
271    
272            protected void validateLDAP(ActionRequest actionRequest) throws Exception {
273                    if (!PropsValues.LDAP_IMPORT_USER_PASSWORD_AUTOGENERATED) {
274                            return;
275                    }
276    
277                    boolean ldapExportEnabled = ParamUtil.getBoolean(
278                            actionRequest, "settings--" + PropsKeys.LDAP_EXPORT_ENABLED + "--");
279                    boolean ldapImportEnabled = ParamUtil.getBoolean(
280                            actionRequest, "settings--" + PropsKeys.LDAP_IMPORT_ENABLED + "--");
281    
282                    if (ldapExportEnabled && ldapImportEnabled) {
283                            SessionErrors.add(
284                                    actionRequest, "ldapExportAndImportOnPasswordAutogeneration");
285                    }
286            }
287    
288    }