diff --git a/base/src/main/java/com/tinyengine/it/dynamic/service/DynamicModelService.java b/base/src/main/java/com/tinyengine/it/dynamic/service/DynamicModelService.java index 81e248a9..76d5a2b5 100644 --- a/base/src/main/java/com/tinyengine/it/dynamic/service/DynamicModelService.java +++ b/base/src/main/java/com/tinyengine/it/dynamic/service/DynamicModelService.java @@ -42,6 +42,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Service @@ -84,6 +85,11 @@ public class DynamicModelService { private static final Set SYSTEM_FIELDS = Set.of("id", "created_at", "updated_at", "deleted_at", "created_by", "updated_by"); + private static final Set COLUMN_TYPES = + Set.of("INT", "TINYINT", "DATE", "DATETIME", "VARCHAR", "ENUM", "TEXT"); + + private static final Pattern SIZED_VARCHAR = + Pattern.compile("VARCHAR\\([1-9][0-9]{0,4}\\)"); private static final int DEFAULT_VARCHAR = 255; private static final int MAX_VARCHAR = 65_535; private static final int ASC_SUFFIX_LEN = 4; @@ -622,20 +628,17 @@ private String requireAlterIdentifier(final String value, final String name) { } private String requireColumnType(final String value) { - if (value == null - || !(value.equals("INT") - || value.equals("TINYINT") - || value.equals("DATE") - || value.equals("DATETIME") - || value.equals("VARCHAR") - || value.equals("ENUM") - || value.equals("TEXT") - || value.matches("^VARCHAR\\([1-9][0-9]{0,4}\\)$"))) { + if (!isValidColumnType(value)) { throw new IllegalArgumentException("Invalid SQL column type"); } return value; } + private boolean isValidColumnType(final String value) { + return value != null + && (COLUMN_TYPES.contains(value) || SIZED_VARCHAR.matcher(value).matches()); + } + private void addCommonFields(List parameters) { ParametersDto id = new ParametersDto(); id.setProp("id"); diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/AiChatServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/AiChatServiceImpl.java index c86be54d..b8d54d35 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/AiChatServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/AiChatServiceImpl.java @@ -42,7 +42,6 @@ "PMD.AvoidDuplicateLiterals", "PMD.AvoidInstantiatingObjectsInLoops", "PMD.AvoidLiteralsInIfCondition", - "PMD.CyclomaticComplexity", "PMD.DataflowAnomalyAnalysis", "PMD.GodClass", "PMD.LawOfDemeter", @@ -305,15 +304,19 @@ private List formatMessage(List messages) { private boolean isSafeToken(String token) { for (int i = 0; i < token.length(); i++) { char c = token.charAt(i); - if (!((c >= 'A' && c <= 'Z') - || (c >= 'a' && c <= 'z') - || (c >= '0' && c <= '9') - || c == '_' - || c == '.' - || c == '-')) { + if (!isSafeTokenCharacter(c)) { return false; } } return true; } + + private boolean isSafeTokenCharacter(final char c) { + return (c >= 'A' && c <= 'Z') + || (c >= 'a' && c <= 'z') + || (c >= '0' && c <= '9') + || c == '_' + || c == '.' + || c == '-'; + } }