My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.aw.ad.util;

import com.aw.ad.ADUserDetails;
import com.aw.ad.UserDetails;

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
* User: gmc
* Date: 07/03/11
*/
public class ActiveDirectoryUtils {

private static final String ACCOUNT_NEVER_EXPIRE_VALUE = "9223372036854775807";
// UserAccountFlags
private static final int ADS_UF_DONT_EXPIRE_PASSWD = 0x10000;
private static final int ACCOUNT_DISABLE = 0x0002;

public UserDetails getUserDetailsFrom(String userName, String fullDn, String userAccountControlStr, String pwdLastSet, String accountExpires, String maxPwdAgeStr) {
int userAccountControl = Integer.parseInt(userAccountControlStr);
boolean accountNeverExpire = accountExpires.equals("0") || ACCOUNT_NEVER_EXPIRE_VALUE.equals(accountExpires);
boolean accountDisabled = (userAccountControl & ACCOUNT_DISABLE) == ACCOUNT_DISABLE;
boolean credentialsHasToBeChangedAtFirst = pwdLastSet.equals("0");
boolean credentialsNeverExpire = (userAccountControl & ADS_UF_DONT_EXPIRE_PASSWD) == ADS_UF_DONT_EXPIRE_PASSWD;
Date pwdLastSetDate = getDateTimeFrom(pwdLastSet);
int maxPwdAgeInDays = getNumberOfDays(maxPwdAgeStr);
Date currentDateTime = new Date();
Date currentDate = truncTimeFrom(currentDateTime);
boolean credentialsExpired = false;
int daysBeforeCredentialsExpiration = Integer.MAX_VALUE;
Date credentialsExpiresDate = null;
if (!credentialsNeverExpire) {
credentialsExpiresDate = addDaysToDate(maxPwdAgeInDays, pwdLastSetDate);
credentialsExpired = credentialsExpiresDate.compareTo(currentDateTime) < 0;
daysBeforeCredentialsExpiration = (int) TimeUnit.DAYS.convert(credentialsExpiresDate.getTime() - currentDateTime.getTime(), TimeUnit.MILLISECONDS);
}
boolean accountExpired = false;
int daysBeforeAccountExpiration = Integer.MAX_VALUE;
Date accountExpiresDate = null;
if (!accountNeverExpire) {
accountExpiresDate = getDateFrom(accountExpires);
accountExpired = accountExpiresDate.compareTo(currentDate) < 0;
daysBeforeAccountExpiration = (int) TimeUnit.DAYS.convert(accountExpiresDate.getTime() - currentDate.getTime(), TimeUnit.MILLISECONDS);
}
ADUserDetails userDetails = new ADUserDetails();
userDetails.setUsername(userName);
userDetails.setDn(fullDn);
userDetails.setEnabled(!accountDisabled);
userDetails.setAccountNeverExpire(accountNeverExpire);
userDetails.setAccountNonExpired(!accountExpired);
userDetails.setAccountExpiration(accountExpiresDate);
userDetails.setTimeBeforeAccountExpiration(daysBeforeAccountExpiration);
userDetails.setCredentialsNeverExpire(credentialsNeverExpire);
userDetails.setCredentialsHasToBeChangedAtFirst(credentialsHasToBeChangedAtFirst);
userDetails.setCredentialsNonExpired(!credentialsExpired);
userDetails.setCredentialsExpiration(credentialsExpiresDate);
userDetails.setTimeBeforeCredentialsExpiration(daysBeforeCredentialsExpiration);
return userDetails;
}


private final static long DIFF_NET_JAVA_FOR_DATE_AND_TIMES = 11644473600000L;
private final static long DIFF_NET_JAVA_FOR_DATES = 11644473600000L + 24 * 60 * 60 * 1000;

private Date getDateFrom(String adDateStr) {
long adDate = Long.parseLong(adDateStr);
long milliseconds = (adDate / 10000) - DIFF_NET_JAVA_FOR_DATES;
Date date = new Date(milliseconds);
return date;
}

private Date getDateTimeFrom(String adDateTimeStr) {
long adDateTime = Long.parseLong(adDateTimeStr);
long milliseconds = (adDateTime / 10000) - DIFF_NET_JAVA_FOR_DATE_AND_TIMES;
Date date = new Date(milliseconds);
return date;
}

private final static int ONE_HUNDRED_NANOSECOND = 10000000;
private final static long SECONDS_IN_DAY = 86400;

private int getNumberOfDays(String oneHundredNanosecondInterval) {
long interval = Math.abs(Long.parseLong(oneHundredNanosecondInterval));
long intervalSecs = interval / ONE_HUNDRED_NANOSECOND;
int intervalDays = (int) (intervalSecs / SECONDS_IN_DAY);
return intervalDays;
}

private Date truncTimeFrom(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}

private Date addDaysToDate(int daysToAdd, Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, daysToAdd);
return cal.getTime();
}

}

Change log

r3 by gamal.mateo on Mar 7, 2011   Diff
Getting User Details
Go to: 
Project members, sign in to write a code review

Older revisions

All revisions of this file

File info

Size: 4997 bytes, 108 lines
Powered by Google Project Hosting