|
@@ -24,29 +24,26 @@ import javax.naming.directory.Attribute;
|
|
|
import javax.naming.directory.SearchControls;
|
|
|
import javax.naming.directory.SearchResult;
|
|
|
import org.maxkey.constants.ldap.ActiveDirectoryUser;
|
|
|
-import org.maxkey.entity.Synchronizers;
|
|
|
+import org.maxkey.entity.HistorySynchronizer;
|
|
|
+import org.maxkey.entity.Organizations;
|
|
|
import org.maxkey.entity.UserInfo;
|
|
|
import org.maxkey.persistence.ldap.ActiveDirectoryUtils;
|
|
|
import org.maxkey.persistence.ldap.LdapUtils;
|
|
|
-import org.maxkey.persistence.service.UserInfoService;
|
|
|
+import org.maxkey.synchronizer.AbstractSynchronizerService;
|
|
|
import org.maxkey.synchronizer.ISynchronizerService;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@Service
|
|
|
-public class ActiveDirectoryUsersService implements ISynchronizerService{
|
|
|
+public class ActiveDirectoryUsersService extends AbstractSynchronizerService implements ISynchronizerService{
|
|
|
final static Logger _logger = LoggerFactory.getLogger(ActiveDirectoryUsersService.class);
|
|
|
|
|
|
ActiveDirectoryUtils ldapUtils;
|
|
|
|
|
|
- @Autowired
|
|
|
- UserInfoService userInfoService;
|
|
|
-
|
|
|
-
|
|
|
public void sync() {
|
|
|
_logger.info("Sync Users...");
|
|
|
+ loadOrgsById("1");
|
|
|
try {
|
|
|
SearchControls constraints = new SearchControls();
|
|
|
constraints.setSearchScope(ldapUtils.getSearchScope());
|
|
@@ -90,9 +87,29 @@ public class ActiveDirectoryUsersService implements ISynchronizerService{
|
|
|
}
|
|
|
|
|
|
public UserInfo buildUserInfo(HashMap<String,Attribute> attributeMap,String name,String nameInNamespace) {
|
|
|
- UserInfo userInfo = new UserInfo();
|
|
|
+ if(nameInNamespace.indexOf("CN=Users,DC=maxkey,DC=top")>-1
|
|
|
+ ||nameInNamespace.indexOf("OU=Domain Controllers,DC=maxkey,DC=top")>-1) {
|
|
|
+ _logger.info("to skip.");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ UserInfo userInfo = new UserInfo();
|
|
|
userInfo.setLdapDn(nameInNamespace);
|
|
|
+ nameInNamespace = nameInNamespace.replaceAll(",OU=", "/").replaceAll("OU=", "/").replaceAll("CN=", "/");
|
|
|
+ nameInNamespace = nameInNamespace.substring(0, nameInNamespace.length() - ldapUtils.getBaseDN().length() - 1);
|
|
|
+ _logger.info("nameInNamespace " + nameInNamespace);
|
|
|
+ String []namePaths = nameInNamespace.split("/");
|
|
|
+ String namePah= "/"+rootOrganization.getName();
|
|
|
+ for(int i = namePaths.length -1 ; i>=1 ;i--) {
|
|
|
+ namePah = namePah + "/"+namePaths[i];
|
|
|
+ }
|
|
|
+ //namePah = namePah.substring(0, namePah.length());
|
|
|
+ String deptNamePath= namePah.substring(0, namePah.lastIndexOf("/"));
|
|
|
+ _logger.info("deptNamePath " + deptNamePath);
|
|
|
+ Organizations deptOrg = orgsNamePathMap.get(deptNamePath);
|
|
|
+ userInfo.setDepartment(deptOrg.getName());
|
|
|
+ userInfo.setDepartmentId(deptOrg.getId());
|
|
|
try {
|
|
|
+ userInfo.setId(userInfo.generateId());
|
|
|
userInfo.setFormattedName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.CN,attributeMap));//閸忋劌鎮�
|
|
|
//鐠愶附鍩�
|
|
|
userInfo.setUsername(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.SAMACCOUNTNAME,attributeMap));//鐠愶箑褰�
|
|
@@ -117,15 +134,42 @@ public class ActiveDirectoryUsersService implements ISynchronizerService{
|
|
|
userInfo.setWorkPostalCode(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.POSTALCODE,attributeMap));//闁喚绱�
|
|
|
userInfo.setWorkAddressFormatted(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.POSTOFFICEBOX,attributeMap));//闁喗鏂傞柇顔绢唸
|
|
|
|
|
|
- userInfo.setMobile(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MOBILE,attributeMap));//閹靛婧�
|
|
|
+ if(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MOBILE,attributeMap).equals("")) {
|
|
|
+ userInfo.setMobile(userInfo.getId());
|
|
|
+ }else {
|
|
|
+ userInfo.setMobile(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MOBILE,attributeMap));//閹靛婧�
|
|
|
+ }
|
|
|
userInfo.setHomePhoneNumber(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.HOMEPHONE,attributeMap));//鐎硅泛娑甸悽浣冪樈
|
|
|
userInfo.setWorkFax(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.FACSIMILETELEPHONENUMBER,attributeMap));//娴肩姷婀�
|
|
|
userInfo.setHomeAddressFormatted(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INFO,attributeMap));//閻絻鐦芥径鍥ㄦ暈
|
|
|
|
|
|
userInfo.setDivision(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.COMPANY,attributeMap)); //閸忣剙寰�
|
|
|
- userInfo.setDepartment(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //闁劑妫�
|
|
|
+ //userInfo.setDepartment(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //闁劑妫�
|
|
|
//userInfo.setDepartmentId(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //闁劑妫紓鏍у娇
|
|
|
userInfo.setJobTitle(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.TITLE,attributeMap));//閼卞苯濮�
|
|
|
+ userInfo.setUserState("RESIDENT");
|
|
|
+ userInfo.setUserType("EMPLOYEE");
|
|
|
+ userInfo.setTimeZone("Asia/Shanghai");
|
|
|
+ userInfo.setStatus(1);
|
|
|
+ UserInfo quser=new UserInfo();
|
|
|
+ quser.setUsername(userInfo.getUsername());
|
|
|
+ UserInfo loadedUser=userInfoService.load(quser);
|
|
|
+ if(loadedUser == null) {
|
|
|
+
|
|
|
+ userInfo.setPassword(userInfo.generateId());
|
|
|
+ userInfoService.insert(userInfo);
|
|
|
+ HistorySynchronizer historySynchronizer =new HistorySynchronizer();
|
|
|
+ historySynchronizer.setId(historySynchronizer.generateId());
|
|
|
+ historySynchronizer.setSyncId(this.synchronizer.getId());
|
|
|
+ historySynchronizer.setSyncName(this.synchronizer.getName());
|
|
|
+ historySynchronizer.setObjectId(userInfo.getId());
|
|
|
+ historySynchronizer.setObjectName(userInfo.getUsername());
|
|
|
+ historySynchronizer.setObjectType(Organizations.class.getSimpleName());
|
|
|
+ historySynchronizer.setResult("success");
|
|
|
+ this.historySynchronizerService.insert(historySynchronizer);
|
|
|
+ }else {
|
|
|
+ _logger.info("username " + userInfo.getUsername()+" exists.");
|
|
|
+ }
|
|
|
|
|
|
} catch (NamingException e) {
|
|
|
e.printStackTrace();
|
|
@@ -140,20 +184,5 @@ public class ActiveDirectoryUsersService implements ISynchronizerService{
|
|
|
public void setLdapUtils(ActiveDirectoryUtils ldapUtils) {
|
|
|
this.ldapUtils = ldapUtils;
|
|
|
}
|
|
|
-
|
|
|
- public UserInfoService getUserInfoService() {
|
|
|
- return userInfoService;
|
|
|
- }
|
|
|
-
|
|
|
- public void setUserInfoService(UserInfoService userInfoService) {
|
|
|
- this.userInfoService = userInfoService;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void setSynchronizer(Synchronizers Synchronizer) {
|
|
|
- // TODO Auto-generated method stub
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
}
|