1
22
23 package com.liferay.portlet.login.action;
24
25 import com.liferay.portal.ContactFirstNameException;
26 import com.liferay.portal.ContactLastNameException;
27 import com.liferay.portal.DuplicateUserEmailAddressException;
28 import com.liferay.portal.DuplicateUserScreenNameException;
29 import com.liferay.portal.NoSuchOrganizationException;
30 import com.liferay.portal.OrganizationParentException;
31 import com.liferay.portal.RequiredUserException;
32 import com.liferay.portal.ReservedUserEmailAddressException;
33 import com.liferay.portal.ReservedUserScreenNameException;
34 import com.liferay.portal.UserEmailAddressException;
35 import com.liferay.portal.UserIdException;
36 import com.liferay.portal.UserPasswordException;
37 import com.liferay.portal.UserScreenNameException;
38 import com.liferay.portal.UserSmsException;
39 import com.liferay.portal.kernel.captcha.CaptchaTextException;
40 import com.liferay.portal.kernel.captcha.CaptchaUtil;
41 import com.liferay.portal.kernel.language.LanguageUtil;
42 import com.liferay.portal.kernel.servlet.SessionErrors;
43 import com.liferay.portal.kernel.servlet.SessionMessages;
44 import com.liferay.portal.kernel.util.Constants;
45 import com.liferay.portal.kernel.util.HttpUtil;
46 import com.liferay.portal.kernel.util.ParamUtil;
47 import com.liferay.portal.kernel.util.StringUtil;
48 import com.liferay.portal.kernel.util.Validator;
49 import com.liferay.portal.model.Company;
50 import com.liferay.portal.model.CompanyConstants;
51 import com.liferay.portal.model.User;
52 import com.liferay.portal.security.auth.PrincipalException;
53 import com.liferay.portal.service.UserLocalServiceUtil;
54 import com.liferay.portal.service.UserServiceUtil;
55 import com.liferay.portal.struts.PortletAction;
56 import com.liferay.portal.theme.ThemeDisplay;
57 import com.liferay.portal.util.PortalUtil;
58 import com.liferay.portal.util.PropsValues;
59 import com.liferay.portal.util.WebKeys;
60
61 import javax.portlet.ActionRequest;
62 import javax.portlet.ActionResponse;
63 import javax.portlet.PortletConfig;
64 import javax.portlet.RenderRequest;
65 import javax.portlet.RenderResponse;
66
67 import javax.servlet.http.HttpServletRequest;
68 import javax.servlet.http.HttpSession;
69
70 import org.apache.struts.action.ActionForm;
71 import org.apache.struts.action.ActionForward;
72 import org.apache.struts.action.ActionMapping;
73
74
80 public class AddUserAction extends PortletAction {
81
82 public void processAction(
83 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
84 ActionRequest actionRequest, ActionResponse actionResponse)
85 throws Exception {
86
87 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
88
89 try {
90 if (cmd.equals(Constants.ADD)) {
91 addUser(actionRequest, actionResponse);
92 }
93 }
94 catch (Exception e) {
95 if (e instanceof CaptchaTextException ||
96 e instanceof ContactFirstNameException ||
97 e instanceof ContactLastNameException ||
98 e instanceof DuplicateUserEmailAddressException ||
99 e instanceof DuplicateUserScreenNameException ||
100 e instanceof NoSuchOrganizationException ||
101 e instanceof OrganizationParentException ||
102 e instanceof RequiredUserException ||
103 e instanceof ReservedUserEmailAddressException ||
104 e instanceof ReservedUserScreenNameException ||
105 e instanceof UserEmailAddressException ||
106 e instanceof UserIdException ||
107 e instanceof UserPasswordException ||
108 e instanceof UserScreenNameException ||
109 e instanceof UserSmsException) {
110
111 SessionErrors.add(actionRequest, e.getClass().getName(), e);
112 }
113 else {
114 throw e;
115 }
116 }
117 }
118
119 public ActionForward render(
120 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
121 RenderRequest renderRequest, RenderResponse renderResponse)
122 throws Exception {
123
124 Company company = PortalUtil.getCompany(renderRequest);
125
126 if (!company.isStrangers()) {
127 throw new PrincipalException();
128 }
129
130 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
131 WebKeys.THEME_DISPLAY);
132
133 renderResponse.setTitle(
134 LanguageUtil.get(
135 themeDisplay.getCompanyId(), themeDisplay.getLocale(),
136 "create-account"));
137
138 return mapping.findForward("portlet.login.create_account");
139 }
140
141 protected void addUser(
142 ActionRequest actionRequest, ActionResponse actionResponse)
143 throws Exception {
144
145 HttpServletRequest request = PortalUtil.getHttpServletRequest(
146 actionRequest);
147 HttpSession session = request.getSession();
148
149 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
150 WebKeys.THEME_DISPLAY);
151
152 Company company = themeDisplay.getCompany();
153
154 boolean autoPassword = true;
155 String password1 = null;
156 String password2 = null;
157 boolean autoScreenName = false;
158 String screenName = ParamUtil.getString(actionRequest, "screenName");
159 String emailAddress = ParamUtil.getString(
160 actionRequest, "emailAddress");
161 String firstName = ParamUtil.getString(actionRequest, "firstName");
162 String middleName = ParamUtil.getString(actionRequest, "middleName");
163 String lastName = ParamUtil.getString(actionRequest, "lastName");
164 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
165 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
166 boolean male = ParamUtil.get(actionRequest, "male", true);
167 int birthdayMonth = ParamUtil.getInteger(
168 actionRequest, "birthdayMonth");
169 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
170 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
171 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
172 long[] organizationIds = StringUtil.split(
173 ParamUtil.getString(actionRequest, "organizationIds"), 0L);
174 boolean sendEmail = true;
175
176 if (PropsValues.LOGIN_CREATE_ACCOUNT_ALLOW_CUSTOM_PASSWORD) {
177 autoPassword = false;
178
179 password1 = ParamUtil.getString(actionRequest, "password1");
180 password2 = ParamUtil.getString(actionRequest, "password2");
181 }
182
183 String openId = ParamUtil.getString(actionRequest, "openId");
184 boolean openIdAuth = false;
185
186 Boolean openIdLoginPending = (Boolean)session.getAttribute(
187 WebKeys.OPEN_ID_LOGIN_PENDING);
188
189 if ((openIdLoginPending != null) &&
190 (openIdLoginPending.booleanValue()) &&
191 (Validator.isNotNull(openId))) {
192
193 sendEmail = false;
194 openIdAuth = true;
195 }
196
197 if (PropsValues.CAPTCHA_CHECK_PORTAL_CREATE_ACCOUNT) {
198 CaptchaUtil.check(actionRequest);
199 }
200
201 User user = UserServiceUtil.addUser(
202 company.getCompanyId(), autoPassword, password1, password2,
203 autoScreenName, screenName, emailAddress, themeDisplay.getLocale(),
204 firstName, middleName, lastName, prefixId, suffixId, male,
205 birthdayMonth, birthdayDay, birthdayYear, jobTitle, organizationIds,
206 sendEmail);
207
208 if (openIdAuth) {
209 UserLocalServiceUtil.updateOpenId(user.getUserId(), openId);
210
211 session.setAttribute(
212 WebKeys.OPEN_ID_LOGIN, new Long(user.getUserId()));
213
214 session.removeAttribute(WebKeys.OPEN_ID_LOGIN_PENDING);
215 }
216 else {
217
218
220 SessionMessages.add(request, "user_added", user.getEmailAddress());
221 SessionMessages.add(
222 request, "user_added_password", user.getPasswordUnencrypted());
223 }
224
225
227 String login = null;
228
229 if (company.getAuthType().equals(CompanyConstants.AUTH_TYPE_ID)) {
230 login = String.valueOf(user.getUserId());
231 }
232 else if (company.getAuthType().equals(CompanyConstants.AUTH_TYPE_SN)) {
233 login = user.getScreenName();
234 }
235 else {
236 login = user.getEmailAddress();
237 }
238
239 String redirect = HttpUtil.addParameter(
240 themeDisplay.getURLSignIn(), "login", login);
241
242 actionResponse.sendRedirect(redirect);
243 }
244
245 protected boolean isCheckMethodOnProcessAction() {
246 return _CHECK_METHOD_ON_PROCESS_ACTION;
247 }
248
249 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
250
251 }