vendor and env first commit
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth1\Client\Signature;
|
||||
|
||||
use GuzzleHttp\Psr7;
|
||||
use GuzzleHttp\Psr7\Uri;
|
||||
use Psr\Http\Message\UriInterface;
|
||||
|
||||
trait EncodesUrl
|
||||
{
|
||||
/**
|
||||
* Create a Guzzle url for the given URI.
|
||||
*
|
||||
* @param string $uri
|
||||
*
|
||||
* @return UriInterface
|
||||
*/
|
||||
protected function createUrl($uri)
|
||||
{
|
||||
return Psr7\Utils::uriFor($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a base string for a RSA-SHA1 signature
|
||||
* based on the given a url, method, and any parameters.
|
||||
*
|
||||
* @param UriInterface $url
|
||||
* @param string $method
|
||||
* @param array $parameters
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function baseString(UriInterface $url, $method = 'POST', array $parameters = [])
|
||||
{
|
||||
$baseString = rawurlencode($method) . '&';
|
||||
|
||||
$schemeHostPath = Uri::fromParts([
|
||||
'scheme' => $url->getScheme(),
|
||||
'host' => $url->getHost(),
|
||||
'port' => $url->getPort(),
|
||||
'path' => $url->getPath(),
|
||||
]);
|
||||
|
||||
$baseString .= rawurlencode($schemeHostPath) . '&';
|
||||
|
||||
parse_str($url->getQuery(), $query);
|
||||
$data = array_merge($query, $parameters);
|
||||
|
||||
// normalize data key/values
|
||||
$data = $this->normalizeArray($data);
|
||||
ksort($data);
|
||||
|
||||
$baseString .= $this->queryStringFromData($data);
|
||||
|
||||
return $baseString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a copy of the given array with all keys and values rawurlencoded.
|
||||
*
|
||||
* @param array $array Array to normalize
|
||||
*
|
||||
* @return array Normalized array
|
||||
*/
|
||||
protected function normalizeArray(array $array = [])
|
||||
{
|
||||
$normalizedArray = [];
|
||||
|
||||
foreach ($array as $key => $value) {
|
||||
$key = rawurlencode(rawurldecode($key));
|
||||
|
||||
if (is_array($value)) {
|
||||
$normalizedArray[$key] = $this->normalizeArray($value);
|
||||
} else {
|
||||
$normalizedArray[$key] = rawurlencode(rawurldecode($value));
|
||||
}
|
||||
}
|
||||
|
||||
return $normalizedArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array of rawurlencoded strings out of each array key/value pair
|
||||
* Handles multi-dimensional arrays recursively.
|
||||
*
|
||||
* @param array $data Array of parameters to convert.
|
||||
* @param array|null $queryParams Array to extend. False by default.
|
||||
* @param string $prevKey Optional Array key to append
|
||||
*
|
||||
* @return string rawurlencoded string version of data
|
||||
*/
|
||||
protected function queryStringFromData($data, $queryParams = null, $prevKey = '')
|
||||
{
|
||||
if ($initial = (null === $queryParams)) {
|
||||
$queryParams = [];
|
||||
}
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
if ($prevKey) {
|
||||
$key = $prevKey . '[' . $key . ']'; // Handle multi-dimensional array
|
||||
}
|
||||
if (is_array($value)) {
|
||||
$queryParams = $this->queryStringFromData($value, $queryParams, $key);
|
||||
} else {
|
||||
$queryParams[] = rawurlencode($key . '=' . $value); // join with equals sign
|
||||
}
|
||||
}
|
||||
|
||||
if ($initial) {
|
||||
return implode('%26', $queryParams); // join with ampersand
|
||||
}
|
||||
|
||||
return $queryParams;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth1\Client\Signature;
|
||||
|
||||
class HmacSha1Signature extends Signature implements SignatureInterface
|
||||
{
|
||||
use EncodesUrl;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function method()
|
||||
{
|
||||
return 'HMAC-SHA1';
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function sign($uri, array $parameters = [], $method = 'POST')
|
||||
{
|
||||
$url = $this->createUrl($uri);
|
||||
|
||||
$baseString = $this->baseString($url, $method, $parameters);
|
||||
|
||||
return base64_encode($this->hash($baseString));
|
||||
}
|
||||
|
||||
/**
|
||||
* Hashes a string with the signature's key.
|
||||
*
|
||||
* @param string $string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function hash($string)
|
||||
{
|
||||
return hash_hmac('sha1', $string, $this->key(), true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth1\Client\Signature;
|
||||
|
||||
class PlainTextSignature extends Signature implements SignatureInterface
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function method()
|
||||
{
|
||||
return 'PLAINTEXT';
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function sign($uri, array $parameters = [], $method = 'POST')
|
||||
{
|
||||
return $this->key();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth1\Client\Signature;
|
||||
|
||||
use League\OAuth1\Client\Credentials\RsaClientCredentials;
|
||||
|
||||
class RsaSha1Signature extends Signature implements SignatureInterface
|
||||
{
|
||||
use EncodesUrl;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function method()
|
||||
{
|
||||
return 'RSA-SHA1';
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function sign($uri, array $parameters = [], $method = 'POST')
|
||||
{
|
||||
$url = $this->createUrl($uri);
|
||||
$baseString = $this->baseString($url, $method, $parameters);
|
||||
|
||||
/** @var RsaClientCredentials $clientCredentials */
|
||||
$clientCredentials = $this->clientCredentials;
|
||||
$privateKey = $clientCredentials->getRsaPrivateKey();
|
||||
|
||||
openssl_sign($baseString, $signature, $privateKey);
|
||||
|
||||
return base64_encode($signature);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth1\Client\Signature;
|
||||
|
||||
use League\OAuth1\Client\Credentials\ClientCredentialsInterface;
|
||||
use League\OAuth1\Client\Credentials\CredentialsInterface;
|
||||
|
||||
abstract class Signature implements SignatureInterface
|
||||
{
|
||||
/**
|
||||
* The client credentials.
|
||||
*
|
||||
* @var ClientCredentialsInterface
|
||||
*/
|
||||
protected $clientCredentials;
|
||||
|
||||
/**
|
||||
* The (temporary or token) credentials.
|
||||
*
|
||||
* @var CredentialsInterface
|
||||
*/
|
||||
protected $credentials;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function __construct(ClientCredentialsInterface $clientCredentials)
|
||||
{
|
||||
$this->clientCredentials = $clientCredentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setCredentials(CredentialsInterface $credentials)
|
||||
{
|
||||
$this->credentials = $credentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a signing key.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function key()
|
||||
{
|
||||
$key = rawurlencode($this->clientCredentials->getSecret()) . '&';
|
||||
|
||||
if ($this->credentials !== null) {
|
||||
$key .= rawurlencode($this->credentials->getSecret());
|
||||
}
|
||||
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth1\Client\Signature;
|
||||
|
||||
use League\OAuth1\Client\Credentials\ClientCredentialsInterface;
|
||||
use League\OAuth1\Client\Credentials\CredentialsInterface;
|
||||
|
||||
interface SignatureInterface
|
||||
{
|
||||
/**
|
||||
* Create a new signature instance.
|
||||
*
|
||||
* @param ClientCredentialsInterface $clientCredentials
|
||||
*/
|
||||
public function __construct(ClientCredentialsInterface $clientCredentials);
|
||||
|
||||
/**
|
||||
* Set the credentials used in the signature. These can be temporary
|
||||
* credentials when getting token credentials during the OAuth
|
||||
* authentication process, or token credentials when querying
|
||||
* the API.
|
||||
*
|
||||
* @param CredentialsInterface $credentials
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setCredentials(CredentialsInterface $credentials);
|
||||
|
||||
/**
|
||||
* Get the OAuth signature method.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function method();
|
||||
|
||||
/**
|
||||
* Sign the given request for the client.
|
||||
*
|
||||
* @param string $uri
|
||||
* @param array $parameters
|
||||
* @param string $method
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function sign($uri, array $parameters = [], $method = 'POST');
|
||||
}
|
||||
Reference in New Issue
Block a user