This commit is contained in:
MaxKey 2023-10-14 20:02:05 +08:00
commit 9c262146a4
4 changed files with 412 additions and 363 deletions

View File

@ -17,16 +17,11 @@
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,11 +30,18 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
@Service
public class JdbcOrganizationService extends AbstractSynchronizerService implements ISynchronizerService {
final static Logger _logger = LoggerFactory.getLogger(JdbcOrganizationService.class);
static ArrayList< ColumnFieldMapper> mapperList = new ArrayList< ColumnFieldMapper>();
static ArrayList<ColumnFieldMapper> mapperList = new ArrayList<>();
@Override
public void sync() {
Connection conn = null;
Statement stmt = null;
@ -57,11 +59,11 @@ public class JdbcOrganizationService extends AbstractSynchronizerService imple
rs = stmt.executeQuery(synchronizer.getOrgFilters());
while (rs.next()) {
Organizations org = buildOrganization(rs);
Organizations queryOrg = this.organizationsService.get(org.getId());
Organizations queryOrg = organizationsService.get(org.getId());
if (queryOrg == null) {
organizationsService.insert(org);
} else {
this.organizationsService.update(org);
organizationsService.update(org);
}
}
}
@ -96,15 +98,27 @@ public class JdbcOrganizationService extends AbstractSynchronizerService imple
}
org.setId(org.generateId());
org.setInstId(this.synchronizer.getInstId());
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);
return org;
}

View File

@ -17,15 +17,10 @@
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,12 +30,19 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
@Service
public class JdbcUsersService extends AbstractSynchronizerService implements ISynchronizerService {
final static Logger _logger = LoggerFactory.getLogger(JdbcUsersService.class);
static ArrayList< ColumnFieldMapper> mapperList = new ArrayList< ColumnFieldMapper>();
static ArrayList<ColumnFieldMapper> mapperList = new ArrayList<>();
@Override
public void sync() {
_logger.info("Sync Jdbc Users...");
Connection conn = null;
@ -48,8 +50,8 @@ public class JdbcUsersService extends AbstractSynchronizerService implements
ResultSet rs = null;
try {
if(StringUtils.isNotBlank(synchronizer.getOrgFilters())){
_logger.info("Sync User Filters {}",synchronizer.getOrgFilters());
if (StringUtils.isNotBlank(synchronizer.getUserFilters())) {
_logger.info("Sync User Filters {}", synchronizer.getUserFilters());
conn = JdbcUtils.connect(
synchronizer.getProviderUrl(),
synchronizer.getPrincipal(),
@ -63,7 +65,7 @@ public class JdbcUsersService extends AbstractSynchronizerService implements
long readCount = 0;
while (rs.next()) {
UserInfo user = buildUserInfo(rs);
UserInfo queryUser = this.userInfoService.findByUsername(user.getUsername());
UserInfo queryUser = userInfoService.findByUsername(user.getUsername());
readCount++;
if (queryUser == null) {
if (user.getPassword().indexOf("{") > -1 && user.getPassword().indexOf("}") > -1) {
@ -118,7 +120,7 @@ public class JdbcUsersService extends AbstractSynchronizerService implements
} else {
user.setStatus(ConstsStatus.ACTIVE);
}
user.setInstId(this.synchronizer.getInstId());
user.setInstId(synchronizer.getInstId());
//password
if (meta.getColumnsMap().containsKey("password")) {
@ -136,13 +138,24 @@ public class JdbcUsersService extends AbstractSynchronizerService implements
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("username", "username", "String"));
mapperList.add(new ColumnFieldMapper("picture", "picture", "String"));
mapperList.add(new ColumnFieldMapper("displayname", "displayName", "String"));
mapperList.add(new ColumnFieldMapper("nickname", "nickName", "String"));

View File

@ -2,10 +2,10 @@
<div>
<form nz-form [formGroup]="formGroup" (ngSubmit)="onSubmit($event)" se-container="1">
<nz-form-item>
<nz-form-label [nzMd]="6" nzFor="id">{{ 'mxk.text.id' | i18n }}</nz-form-label>
<nz-form-label [nzMd]="6" nzFor="name">{{ 'mxk.synchronizers.name' | i18n }}</nz-form-label>
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!">
<input [(ngModel)]="form.model.id" disabled="{{ isEdit }}" [ngModelOptions]="{ standalone: true }" nz-input
name="id" id="id" />
<input [(ngModel)]="form.model.name" [ngModelOptions]="{ standalone: true }" nz-input
name="name" id="name" />
</nz-form-control>
</nz-form-item>
<nz-form-item>

View File

@ -17,10 +17,9 @@
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,18 +27,15 @@ 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"})
@ -54,7 +50,7 @@ public class SynchronizersController {
public ResponseEntity<?> fetch(Synchronizers synchronizers, @CurrentUser UserInfo currentUser) {
logger.debug("fetch {}", synchronizers);
synchronizers.setInstId(currentUser.getInstId());
return new Message<JpaPageResults<Synchronizers>>(
return new Message<>(
synchronizersService.fetchPageResults(synchronizers)).buildResponse();
}
@ -62,7 +58,22 @@ public class SynchronizersController {
public ResponseEntity<?> get(@PathVariable("id") String id) {
Synchronizers synchronizers = synchronizersService.get(id);
synchronizers.setCredentials(PasswordReciprocal.getInstance().decoder(synchronizers.getCredentials()));
return new Message<Synchronizers>(synchronizers).buildResponse();
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<Synchronizers>(Message.SUCCESS).buildResponse();
} else {
return new Message<Synchronizers>(Message.FAIL).buildResponse();
}
}
@ResponseBody
@ -78,6 +89,17 @@ public class SynchronizersController {
}
}
@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<Connectors>(Message.SUCCESS).buildResponse();
} else {
return new Message<Connectors>(Message.FAIL).buildResponse();
}
}
@ResponseBody
@RequestMapping(value = {"/synchr"})
public ResponseEntity<?> synchr(@RequestParam("id") String id) {