Skip to content

Commit

Permalink
fix(canary-config): Ensure that PUT applies same validation as POST. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Duftler committed Jan 24, 2018
1 parent f73186f commit 10cdaab
Showing 1 changed file with 18 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,18 +98,7 @@ public CanaryConfigUpdateResponse storeCanaryConfig(@RequestParam(required = fal
String canaryConfigId = UUID.randomUUID() + "";

// TODO(duftler): Serialize the canary config within a canary run?
if (StringUtils.isEmpty(canaryConfig.getName())) {
throw new IllegalArgumentException("Canary config must specify a name.");
} else if (canaryConfig.getApplications() == null || canaryConfig.getApplications().size() == 0) {
throw new IllegalArgumentException("Canary config must specify at least one application.");
}

String canaryConfigName = canaryConfig.getName();

if (!canaryConfigNamePattern.matcher(canaryConfigName).matches()) {
throw new IllegalArgumentException("Canary config cannot be named '" + canaryConfigName +
"'. Names must contain only letters, numbers, dashes (-) and underscores (_).");
}
validateNameAndApplicationAttributes(canaryConfig);

try {
configurationService.loadObject(resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId);
Expand Down Expand Up @@ -138,6 +127,8 @@ public CanaryConfigUpdateResponse updateCanaryConfig(@RequestParam(required = fa
canaryConfig.setUpdatedTimestamp(System.currentTimeMillis());
canaryConfig.setUpdatedTimestampIso(Instant.ofEpochMilli(canaryConfig.getUpdatedTimestamp()).toString());

validateNameAndApplicationAttributes(canaryConfig);

try {
configurationService.loadObject(resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId);
} catch (Exception e) {
Expand All @@ -149,6 +140,21 @@ public CanaryConfigUpdateResponse updateCanaryConfig(@RequestParam(required = fa
return CanaryConfigUpdateResponse.builder().canaryConfigId(canaryConfigId).build();
}

private static void validateNameAndApplicationAttributes(@RequestBody CanaryConfig canaryConfig) {
if (StringUtils.isEmpty(canaryConfig.getName())) {
throw new IllegalArgumentException("Canary config must specify a name.");
} else if (canaryConfig.getApplications() == null || canaryConfig.getApplications().size() == 0) {
throw new IllegalArgumentException("Canary config must specify at least one application.");
}

String canaryConfigName = canaryConfig.getName();

if (!canaryConfigNamePattern.matcher(canaryConfigName).matches()) {
throw new IllegalArgumentException("Canary config cannot be named '" + canaryConfigName +
"'. Names must contain only letters, numbers, dashes (-) and underscores (_).");
}
}

@ApiOperation(value = "Delete a canary config")
@RequestMapping(value = "/{canaryConfigId:.+}", method = RequestMethod.DELETE)
public void deleteCanaryConfig(@RequestParam(required = false) final String configurationAccountName,
Expand Down

0 comments on commit 10cdaab

Please sign in to comment.