protected function getClient($auth = 'wsse', $authenticate = true) { switch ($auth) { case 'wsse': $this->initializeWsseFromGlobals(); $options = $this->getOptionsFromGlobals(); $client = new Client(new Curl($options)); if ($authenticate) { $client->authenticate($options['username'], $options['secret']); } break; case 'soap': $this->initializeWsseFromGlobals(); $options = $this->getOptionsFromGlobals(); $client = new Client(new SoapClient($options)); if ($authenticate) { $client->authenticate($options['username'], $options['secret']); } break; case 'oauth': $this->initializeOAuthFromGlobals(); $options = $this->getOptionsFromGlobals(); $client = new Client(new Curl($options)); if ($authenticate) { $client->setAuthService(new OAuth2())->authenticate($options['client_id'], $options['client_secret']); } break; } return $client; }
/** @dataProvider provideApiClients */ public function testQueue(Client $client, $options) { $api = $client->getReportApi(); $response = $api->queueReport(array('reportSuiteID' => $options['reportSuite'], 'metrics' => array(array('id' => 'pageviews')), 'locale' => "en_US")); $this->assertTrue(isset($response['reportID'])); $this->assertNotEquals($response['reportID'], 0); }
public function testInjectApi() { $client = new Client(); $reportApiMock = $this->getMockBuilder('AdobeMarketingCloud\\ApiInterface')->getMock(); $client->setApi('report', $reportApiMock); $this->assertSame($reportApiMock, $client->getReportApi()); }
public function testCurlTimeout() { $options = $this->getOptionsFromGlobals(); $options['curlopts'] = array(CURLOPT_HEADER => false); $options['timeout'] = 0.5; $client = new Client(new Curl($options)); $client->authenticate($options['username'], $options['secret']); ob_start(); // timeout causes a print_r $client->getCompanyApi()->getReportSuites(); ob_clean(); $fullResponse = $client->getLastResponse(); $this->assertEquals($fullResponse['errorNumber'], CURLE_OPERATION_TIMEOUTED); $this->assertStringStartsWith('Operation timed out after ', $fullResponse['errorMessage']); }
public function testGetEndpoint() { $client = new Client(new Curl(array('curlopts' => array(CURLOPT_SSLVERSION => 3)))); $response = $client->getCompanyApi()->getEndpoint('Adobe'); $this->assertTrue(is_string($response)); }
private function authorize($options) { // We will support three legged oauth soon if (count($options) < 1) { $usage = <<<EOF Usage: authorize <grant_type> <client_id> [....] grant_type - (required) A compatible grant type, one of: ["password", "code"] Providing a username/password will return a token immediately. Excluding these will provide a URL to retrieve the authorization code. Clients can be registered at https://developer.omniture.com/en_US/devcenter/applications EOF; $this->outputAndExit($usage); } $grant_type = array_shift($options); if ($grant_type == 'code') { if (count($options) < 1) { $usage = <<<EOF Usage: authorize code <client_id> [<client_secret> <username> <password>] client_id - (required) The ID of your registered client The "code" grant returns a URL to retrieve the authorization code. Clients can be registered at https://developer.omniture.com/en_US/devcenter/applications EOF; $this->outputAndExit($usage); } $clientId = array_shift($options); $endpoint = $this->getEndpoint(); $instructions = <<<EOF Paste the following URL in your browser, and then copy the authorization code returned by the server: https://%s/authorize?client_id=%s EOF; echo sprintf($instructions, $endpoint, urlencode($clientId)); // provide prompt for authorization code here } else { if ($grant_type == 'password') { if (count($options) < 4) { $usage = <<<EOF Usage: authorize password <client_id> <client_secret> <username> <password> client_id - (required) The ID of your registered client client_secret - (required) The secret of your registered client username - (required) username of the user to authorize password - (required) password to authorize The "password" grant provides a token immediately. Clients can be registered at https://developer.omniture.com/en_US/devcenter/applications EOF; $this->outputAndExit($usage); } list($clientId, $clientSecret, $username, $password) = $options; $endpoint = $this->getEndpoint(); $auth = new HttpBasic(); $adm = new Client(new Curl(array('endpoint' => $endpoint) + $config['default'], $auth)); $adm->authenticate($clientId, $clientSecret); if (!($tokenData = $adm->getOAuthApi()->getTokenFromUserCredentials($username, $password))) { $response = $adm->getLastResponse(); $error = null; if (($json = json_decode($response['response'], true)) != false) { $response = $json; } if (isset($response['errorMessage']) && !empty($response['errorMessage'])) { $error = $response['errorMessage']; } if (isset($response['error']['message'])) { $error = $response['error']['message']; } if ($error && $error == 'invalid_client') { $this->outputAndExit('Error: Invalid client credentials'); } $this->outputAndExit('Error: ' . print_r($response, 1)); } $token = $tokenData['access_token']; // set defaults if config is new if (!isset($config[$clientId])) { $config[$clientId] = array(); } if (!isset($config[$clientId][$endpoint])) { $config[$clientId][$endpoint] = array('tokens' => array(), 'default' => ''); } // check if token exists if (!in_array($token, $config[$clientId][$endpoint]['tokens'])) { $config[$clientId][$endpoint]['tokens'][] = $token; } // clear the defaults across all clients for this endpoint foreach ($config as $id => $conf) { unset($config[$id][$endpoint]['default']); } // set the new token as default $config[$clientId][$endpoint]['default'] = $token; $this->writeConfigFile($config); $this->outputAndExit('Token: ' . $this->formatJson(json_encode($tokenData))); } else { $this->outputAndExit("Unrecognized grant type \"{$grant_type}\", must be one of [code, password]"); } } }