Skip to content

Commit 131bd0f

Browse files
authored
fix: model-data endpoint unauthentication and improve error handling for authentication and model operations (opentiny#294)
1 parent 0223b20 commit 131bd0f

File tree

11 files changed

+145
-20
lines changed

11 files changed

+145
-20
lines changed

base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,23 @@ public enum ExceptionEnum implements IBaseError {
336336
/**
337337
* Cm 342 exception enum.
338338
*/
339-
CM342("CM342", "数字格式异常");
339+
CM342("CM342", "数字格式异常"),
340+
341+
342+
/**
343+
* Cm 343 exception enum.
344+
*/
345+
CM343("CM343", "该用户名已被注册,请尝试其他名称"),
346+
347+
/**
348+
* Cm 344 exception enum.
349+
*/
350+
CM344("CM344", "账户恢复代码无效"),
351+
352+
/**
353+
* Cm 345 exception enum.
354+
*/
355+
CM345("CM345", "用户名不存在,请重新输入"),;
340356
/**
341357
* 错误码
342358
*/

base/src/main/java/com/tinyengine/it/dynamic/service/DynamicModelService.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public class DynamicModelService {
4444
*/
4545
@Transactional
4646
public void createDynamicTable(Model modelMetadata) {
47+
if(modelMetadata.getParameters()==null || modelMetadata.getParameters().isEmpty()){
48+
throw new ServiceException(ExceptionEnum.CM001.getResultCode(), "Model parameters cannot be null or empty");
49+
50+
}
4751
String tableName = getTableName(modelMetadata.getNameEn());
4852
String sql = generateCreateTableSQL(tableName, modelMetadata);
4953

@@ -314,7 +318,9 @@ private Object convertValueByType(Object value, String fieldType, String columnN
314318
public void modifyTableStructure(Model model) {
315319
String tableName = getTableName(model.getNameEn());
316320
List<ParametersDto> parameters = model.getParameters();
317-
321+
if(parameters == null || parameters.isEmpty()){
322+
throw new IllegalArgumentException("Model parameters cannot be null or empty");
323+
}
318324

319325
// Fetch existing table structure
320326
String fetchColumnsSql = "SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?";
@@ -393,7 +399,7 @@ private static String mapJavaTypeToSQL(String javaType) {
393399
return "VARCHAR(255)"; // 默认处理
394400
}
395401
switch (javaType) {
396-
case "String":
402+
case "String", "ModelRef":
397403
return "VARCHAR";
398404
case "Number":
399405
return "INT";
@@ -442,6 +448,9 @@ private String generateColumnDefinition(ParametersDto field,String type) {
442448
case "Enum":
443449
sb.append("ENUM").append("(").append(getEnumOptions(field.getOptions())).append(")");
444450
break;
451+
case "ModelRef":
452+
sb.append("VARCHAR(255)"); // 存储JSON字符串,长度可根据实际需求调整
453+
break;
445454
default:
446455
sb.append("TEXT");
447456
}
@@ -462,9 +471,17 @@ private String generateColumnDefinition(ParametersDto field,String type) {
462471

463472
private String getEnumOptions(String optionStr) {
464473
List<String> options= new ArrayList<>();
465-
JSONArray jsonlist = JSON.parseArray(optionStr);
466-
for (int i = 0; i < jsonlist.size(); i++) {
467-
String value = jsonlist.getJSONObject(i).getString("value");
474+
if(optionStr == null || optionStr.trim().isEmpty()){
475+
throw new IllegalArgumentException("Enum options cannot be null or empty");
476+
}
477+
JSONArray jsonList;
478+
try {
479+
jsonList = JSON.parseArray(optionStr);
480+
} catch (Exception e) {
481+
throw new IllegalArgumentException("Invalid enum options format, expected JSON array string", e);
482+
}
483+
for (int i = 0; i < jsonList.size(); i++) {
484+
String value = jsonList.getJSONObject(i).getString("value");
468485
options.add(value);
469486
}
470487

base/src/main/java/com/tinyengine/it/dynamic/service/DynamicService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.tinyengine.it.common.context.LoginUserContext;
55
import com.tinyengine.it.dynamic.dao.ModelDataDao;
66
import com.tinyengine.it.dynamic.dto.*;
7+
import com.tinyengine.it.model.entity.Model;
78
import com.tinyengine.it.service.material.ModelService;
89
import jakarta.transaction.Transactional;
910
import org.springframework.beans.factory.annotation.Autowired;
@@ -112,7 +113,18 @@ public Map<String, Object> insert(DynamicInsert dto) {
112113
Map<String, Object> params = new HashMap<>();
113114
params.put("tableName", tableName);
114115
params.put("data", dto.getParams());
116+
117+
115118
String userId = loginUserContext.getLoginUserId();
119+
if( userId == null || userId.trim().isEmpty()) {
120+
List<Model> modelList = modelService.getModelByEnName(dto.getNameEn());
121+
if( modelList.isEmpty()) {
122+
throw new IllegalArgumentException("模型不存在: " + dto.getNameEn());
123+
}else {
124+
userId=modelList.get(0).getCreatedBy();
125+
}
126+
}
127+
116128
// 添加系统字段
117129
dto.getParams().put("created_by", userId);
118130
dto.getParams().put("updated_by", userId);

base/src/main/java/com/tinyengine/it/login/config/LoginConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public void addInterceptors(InterceptorRegistry registry) {
4444
"/app-center/api/ai/chat",
4545
"/app-center/api/chat/completions",
4646
// 图片文件资源下载
47-
"/material-center/api/resource/download/*"
47+
"/material-center/api/resource/download/*",
48+
//模型驱动
49+
"/platform-center/api/model-data/**"
4850
);
4951
}
5052
}

base/src/main/java/com/tinyengine/it/login/service/impl/LoginServiceImpl.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public User createUser(User user) throws Exception {
5858
userParam.setUsername(user.getUsername());
5959
List<User> users = baseMapper.queryUserByCondition(userParam);
6060
if (!users.isEmpty()) {
61-
throw new ServiceException(ExceptionEnum.CM003.getResultCode(),
62-
ExceptionEnum.CM003.getResultMsg());
61+
throw new ServiceException(ExceptionEnum.CM343.getResultCode(),
62+
ExceptionEnum.CM343.getResultMsg());
6363
}
6464
KeyPair keyPair = generateSM2KeyPair();
6565
PublicKey publicKey = keyPair.getPublic();
@@ -98,14 +98,19 @@ public Result forgotPassword(User user) throws Exception {
9898
userParam.setUsername(user.getUsername());
9999
List<User> users = baseMapper.queryUserByCondition(userParam);
100100
if (users.isEmpty()) {
101-
return Result.failed(ExceptionEnum.CM002);
101+
return Result.failed(ExceptionEnum.CM345);
102102
}
103103
User userResult = users.get(0);
104-
PublicKey publicKey = getPublicKeyFromBase64(user.getPublicKey());
104+
PublicKey publicKey;
105+
try {
106+
publicKey = getPublicKeyFromBase64(user.getPublicKey());
107+
} catch (Exception e) {
108+
return Result.failed(ExceptionEnum.CM344);
109+
}
105110
PrivateKey privateKey = getPrivateKeyFromBase64(userResult.getPrivateKey());
106111
// 验证publickey
107112
if (!validatorPublicKey(userResult.getSalt(), publicKey, privateKey)) {
108-
return Result.failed(ExceptionEnum.CM335);
113+
return Result.failed(ExceptionEnum.CM344);
109114
}
110115
String cipherText = encrypt(user.getSalt(), publicKey);
111116
user.setSalt(cipherText);

base/src/main/java/com/tinyengine/it/mapper/AppMapper.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ public interface AppMapper extends BaseMapper<App> {
4848
List<App> queryAllAppByPage(Integer pageSize, Integer offset, String name, Integer industryId,
4949
Integer sceneId, String framework, String orderBy, String createdBy, String tenantId);
5050

51+
/**
52+
* 根据条件查询表t_app数据总数
53+
* @param name
54+
* @param industryId
55+
* @param sceneId
56+
* @param framework
57+
* @param createdBy
58+
* @param tenantId
59+
* @return
60+
*/
61+
Long queryAppCount(String name, Integer industryId, Integer sceneId, String framework, String createdBy, String tenantId);
62+
5163
/**
5264
* 查询表t_app 应用总数
5365
*

base/src/main/java/com/tinyengine/it/service/app/impl/AppServiceImpl.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
package com.tinyengine.it.service.app.impl;
1414

15+
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
1516
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
1617
import com.tinyengine.it.common.base.Result;
1718
import com.tinyengine.it.common.context.LoginUserContext;
@@ -112,10 +113,14 @@ public AppDto queryAllAppByPage(Integer currentPage, Integer pageSize, String or
112113
List<App> apps = this.baseMapper.queryAllAppByPage(pageSize, offset, app.getName(),
113114
app.getIndustryId(), app.getSceneId(), app.getFramework(), orderBy, app.getCreatedBy(),
114115
tenantId);
115-
Integer total = this.baseMapper.queryAppTotal(tenantId);
116+
// Query total count directly
117+
Long totalCount = this.baseMapper.queryAppCount(app.getName(), app.getIndustryId(),
118+
app.getSceneId(), app.getFramework(), app.getCreatedBy(), tenantId);
119+
120+
// Integer total = this.baseMapper.queryAppTotal(tenantId);
116121
AppDto appDto = new AppDto();
117122
appDto.setApps(apps);
118-
appDto.setTotal(total);
123+
appDto.setTotal(Math.toIntExact(totalCount));
119124
return appDto;
120125
}
121126

@@ -180,11 +185,20 @@ public Result<App> updateAppById(App app) {
180185
appExtendConfig.remove("route");
181186
app.getExtendConfig().putAll(appExtendConfig);
182187
}
188+
String tenantId = app.getTenantId();
189+
if(tenantId == null) {
190+
tenantId = loginUserContext.getTenantId();
191+
app.setTenantId(tenantId);
192+
}
193+
App appselect = baseMapper.queryAppById(app.getId(), tenantId);
194+
if(appselect == null) {
195+
return Result.failed(ExceptionEnum.CM009);
196+
}
183197
int result = baseMapper.updateAppById(app);
184198
if (result < 1) {
185199
return Result.failed(ExceptionEnum.CM001);
186200
}
187-
App selectedApp = baseMapper.queryAppById(app.getId(), loginUserContext.getTenantId());
201+
App selectedApp = baseMapper.queryAppById(app.getId(), tenantId);
188202
return Result.success(selectedApp);
189203
}
190204

base/src/main/java/com/tinyengine/it/service/app/impl/PageServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ public boolean setAppHomePage(int appId, int pageId) {
438438
App app = new App();
439439
app.setId(appId);
440440
app.setHomePage(pageId);
441-
441+
app.setTenantId(loginUserContext.getTenantId());
442442
int result = appMapper.updateAppById(app);
443443
return result >= 1;
444444
}

base/src/main/java/com/tinyengine/it/service/material/ModelService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ public interface ModelService extends IService<Model>{
3434
*/
3535
List<Model> getModelByName(String nameCn);
3636

37+
/**
38+
* 根据name查询表t_model信息
39+
*
40+
* @return the model list
41+
*/
42+
List<Model> getModelByEnName(String nameEn);
43+
3744
/**
3845
* 分页查询表t_model
3946
*

base/src/main/java/com/tinyengine/it/service/material/impl/ModelServiceImpl.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
1616
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
1717
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
18+
import com.tinyengine.it.common.context.LoginUserContext;
1819
import com.tinyengine.it.common.enums.Enums;
1920
import com.tinyengine.it.common.exception.ExceptionEnum;
2021
import com.tinyengine.it.common.exception.ServiceException;
@@ -44,6 +45,9 @@ public class ModelServiceImpl extends ServiceImpl<ModelMapper, Model> implements
4445

4546
@Autowired
4647
private DynamicModelService dynamicModelService;
48+
49+
@Autowired
50+
private LoginUserContext loginUserContext;
4751
/**
4852
* 查询表t_model信息
4953
*
@@ -70,6 +74,19 @@ public List<Model> getModelByName(String nameCn) {
7074
return this.baseMapper.selectList(queryWrapper);
7175
}
7276

77+
/**
78+
* 根据name查询表t_model信息
79+
*
80+
* @param nameEn
81+
* @return the model list
82+
*/
83+
@Override
84+
@SystemServiceLog(description = "根据名称查询model实现方法")
85+
public List<Model> getModelByEnName(String nameEn) {
86+
QueryWrapper<Model> queryWrapper = new QueryWrapper<>();
87+
queryWrapper.eq("name_en", nameEn);
88+
return this.baseMapper.selectList(queryWrapper); }
89+
7390
/**
7491
* 分页查询表t_model信息
7592
*
@@ -94,7 +111,8 @@ public Page<Model> pageQuery(int currentPage, int pageSize, String nameCn, Strin
94111
queryWrapper.like("name_en", nameEn);
95112
}
96113
}
97-
114+
queryWrapper.eq("created_by", loginUserContext.getLoginUserId());
115+
queryWrapper.eq("tenant_id", loginUserContext.getTenantId());
98116
page(page, queryWrapper);
99117
return page;
100118
}
@@ -112,9 +130,7 @@ public Page<Model> pageQuery(int currentPage, int pageSize, String nameCn, Strin
112130
public Model createModel(Model model) {
113131
// 验证模型唯一性
114132
QueryWrapper<Model> queryWrapper = new QueryWrapper<>();
115-
queryWrapper.eq("name_cn", model.getNameCn())
116-
.or()
117-
.eq("name_en", model.getNameEn());
133+
queryWrapper.eq("name_en", model.getNameEn());
118134
if (this.baseMapper.selectCount(queryWrapper) > 0) {
119135
throw new ServiceException(ExceptionEnum.CM003.getResultCode(), "Model with the same name already exists");
120136
}
@@ -124,6 +140,7 @@ public Model createModel(Model model) {
124140
methodDtos.add(getMethodDto(Enums.methodName.QUERY.getValue(), Enums.methodName.QUERYAPI.getValue(), model));
125141
methodDtos.add(getMethodDto(Enums.methodName.DELETE.getValue(), Enums.methodName.DELETEAPI.getValue(), model));
126142
model.setMethod(methodDtos);
143+
model.setTenantId(loginUserContext.getTenantId());
127144
int result = this.baseMapper.createModel(model);
128145
if (result != 1) {
129146
throw new ServiceException(ExceptionEnum.CM001.getResultCode(), ExceptionEnum.CM001.getResultCode());

0 commit comments

Comments
 (0)