in manager/general/src/main/java/org/apache/doris/stack/component/LdapComponent.java [351:408]
public void incrementalSyncLdapUser() {
SettingEntity authType = settingComponent.readSetting(ConfigConstant.AUTH_TYPE_KEY);
SettingEntity initStep = settingComponent.readSetting(ConfigConstant.INIT_STEP_KEY);
if (!(authType != null && initStep != null && authType.getValue().equals("ldap") && initStep.getValue().equals("3"))) {
log.debug("not ldap auth or auth has not completed, skip increment sync ldap user");
return;
}
log.debug("start to increment sync ldap user");
LdapSettingResp resp = readLdapConfig();
// set ldap setting
LdapSettingReq req = getLdapSettings(resp);
synchronized (this) {
log.debug("get lock, start to increment sync ldap user");
List<CoreUserEntity> coreUserEntities = syncLdapUser(req);
List<CoreUserEntity> oldCoreUserEntities = userRepository.findAll();
oldCoreUserEntities =
oldCoreUserEntities.stream().filter(e -> (e.getEntryUUID() == null || !e.getEntryUUID().equals(""))).collect(Collectors.toList());
List<CoreUserEntity> existUserEntities = ListUtil.getExistList(coreUserEntities, oldCoreUserEntities);
// update email or username if it has changed
for (CoreUserEntity existUserEntity : existUserEntities) {
String entryUUID = existUserEntity.getEntryUUID();
CoreUserEntity oldUser =
oldCoreUserEntities.stream().filter(user -> user.getEntryUUID().equals(entryUUID)).collect(Collectors.toList()).get(0);
if (!oldUser.getEmail().equals(existUserEntity.getEmail())) {
oldUser.setEmail(existUserEntity.getEmail());
}
if (!oldUser.getFirstName().equals(existUserEntity.getFirstName())) {
oldUser.setFirstName(existUserEntity.getFirstName());
}
userRepository.save(oldUser);
}
List<CoreUserEntity> addList = ListUtil.getAddList(coreUserEntities, oldCoreUserEntities);
List<CoreUserEntity> reduceList = ListUtil.getReduceList(coreUserEntities, oldCoreUserEntities);
log.debug("ldap user size is {},user table size is {}", coreUserEntities.size(),
oldCoreUserEntities.size());
// add new ldap user
log.debug("add new ldap user ,size is {}", addList.size());
addList.forEach(this::saveLdapUser);
// reduce ldap user no longer exist
log.debug("reduce ldap user no longer exist, size is {}", reduceList.size());
for (CoreUserEntity userEntity : reduceList) {
//List<CoreUserEntity> userEntities = userRepository.getByFirstName(userEntity.getFirstName());
//userEntities.forEach(user -> userRepository.deleteById(user.getId()));
// stop this user, todo delete
userEntity.setEntryUUID("");
userRepository.save(userEntity);
// membershipRepository.deleteByUserId(userEntity.getId());
// clusterUserMembershipRepository.deleteByUserId(userEntity.getId());
// sessionRepository.deleteByUserId(userEntity.getId());
}
}
}