This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 5d7dc1c  [Improvement][API]optimize tenant code validation (#5093)
5d7dc1c is described below

commit 5d7dc1cb2aff2147b09b13ed002cbe54f3478a2c
Author: Hayden Zhou <[email protected]>
AuthorDate: Thu Apr 1 20:50:14 2021 +0800

    [Improvement][API]optimize tenant code validation (#5093)
    
    * optimize tenant code validation
    
    * fix code style and test err
    
    * fix test error, and remove duplicate tenant code validate
---
 .../api/service/impl/TenantServiceImpl.java         |  7 +------
 .../dolphinscheduler/api/utils/RegexUtils.java      | 12 ++++++++++++
 .../api/controller/TenantControllerTest.java        |  4 ++--
 .../api/service/TenantServiceTest.java              |  4 ++--
 .../dolphinscheduler/api/utils/RegexUtilsTest.java  | 21 +++++++++++++++++++++
 5 files changed, 38 insertions(+), 10 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
index 8a3a945..dcdc833 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
@@ -90,7 +90,7 @@ public class TenantServiceImpl extends BaseServiceImpl 
implements TenantService
             return result;
         }
 
-        if (RegexUtils.isNumeric(tenantCode)) {
+        if (!RegexUtils.isValidLinuxUserName(tenantCode)) {
             putMsg(result, Status.CHECK_OS_TENANT_CODE_ERROR);
             return result;
         }
@@ -102,11 +102,6 @@ public class TenantServiceImpl extends BaseServiceImpl 
implements TenantService
 
         Tenant tenant = new Tenant();
         Date now = new Date();
-
-        if (!tenantCode.matches("^[0-9a-zA-Z_.-]{1,}$") || 
tenantCode.startsWith("-") || tenantCode.startsWith(".")) {
-            putMsg(result, Status.VERIFY_OS_TENANT_CODE_ERROR);
-            return result;
-        }
         tenant.setTenantCode(tenantCode);
         tenant.setQueueId(queueId);
         tenant.setDescription(desc);
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/RegexUtils.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/RegexUtils.java
index 482cb55..2e43d2b 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/RegexUtils.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/RegexUtils.java
@@ -30,6 +30,8 @@ public class RegexUtils {
      */
     private static final String CHECK_NUMBER = "^-?\\d+(\\.\\d+)?$";
 
+    private static final String LINUX_USERNAME_PATTERN = 
"[a-z_][a-z\\d_]{0,30}";
+
     private RegexUtils() {
     }
 
@@ -45,6 +47,16 @@ public class RegexUtils {
         return isNum.matches();
     }
 
+    /**
+     * check if the input is a valid linux username
+     * @param str input
+     * @return boolean
+     */
+    public static boolean isValidLinuxUserName(String str) {
+        Pattern pattern = Pattern.compile(LINUX_USERNAME_PATTERN);
+        return pattern.matcher(str).matches();
+    }
+
     public static String escapeNRT(String str) {
         // Logging should not be vulnerable to injection attacks: Replace 
pattern-breaking characters
         if (str != null && !str.isEmpty()) {
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TenantControllerTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TenantControllerTest.java
index c9463a8..c9524e8 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TenantControllerTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TenantControllerTest.java
@@ -45,7 +45,7 @@ public class TenantControllerTest extends 
AbstractControllerTest{
     @Test
     public void testCreateTenant() throws Exception {
         MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
-        paramsMap.add("tenantCode","tenantCode");
+        paramsMap.add("tenantCode","hayden");
         paramsMap.add("queueId","1");
         paramsMap.add("description","tenant description");
 
@@ -124,7 +124,7 @@ public class TenantControllerTest extends 
AbstractControllerTest{
     @Test
     public void testVerifyTenantCodeExists() throws Exception {
         MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
-        paramsMap.add("tenantCode", "tenantCode");
+        paramsMap.add("tenantCode", "hayden");
 
         MvcResult mvcResult = mockMvc.perform(get("/tenant/verify-tenant-code")
                 .header(SESSION_ID, sessionId)
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
index ee85d26..8889fa6 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
@@ -73,7 +73,7 @@ public class TenantServiceTest {
     @Mock
     private UserMapper userMapper;
 
-    private static final String tenantCode = "TenantServiceTest";
+    private static final String tenantCode = "hayden";
 
     @Test
     public void testCreateTenant() {
@@ -85,7 +85,7 @@ public class TenantServiceTest {
             Map<String, Object> result =
                 tenantService.createTenant(getLoginUser(), "%!1111", 1, 
"TenantServiceTest");
             logger.info(result.toString());
-            Assert.assertEquals(Status.VERIFY_OS_TENANT_CODE_ERROR, 
result.get(Constants.STATUS));
+            Assert.assertEquals(Status.CHECK_OS_TENANT_CODE_ERROR, 
result.get(Constants.STATUS));
 
             //check exist
             result = tenantService.createTenant(loginUser, tenantCode, 1, 
"TenantServiceTest");
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/RegexUtilsTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/RegexUtilsTest.java
index 7ccfdfd..067dfeb 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/RegexUtilsTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/RegexUtilsTest.java
@@ -37,6 +37,27 @@ public class RegexUtilsTest {
     }
 
     @Test
+    public void testIsValidLinuxUserName() {
+        String name1 = "10000";
+        Assert.assertFalse(RegexUtils.isValidLinuxUserName(name1));
+
+        String name2 = "00hayden";
+        Assert.assertFalse(RegexUtils.isValidLinuxUserName(name2));
+
+        String name3 = "hayde123456789123456789123456789";
+        Assert.assertFalse(RegexUtils.isValidLinuxUserName(name3));
+
+        String name4 = "hayd123456789123456789123456789";
+        Assert.assertTrue(RegexUtils.isValidLinuxUserName(name4));
+
+        String name5 = "h";
+        Assert.assertTrue(RegexUtils.isValidLinuxUserName(name5));
+
+        String name6 = "hayden";
+        Assert.assertTrue(RegexUtils.isValidLinuxUserName(name6));
+    }
+
+    @Test
     public void testEscapeNRT() {
         String result1 = RegexUtils.escapeNRT("abc\n");
         Assert.assertEquals("abc_", result1);

Reply via email to