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']); }
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]"); } } }