Skip to content

Commit

Permalink
fix(plugins): Use kork-plugins VersionRequirementsParser and Canonica…
Browse files Browse the repository at this point in the history
…lPluginId in plugin info validators (#690)
  • Loading branch information
jonsie committed Jan 21, 2020
1 parent 959bbab commit 55e2137
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 34 deletions.
2 changes: 2 additions & 0 deletions front50-core/front50-core.gradle
Expand Up @@ -25,6 +25,8 @@ dependencies {
implementation "com.netflix.spinnaker.kork:kork-web"
api "com.github.ben-manes.caffeine:guava"

api "com.netflix.spinnaker.kork:kork-plugins"

implementation "com.netflix.spinnaker.kork:kork-core"
implementation "com.netflix.spinnaker.kork:kork-exceptions"
implementation "com.netflix.spinnaker.kork:kork-hystrix"
Expand Down
Expand Up @@ -16,18 +16,16 @@
package com.netflix.spinnaker.front50.validator;

import com.netflix.spinnaker.front50.model.plugininfo.PluginInfo;
import java.util.regex.Pattern;
import com.netflix.spinnaker.kork.plugins.CanonicalPluginId;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;

@Component
public class HasCanonicalPluginIdValidator implements PluginInfoValidator {

private final Pattern pattern = Pattern.compile("[\\w]+\\.[\\w]+");

@Override
public void validate(PluginInfo pluginInfo, Errors validationErrors) {
if (!pattern.matcher(pluginInfo.getId()).matches()) {
if (!CanonicalPluginId.Companion.isValid(pluginInfo.getId())) {
validationErrors.rejectValue(
"id",
"pluginInfo.id.invalid",
Expand Down
Expand Up @@ -15,50 +15,34 @@
*/
package com.netflix.spinnaker.front50.validator;

import static com.netflix.spinnaker.front50.model.plugininfo.PluginInfo.Release.SUPPORTS_PATTERN;
import static java.lang.String.format;

import com.netflix.spinnaker.front50.model.plugininfo.PluginInfo;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import com.netflix.spinnaker.kork.plugins.VersionRequirementsParser;
import com.netflix.spinnaker.kork.plugins.VersionRequirementsParser.IllegalVersionRequirementsOperator;
import com.netflix.spinnaker.kork.plugins.VersionRequirementsParser.InvalidPluginVersionRequirementException;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;

@Component
public class HasValidRequiresFieldsValidator implements PluginInfoValidator {

private static final List<String> VALID_OPERATORS = Arrays.asList("<", ">", ">=", "<=");

@Override
public void validate(PluginInfo pluginInfo, Errors validationErrors) {

pluginInfo
.getReleases()
.forEach(
release -> {
Arrays.stream(release.getRequires().split(","))
.forEach(
requires -> {
Matcher m = SUPPORTS_PATTERN.matcher(requires.trim());
if (!m.matches()) {
validationErrors.reject(
"pluginInfo.releases.invalidRequiresFormat",
format(
"Invalid Release requires field formatting (requires '%s')",
SUPPORTS_PATTERN.pattern()));
return;
}

if (!VALID_OPERATORS.contains(
m.group(PluginInfo.Release.SUPPORTS_PATTERN_OPERATOR_GROUP))) {
validationErrors.reject(
"pluginInfo.releases.invalidRequiresOperator",
format(
"Invalid Release requires comparison operator (requires one of: %s)",
VALID_OPERATORS));
}
});
try {
VersionRequirementsParser.INSTANCE.parseAll(release.getRequires());
} catch (InvalidPluginVersionRequirementException invalidPluginVersionRequirement) {
validationErrors.reject(
"pluginInfo.id.invalidPluginVersionRequirement",
invalidPluginVersionRequirement.getMessage());
} catch (IllegalVersionRequirementsOperator illegalVersionRequirementOperator) {
validationErrors.reject(
"pluginInfo.id.illegalVersionRequirementOperator",
illegalVersionRequirementOperator.getMessage());
}
});
}
}

0 comments on commit 55e2137

Please sign in to comment.