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