package com.sequenceiq.cloudbreak.validation; import java.util.Set; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.apache.commons.codec.binary.Base64; public class PluginValidator implements ConstraintValidator<ValidPlugin, Set<String>> { private static final String URL_PATTERN = "^(consul|base64)://.*"; @Override public void initialize(ValidPlugin validPlugin) { } @Override public boolean isValid(Set<String> plugins, ConstraintValidatorContext cxt) { if (plugins == null || plugins.isEmpty()) { return true; } for (String plugin : plugins) { if (!plugin.matches(URL_PATTERN)) { return false; } if (plugin.startsWith("base64://") && !isValidBase64Plugin(plugin.replaceFirst("base64://", ""))) { return false; } } return true; } private boolean isValidBase64Plugin(String pluginContent) { if (!Base64.isBase64(pluginContent)) { return false; } String content = new String(Base64.decodeBase64(pluginContent)); return !content.isEmpty(); } }