Skip to content
Snippets Groups Projects

Issue #3212680: Refactor K8sCloudServerTemplatePlugin::buildLaunchForm() and YamlUrlConstraintValidator::validate()

Closed Issue #3212680: Refactor K8sCloudServerTemplatePlugin::buildLaunchForm() and YamlUrlConstraintValidator::validate()
All threads resolved!
All threads resolved!
Files
3
@@ -49,6 +49,7 @@ class YamlUrlConstraintValidator extends ConstraintValidator implements Containe
if ($entity->bundle() !== 'k8s') {
return;
}
$yaml_url = $entity->get('field_yaml_url')->uri;
$detail = $entity->get('field_detail')->value;
$source_type = $entity->get('field_source_type')->value;
@@ -59,89 +60,97 @@ class YamlUrlConstraintValidator extends ConstraintValidator implements Containe
->buildViolation($constraint->requiredGitUrl)
->atPath('field_yaml_url')
->addViolation();
return;
}
elseif (strpos($yaml_url, '.git') !== strlen($yaml_url) - 4) {
if (strpos($yaml_url, '.git') !== strlen($yaml_url) - 4) {
$this->context
->buildViolation($constraint->invalidGitUrl)
->atPath('field_yaml_url')
->addViolation();
return;
}
else {
$client = \Drupal::httpClient();
$url = substr($yaml_url, 0, strrpos($yaml_url, '/'));
try {
$client->get($url);
}
catch (RequestException $e) {
$this->context
->buildViolation($constraint->unreachableGitUrl)
->atPath('field_yaml_url')
->addViolation();
}
}
}
else {
if (empty($yaml_url) && empty($detail)) {
$this->context
->buildViolation($constraint->requiredYamlUrlOrDetail)
->atPath('field_yaml_url')
->addViolation();
$client = \Drupal::httpClient();
$url = substr($yaml_url, 0, strrpos($yaml_url, '/'));
try {
$client->get($url);
}
elseif (!empty($yaml_url) && !empty($detail)) {
catch (RequestException $e) {
$this->context
->buildViolation($constraint->prohibitYamlUrlAndDetail)
->buildViolation($constraint->unreachableGitUrl)
->atPath('field_yaml_url')
->addViolation();
}
elseif (!empty($yaml_url)) {
$content = file_get_contents($yaml_url);
if (empty($content)) {
return;
}
if (empty($yaml_url) && empty($detail)) {
$this->context
->buildViolation($constraint->requiredYamlUrlOrDetail)
->atPath('field_yaml_url')
->addViolation();
return;
}
if (!empty($yaml_url) && !empty($detail)) {
$this->context
->buildViolation($constraint->prohibitYamlUrlAndDetail)
->atPath('field_yaml_url')
->addViolation();
return;
}
if (empty($yaml_url)) {
return;
}
$content = file_get_contents($yaml_url);
if (empty($content)) {
$this->context
->buildViolation($constraint->invalidYamlUrl)
->atPath('field_yaml_url')
->addViolation();
return;
}
$templates = $this->k8sService->supportedCloudServerTemplates();
try {
$yamls = $this->k8sService->decodeMultipleDocYaml($content);
foreach ($yamls ?: [] as $yaml) {
if (!is_array($yaml)) {
$this->context
->buildViolation($constraint->invalidYamlUrl)
->buildViolation($constraint->invalidYamlFormat)
->atPath('field_yaml_url')
->addViolation();
return;
}
else {
$templates = $this->k8sService->supportedCloudServerTemplates();
try {
$yamls = $this->k8sService->decodeMultipleDocYaml($content);
foreach ($yamls ?: [] as $yaml) {
if (!is_array($yaml)) {
$this->context
->buildViolation($constraint->invalidYamlFormat)
->atPath('field_yaml_url')
->addViolation();
return;
}
if (empty($yaml['kind'])) {
$this->context
->buildViolation($constraint->noKindFound)
->atPath('field_yaml_url')
->addViolation();
return;
}
$kind = $yaml['kind'];
$object = array_search($kind, $templates);
if (empty($object)) {
$this->context
->buildViolation($constraint->unsupportedObjectType, ['%kind' => $kind])
->atPath('field_yaml_url')
->addViolation();
return;
}
}
}
catch (\Exception $e) {
$this->context
->buildViolation($constraint->invalidYaml . $e->getMessage())
->atPath('field_yaml_url')
->addViolation();
}
if (empty($yaml['kind'])) {
$this->context
->buildViolation($constraint->noKindFound)
->atPath('field_yaml_url')
->addViolation();
return;
}
$kind = $yaml['kind'];
$object = array_search($kind, $templates);
if (empty($object)) {
$this->context
->buildViolation($constraint->unsupportedObjectType, ['%kind' => $kind])
->atPath('field_yaml_url')
->addViolation();
return;
}
}
}
catch (\Exception $e) {
$this->context
->buildViolation($constraint->invalidYaml . $e->getMessage())
->atPath('field_yaml_url')
->addViolation();
}
}
}
Loading