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!!! } }
/** * @param Client $storageApi * @return bool * @throws StorageApi\InvalidStateException */ private function validateToken(Client $storageApi) { try { $components = new Components($storageApi); $components->listComponents(new ListConfigurationsOptions()); } catch (ClientException $e) { if ($e->getCode() == 403) { throw new StorageApi\InvalidStateException('Token has no permission to read configuration'); } else { throw new StorageApi\InvalidStateException($e->getMessage()); } } return true; }