public void incrementalSyncLdapUser()

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());
            }
        }

    }