From 229e7cc36bfbb5da7e27ef8a9b60cfcf981f0e0d Mon Sep 17 00:00:00 2001 From: leron_xx Date: Thu, 12 Oct 2023 17:02:22 +0800 Subject: [PATCH] =?UTF-8?q?JDBC=20=E5=90=8C=E6=AD=A5=E5=99=A8=20=20?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9=201=E3=80=81UserInfo?= =?UTF-8?q?=E4=B8=AD=E6=97=A0UserName=E5=B1=9E=E6=80=A7=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=98=A0=E5=B0=84=E4=B8=BAusername=202=E3=80=81?= =?UTF-8?q?=E7=BC=BA=E5=B0=91=E5=90=8C=E6=AD=A5=E6=97=A5=E5=BF=97=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97=203=E3=80=81=E5=89=8D?= =?UTF-8?q?=E7=AB=AFUI=20Form=E8=A1=A8=E5=8D=95=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?id=E6=B7=BB=E5=8A=A0=20name=20=E6=96=87=E6=9C=AC=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jdbc/JdbcOrganizationService.java | 236 ++++++------ .../synchronizer/jdbc/JdbcUsersService.java | 363 +++++++++--------- .../synchronizer-editer.component.html | 8 +- .../contorller/SynchronizersController.java | 168 ++++---- 4 files changed, 412 insertions(+), 363 deletions(-) diff --git a/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcOrganizationService.java b/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcOrganizationService.java index 20dde9a5c..198495a4c 100644 --- a/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcOrganizationService.java +++ b/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcOrganizationService.java @@ -1,32 +1,27 @@ /* * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ - + package org.dromara.maxkey.synchronizer.jdbc; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; - import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang3.StringUtils; import org.dromara.maxkey.constants.ConstsStatus; import org.dromara.maxkey.entity.DbTableMetaData; +import org.dromara.maxkey.entity.HistorySynchronizer; import org.dromara.maxkey.entity.Organizations; import org.dromara.maxkey.synchronizer.AbstractSynchronizerService; import org.dromara.maxkey.synchronizer.ISynchronizerService; @@ -35,107 +30,126 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -@Service -public class JdbcOrganizationService extends AbstractSynchronizerService implements ISynchronizerService{ - final static Logger _logger = LoggerFactory.getLogger(JdbcOrganizationService.class); - static ArrayList< ColumnFieldMapper> mapperList = new ArrayList< ColumnFieldMapper>(); - - public void sync() { - Connection conn = null; - Statement stmt = null; - ResultSet rs = null; - try { - if(StringUtils.isNotBlank(synchronizer.getOrgFilters())){ - _logger.info("Sync Org Filters {}",synchronizer.getOrgFilters()); - conn = JdbcUtils.connect( - synchronizer.getProviderUrl(), - synchronizer.getPrincipal(), - synchronizer.getCredentials(), - synchronizer.getDriverClass()); - - stmt = conn.createStatement(); - rs = stmt.executeQuery(synchronizer.getOrgFilters()); - while(rs.next()) { - Organizations org = buildOrganization(rs); - Organizations queryOrg = this.organizationsService.get(org.getId()); - if(queryOrg == null) { - organizationsService.insert(org); - }else{ - this.organizationsService.update(org); - } - } - } - } catch (Exception e) { - _logger.error("Exception " , e); - }finally { - JdbcUtils.release(conn, stmt, rs); - } - } - - - public Organizations buildOrganization(ResultSet rs) throws SQLException { - DbTableMetaData meta = JdbcUtils.getMetaData(rs); - Organizations org = new Organizations(); - - for (ColumnFieldMapper mapper :mapperList ) { - if(meta.getColumnsMap().containsKey(mapper.getColumn())) { - Object value = null; - if(mapper.getType().equalsIgnoreCase("String")) { - value = rs.getString(mapper.getColumn()); - }else { - value = rs.getInt(mapper.getColumn()); - } - if(value != null ) { - try { - PropertyUtils.setSimpleProperty(org, mapper.getField(), value); - } catch (Exception e) { - _logger.error("setSimpleProperty {}" , e); - } - } - } - } - - org.setId(org.generateId()); - org.setInstId(this.synchronizer.getInstId()); - if(meta.getColumnsMap().containsKey("status")) { - org.setStatus(rs.getInt("status")); - }else { - org.setStatus(ConstsStatus.ACTIVE); - } - - _logger.debug("Organization {}" , org); - return org; - } - +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; - static { - mapperList.add(new ColumnFieldMapper("id" , "id","String")); - mapperList.add(new ColumnFieldMapper("orgcode" , "orgCode","String")); - mapperList.add(new ColumnFieldMapper("orgname" , "orgName","String")); - mapperList.add(new ColumnFieldMapper("fullname" , "fullName","String")); - mapperList.add(new ColumnFieldMapper("parentid" , "parentId","String")); - mapperList.add(new ColumnFieldMapper("parentcode" , "parentCode","String")); - mapperList.add(new ColumnFieldMapper("parentname" , "parentName","String")); +@Service +public class JdbcOrganizationService extends AbstractSynchronizerService implements ISynchronizerService { + final static Logger _logger = LoggerFactory.getLogger(JdbcOrganizationService.class); + static ArrayList mapperList = new ArrayList<>(); + + @Override + public void sync() { + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + if (StringUtils.isNotBlank(synchronizer.getOrgFilters())) { + _logger.info("Sync Org Filters {}", synchronizer.getOrgFilters()); + conn = JdbcUtils.connect( + synchronizer.getProviderUrl(), + synchronizer.getPrincipal(), + synchronizer.getCredentials(), + synchronizer.getDriverClass()); + + stmt = conn.createStatement(); + rs = stmt.executeQuery(synchronizer.getOrgFilters()); + while (rs.next()) { + Organizations org = buildOrganization(rs); + Organizations queryOrg = organizationsService.get(org.getId()); + if (queryOrg == null) { + organizationsService.insert(org); + } else { + organizationsService.update(org); + } + } + } + } catch (Exception e) { + _logger.error("Exception ", e); + } finally { + JdbcUtils.release(conn, stmt, rs); + } + } + + + public Organizations buildOrganization(ResultSet rs) throws SQLException { + DbTableMetaData meta = JdbcUtils.getMetaData(rs); + Organizations org = new Organizations(); + + for (ColumnFieldMapper mapper : mapperList) { + if (meta.getColumnsMap().containsKey(mapper.getColumn())) { + Object value = null; + if (mapper.getType().equalsIgnoreCase("String")) { + value = rs.getString(mapper.getColumn()); + } else { + value = rs.getInt(mapper.getColumn()); + } + if (value != null) { + try { + PropertyUtils.setSimpleProperty(org, mapper.getField(), value); + } catch (Exception e) { + _logger.error("setSimpleProperty {}", e); + } + } + } + } + + org.setId(org.generateId()); + org.setInstId(synchronizer.getInstId()); + if (meta.getColumnsMap().containsKey("status")) { + org.setStatus(rs.getInt("status")); + } else { + org.setStatus(ConstsStatus.ACTIVE); + } + _logger.debug("Organization {}", org); + + HistorySynchronizer historySynchronizer = new HistorySynchronizer(); + historySynchronizer.setId(historySynchronizer.generateId()); + historySynchronizer.setSyncId(synchronizer.getId()); + historySynchronizer.setSyncName(synchronizer.getName()); + historySynchronizer.setObjectId(org.getId()); + historySynchronizer.setObjectName(org.getOrgName()); + historySynchronizer.setObjectType(Organizations.class.getSimpleName()); + historySynchronizer.setInstId(synchronizer.getInstId()); + historySynchronizer.setResult("success"); + historySynchronizerService.insert(historySynchronizer); - mapperList.add(new ColumnFieldMapper("type" , "type","String")); - mapperList.add(new ColumnFieldMapper("codepath" , "codePath","String")); - mapperList.add(new ColumnFieldMapper("namepath" , "namePath","String")); - mapperList.add(new ColumnFieldMapper("level" , "level","Int")); - mapperList.add(new ColumnFieldMapper("haschild" , "hasChild","String")); - mapperList.add(new ColumnFieldMapper("division" , "division","String")); - mapperList.add(new ColumnFieldMapper("country" , "country","String")); - mapperList.add(new ColumnFieldMapper("region" , "region","String")); - mapperList.add(new ColumnFieldMapper("locality" , "locality","String")); - mapperList.add(new ColumnFieldMapper("street" , "street","String")); - mapperList.add(new ColumnFieldMapper("address" , "address","String")); - mapperList.add(new ColumnFieldMapper("contact" , "contact","String")); - mapperList.add(new ColumnFieldMapper("postalcode" , "postalCode","String")); - mapperList.add(new ColumnFieldMapper("phone" , "phone","String")); - mapperList.add(new ColumnFieldMapper("fax" , "fax","String")); - mapperList.add(new ColumnFieldMapper("email" , "email","String")); - mapperList.add(new ColumnFieldMapper("sortindex" , "sortIndex","Int")); - mapperList.add(new ColumnFieldMapper("ldapdn" , "ldapDn","String")); - mapperList.add(new ColumnFieldMapper("description" , "description","String")); - mapperList.add(new ColumnFieldMapper("status" , "status","int")); - } + return org; + + } + + + static { + mapperList.add(new ColumnFieldMapper("id", "id", "String")); + mapperList.add(new ColumnFieldMapper("orgcode", "orgCode", "String")); + mapperList.add(new ColumnFieldMapper("orgname", "orgName", "String")); + mapperList.add(new ColumnFieldMapper("fullname", "fullName", "String")); + mapperList.add(new ColumnFieldMapper("parentid", "parentId", "String")); + mapperList.add(new ColumnFieldMapper("parentcode", "parentCode", "String")); + mapperList.add(new ColumnFieldMapper("parentname", "parentName", "String")); + + mapperList.add(new ColumnFieldMapper("type", "type", "String")); + mapperList.add(new ColumnFieldMapper("codepath", "codePath", "String")); + mapperList.add(new ColumnFieldMapper("namepath", "namePath", "String")); + mapperList.add(new ColumnFieldMapper("level", "level", "Int")); + mapperList.add(new ColumnFieldMapper("haschild", "hasChild", "String")); + mapperList.add(new ColumnFieldMapper("division", "division", "String")); + mapperList.add(new ColumnFieldMapper("country", "country", "String")); + mapperList.add(new ColumnFieldMapper("region", "region", "String")); + mapperList.add(new ColumnFieldMapper("locality", "locality", "String")); + mapperList.add(new ColumnFieldMapper("street", "street", "String")); + mapperList.add(new ColumnFieldMapper("address", "address", "String")); + mapperList.add(new ColumnFieldMapper("contact", "contact", "String")); + mapperList.add(new ColumnFieldMapper("postalcode", "postalCode", "String")); + mapperList.add(new ColumnFieldMapper("phone", "phone", "String")); + mapperList.add(new ColumnFieldMapper("fax", "fax", "String")); + mapperList.add(new ColumnFieldMapper("email", "email", "String")); + mapperList.add(new ColumnFieldMapper("sortindex", "sortIndex", "Int")); + mapperList.add(new ColumnFieldMapper("ldapdn", "ldapDn", "String")); + mapperList.add(new ColumnFieldMapper("description", "description", "String")); + mapperList.add(new ColumnFieldMapper("status", "status", "int")); + } } diff --git a/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcUsersService.java b/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcUsersService.java index d7713329c..0d4b57f79 100644 --- a/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcUsersService.java +++ b/maxkey-synchronizers/maxkey-synchronizer-jdbc/src/main/java/org/dromara/maxkey/synchronizer/jdbc/JdbcUsersService.java @@ -1,31 +1,26 @@ /* * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ - + package org.dromara.maxkey.synchronizer.jdbc; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; - import org.apache.commons.beanutils.PropertyUtils; import org.dromara.maxkey.constants.ConstsStatus; import org.dromara.maxkey.entity.DbTableMetaData; +import org.dromara.maxkey.entity.HistorySynchronizer; import org.dromara.maxkey.entity.UserInfo; import org.dromara.maxkey.synchronizer.AbstractSynchronizerService; import org.dromara.maxkey.synchronizer.ISynchronizerService; @@ -35,170 +30,188 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -@Service -public class JdbcUsersService extends AbstractSynchronizerService implements ISynchronizerService{ - final static Logger _logger = LoggerFactory.getLogger(JdbcUsersService.class); +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; - static ArrayList< ColumnFieldMapper> mapperList = new ArrayList< ColumnFieldMapper>(); - - public void sync() { - _logger.info("Sync Jdbc Users..."); - Connection conn = null; - Statement stmt = null; - ResultSet rs = null; - - try { - if(StringUtils.isNotBlank(synchronizer.getOrgFilters())){ - _logger.info("Sync User Filters {}",synchronizer.getOrgFilters()); - conn = JdbcUtils.connect( - synchronizer.getProviderUrl(), - synchronizer.getPrincipal(), - synchronizer.getCredentials(), - synchronizer.getDriverClass()); - - stmt = conn.createStatement(); - rs = stmt.executeQuery(synchronizer.getUserFilters()); - long insertCount = 0; - long updateCount = 0; - long readCount = 0; - while(rs.next()) { - UserInfo user = buildUserInfo(rs); - UserInfo queryUser = this.userInfoService.findByUsername(user.getUsername()); - readCount ++; - if(queryUser == null) { - if(user.getPassword().indexOf("{") > -1 && user.getPassword().indexOf("}") > -1) { - userInfoService.insert(user,false); - }else { - //passwordEncoder - userInfoService.insert(user,true); - } - user.setBadPasswordCount(1); - insertCount++; - }else{ - //no need update password , set null - user.setPassword(null); - userInfoService.update(user); - updateCount++; - } - _logger.trace("read Count {} , insert Count {} , updateCount {} " , readCount,insertCount,updateCount); - } - _logger.info("read Count {} , insert Count {} , updateCount {} " , readCount,insertCount,updateCount); - } - } catch (Exception e) { - _logger.error("Exception " , e); - }finally { - JdbcUtils.release(conn, stmt, rs); - } - } - - public UserInfo buildUserInfo(ResultSet rs) throws SQLException { - DbTableMetaData meta = JdbcUtils.getMetaData(rs); - UserInfo user = new UserInfo(); - //basic - for (ColumnFieldMapper mapper :mapperList ) { - if(meta.getColumnsMap().containsKey(mapper.getColumn())) { - Object value = null; - if(mapper.getType().equalsIgnoreCase("String")) { - value = rs.getString(mapper.getColumn()); - }else { - value = rs.getInt(mapper.getColumn()); - } - if(value != null ) { - try { - PropertyUtils.setSimpleProperty(user, mapper.getField(), value); - } catch (Exception e) { - _logger.error("setSimpleProperty {}" , e); - } - } - } - } - - if(meta.getColumnsMap().containsKey("status")) { - user.setStatus(rs.getInt("status")); - }else { - user.setStatus(ConstsStatus.ACTIVE); - } - user.setInstId(this.synchronizer.getInstId()); - - //password - if(meta.getColumnsMap().containsKey("password")) { - user.setPassword(rs.getString("password")); - }else { - //后4位 - String last4Char = "6666"; - if(StringUtils.isNotBlank(user.getIdCardNo())) { - last4Char = user.getIdCardNo().substring(user.getIdCardNo().length() - 4); - }else if(StringUtils.isNotBlank(user.getMobile())) { - last4Char = user.getMobile().substring(user.getMobile().length() - 4); - }else if(StringUtils.isNotBlank(user.getEmployeeNumber())) { - last4Char = user.getEmployeeNumber().substring(user.getEmployeeNumber().length() - 4); - } - user.setPassword(user.getUsername()+"@M"+last4Char); - } - - _logger.debug("User {} " , user); - return user; - } - - static { - mapperList.add(new ColumnFieldMapper("id" , "id","String")); - mapperList.add(new ColumnFieldMapper("username" , "userName","String")); - mapperList.add(new ColumnFieldMapper("picture" , "picture","String")); - mapperList.add(new ColumnFieldMapper("displayname" , "displayName","String")); - mapperList.add(new ColumnFieldMapper("nickname" , "nickName","String")); - mapperList.add(new ColumnFieldMapper("mobile" , "mobile","String")); - mapperList.add(new ColumnFieldMapper("email" , "email","String")); - mapperList.add(new ColumnFieldMapper("birthdate" , "birthDate","String")); - mapperList.add(new ColumnFieldMapper("usertype" , "userType","String")); - mapperList.add(new ColumnFieldMapper("userstate" , "userState","String")); - mapperList.add(new ColumnFieldMapper("windowsaccount" , "windowsAccount","String")); - mapperList.add(new ColumnFieldMapper("givenname" , "givenName","String")); - mapperList.add(new ColumnFieldMapper("middlename" , "middleName","String")); - mapperList.add(new ColumnFieldMapper("married" , "married","Int")); - mapperList.add(new ColumnFieldMapper("gender" , "gender","Int")); - mapperList.add(new ColumnFieldMapper("idtype" , "idType","Int")); - mapperList.add(new ColumnFieldMapper("idcardno" , "idCardNo","String")); - mapperList.add(new ColumnFieldMapper("website" , "webSite","String")); - mapperList.add(new ColumnFieldMapper("startworkdate" , "startWorkDate","String")); - //work - mapperList.add(new ColumnFieldMapper("workcountry" , "workCountry","String")); - mapperList.add(new ColumnFieldMapper("workregion" , "workRegion","String")); - mapperList.add(new ColumnFieldMapper("worklocality" , "workLocality","String")); - mapperList.add(new ColumnFieldMapper("workstreetaddress" , "workStreetAddress","String")); - mapperList.add(new ColumnFieldMapper("workaddressformatted" , "workAddressFormatted","String")); - mapperList.add(new ColumnFieldMapper("workemail" , "workEmail","String")); - mapperList.add(new ColumnFieldMapper("workphonenumber" , "workPhoneNumber","String")); - mapperList.add(new ColumnFieldMapper("workpostalcode" , "workPostalCode","String")); - mapperList.add(new ColumnFieldMapper("workfax" , "workFax","String")); - mapperList.add(new ColumnFieldMapper("workofficename" , "workOfficeName","String")); - //home - mapperList.add(new ColumnFieldMapper("homecountry" , "homeCountry","String")); - mapperList.add(new ColumnFieldMapper("homeregion" , "homeRegion","String")); - mapperList.add(new ColumnFieldMapper("homelocality" , "homeLocality","String")); - mapperList.add(new ColumnFieldMapper("homestreetaddress" , "homeStreetAddress","String")); - mapperList.add(new ColumnFieldMapper("homeaddressformatted" , "homeAddressFormatted","String")); - mapperList.add(new ColumnFieldMapper("homeemail" , "homeEmail","String")); - mapperList.add(new ColumnFieldMapper("homephonenumber" , "homePhonenumber","String")); - mapperList.add(new ColumnFieldMapper("homepostalcode" , "homePostalCode","String")); - mapperList.add(new ColumnFieldMapper("homefax" , "homeFax","String")); - //company - mapperList.add(new ColumnFieldMapper("employeenumber" , "employeeNumber","String")); - mapperList.add(new ColumnFieldMapper("costcenter" , "costCenter","String")); - mapperList.add(new ColumnFieldMapper("organization" , "organization","String")); - mapperList.add(new ColumnFieldMapper("division" , "division","String")); - mapperList.add(new ColumnFieldMapper("departmentid" , "departmentId","String")); - mapperList.add(new ColumnFieldMapper("department" , "department","String")); - mapperList.add(new ColumnFieldMapper("jobtitle" , "jobTitle","String")); - mapperList.add(new ColumnFieldMapper("joblevel" , "jobLevel","String")); - mapperList.add(new ColumnFieldMapper("managerid" , "managerId","String")); - mapperList.add(new ColumnFieldMapper("manager" , "manager","String")); - mapperList.add(new ColumnFieldMapper("assistantid" , "assistantId","String")); - mapperList.add(new ColumnFieldMapper("assistant" , "assistant","String")); - mapperList.add(new ColumnFieldMapper("entrydate" , "entrydate","String")); - mapperList.add(new ColumnFieldMapper("quitdate" , "quitdate","String")); - mapperList.add(new ColumnFieldMapper("ldapdn" , "ldapDn","String")); - - mapperList.add(new ColumnFieldMapper("description" , "description","String")); - mapperList.add(new ColumnFieldMapper("status" , "status","String")); - } +@Service +public class JdbcUsersService extends AbstractSynchronizerService implements ISynchronizerService { + final static Logger _logger = LoggerFactory.getLogger(JdbcUsersService.class); + + static ArrayList mapperList = new ArrayList<>(); + + @Override + public void sync() { + _logger.info("Sync Jdbc Users..."); + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + + try { + if (StringUtils.isNotBlank(synchronizer.getUserFilters())) { + _logger.info("Sync User Filters {}", synchronizer.getUserFilters()); + conn = JdbcUtils.connect( + synchronizer.getProviderUrl(), + synchronizer.getPrincipal(), + synchronizer.getCredentials(), + synchronizer.getDriverClass()); + + stmt = conn.createStatement(); + rs = stmt.executeQuery(synchronizer.getUserFilters()); + long insertCount = 0; + long updateCount = 0; + long readCount = 0; + while (rs.next()) { + UserInfo user = buildUserInfo(rs); + UserInfo queryUser = userInfoService.findByUsername(user.getUsername()); + readCount++; + if (queryUser == null) { + if (user.getPassword().indexOf("{") > -1 && user.getPassword().indexOf("}") > -1) { + userInfoService.insert(user, false); + } else { + //passwordEncoder + userInfoService.insert(user, true); + } + user.setBadPasswordCount(1); + insertCount++; + } else { + //no need update password , set null + user.setPassword(null); + userInfoService.update(user); + updateCount++; + } + _logger.trace("read Count {} , insert Count {} , updateCount {} ", readCount, insertCount, updateCount); + } + _logger.info("read Count {} , insert Count {} , updateCount {} ", readCount, insertCount, updateCount); + } + } catch (Exception e) { + _logger.error("Exception ", e); + } finally { + JdbcUtils.release(conn, stmt, rs); + } + } + + public UserInfo buildUserInfo(ResultSet rs) throws SQLException { + DbTableMetaData meta = JdbcUtils.getMetaData(rs); + UserInfo user = new UserInfo(); + //basic + for (ColumnFieldMapper mapper : mapperList) { + if (meta.getColumnsMap().containsKey(mapper.getColumn())) { + Object value = null; + if (mapper.getType().equalsIgnoreCase("String")) { + value = rs.getString(mapper.getColumn()); + } else { + value = rs.getInt(mapper.getColumn()); + } + if (value != null) { + try { + PropertyUtils.setSimpleProperty(user, mapper.getField(), value); + } catch (Exception e) { + _logger.error("setSimpleProperty {}", e); + } + } + } + } + + if (meta.getColumnsMap().containsKey("status")) { + user.setStatus(rs.getInt("status")); + } else { + user.setStatus(ConstsStatus.ACTIVE); + } + user.setInstId(synchronizer.getInstId()); + + //password + if (meta.getColumnsMap().containsKey("password")) { + user.setPassword(rs.getString("password")); + } else { + //后4位 + String last4Char = "6666"; + if (StringUtils.isNotBlank(user.getIdCardNo())) { + last4Char = user.getIdCardNo().substring(user.getIdCardNo().length() - 4); + } else if (StringUtils.isNotBlank(user.getMobile())) { + last4Char = user.getMobile().substring(user.getMobile().length() - 4); + } else if (StringUtils.isNotBlank(user.getEmployeeNumber())) { + last4Char = user.getEmployeeNumber().substring(user.getEmployeeNumber().length() - 4); + } + user.setPassword(user.getUsername() + "@M" + last4Char); + } + + HistorySynchronizer historySynchronizer = new HistorySynchronizer(); + historySynchronizer.setId(historySynchronizer.generateId()); + historySynchronizer.setSyncId(synchronizer.getId()); + historySynchronizer.setSyncName(synchronizer.getName()); + historySynchronizer.setObjectId(user.getId()); + historySynchronizer.setObjectName(user.getUsername()); + historySynchronizer.setObjectType(UserInfo.class.getSimpleName()); + historySynchronizer.setInstId(synchronizer.getInstId()); + historySynchronizer.setResult("success"); + historySynchronizerService.insert(historySynchronizer); + _logger.debug("User {} ", user); + + return user; + } + + static { + mapperList.add(new ColumnFieldMapper("id", "id", "String")); + mapperList.add(new ColumnFieldMapper("username", "username", "String")); + mapperList.add(new ColumnFieldMapper("picture", "picture", "String")); + mapperList.add(new ColumnFieldMapper("displayname", "displayName", "String")); + mapperList.add(new ColumnFieldMapper("nickname", "nickName", "String")); + mapperList.add(new ColumnFieldMapper("mobile", "mobile", "String")); + mapperList.add(new ColumnFieldMapper("email", "email", "String")); + mapperList.add(new ColumnFieldMapper("birthdate", "birthDate", "String")); + mapperList.add(new ColumnFieldMapper("usertype", "userType", "String")); + mapperList.add(new ColumnFieldMapper("userstate", "userState", "String")); + mapperList.add(new ColumnFieldMapper("windowsaccount", "windowsAccount", "String")); + mapperList.add(new ColumnFieldMapper("givenname", "givenName", "String")); + mapperList.add(new ColumnFieldMapper("middlename", "middleName", "String")); + mapperList.add(new ColumnFieldMapper("married", "married", "Int")); + mapperList.add(new ColumnFieldMapper("gender", "gender", "Int")); + mapperList.add(new ColumnFieldMapper("idtype", "idType", "Int")); + mapperList.add(new ColumnFieldMapper("idcardno", "idCardNo", "String")); + mapperList.add(new ColumnFieldMapper("website", "webSite", "String")); + mapperList.add(new ColumnFieldMapper("startworkdate", "startWorkDate", "String")); + //work + mapperList.add(new ColumnFieldMapper("workcountry", "workCountry", "String")); + mapperList.add(new ColumnFieldMapper("workregion", "workRegion", "String")); + mapperList.add(new ColumnFieldMapper("worklocality", "workLocality", "String")); + mapperList.add(new ColumnFieldMapper("workstreetaddress", "workStreetAddress", "String")); + mapperList.add(new ColumnFieldMapper("workaddressformatted", "workAddressFormatted", "String")); + mapperList.add(new ColumnFieldMapper("workemail", "workEmail", "String")); + mapperList.add(new ColumnFieldMapper("workphonenumber", "workPhoneNumber", "String")); + mapperList.add(new ColumnFieldMapper("workpostalcode", "workPostalCode", "String")); + mapperList.add(new ColumnFieldMapper("workfax", "workFax", "String")); + mapperList.add(new ColumnFieldMapper("workofficename", "workOfficeName", "String")); + //home + mapperList.add(new ColumnFieldMapper("homecountry", "homeCountry", "String")); + mapperList.add(new ColumnFieldMapper("homeregion", "homeRegion", "String")); + mapperList.add(new ColumnFieldMapper("homelocality", "homeLocality", "String")); + mapperList.add(new ColumnFieldMapper("homestreetaddress", "homeStreetAddress", "String")); + mapperList.add(new ColumnFieldMapper("homeaddressformatted", "homeAddressFormatted", "String")); + mapperList.add(new ColumnFieldMapper("homeemail", "homeEmail", "String")); + mapperList.add(new ColumnFieldMapper("homephonenumber", "homePhonenumber", "String")); + mapperList.add(new ColumnFieldMapper("homepostalcode", "homePostalCode", "String")); + mapperList.add(new ColumnFieldMapper("homefax", "homeFax", "String")); + //company + mapperList.add(new ColumnFieldMapper("employeenumber", "employeeNumber", "String")); + mapperList.add(new ColumnFieldMapper("costcenter", "costCenter", "String")); + mapperList.add(new ColumnFieldMapper("organization", "organization", "String")); + mapperList.add(new ColumnFieldMapper("division", "division", "String")); + mapperList.add(new ColumnFieldMapper("departmentid", "departmentId", "String")); + mapperList.add(new ColumnFieldMapper("department", "department", "String")); + mapperList.add(new ColumnFieldMapper("jobtitle", "jobTitle", "String")); + mapperList.add(new ColumnFieldMapper("joblevel", "jobLevel", "String")); + mapperList.add(new ColumnFieldMapper("managerid", "managerId", "String")); + mapperList.add(new ColumnFieldMapper("manager", "manager", "String")); + mapperList.add(new ColumnFieldMapper("assistantid", "assistantId", "String")); + mapperList.add(new ColumnFieldMapper("assistant", "assistant", "String")); + mapperList.add(new ColumnFieldMapper("entrydate", "entrydate", "String")); + mapperList.add(new ColumnFieldMapper("quitdate", "quitdate", "String")); + mapperList.add(new ColumnFieldMapper("ldapdn", "ldapDn", "String")); + + mapperList.add(new ColumnFieldMapper("description", "description", "String")); + mapperList.add(new ColumnFieldMapper("status", "status", "String")); + } } diff --git a/maxkey-web-frontend/maxkey-web-mgt-app/src/app/routes/config/synchronizers/synchronizer-editer/synchronizer-editer.component.html b/maxkey-web-frontend/maxkey-web-mgt-app/src/app/routes/config/synchronizers/synchronizer-editer/synchronizer-editer.component.html index 4a013b3a8..b8211a1f1 100644 --- a/maxkey-web-frontend/maxkey-web-mgt-app/src/app/routes/config/synchronizers/synchronizer-editer/synchronizer-editer.component.html +++ b/maxkey-web-frontend/maxkey-web-mgt-app/src/app/routes/config/synchronizers/synchronizer-editer/synchronizer-editer.component.html @@ -2,10 +2,10 @@
- {{ 'mxk.text.id' | i18n }} + {{ 'mxk.synchronizers.name' | i18n }} - + @@ -195,4 +195,4 @@
-
\ No newline at end of file +
diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/dromara/maxkey/web/config/contorller/SynchronizersController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/dromara/maxkey/web/config/contorller/SynchronizersController.java index 939e30adc..941a09b7d 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/dromara/maxkey/web/config/contorller/SynchronizersController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/dromara/maxkey/web/config/contorller/SynchronizersController.java @@ -1,26 +1,25 @@ /* * Copyright [2021] [MaxKey of copyright http://www.maxkey.top] - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ - + package org.dromara.maxkey.web.config.contorller; -import java.util.List; - import org.dromara.maxkey.authn.annotation.CurrentUser; import org.dromara.maxkey.crypto.password.PasswordReciprocal; +import org.dromara.maxkey.entity.Connectors; import org.dromara.maxkey.entity.Message; import org.dromara.maxkey.entity.Synchronizers; import org.dromara.maxkey.entity.UserInfo; @@ -28,81 +27,104 @@ import org.dromara.maxkey.persistence.service.SynchronizersService; import org.dromara.maxkey.synchronizer.ISynchronizerService; import org.dromara.maxkey.util.StringUtils; import org.dromara.maxkey.web.WebContext; -import org.dromara.mybatis.jpa.entity.JpaPageResults; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @Controller -@RequestMapping(value={"/config/synchronizers"}) +@RequestMapping(value = {"/config/synchronizers"}) public class SynchronizersController { - static final Logger logger = LoggerFactory.getLogger(SynchronizersController.class); - - @Autowired - SynchronizersService synchronizersService; - - @RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE}) - @ResponseBody - public ResponseEntity fetch(Synchronizers synchronizers,@CurrentUser UserInfo currentUser) { - logger.debug("fetch {}" , synchronizers); - synchronizers.setInstId(currentUser.getInstId()); - return new Message>( - synchronizersService.fetchPageResults(synchronizers)).buildResponse(); - } - - @RequestMapping(value = { "/get/{id}" }, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity get(@PathVariable("id") String id) { - Synchronizers synchronizers=synchronizersService.get(id); - synchronizers.setCredentials(PasswordReciprocal.getInstance().decoder(synchronizers.getCredentials())); - return new Message(synchronizers).buildResponse(); - } - - @ResponseBody - @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity update(@RequestBody Synchronizers synchronizers,@CurrentUser UserInfo currentUser) { - logger.debug("-update : {}" , synchronizers); - synchronizers.setInstId(currentUser.getInstId()); - synchronizers.setCredentials(PasswordReciprocal.getInstance().encode(synchronizers.getCredentials())); - if (synchronizersService.update(synchronizers)) { - return new Message(Message.SUCCESS).buildResponse(); - } else { - return new Message(Message.FAIL).buildResponse(); - } - } - - @ResponseBody - @RequestMapping(value={"/synchr"}) - public ResponseEntity synchr(@RequestParam("id") String id) { - logger.debug("-sync ids : {}" , id); - - List ids = StringUtils.string2List(id, ","); - try { - for(String sysId : ids) { - Synchronizers synchronizer = synchronizersService.get(sysId); - synchronizer.setCredentials(PasswordReciprocal.getInstance().decoder(synchronizer.getCredentials())); - logger.debug("synchronizer {}" , synchronizer); - ISynchronizerService synchronizerService = WebContext.getBean(synchronizer.getService(),ISynchronizerService.class); - if(synchronizerService != null) { - synchronizerService.setSynchronizer(synchronizer); - synchronizerService.sync(); - }else { - logger.info("synchronizer {} not exist .",synchronizer.getService()); - } - } - }catch(Exception e) { - logger.error("synchronizer Exception " , e); - return new Message(Message.FAIL).buildResponse(); - - } - return new Message(Message.SUCCESS).buildResponse(); - } + static final Logger logger = LoggerFactory.getLogger(SynchronizersController.class); + + @Autowired + SynchronizersService synchronizersService; + + @RequestMapping(value = {"/fetch"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + @ResponseBody + public ResponseEntity fetch(Synchronizers synchronizers, @CurrentUser UserInfo currentUser) { + logger.debug("fetch {}", synchronizers); + synchronizers.setInstId(currentUser.getInstId()); + return new Message<>( + synchronizersService.fetchPageResults(synchronizers)).buildResponse(); + } + + @RequestMapping(value = {"/get/{id}"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@PathVariable("id") String id) { + Synchronizers synchronizers = synchronizersService.get(id); + synchronizers.setCredentials(PasswordReciprocal.getInstance().decoder(synchronizers.getCredentials())); + return new Message<>(synchronizers).buildResponse(); + } + + @ResponseBody + @RequestMapping(value = {"/add"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity add(@RequestBody Synchronizers synchronizers, @CurrentUser UserInfo currentUser) { + logger.debug("-add : {}", synchronizers); + synchronizers.setInstId(currentUser.getInstId()); + if (StringUtils.isNotBlank(synchronizers.getCredentials())) { + synchronizers.setCredentials(PasswordReciprocal.getInstance().encode(synchronizers.getCredentials())); + } + if (synchronizersService.insert(synchronizers)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value = {"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@RequestBody Synchronizers synchronizers, @CurrentUser UserInfo currentUser) { + logger.debug("-update : {}", synchronizers); + synchronizers.setInstId(currentUser.getInstId()); + synchronizers.setCredentials(PasswordReciprocal.getInstance().encode(synchronizers.getCredentials())); + if (synchronizersService.update(synchronizers)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value = {"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity delete(@RequestParam("ids") String ids) { + logger.debug("-delete ids : {} ", ids); + if (synchronizersService.deleteBatch(ids)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value = {"/synchr"}) + public ResponseEntity synchr(@RequestParam("id") String id) { + logger.debug("-sync ids : {}", id); + + List ids = StringUtils.string2List(id, ","); + try { + for (String sysId : ids) { + Synchronizers synchronizer = synchronizersService.get(sysId); + synchronizer.setCredentials(PasswordReciprocal.getInstance().decoder(synchronizer.getCredentials())); + logger.debug("synchronizer {}", synchronizer); + ISynchronizerService synchronizerService = WebContext.getBean(synchronizer.getService(), ISynchronizerService.class); + if (synchronizerService != null) { + synchronizerService.setSynchronizer(synchronizer); + synchronizerService.sync(); + } else { + logger.info("synchronizer {} not exist .", synchronizer.getService()); + } + } + } catch (Exception e) { + logger.error("synchronizer Exception ", e); + return new Message(Message.FAIL).buildResponse(); + + } + return new Message(Message.SUCCESS).buildResponse(); + } }