1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171:
<?php
namespace Upwork\API\AuthTypes;
use Upwork\API\Debug as ApiDebug;
use Upwork\API\Config as ApiConfig;
use Upwork\API\Interfaces\Client as ApiClient;
use Upwork\API\Utils as ApiUtils;
use Upwork\API\ApiException as ApiException;
use Upwork\API\AuthTypes\AbstractOAuth as AbstractOAuth;
require_once __DIR__ . '/../../../../vendor-src/oauth-php/library/OAuthStore.php';
require_once __DIR__ . '/../../../../vendor-src/oauth-php/library/OAuthRequester.php';
final class OAuthPHPLib extends AbstractOAuth implements ApiClient
{
public function getInstance()
{
return $this->_getOAuthInstance();
}
public function request($type, $url, $params = array())
{
ApiDebug::p('running request from ' . __CLASS__);
$this->_getOAuthInstance();
$request = new \OAuthRequester(ApiUtils::getFullUrl($url, self::$_epoint), $type, $params);
$data = $request->doRequest(0, self::_getCurlOptions());
ApiDebug::p('got response from server', $data);
return $data['body'];
}
public function setupRequestToken()
{
ApiDebug::p('query request token from server');
$this->_getOAuthInstance();
$requestTokenInfo = \OAuthRequester::requestRequestToken(
self::$_apiKey,
0,
array(),
'POST',
array(),
self::_getCurlOptions()
);
$requestTokenInfo['token_secret'] = $_SESSION['oauth_' . self::$_apiKey]['token_secret'];
ApiDebug::p('got request token info', $requestTokenInfo);
self::$_requestToken = $requestTokenInfo['token'];
self::$_requestSecret = $requestTokenInfo['token_secret'];
return array('oauth_token' => $requestTokenInfo['token'], 'oauth_token_secret' => $requestTokenInfo['token_secret']);
}
protected function _setupAccessToken($verifier)
{
ApiDebug::p('requesting access token');
$accessTokenInfo = array();
$this->_getOAuthInstance();
\OAuthRequester::requestAccessToken(
self::$_apiKey,
self::$_requestToken,
0,
'POST',
array('oauth_verifier' => $verifier),
self::_getCurlOptions()
);
$accessTokenInfo['oauth_token'] = $_SESSION['oauth_' . self::$_apiKey]['token'];
$accessTokenInfo['oauth_token_secret'] = $_SESSION['oauth_' . self::$_apiKey]['token_secret'];
ApiDebug::p('got access token info', $accessTokenInfo);
self::$_accessToken = $accessTokenInfo['oauth_token'];
self::$_accessSecret = $accessTokenInfo['oauth_token_secret'];
return $accessTokenInfo;
}
protected function _getOAuthInstance($authType = null)
{
ApiDebug::p('get OAuth instance');
$options = array(
'consumer_key' => self::$_apiKey,
'consumer_secret' => self::$_secret,
'server_uri' => UPWORK_BASE_URL,
'request_token_uri' => ApiUtils::getFullUrl(self::URL_RTOKEN, 'api'),
'authorize_uri' => self::URL_AUTH,
'access_token_uri' => ApiUtils::getFullUrl(self::URL_ATOKEN, 'api')
);
$oauth = \OAuthStore::instance('Session', $options);
return $oauth;
}
private static function _getCurlOptions()
{
$options = array();
$options[CURLOPT_SSL_VERIFYPEER] = self::$_verifySsl;
return $options;
}
}