initial commit
This commit is contained in:
313
app/Vendor/Facebook/FacebookRequest.php
vendored
Normal file
313
app/Vendor/Facebook/FacebookRequest.php
vendored
Normal file
@@ -0,0 +1,313 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright 2014 Facebook, Inc.
|
||||
*
|
||||
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
||||
* use, copy, modify, and distribute this software in source code or binary
|
||||
* form for use in connection with the web services and APIs provided by
|
||||
* Facebook.
|
||||
*
|
||||
* As with any software that integrates with the Facebook platform, your use
|
||||
* of this software is subject to the Facebook Developer Principles and
|
||||
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
||||
* shall be included in all copies or substantial portions of the software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
namespace Facebook;
|
||||
|
||||
use Facebook\HttpClients\FacebookHttpable;
|
||||
use Facebook\HttpClients\FacebookCurlHttpClient;
|
||||
use Facebook\HttpClients\FacebookStreamHttpClient;
|
||||
|
||||
/**
|
||||
* Class FacebookRequest
|
||||
* @package Facebook
|
||||
* @author Fosco Marotto <fjm@fb.com>
|
||||
* @author David Poll <depoll@fb.com>
|
||||
*/
|
||||
class FacebookRequest
|
||||
{
|
||||
|
||||
/**
|
||||
* @const string Version number of the Facebook PHP SDK.
|
||||
*/
|
||||
const VERSION = '4.0.12';
|
||||
|
||||
/**
|
||||
* @const string Default Graph API version for requests
|
||||
*/
|
||||
const GRAPH_API_VERSION = 'v2.2';
|
||||
|
||||
/**
|
||||
* @const string Graph API URL
|
||||
*/
|
||||
const BASE_GRAPH_URL = 'https://graph.facebook.com';
|
||||
|
||||
/**
|
||||
* @var FacebookSession The session used for this request
|
||||
*/
|
||||
private $session;
|
||||
|
||||
/**
|
||||
* @var string The HTTP method for the request
|
||||
*/
|
||||
private $method;
|
||||
|
||||
/**
|
||||
* @var string The path for the request
|
||||
*/
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* @var array The parameters for the request
|
||||
*/
|
||||
private $params;
|
||||
|
||||
/**
|
||||
* @var string The Graph API version for the request
|
||||
*/
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* @var string ETag sent with the request
|
||||
*/
|
||||
private $etag;
|
||||
|
||||
/**
|
||||
* @var FacebookHttpable HTTP client handler
|
||||
*/
|
||||
private static $httpClientHandler;
|
||||
|
||||
/**
|
||||
* @var int The number of calls that have been made to Graph.
|
||||
*/
|
||||
public static $requestCount = 0;
|
||||
|
||||
/**
|
||||
* getSession - Returns the associated FacebookSession.
|
||||
*
|
||||
* @return FacebookSession
|
||||
*/
|
||||
public function getSession()
|
||||
{
|
||||
return $this->session;
|
||||
}
|
||||
|
||||
/**
|
||||
* getPath - Returns the associated path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPath()
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
/**
|
||||
* getParameters - Returns the associated parameters.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getParameters()
|
||||
{
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
/**
|
||||
* getMethod - Returns the associated method.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMethod()
|
||||
{
|
||||
return $this->method;
|
||||
}
|
||||
|
||||
/**
|
||||
* getETag - Returns the ETag sent with the request.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getETag()
|
||||
{
|
||||
return $this->etag;
|
||||
}
|
||||
|
||||
/**
|
||||
* setHttpClientHandler - Returns an instance of the HTTP client
|
||||
* handler
|
||||
*
|
||||
* @param \Facebook\HttpClients\FacebookHttpable
|
||||
*/
|
||||
public static function setHttpClientHandler(FacebookHttpable $handler)
|
||||
{
|
||||
static::$httpClientHandler = $handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* getHttpClientHandler - Returns an instance of the HTTP client
|
||||
* data handler
|
||||
*
|
||||
* @return FacebookHttpable
|
||||
*/
|
||||
public static function getHttpClientHandler()
|
||||
{
|
||||
if (static::$httpClientHandler) {
|
||||
return static::$httpClientHandler;
|
||||
}
|
||||
return function_exists('curl_init') ? new FacebookCurlHttpClient() : new FacebookStreamHttpClient();
|
||||
}
|
||||
|
||||
/**
|
||||
* FacebookRequest - Returns a new request using the given session. optional
|
||||
* parameters hash will be sent with the request. This object is
|
||||
* immutable.
|
||||
*
|
||||
* @param FacebookSession $session
|
||||
* @param string $method
|
||||
* @param string $path
|
||||
* @param array|null $parameters
|
||||
* @param string|null $version
|
||||
* @param string|null $etag
|
||||
*/
|
||||
public function __construct(
|
||||
FacebookSession $session, $method, $path, $parameters = null, $version = null, $etag = null
|
||||
)
|
||||
{
|
||||
$this->session = $session;
|
||||
$this->method = $method;
|
||||
$this->path = $path;
|
||||
if ($version) {
|
||||
$this->version = $version;
|
||||
} else {
|
||||
$this->version = static::GRAPH_API_VERSION;
|
||||
}
|
||||
$this->etag = $etag;
|
||||
|
||||
$params = ($parameters ?: array());
|
||||
if ($session
|
||||
&& !isset($params["access_token"])) {
|
||||
$params["access_token"] = $session->getToken();
|
||||
}
|
||||
if (FacebookSession::useAppSecretProof()
|
||||
&& !isset($params["appsecret_proof"])) {
|
||||
$params["appsecret_proof"] = $this->getAppSecretProof(
|
||||
$params["access_token"]
|
||||
);
|
||||
}
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base Graph URL.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getRequestURL()
|
||||
{
|
||||
return static::BASE_GRAPH_URL . '/' . $this->version . $this->path;
|
||||
}
|
||||
|
||||
/**
|
||||
* execute - Makes the request to Facebook and returns the result.
|
||||
*
|
||||
* @return FacebookResponse
|
||||
*
|
||||
* @throws FacebookSDKException
|
||||
* @throws FacebookRequestException
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
$url = $this->getRequestURL();
|
||||
$params = $this->getParameters();
|
||||
|
||||
if ($this->method === "GET") {
|
||||
$url = self::appendParamsToUrl($url, $params);
|
||||
$params = array();
|
||||
}
|
||||
|
||||
$connection = self::getHttpClientHandler();
|
||||
$connection->addRequestHeader('User-Agent', 'fb-php-' . self::VERSION);
|
||||
$connection->addRequestHeader('Accept-Encoding', '*'); // Support all available encodings.
|
||||
|
||||
// ETag
|
||||
if (isset($this->etag)) {
|
||||
$connection->addRequestHeader('If-None-Match', $this->etag);
|
||||
}
|
||||
|
||||
// Should throw `FacebookSDKException` exception on HTTP client error.
|
||||
// Don't catch to allow it to bubble up.
|
||||
$result = $connection->send($url, $this->method, $params);
|
||||
|
||||
static::$requestCount++;
|
||||
|
||||
$etagHit = 304 == $connection->getResponseHttpStatusCode();
|
||||
|
||||
$headers = $connection->getResponseHeaders();
|
||||
$etagReceived = isset($headers['ETag']) ? $headers['ETag'] : null;
|
||||
|
||||
$decodedResult = json_decode($result);
|
||||
if ($decodedResult === null) {
|
||||
$out = array();
|
||||
parse_str($result, $out);
|
||||
return new FacebookResponse($this, $out, $result, $etagHit, $etagReceived);
|
||||
}
|
||||
if (isset($decodedResult->error)) {
|
||||
throw FacebookRequestException::create(
|
||||
$result,
|
||||
$decodedResult->error,
|
||||
$connection->getResponseHttpStatusCode()
|
||||
);
|
||||
}
|
||||
|
||||
return new FacebookResponse($this, $decodedResult, $result, $etagHit, $etagReceived);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate and return the appsecret_proof value for an access_token
|
||||
*
|
||||
* @param string $token
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAppSecretProof($token)
|
||||
{
|
||||
return hash_hmac('sha256', $token, FacebookSession::_getTargetAppSecret());
|
||||
}
|
||||
|
||||
/**
|
||||
* appendParamsToUrl - Gracefully appends params to the URL.
|
||||
*
|
||||
* @param string $url
|
||||
* @param array $params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function appendParamsToUrl($url, $params = array())
|
||||
{
|
||||
if (!$params) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
if (strpos($url, '?') === false) {
|
||||
return $url . '?' . http_build_query($params, null, '&');
|
||||
}
|
||||
|
||||
list($path, $query_string) = explode('?', $url, 2);
|
||||
parse_str($query_string, $query_array);
|
||||
|
||||
// Favor params from the original URL over $params
|
||||
$params = array_merge($params, $query_array);
|
||||
|
||||
return $path . '?' . http_build_query($params, null, '&');
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user