示例#1
0
 /**
  * @covers \Keboola\Syrup\Job\Metadata\JobFactory::create
  * @covers \Keboola\Syrup\Job\Metadata\JobFactory::setStorageApiClient
  */
 public function testJobFactory()
 {
     $storageApiClient = new Client(['token' => SYRUP_SAPI_TEST_TOKEN, 'userAgent' => SYRUP_APP_NAME]);
     $key = md5(uniqid());
     $encryptor = new Encryptor($key);
     /** @var ObjectEncryptor $configEncryptor */
     $configEncryptor = self::$kernel->getContainer()->get('syrup.object_encryptor');
     $jobFactory = new JobFactory(SYRUP_APP_NAME, $encryptor, $configEncryptor);
     $jobFactory->setStorageApiClient($storageApiClient);
     $command = uniqid();
     $param = uniqid();
     $lock = uniqid();
     $tokenData = $storageApiClient->verifyToken();
     $job = $jobFactory->create($command, ['param' => $param], $lock);
     $this->assertEquals($command, $job->getCommand());
     $this->assertEquals($lock, $job->getLockName());
     $this->assertEquals(['param' => $param], $job->getParams());
     $this->assertArrayHasKey('id', $job->getProject());
     $this->assertEquals($tokenData['owner']['id'], $job->getProject()['id']);
     $this->assertArrayHasKey('name', $job->getProject());
     $this->assertEquals($tokenData['owner']['name'], $job->getProject()['name']);
     $this->assertArrayHasKey('id', $job->getToken());
     $this->assertEquals($tokenData['id'], $job->getToken()['id']);
     $this->assertArrayHasKey('description', $job->getToken());
     $this->assertEquals($tokenData['description'], $job->getToken()['description']);
     $this->assertArrayHasKey('token', $job->getToken());
     $this->assertEquals($tokenData['token'], $encryptor->decrypt($job->getToken()['token']));
 }
示例#2
0
 /**
  * @param $value
  * @return string
  * @throws \InvalidCiphertextException
  */
 protected function decryptValue($value)
 {
     $wrapper = $this->findWrapper($value);
     if (!$wrapper) {
         if ($this->legacyEncryptor) {
             /* @ is intentional to suppress warnings from invalid cipher texts which
                are handled by checking return === false */
             $ret = @$this->legacyEncryptor->decrypt($value);
             if ($ret === false) {
                 throw new \InvalidCiphertextException("Value is not an encrypted value.");
             } else {
                 return $ret;
             }
         } else {
             throw new \InvalidCiphertextException("Value is not an encrypted value.");
         }
     }
     try {
         return $wrapper->decrypt(substr($value, mb_strlen($wrapper->getPrefix())));
     } catch (\InvalidCiphertextException $e) {
         throw new \InvalidCiphertextException("Value {$value} is not an encrypted value.");
     } catch (\Exception $e) {
         // decryption failed for more serious reasons
         throw new ApplicationException("Decryption failed: " . $e->getMessage(), $e, ["value" => $value]);
     }
 }
示例#3
0
 public function create($command, array $params = [], $lockName = null)
 {
     if (!$this->storageApiClient) {
         throw new \Exception('Storage API client must be set');
     }
     $tokenData = $this->storageApiClient->verifyToken();
     $job = new Job($this->configEncryptor, ['id' => $this->storageApiClient->generateId(), 'runId' => $this->storageApiClient->generateRunId($this->storageApiClient->getRunId()), 'project' => ['id' => $tokenData['owner']['id'], 'name' => $tokenData['owner']['name']], 'token' => ['id' => $tokenData['id'], 'description' => $tokenData['description'], 'token' => $this->encryptor->encrypt($this->storageApiClient->getTokenString())], 'component' => $this->componentName, 'command' => $command, 'params' => $params, 'process' => ['host' => gethostname(), 'pid' => getmypid()], 'nestingLevel' => 0, 'createdTime' => date('c')], null, null, null);
     if ($lockName) {
         $job->setLockName($lockName);
     }
     $componentConfiguration = $this->getComponentConfiguration();
     if (isset($componentConfiguration['flags']) && in_array('encrypt', $componentConfiguration['flags'])) {
         $job->setEncrypted(true);
     }
     return $job;
 }
 /**
  * @param $token
  * @return string
  */
 private function encryptToken($token)
 {
     if (empty($token)) {
         return $token;
     }
     if (preg_match(Token::TOKEN_REGEXP, $token)) {
         return $this->encryptor->encrypt($token);
     } else {
         return $token;
     }
 }
 public function testRunExternal()
 {
     $processedFiles = $this->storageApiClient->listFiles((new ListFilesOptions())->setTags(['wr-google-drive-processed']));
     foreach ($processedFiles as $f) {
         $this->storageApiClient->deleteFileTag($f['id'], 'wr-google-drive-processed');
     }
     $job = $this->processJob($this->componentName . '/run', ['external' => ['account' => ['email' => $this->email, 'accessToken' => $this->encryptor->encrypt($this->accessToken), 'refreshToken' => $this->encryptor->encrypt($this->refreshToken)], 'query' => '+tags:tde', 'targetFolder' => '0B8ceg4OWLR3ld0czTWxfd3RmQnc']]);
     $this->assertEquals('success', $job->getStatus());
     // test if external account was deleted
     $accounts = $this->configuration->getAccounts();
     /** @var Account $account */
     foreach ($accounts as $account) {
         $this->assertNotContains('external', $account->getAccountId());
     }
 }
 /**
  * @param Metadata\Job $job
  * @return Client
  */
 private function createJobSapiClient(Metadata\Job $job)
 {
     return new Client(array('token' => $this->encryptor->decrypt($job->getToken()['token']), 'url' => $this->getConfiguration()->getStorageApiUrl()));
 }
示例#7
0
 public function getJobStatus($url, Elasticsearch\Job $job, Encryptor $encryptor)
 {
     $timeout = 2;
     return $this->get($url, array('config' => array('curl' => array(CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0)), 'headers' => array('X-StorageApi-Token' => $encryptor->decrypt($job->getToken()), 'X-KBC-RunId' => $job->getRunId(), 'X-User-Agent', KeboolaOrchestratorBundle::SYRUP_COMPONENT_NAME . " - JobExecutor"), 'timeout' => 60 * $timeout));
     // handling curl errors
     //        $request->getEmitter()->on('error', function (ErrorEvent $e) use ($timeout) {
     //            $curlError = $e->getTransferInfo('curl_result');
     //            if ($curlError == 28) {
     //                throw new Exception\JobRuntimeException(sprintf('Task polling timeout after %d minutes', $timeout));
     //            }
     //        });
 }