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.passwordpoliciesadmin.action;
016    
017    import com.liferay.portal.DuplicatePasswordPolicyException;
018    import com.liferay.portal.NoSuchPasswordPolicyException;
019    import com.liferay.portal.PasswordPolicyNameException;
020    import com.liferay.portal.RequiredPasswordPolicyException;
021    import com.liferay.portal.kernel.servlet.SessionErrors;
022    import com.liferay.portal.kernel.util.Constants;
023    import com.liferay.portal.kernel.util.ParamUtil;
024    import com.liferay.portal.kernel.util.Validator;
025    import com.liferay.portal.model.PasswordPolicy;
026    import com.liferay.portal.security.auth.PrincipalException;
027    import com.liferay.portal.service.PasswordPolicyServiceUtil;
028    import com.liferay.portal.service.ServiceContext;
029    import com.liferay.portal.service.ServiceContextFactory;
030    import com.liferay.portal.struts.PortletAction;
031    import com.liferay.portal.util.PortalUtil;
032    
033    import javax.portlet.ActionRequest;
034    import javax.portlet.ActionResponse;
035    import javax.portlet.PortletConfig;
036    import javax.portlet.RenderRequest;
037    import javax.portlet.RenderResponse;
038    
039    import org.apache.struts.action.ActionForm;
040    import org.apache.struts.action.ActionForward;
041    import org.apache.struts.action.ActionMapping;
042    
043    /**
044     * @author Scott Lee
045     */
046    public class EditPasswordPolicyAction extends PortletAction {
047    
048            @Override
049            public void processAction(
050                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
051                            ActionRequest actionRequest, ActionResponse actionResponse)
052                    throws Exception {
053    
054                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
055    
056                    try {
057                            if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
058                                    updatePasswordPolicy(actionRequest);
059                            }
060                            else if (cmd.equals(Constants.DELETE)) {
061                                    deletePasswordPolicy(actionRequest);
062                            }
063    
064                            sendRedirect(actionRequest, actionResponse);
065                    }
066                    catch (Exception e) {
067                            if (e instanceof PrincipalException) {
068                                    SessionErrors.add(actionRequest, e.getClass());
069    
070                                    setForward(
071                                            actionRequest, "portlet.password_policies_admin.error");
072                            }
073                            else if (e instanceof DuplicatePasswordPolicyException ||
074                                             e instanceof PasswordPolicyNameException ||
075                                             e instanceof NoSuchPasswordPolicyException ||
076                                             e instanceof RequiredPasswordPolicyException) {
077    
078                                    SessionErrors.add(actionRequest, e.getClass());
079    
080                                    if (cmd.equals(Constants.DELETE)) {
081                                            String redirect = PortalUtil.escapeRedirect(
082                                                    ParamUtil.getString(actionRequest, "redirect"));
083    
084                                            if (Validator.isNotNull(redirect)) {
085                                                    actionResponse.sendRedirect(redirect);
086                                            }
087                                    }
088                            }
089                            else {
090                                    throw e;
091                            }
092                    }
093            }
094    
095            @Override
096            public ActionForward render(
097                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
098                            RenderRequest renderRequest, RenderResponse renderResponse)
099                    throws Exception {
100    
101                    try {
102                            ActionUtil.getPasswordPolicy(renderRequest);
103                    }
104                    catch (Exception e) {
105                            if (e instanceof NoSuchPasswordPolicyException ||
106                                    e instanceof PrincipalException) {
107    
108                                    SessionErrors.add(renderRequest, e.getClass());
109    
110                                    return mapping.findForward(
111                                            "portlet.password_policies_admin.error");
112                            }
113                            else {
114                                    throw e;
115                            }
116                    }
117    
118                    return mapping.findForward(
119                            getForward(
120                                    renderRequest,
121                                    "portlet.password_policies_admin.edit_password_policy"));
122            }
123    
124            protected void deletePasswordPolicy(ActionRequest actionRequest)
125                    throws Exception {
126    
127                    long passwordPolicyId = ParamUtil.getLong(
128                            actionRequest, "passwordPolicyId");
129    
130                    PasswordPolicyServiceUtil.deletePasswordPolicy(passwordPolicyId);
131            }
132    
133            protected void updatePasswordPolicy(ActionRequest actionRequest)
134                    throws Exception {
135    
136                    long passwordPolicyId = ParamUtil.getLong(
137                            actionRequest, "passwordPolicyId");
138    
139                    String name = ParamUtil.getString(actionRequest, "name");
140                    String description = ParamUtil.getString(actionRequest, "description");
141                    boolean changeable = ParamUtil.getBoolean(actionRequest, "changeable");
142                    boolean changeRequired = ParamUtil.getBoolean(
143                            actionRequest, "changeRequired");
144                    long minAge = ParamUtil.getLong(actionRequest, "minAge");
145                    boolean checkSyntax = ParamUtil.getBoolean(
146                            actionRequest, "checkSyntax");
147                    boolean allowDictionaryWords = ParamUtil.getBoolean(
148                            actionRequest, "allowDictionaryWords");
149                    int minAlphanumeric = ParamUtil.getInteger(
150                            actionRequest, "minAlphanumeric");
151                    int minLength = ParamUtil.getInteger(actionRequest, "minLength");
152                    int minLowerCase = ParamUtil.getInteger(actionRequest, "minLowerCase");
153                    int minNumbers = ParamUtil.getInteger(actionRequest, "minNumbers");
154                    int minSymbols = ParamUtil.getInteger(actionRequest, "minSymbols");
155                    int minUpperCase = ParamUtil.getInteger(actionRequest, "minUpperCase");
156                    String regex = ParamUtil.getString(actionRequest, "regex");
157                    boolean history = ParamUtil.getBoolean(actionRequest, "history");
158                    int historyCount = ParamUtil.getInteger(actionRequest, "historyCount");
159                    boolean expireable = ParamUtil.getBoolean(actionRequest, "expireable");
160                    long maxAge = ParamUtil.getLong(actionRequest, "maxAge");
161                    long warningTime = ParamUtil.getLong(actionRequest, "warningTime");
162                    int graceLimit = ParamUtil.getInteger(actionRequest, "graceLimit");
163                    boolean lockout = ParamUtil.getBoolean(actionRequest, "lockout");
164                    int maxFailure = ParamUtil.getInteger(actionRequest, "maxFailure");
165                    long lockoutDuration = ParamUtil.getLong(
166                            actionRequest, "lockoutDuration");
167                    long resetFailureCount = ParamUtil.getLong(
168                            actionRequest, "resetFailureCount");
169                    long resetTicketMaxAge = ParamUtil.getLong(
170                            actionRequest, "resetTicketMaxAge");
171    
172                    ServiceContext serviceContext = ServiceContextFactory.getInstance(
173                            PasswordPolicy.class.getName(), actionRequest);
174    
175                    if (passwordPolicyId <= 0) {
176    
177                            // Add password policy
178    
179                            PasswordPolicyServiceUtil.addPasswordPolicy(
180                                    name, description, changeable, changeRequired, minAge,
181                                    checkSyntax, allowDictionaryWords, minAlphanumeric, minLength,
182                                    minLowerCase, minNumbers, minSymbols, minUpperCase, regex,
183                                    history, historyCount, expireable, maxAge, warningTime,
184                                    graceLimit, lockout, maxFailure, lockoutDuration,
185                                    resetFailureCount, resetTicketMaxAge, serviceContext);
186                    }
187                    else {
188    
189                            // Update password policy
190    
191                            PasswordPolicyServiceUtil.updatePasswordPolicy(
192                                    passwordPolicyId, name, description, changeable, changeRequired,
193                                    minAge, checkSyntax, allowDictionaryWords, minAlphanumeric,
194                                    minLength, minLowerCase, minNumbers, minSymbols, minUpperCase,
195                                    regex, history, historyCount, expireable, maxAge, warningTime,
196                                    graceLimit, lockout, maxFailure, lockoutDuration,
197                                    resetFailureCount, resetTicketMaxAge, serviceContext);
198                    }
199            }
200    
201    }