1
22
23 package com.liferay.portal.security.auth;
24
25 import com.liferay.portal.NoSuchUserException;
26 import com.liferay.portal.kernel.util.LocaleUtil;
27 import com.liferay.portal.kernel.util.StringPool;
28 import com.liferay.portal.kernel.util.WebKeys;
29 import com.liferay.portal.model.User;
30 import com.liferay.portal.service.UserLocalServiceUtil;
31 import com.liferay.portal.servlet.filters.sso.opensso.OpenSSOUtil;
32 import com.liferay.portal.theme.ThemeDisplay;
33 import com.liferay.portal.util.PortalUtil;
34 import com.liferay.portal.util.PrefsPropsUtil;
35 import com.liferay.portal.util.PropsKeys;
36 import com.liferay.portal.util.PropsValues;
37 import com.liferay.util.PwdGenerator;
38
39 import java.util.Calendar;
40 import java.util.Locale;
41 import java.util.Map;
42
43 import javax.servlet.http.HttpServletRequest;
44 import javax.servlet.http.HttpServletResponse;
45
46 import org.apache.commons.logging.Log;
47 import org.apache.commons.logging.LogFactory;
48
49
56 public class OpenSSOAutoLogin implements AutoLogin {
57
58 public String[] login(
59 HttpServletRequest request, HttpServletResponse response) {
60
61 String[] credentials = null;
62
63 try {
64 long companyId = PortalUtil.getCompanyId(request);
65
66 if (!PrefsPropsUtil.getBoolean(
67 companyId, PropsKeys.OPEN_SSO_AUTH_ENABLED,
68 PropsValues.OPEN_SSO_AUTH_ENABLED)) {
69
70 return credentials;
71 }
72
73 String serviceUrl = PrefsPropsUtil.getString(
74 companyId, PropsKeys.OPEN_SSO_SERVICE_URL);
75
76 if (!OpenSSOUtil.isAuthenticated(request, serviceUrl)) {
77 return credentials;
78 }
79
80 String screenNameAttr = PrefsPropsUtil.getString(
81 companyId, PropsKeys.OPEN_SSO_SCREEN_NAME_ATTR,
82 PropsValues.OPEN_SSO_SCREEN_NAME_ATTR);
83 String emailAddressAttr = PrefsPropsUtil.getString(
84 companyId, PropsKeys.OPEN_SSO_EMAIL_ADDRESS_ATTR,
85 PropsValues.OPEN_SSO_EMAIL_ADDRESS_ATTR);
86 String firstNameAttr = PrefsPropsUtil.getString(
87 companyId, PropsKeys.OPEN_SSO_FIRST_NAME_ATTR,
88 PropsValues.OPEN_SSO_FIRST_NAME_ATTR);
89 String lastNameAttr = PrefsPropsUtil.getString(
90 companyId, PropsKeys.OPEN_SSO_LAST_NAME_ATTR,
91 PropsValues.OPEN_SSO_LAST_NAME_ATTR);
92
93 Map<String, String> nameValues = OpenSSOUtil.getAttributes(
94 request, serviceUrl);
95
96 String screenName = nameValues.get(screenNameAttr);
97 String emailAddress = nameValues.get(emailAddressAttr);
98 String firstName = nameValues.get(firstNameAttr);
99 String lastName = nameValues.get(lastNameAttr);
100
101 User user = null;
102
103 try {
104 user = UserLocalServiceUtil.getUserByScreenName(
105 companyId, screenName);
106 }
107 catch (NoSuchUserException nsue) {
108 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
109 WebKeys.THEME_DISPLAY);
110
111 Locale locale = LocaleUtil.getDefault();
112
113 if (themeDisplay != null) {
114
115
118 locale = themeDisplay.getLocale();
119 }
120
121 user = addUser(
122 companyId, firstName, lastName, emailAddress, screenName,
123 locale);
124 }
125
126 credentials = new String[3];
127
128 credentials[0] = String.valueOf(user.getUserId());
129 credentials[1] = user.getPassword();
130 credentials[2] = Boolean.TRUE.toString();
131 }
132 catch (Exception e) {
133 _log.error(e);
134 }
135
136 return credentials;
137 }
138
139 protected User addUser(
140 long companyId, String firstName, String lastName,
141 String emailAddress, String screenName, Locale locale)
142 throws Exception {
143
144 long creatorUserId = 0;
145 boolean autoPassword = false;
146 String password1 = PwdGenerator.getPassword();
147 String password2 = password1;
148 boolean autoScreenName = false;
149 String middleName = StringPool.BLANK;
150 int prefixId = 0;
151 int suffixId = 0;
152 boolean male = true;
153 int birthdayMonth = Calendar.JANUARY;
154 int birthdayDay = 1;
155 int birthdayYear = 1970;
156 String jobTitle = StringPool.BLANK;
157 long[] organizationIds = new long[0];
158 boolean sendEmail = false;
159
160 return UserLocalServiceUtil.addUser(
161 creatorUserId, companyId, autoPassword, password1, password2,
162 autoScreenName, screenName, emailAddress, locale, firstName,
163 middleName, lastName, prefixId, suffixId, male, birthdayMonth,
164 birthdayDay, birthdayYear, jobTitle, organizationIds, sendEmail);
165 }
166
167 private static Log _log = LogFactory.getLog(OpenSSOAutoLogin.class);
168
169 }