public function validate($value, Constraint $constraint) { if (!$constraint instanceof OrchestrationTableEntity) { throw new \InvalidArgumentException('Given constraint must ne instance of OrchestrationTableEntity class'); } if ($value) { // table exists try { /** @var StorageApi $storageApi */ $storageApi = $constraint->getStorageApi(); if (!$storageApi->tableExists($value)) { throw new \Exception('Configuration table does not exists'); } } catch (\Exception $e) { $this->context->addViolation($constraint->message, array('%string%' => $value)); return; } // table structure try { /** @var StorageApi $storageApi */ $storageApi = $constraint->getStorageApi(); $table = $storageApi->getTable($value); $token = new Token($storageApi); $requiredColumns = self::getRequiredColumns(); $missingColumns = array_diff($requiredColumns, $table['columns']); if (!empty($missingColumns)) { throw new \Exception('Invalid configuration table structure'); } } catch (\Exception $e) { $this->context->addViolation($constraint->structureMessage, array('%string%' => implode(', ', $requiredColumns))); return; } } }
public function validate($value, Constraint $constraint) { if (!$constraint instanceof TokenEntity) { throw new \InvalidArgumentException('Given constraint must ne instance of TokenEntity class'); } if ($value) { $configValidation = false; try { /** @var StorageApi $storageApi */ $storageApi = $constraint->getStorageApi(); $token = $storageApi->getToken($value); if (!$token) { throw new \Exception('Token does not exists'); } $userToken = new Token($storageApi); $configValidation = true; $components = new Components(new StorageApi(array('token' => $token['token'], 'url' => $storageApi->getApiUrl(), 'userAgent' => $storageApi->getUserAgent()))); $components->listComponents(new ListConfigurationsOptions()); } catch (\Exception $e) { if ($e instanceof \Keboola\StorageApi\ClientException && $e->getCode() === 403) { //@FIXME jak zmenit api exception code if ($configValidation) { $this->context->addViolation($constraint->configMessage, array('%string%' => $value), null, null, 'TOKEN_PERMISSION'); } else { $this->context->addViolation($constraint->permissionsMessage, array(), null, null, 'TOKEN_PERMISSION'); } } else { $this->context->addViolation($constraint->message, array('%string%' => $value)); } return; } //@FIXME doplnit validaci na master token!!! } }