]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10040 add length validation to Quality Gates ws
authorGuillaume Jambet <guillaume.jambet@sonarsource.com>
Thu, 2 Nov 2017 16:18:09 +0000 (17:18 +0100)
committerGuillaume Jambet <guillaume.jambet@gmail.com>
Wed, 8 Nov 2017 12:51:31 +0000 (13:51 +0100)
server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/CreateAction.java
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWs.java
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java

index 0f940595fafaab590e0a387bfc620d21a6ed7f49..fce67bf44a42047367a3cdc642d592190d5f4c3c 100644 (file)
@@ -42,10 +42,12 @@ import org.sonar.db.qualitygate.QualityGateDto;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.organization.DefaultOrganizationProvider;
 import org.sonar.server.user.UserSession;
-import org.sonar.server.util.Validation;
 
 import static java.lang.String.format;
 import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;
+import static org.sonar.server.util.Validation.CANT_BE_EMPTY_MESSAGE;
+import static org.sonar.server.util.Validation.IS_ALREADY_USED_MESSAGE;
+import static org.sonar.server.ws.WsUtils.checkFound;
 import static org.sonar.server.ws.WsUtils.checkRequest;
 
 /**
@@ -207,18 +209,14 @@ public class QualityGates {
 
   private QualityGateDto getNonNullQgate(String name) {
     try (DbSession dbSession = dbClient.openSession(false)) {
-      QualityGateDto qGate = dao.selectByName(dbSession, name);
-      if (qGate == null) {
-        throw new NotFoundException("There is no quality gate with name=" + name);
-      }
-      return qGate;
+      return checkFound(dao.selectByName(dbSession, name), "There is no quality gate with name=%s", name);
     }
   }
 
   private void validateQualityGate(DbSession dbSession, @Nullable Long updatingQgateId, @Nullable String name) {
     List<String> errors = new ArrayList<>();
     if (Strings.isNullOrEmpty(name)) {
-      errors.add(format(Validation.CANT_BE_EMPTY_MESSAGE, "Name"));
+      errors.add(format(CANT_BE_EMPTY_MESSAGE, "Name"));
     } else {
       checkQgateNotAlreadyExists(dbSession, updatingQgateId, name, errors);
     }
@@ -229,7 +227,7 @@ public class QualityGates {
     QualityGateDto existingQgate = dao.selectByName(dbSession, name);
     boolean isModifyingCurrentQgate = updatingQgateId != null && existingQgate != null && existingQgate.getId().equals(updatingQgateId);
     if (!isModifyingCurrentQgate && existingQgate != null) {
-      errors.add(format(Validation.IS_ALREADY_USED_MESSAGE, "Name"));
+      errors.add(format(IS_ALREADY_USED_MESSAGE, "Name"));
     }
   }
 
index 01dc2cfa315ddeb51b8131137832dc9994933504..0bcecbe7a808ecf6dc5f3f6f91d83ed48d0542d7 100644 (file)
@@ -37,6 +37,7 @@ import static org.sonarqube.ws.client.qualitygate.QualityGatesWsParameters.PARAM
 
 public class CreateAction implements QualityGatesWsAction {
 
+  public static final int NAME_MAXIMUM_LENGTH = 100;
   private final DbClient dbClient;
   private final UserSession userSession;
   private final QualityGateUpdater qualityGateUpdater;
@@ -53,15 +54,16 @@ public class CreateAction implements QualityGatesWsAction {
   @Override
   public void define(WebService.NewController controller) {
     WebService.NewAction action = controller.createAction(ACTION_CREATE)
+      .setPost(true)
       .setDescription("Create a Quality Gate.<br>" +
         "Requires the 'Administer Quality Gates' permission.")
       .setSince("4.3")
-      .setPost(true)
       .setHandler(this);
 
     action.createParam(PARAM_NAME)
-      .setDescription("The name of the quality gate to create")
       .setRequired(true)
+      .setMaximumLength(NAME_MAXIMUM_LENGTH)
+      .setDescription("The name of the quality gate to create")
       .setExampleValue("My Quality Gate");
   }
 
index 63643947b8d4b8c3d0a1bda497ac5b5229c3bde4..e63722b4354bf600d439dcc9331474a16a122120 100644 (file)
@@ -24,9 +24,9 @@ import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
+import org.sonar.db.permission.OrganizationPermission;
 import org.sonar.db.qualitygate.QualityGateConditionDto;
 import org.sonar.server.organization.DefaultOrganizationProvider;
-import org.sonar.db.permission.OrganizationPermission;
 import org.sonar.server.qualitygate.QualityGateConditionsUpdater;
 import org.sonar.server.user.UserSession;
 import org.sonarqube.ws.WsQualityGates.CreateConditionWsResponse;
@@ -61,16 +61,16 @@ public class CreateConditionAction implements QualityGatesWsAction {
   @Override
   public void define(WebService.NewController controller) {
     WebService.NewAction createCondition = controller.createAction(ACTION_CREATE_CONDITION)
+      .setPost(true)
       .setDescription("Add a new condition to a quality gate.<br>" +
         "Requires the 'Administer Quality Gates' permission.")
-      .setPost(true)
       .setSince("4.3")
       .setHandler(this);
 
     createCondition
       .createParam(PARAM_GATE_ID)
-      .setDescription("ID of the quality gate")
       .setRequired(true)
+      .setDescription("ID of the quality gate")
       .setExampleValue("1");
 
     addConditionParams(createCondition);
index 3353d93c21e1bfcea5d4813194042ff52b31aac0..41865e75d92929fba0d8af9eb14c11b35b94b295 100644 (file)
@@ -36,6 +36,8 @@ import static org.sonarqube.ws.client.qualitygate.QualityGatesWsParameters.PARAM
 import static org.sonarqube.ws.client.qualitygate.QualityGatesWsParameters.PARAM_WARNING;
 
 public class QualityGatesWs implements WebService {
+
+  private static final int CONDITION_MAX_LENGTH = 64;
   private final QualityGatesWsAction[] actions;
 
   public QualityGatesWs(QualityGatesWsAction... actions) {
@@ -78,10 +80,12 @@ public class QualityGatesWs implements WebService {
       .setPossibleValues("1");
 
     action.createParam(PARAM_WARNING)
+      .setMaximumLength(CONDITION_MAX_LENGTH)
       .setDescription("Condition warning threshold")
       .setExampleValue("5");
 
     action.createParam(PARAM_ERROR)
+      .setMaximumLength(CONDITION_MAX_LENGTH)
       .setDescription("Condition error threshold")
       .setExampleValue("10");
   }
index 192493ad890f353e409e9c86805d44dec56be352..8f49fffc6a957ed740363b6a8445c9d177cc0e4d 100644 (file)
@@ -26,6 +26,7 @@ import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.db.qualitygate.QualityGateDto;
 import org.sonar.server.qualitygate.QualityGates;
 
+import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
 import static org.sonarqube.ws.client.qualitygate.QualityGatesWsParameters.PARAM_ID;
 import static org.sonarqube.ws.client.qualitygate.QualityGatesWsParameters.PARAM_NAME;
 
@@ -40,20 +41,21 @@ public class RenameAction implements QualityGatesWsAction {
   @Override
   public void define(WebService.NewController controller) {
     WebService.NewAction action = controller.createAction("rename")
+      .setPost(true)
       .setDescription("Rename a Quality Gate.<br>" +
-        "Requires the 'Administer Quality Gates' permission.")
+    "Requires the 'Administer Quality Gates' permission.")
       .setSince("4.3")
-      .setPost(true)
       .setHandler(this);
 
     action.createParam(PARAM_ID)
-      .setDescription("ID of the quality gate to rename")
       .setRequired(true)
+      .setDescription("ID of the quality gate to rename")
       .setExampleValue("1");
 
     action.createParam(PARAM_NAME)
-      .setDescription("New name of the quality gate")
       .setRequired(true)
+      .setMaximumLength(NAME_MAXIMUM_LENGTH)
+      .setDescription("New name of the quality gate")
       .setExampleValue("My Quality Gate");
   }