2019-05-09 18:54:39 +12:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Auth;
|
|
|
|
|
|
|
|
abstract class OAuth
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $appID;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $appSecret;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $callback;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $state;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* OAuth constructor.
|
|
|
|
*
|
|
|
|
* @param string $appId
|
|
|
|
* @param string $appSecret
|
|
|
|
* @param string $callback
|
2019-09-07 05:04:26 +12:00
|
|
|
* @param array $state
|
2019-05-09 18:54:39 +12:00
|
|
|
*/
|
|
|
|
public function __construct(string $appId, string $appSecret, string $callback, $state = [])
|
|
|
|
{
|
2019-09-07 05:04:26 +12:00
|
|
|
$this->appID = $appId;
|
|
|
|
$this->appSecret = $appSecret;
|
|
|
|
$this->callback = $callback;
|
|
|
|
$this->state = $state;
|
2019-05-09 18:54:39 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract public function getName():string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract public function getLoginURL():string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $code
|
2019-09-07 05:04:26 +12:00
|
|
|
*
|
2019-05-09 18:54:39 +12:00
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract public function getAccessToken(string $code):string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $accessToken
|
2019-09-07 05:04:26 +12:00
|
|
|
*
|
2019-05-09 18:54:39 +12:00
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract public function getUserID(string $accessToken):string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $accessToken
|
2019-09-07 05:04:26 +12:00
|
|
|
*
|
2019-05-09 18:54:39 +12:00
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract public function getUserEmail(string $accessToken):string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $accessToken
|
2019-09-07 05:04:26 +12:00
|
|
|
*
|
2019-05-09 18:54:39 +12:00
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract public function getUserName(string $accessToken):string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $method
|
|
|
|
* @param string $url
|
2019-09-07 05:04:26 +12:00
|
|
|
* @param array $headers
|
2019-05-09 18:54:39 +12:00
|
|
|
* @param string $payload
|
2019-09-07 05:04:26 +12:00
|
|
|
*
|
2019-05-09 18:54:39 +12:00
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
protected function request(string $method, string $url = '', array $headers = [], string $payload = ''):string
|
|
|
|
{
|
2019-09-07 05:04:26 +12:00
|
|
|
$ch = curl_init($url);
|
2019-05-09 18:54:39 +12:00
|
|
|
|
|
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
|
|
|
|
curl_setopt($ch, CURLOPT_HEADER, 0);
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
|
|
curl_setopt($ch, CURLOPT_USERAGENT, 'Console_OAuth_Agent');
|
|
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
|
|
2019-09-07 05:04:26 +12:00
|
|
|
if (!empty($payload)) {
|
2019-05-09 18:54:39 +12:00
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Send the request & save response to $resp
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
|
|
|
|
curl_close($ch);
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
}
|
2019-09-07 05:04:26 +12:00
|
|
|
}
|