1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.spring.security.ldaptive.authentication.provider;
18
19 import java.time.OffsetDateTime;
20 import java.util.Optional;
21 import org.bremersee.ldaptive.transcoder.UserAccountControl;
22 import org.bremersee.ldaptive.transcoder.ValueTranscoderFactory;
23 import org.bremersee.spring.security.ldaptive.authentication.AccountControlEvaluator;
24 import org.ldaptive.LdapAttribute;
25 import org.ldaptive.LdapEntry;
26
27
28
29
30
31
32
33 public class ActiveDirectoryAccountControlEvaluator implements AccountControlEvaluator {
34
35 @Override
36 public boolean isAccountNonExpired(LdapEntry ldapEntry) {
37 var valueTranscoder = ValueTranscoderFactory.getFileTimeToOffsetDateTimeValueTranscoder();
38 return Optional.ofNullable(ldapEntry)
39 .map(entry -> entry.getAttribute("accountExpires"))
40 .map(LdapAttribute::getStringValue)
41 .map(valueTranscoder::decodeStringValue)
42 .map(dateTime -> dateTime.isAfter(OffsetDateTime.now()))
43 .orElse(true);
44 }
45
46 @Override
47 public boolean isAccountNonLocked(LdapEntry ldapEntry) {
48 return true;
49 }
50
51 @Override
52 public boolean isCredentialsNonExpired(LdapEntry ldapEntry) {
53 return true;
54 }
55
56 @Override
57 public boolean isEnabled(LdapEntry ldapEntry) {
58 var valueTranscoder = ValueTranscoderFactory.getUserAccountControlValueTranscoder();
59 return Optional.ofNullable(ldapEntry)
60 .map(entry -> entry.getAttribute("userAccountControl"))
61 .map(LdapAttribute::getStringValue)
62 .map(valueTranscoder::decodeStringValue)
63 .map(UserAccountControl::isEnabled)
64 .orElse(true);
65 }
66 }