Refactoring Oauth and Memsource classes

This commit is contained in:
Bruno F. Fontes 2019-06-27 20:03:41 -03:00
parent aaabb91039
commit 283e85b834
Signed by: brunofontes
GPG Key ID: EE3447CE80048495
3 changed files with 47 additions and 21 deletions

View File

@ -12,13 +12,18 @@ class FetchApi
protected $base_url; protected $base_url;
protected $token; protected $token;
public function getBase_url()
{
return $this->base_url;
}
/** /**
* BaseAPI needs at least the Memsource Token to use it's API * BaseAPI needs at least the Memsource Token to use it's API
* *
* @param string $token * @param string $token
* @param string $memsourceBaseUrl [Optional] A non-standard Memsource URL base for the API to work * @param string $memsourceBaseUrl [Optional] A non-standard Memsource URL base for the API to work
*/ */
public function __construct(string $token = null, string $memsourceBaseUrl = 'https://cloud.memsource.com/web') public function __construct(string $token = null, string $memsourceBaseUrl)
{ {
$this->base_url = $memsourceBaseUrl; $this->base_url = $memsourceBaseUrl;
$this->token = $token; $this->token = $token;
@ -27,7 +32,7 @@ class FetchApi
/** /**
* Fetch API data using curl * Fetch API data using curl
* *
* @param string $method Should be 'get', 'post', 'jsonPost' or 'download' * @param string $method Should be 'get', 'put', 'post', 'jsonPost', 'download' or 'raw'
* @param string $url The api url * @param string $url The api url
* @param array $parameters Array ['key' => 'value'] of get or post fields or structured array for json requests * @param array $parameters Array ['key' => 'value'] of get or post fields or structured array for json requests
* @param string $filename [optional] Specified file in which the download request will be saved * @param string $filename [optional] Specified file in which the download request will be saved
@ -64,6 +69,9 @@ class FetchApi
$setopt = $this->getDownloadFileParam($filename) $setopt = $this->getDownloadFileParam($filename)
+ $this->getJsonPostParam($parameters); + $this->getJsonPostParam($parameters);
break; break;
case 'raw':
$setopt = $parameters;
break;
default: default:
throw new \Exception("Method {$method} is invalid on Fetch", 1); throw new \Exception("Method {$method} is invalid on Fetch", 1);
} }

View File

@ -8,6 +8,12 @@
namespace BrunoFontes; namespace BrunoFontes;
use \BrunoFontes\Memsource\BilingualFile;
use \BrunoFontes\Memsource\FetchApi;
use \BrunoFontes\Memsource\Jobs;
use \BrunoFontes\Memsource\Oauth;
use \BrunoFontes\Memsource\Project;
/** /**
* Memsource API class * Memsource API class
* *
@ -24,47 +30,46 @@ class Memsource
public function __construct(string $token = null, string $memsourceBaseUrl = 'https://cloud.memsource.com/web') public function __construct(string $token = null, string $memsourceBaseUrl = 'https://cloud.memsource.com/web')
{ {
$this->_fetchApi = new \BrunoFontes\Memsource\FetchApi($token, $memsourceBaseUrl); $this->_fetchApi = new FetchApi($token, $memsourceBaseUrl);
} }
/** /**
* Memsource Oauth functions * Memsource Oauth functions
* *
* @return \BrunoFontes\Memsource\Oauth * @return Oauth
*/ */
public function oauth(): \BrunoFontes\Memsource\Oauth public function oauth(): Oauth
{ {
return $this->_oauth ?? $this->_oauth = new \BrunoFontes\Memsource\oauth(); return $this->_oauth ?? $this->_oauth = new oauth($this->_fetchApi);
} }
/** /**
* Memsource API BilingualFile related functions * Memsource API BilingualFile related functions
* *
* @return \BrunoFontes\Memsource\BilingualFile * @return BilingualFile
*/ */
public function bilingualFile(): \BrunoFontes\Memsource\BilingualFile public function bilingualFile(): BilingualFile
{ {
return $this->_bilingualFile ?? $this->_bilingualFile = new \BrunoFontes\Memsource\BilingualFile($this->_fetchApi); return $this->_bilingualFile ?? $this->_bilingualFile = new BilingualFile($this->_fetchApi);
} }
/** /**
* Memsource API Jobs related functions * Memsource API Jobs related functions
* *
* @return \BrunoFontes\Memsource\Jobs * @return Jobs
*/ */
public function jobs(): \BrunoFontes\Memsource\Jobs public function jobs(): Jobs
{ {
return $this->_jobs ?? $this->_jobs = new \BrunoFontes\Memsource\Jobs($this->_fetchApi); return $this->_jobs ?? $this->_jobs = new Jobs($this->_fetchApi);
} }
/** /**
* Memsource API Project related functions * Memsource API Project related functions
* *
* @return \BrunoFontes\Memsource\Project * @return Project
*/ */
public function project(): \BrunoFontes\Memsource\Project public function project(): Project
{ {
return $this->_project ?? $this->_project = new \BrunoFontes\Memsource\Project($this->_fetchApi); return $this->_project ?? $this->_project = new Project($this->_fetchApi);
} }
} }

View File

@ -8,7 +8,7 @@
namespace BrunoFontes\Memsource; namespace BrunoFontes\Memsource;
class Oauth extends \BrunoFontes\Memsource\FetchApi class Oauth extends \BrunoFontes\Memsource\BaseApi
{ {
private $_url = '/oauth'; private $_url = '/oauth';
@ -23,8 +23,16 @@ class Oauth extends \BrunoFontes\Memsource\FetchApi
*/ */
public function getAuthorizationCodeUrl(string $client_id, string $callback_uri) public function getAuthorizationCodeUrl(string $client_id, string $callback_uri)
{ {
$authorize_url = $this->base_url . $this->_url . '/authorize'; $authorize_url = $this->fetchApi->getBase_url() . $this->_url . '/authorize';
return $authorize_url . '?response_type=code&client_id=' . $client_id . '&redirect_uri=' . $callback_uri . '&scope=openid'; $parambeters = http_build_query(
[
"response_type" => 'code',
"client_id" => $client_id,
"redirect_uri" => $callback_uri,
"scope" => 'openid'
]
);
return "{$authorize_url}?{$parambeters}";
} }
public function getAccessToken(string $authorization_code, string $client_id, string $client_secret, string $callback_uri) public function getAccessToken(string $authorization_code, string $client_id, string $client_secret, string $callback_uri)
@ -38,7 +46,12 @@ class Oauth extends \BrunoFontes\Memsource\FetchApi
CURLOPT_POST => true, CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $content CURLOPT_POSTFIELDS => $content
]; ];
$response = json_decode($this->curl($token_url, $params), true); $response = json_decode($this->fetchApi->fetch('raw', $token_url, $params), true);
if (isset($response['error'])) {
throw new \Exception("Error getting TOKEN: " . $response['error_description'], 1);
}
return $response['access_token']; return $response['access_token'];
} }
} }