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