001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.DuplicatePasswordPolicyException;
018 import com.liferay.portal.PasswordPolicyNameException;
019 import com.liferay.portal.RequiredPasswordPolicyException;
020 import com.liferay.portal.kernel.cache.ThreadLocalCachable;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.util.CharPool;
024 import com.liferay.portal.kernel.util.OrderByComparator;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.model.Organization;
027 import com.liferay.portal.model.PasswordPolicy;
028 import com.liferay.portal.model.PasswordPolicyRel;
029 import com.liferay.portal.model.ResourceConstants;
030 import com.liferay.portal.model.User;
031 import com.liferay.portal.security.ldap.LDAPSettingsUtil;
032 import com.liferay.portal.service.base.PasswordPolicyLocalServiceBaseImpl;
033 import com.liferay.portal.util.PropsValues;
034
035 import java.util.Date;
036 import java.util.List;
037
038
041 public class PasswordPolicyLocalServiceImpl
042 extends PasswordPolicyLocalServiceBaseImpl {
043
044 @Override
045 public PasswordPolicy addPasswordPolicy(
046 long userId, boolean defaultPolicy, String name, String description,
047 boolean changeable, boolean changeRequired, long minAge,
048 boolean checkSyntax, boolean allowDictionaryWords,
049 int minAlphanumeric, int minLength, int minLowerCase,
050 int minNumbers, int minSymbols, int minUpperCase, boolean history,
051 int historyCount, boolean expireable, long maxAge, long warningTime,
052 int graceLimit, boolean lockout, int maxFailure,
053 long lockoutDuration, long resetFailureCount,
054 long resetTicketMaxAge)
055 throws PortalException, SystemException {
056
057
058
059 User user = userPersistence.findByPrimaryKey(userId);
060 Date now = new Date();
061
062 validate(0, user.getCompanyId(), name);
063
064 long passwordPolicyId = counterLocalService.increment();
065
066 PasswordPolicy passwordPolicy = passwordPolicyPersistence.create(
067 passwordPolicyId);
068
069 passwordPolicy.setUserId(userId);
070 passwordPolicy.setCompanyId(user.getCompanyId());
071 passwordPolicy.setUserName(user.getFullName());
072 passwordPolicy.setCreateDate(now);
073 passwordPolicy.setModifiedDate(now);
074 passwordPolicy.setDefaultPolicy(defaultPolicy);
075 passwordPolicy.setName(name);
076 passwordPolicy.setDescription(description);
077 passwordPolicy.setChangeable(changeable);
078 passwordPolicy.setChangeRequired(changeRequired);
079 passwordPolicy.setMinAge(minAge);
080 passwordPolicy.setCheckSyntax(checkSyntax);
081 passwordPolicy.setAllowDictionaryWords(allowDictionaryWords);
082 passwordPolicy.setMinAlphanumeric(minAlphanumeric);
083 passwordPolicy.setMinLength(minLength);
084 passwordPolicy.setMinLowerCase(minLowerCase);
085 passwordPolicy.setMinNumbers(minNumbers);
086 passwordPolicy.setMinSymbols(minSymbols);
087 passwordPolicy.setMinUpperCase(minUpperCase);
088 passwordPolicy.setHistory(history);
089 passwordPolicy.setHistoryCount(historyCount);
090 passwordPolicy.setExpireable(expireable);
091 passwordPolicy.setMaxAge(maxAge);
092 passwordPolicy.setWarningTime(warningTime);
093 passwordPolicy.setGraceLimit(graceLimit);
094 passwordPolicy.setLockout(lockout);
095 passwordPolicy.setMaxFailure(maxFailure);
096 passwordPolicy.setLockoutDuration(lockoutDuration);
097 passwordPolicy.setRequireUnlock(lockoutDuration == 0);
098 passwordPolicy.setResetFailureCount(resetFailureCount);
099 passwordPolicy.setResetTicketMaxAge(resetTicketMaxAge);
100
101 passwordPolicyPersistence.update(passwordPolicy, false);
102
103
104
105 if (!user.isDefaultUser()) {
106 resourceLocalService.addResources(
107 user.getCompanyId(), 0, userId, PasswordPolicy.class.getName(),
108 passwordPolicy.getPasswordPolicyId(), false, false, false);
109 }
110
111 return passwordPolicy;
112 }
113
114 @Override
115 public void checkDefaultPasswordPolicy(long companyId)
116 throws PortalException, SystemException {
117
118 String defaultPasswordPolicyName =
119 PropsValues.PASSWORDS_DEFAULT_POLICY_NAME;
120
121 PasswordPolicy defaultPasswordPolicy =
122 passwordPolicyPersistence.fetchByC_N(
123 companyId, defaultPasswordPolicyName);
124
125 if (defaultPasswordPolicy == null) {
126 long defaultUserId = userLocalService.getDefaultUserId(companyId);
127
128 addPasswordPolicy(
129 defaultUserId, true, defaultPasswordPolicyName,
130 defaultPasswordPolicyName, true, true, 0, false, true, 0, 6, 0,
131 1, 0, 1, false, 6, false, 8640000, 86400, 0, false, 3, 0, 600,
132 86400);
133 }
134 }
135
136 @Override
137 public PasswordPolicy deletePasswordPolicy(long passwordPolicyId)
138 throws PortalException, SystemException {
139
140 PasswordPolicy passwordPolicy =
141 passwordPolicyPersistence.findByPrimaryKey(passwordPolicyId);
142
143 return deletePasswordPolicy(passwordPolicy);
144 }
145
146 @Override
147 public PasswordPolicy deletePasswordPolicy(PasswordPolicy passwordPolicy)
148 throws PortalException, SystemException {
149
150 if (passwordPolicy.isDefaultPolicy()) {
151 throw new RequiredPasswordPolicyException();
152 }
153
154
155
156 passwordPolicyRelLocalService.deletePasswordPolicyRels(
157 passwordPolicy.getPasswordPolicyId());
158
159
160
161 resourceLocalService.deleteResource(
162 passwordPolicy.getCompanyId(), PasswordPolicy.class.getName(),
163 ResourceConstants.SCOPE_INDIVIDUAL,
164 passwordPolicy.getPasswordPolicyId());
165
166
167
168 return passwordPolicyPersistence.remove(passwordPolicy);
169 }
170
171 @Override
172 public PasswordPolicy getDefaultPasswordPolicy(long companyId)
173 throws PortalException, SystemException {
174
175 if (LDAPSettingsUtil.isPasswordPolicyEnabled(companyId)) {
176 return null;
177 }
178
179 return passwordPolicyPersistence.findByC_DP(companyId, true);
180 }
181
182
185 @Override
186 public PasswordPolicy getPasswordPolicy(
187 long companyId, long organizationId, long locationId)
188 throws PortalException, SystemException {
189
190 return getPasswordPolicy(
191 companyId, new long[] {organizationId, locationId});
192 }
193
194 @Override
195 public PasswordPolicy getPasswordPolicy(
196 long companyId, long[] organizationIds)
197 throws PortalException, SystemException {
198
199 if (LDAPSettingsUtil.isPasswordPolicyEnabled(companyId)) {
200 return null;
201 }
202
203 if ((organizationIds == null) || (organizationIds.length == 0)) {
204 return getDefaultPasswordPolicy(companyId);
205 }
206
207 long classNameId = classNameLocalService.getClassNameId(
208 Organization.class.getName());
209
210 PasswordPolicyRel passwordPolicyRel = null;
211
212 for (int i = 0; i < organizationIds.length; i++) {
213 long organizationId = organizationIds[i];
214
215 passwordPolicyRel = passwordPolicyRelPersistence.fetchByC_C(
216 classNameId, organizationId);
217
218 if (passwordPolicyRel != null) {
219 return passwordPolicyPersistence.findByPrimaryKey(
220 passwordPolicyRel.getPasswordPolicyId());
221 }
222 }
223
224 return getDefaultPasswordPolicy(companyId);
225 }
226
227 @Override
228 @ThreadLocalCachable
229 public PasswordPolicy getPasswordPolicyByUserId(long userId)
230 throws PortalException, SystemException {
231
232 User user = userPersistence.findByPrimaryKey(userId);
233
234 if (LDAPSettingsUtil.isPasswordPolicyEnabled(user.getCompanyId())) {
235 return null;
236 }
237
238 long classNameId = classNameLocalService.getClassNameId(
239 User.class.getName());
240
241 PasswordPolicyRel passwordPolicyRel =
242 passwordPolicyRelPersistence.fetchByC_C(classNameId, userId);
243
244 if (passwordPolicyRel != null) {
245 return getPasswordPolicy(passwordPolicyRel.getPasswordPolicyId());
246 }
247 else {
248 List<Organization> organizations = userPersistence.getOrganizations(
249 userId);
250
251 if (organizations.isEmpty()) {
252 return passwordPolicyPersistence.findByC_DP(
253 user.getCompanyId(), true);
254 }
255
256 long[] organizationIds = new long[organizations.size()];
257
258 for (int i = 0; i < organizationIds.length; i++) {
259 Organization organization = organizations.get(i);
260
261 organizationIds[i] = organization.getOrganizationId();
262 }
263
264 return getPasswordPolicy(user.getCompanyId(), organizationIds);
265 }
266 }
267
268 @Override
269 public List<PasswordPolicy> search(
270 long companyId, String name, int start, int end,
271 OrderByComparator obc)
272 throws SystemException {
273
274 return passwordPolicyFinder.findByC_N(companyId, name, start, end, obc);
275 }
276
277 @Override
278 public int searchCount(long companyId, String name) throws SystemException {
279 return passwordPolicyFinder.countByC_N(companyId, name);
280 }
281
282 @Override
283 public PasswordPolicy updatePasswordPolicy(
284 long passwordPolicyId, String name, String description,
285 boolean changeable, boolean changeRequired, long minAge,
286 boolean checkSyntax, boolean allowDictionaryWords,
287 int minAlphanumeric, int minLength, int minLowerCase,
288 int minNumbers, int minSymbols, int minUpperCase, boolean history,
289 int historyCount, boolean expireable, long maxAge, long warningTime,
290 int graceLimit, boolean lockout, int maxFailure,
291 long lockoutDuration, long resetFailureCount,
292 long resetTicketMaxAge)
293 throws PortalException, SystemException {
294
295 Date now = new Date();
296
297 PasswordPolicy passwordPolicy =
298 passwordPolicyPersistence.findByPrimaryKey(passwordPolicyId);
299
300 if (!passwordPolicy.getDefaultPolicy()) {
301 validate(passwordPolicyId, passwordPolicy.getCompanyId(), name);
302
303 passwordPolicy.setName(name);
304 }
305
306 passwordPolicy.setModifiedDate(now);
307 passwordPolicy.setDescription(description);
308 passwordPolicy.setChangeable(changeable);
309 passwordPolicy.setChangeRequired(changeRequired);
310 passwordPolicy.setMinAge(minAge);
311 passwordPolicy.setCheckSyntax(checkSyntax);
312 passwordPolicy.setAllowDictionaryWords(allowDictionaryWords);
313 passwordPolicy.setMinAlphanumeric(minAlphanumeric);
314 passwordPolicy.setMinLength(minLength);
315 passwordPolicy.setMinLowerCase(minLowerCase);
316 passwordPolicy.setMinNumbers(minNumbers);
317 passwordPolicy.setMinSymbols(minSymbols);
318 passwordPolicy.setMinUpperCase(minUpperCase);
319 passwordPolicy.setHistory(history);
320 passwordPolicy.setHistoryCount(historyCount);
321 passwordPolicy.setExpireable(expireable);
322 passwordPolicy.setMaxAge(maxAge);
323 passwordPolicy.setWarningTime(warningTime);
324 passwordPolicy.setGraceLimit(graceLimit);
325 passwordPolicy.setLockout(lockout);
326 passwordPolicy.setMaxFailure(maxFailure);
327 passwordPolicy.setLockoutDuration(lockoutDuration);
328 passwordPolicy.setRequireUnlock(lockoutDuration == 0);
329 passwordPolicy.setResetFailureCount(resetFailureCount);
330 passwordPolicy.setResetTicketMaxAge(resetTicketMaxAge);
331
332 passwordPolicyPersistence.update(passwordPolicy, false);
333
334 return passwordPolicy;
335 }
336
337 protected void validate(long passwordPolicyId, long companyId, String name)
338 throws PortalException, SystemException {
339
340 if (Validator.isNull(name) || Validator.isNumber(name) ||
341 (name.indexOf(CharPool.COMMA) != -1) ||
342 (name.indexOf(CharPool.STAR) != -1)) {
343
344 throw new PasswordPolicyNameException();
345 }
346
347 PasswordPolicy passwordPolicy = passwordPolicyPersistence.fetchByC_N(
348 companyId, name);
349
350 if (passwordPolicy != null) {
351 if ((passwordPolicyId <= 0) ||
352 (passwordPolicy.getPasswordPolicyId() != passwordPolicyId)) {
353
354 throw new DuplicatePasswordPolicyException();
355 }
356 }
357 }
358
359 }