KYLIN-2252, Enhance project/model/cube name check

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1e787165
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1e787165
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1e787165

Branch: refs/heads/master-hbase1.x
Commit: 1e787165edee713a59db8627e70f79edabfd7d9d
Parents: ea13af4
Author: Billy Liu <billy...@apache.org>
Authored: Wed Dec 7 09:42:58 2016 +0800
Committer: Billy Liu <billy...@apache.org>
Committed: Wed Dec 7 09:42:58 2016 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/rest/controller/CubeController.java  | 10 ++++++++++
 .../apache/kylin/rest/controller/CubeDescController.java  |  4 ++--
 .../org/apache/kylin/rest/controller/ModelController.java | 10 ++++++++++
 .../apache/kylin/rest/controller/ProjectController.java   | 10 +++++++++-
 4 files changed, 31 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/1e787165/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index 3846d28..f537231 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -83,6 +83,8 @@ import com.google.common.collect.Maps;
 public class CubeController extends BasicController {
     private static final Logger logger = 
LoggerFactory.getLogger(CubeController.class);
 
+    private static final char[] VALID_CUBENAME = 
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_".toCharArray();
+
     @Autowired
     private CubeService cubeService;
 
@@ -343,6 +345,10 @@ public class CubeController extends BasicController {
         if (cube.getStatus() == RealizationStatusEnum.DESCBROKEN) {
             throw new BadRequestException("Broken cube can't be cloned");
         }
+        if (!StringUtils.containsOnly(newCubeName, VALID_CUBENAME)) {
+            logger.info("Invalid Cube name {}, only letters, numbers and 
underline supported.", newCubeName);
+            throw new BadRequestException("Invalid Cube name, only letters, 
numbers and underline supported.");
+        }
 
         CubeDesc cubeDesc = cube.getDescriptor();
         CubeDesc newCubeDesc = CubeDesc.getCopyOf(cubeDesc);
@@ -421,6 +427,10 @@ public class CubeController extends BasicController {
             logger.info("Cube name should not be empty.");
             throw new BadRequestException("Cube name should not be empty.");
         }
+        if (!StringUtils.containsOnly(name, VALID_CUBENAME)) {
+            logger.info("Invalid Cube name {}, only letters, numbers and 
underline supported.", name);
+            throw new BadRequestException("Invalid Cube name, only letters, 
numbers and underline supported.");
+        }
 
         try {
             desc.setUuid(UUID.randomUUID().toString());

http://git-wip-us.apache.org/repos/asf/kylin/blob/1e787165/server-base/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
index 5a8eeec..0c8f487 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
@@ -44,8 +44,8 @@ public class CubeDescController extends BasicController {
     /**
      * Get detail information of the "Cube ID"
      * 
-     * @param cubeDescName
-     *            Cube ID
+     * @param cubeName
+     *            Cube Name
      * @return
      * @throws IOException
      */

http://git-wip-us.apache.org/repos/asf/kylin/blob/1e787165/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
index 5f6a91b..df9ecfb 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
@@ -61,6 +61,8 @@ import com.fasterxml.jackson.databind.JsonMappingException;
 public class ModelController extends BasicController {
     private static final Logger logger = 
LoggerFactory.getLogger(ModelController.class);
 
+    private static final char[] VALID_MODELNAME = 
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_".toCharArray();
+
     @Autowired
     private ModelService modelService;
 
@@ -93,6 +95,10 @@ public class ModelController extends BasicController {
             logger.info("Model name should not be empty.");
             throw new BadRequestException("Model name should not be empty.");
         }
+        if (!StringUtils.containsOnly(modelDesc.getName(), VALID_MODELNAME)) {
+            logger.info("Invalid Model name {}, only letters, numbers and 
underline supported.", modelDesc.getName());
+            throw new BadRequestException("Invalid Model name, only letters, 
numbers and underline supported.");
+        }
 
         try {
             modelDesc.setUuid(UUID.randomUUID().toString());
@@ -174,6 +180,10 @@ public class ModelController extends BasicController {
             logger.info("New model name is empty.");
             throw new BadRequestException("New model name is empty.");
         }
+        if (!StringUtils.containsOnly(newModelName, VALID_MODELNAME)) {
+            logger.info("Invalid Model name {}, only letters, numbers and 
underline supported.", newModelName);
+            throw new BadRequestException("Invalid Model name, only letters, 
numbers and underline supported.");
+        }
 
         DataModelDesc newModelDesc = DataModelDesc.getCopyOf(modelDesc);
         newModelDesc.setName(newModelName);

http://git-wip-us.apache.org/repos/asf/kylin/blob/1e787165/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
index 496e44a..05af82c 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
@@ -27,6 +27,7 @@ import org.apache.kylin.common.persistence.AclEntity;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.rest.constant.Constant;
+import org.apache.kylin.rest.exception.BadRequestException;
 import org.apache.kylin.rest.exception.InternalErrorException;
 import org.apache.kylin.rest.request.CreateProjectRequest;
 import org.apache.kylin.rest.request.UpdateProjectRequest;
@@ -60,6 +61,8 @@ import org.springframework.web.bind.annotation.ResponseBody;
 public class ProjectController extends BasicController {
     private static final Logger logger = 
LoggerFactory.getLogger(ProjectController.class);
 
+    private static final char[] VALID_PROJECTNAME = 
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_".toCharArray();
+
     @Autowired
     private ProjectService projectService;
     @Autowired
@@ -197,7 +200,12 @@ public class ProjectController extends BasicController {
     @ResponseBody
     public ProjectInstance saveProject(@RequestBody CreateProjectRequest 
projectRequest) {
         if (StringUtils.isEmpty(projectRequest.getName())) {
-            throw new InternalErrorException("A project name must be given to 
create a project");
+            logger.info("Project name should not be empty.");
+            throw new BadRequestException("Project name should not be empty.");
+        }
+        if (!StringUtils.containsOnly(projectRequest.getName(), 
VALID_PROJECTNAME)) {
+            logger.info("Invalid Project name {}, only letters, numbers and 
underline supported.", projectRequest.getName());
+            throw new BadRequestException("Invalid Project name, only letters, 
numbers and underline supported.");
         }
 
         ProjectInstance createdProj = null;

Reply via email to