Cheetah
FacebookRequest.php
Go to the documentation of this file.
1 <?php
24 namespace Facebook;
25 
33 
40 {
44  protected $app;
45 
49  protected $accessToken;
50 
54  protected $method;
55 
59  protected $endpoint;
60 
64  protected $headers = [];
65 
69  protected $params = [];
70 
74  protected $files = [];
75 
79  protected $eTag;
80 
84  protected $graphVersion;
85 
97  public function __construct(FacebookApp $app = null, $accessToken = null, $method = null, $endpoint = null, array $params = [], $eTag = null, $graphVersion = null)
98  {
99  $this->setApp($app);
100  $this->setAccessToken($accessToken);
101  $this->setMethod($method);
102  $this->setEndpoint($endpoint);
103  $this->setParams($params);
104  $this->setETag($eTag);
105  $this->graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
106  }
107 
115  public function setAccessToken($accessToken)
116  {
117  $this->accessToken = $accessToken;
118  if ($accessToken instanceof AccessToken) {
119  $this->accessToken = $accessToken->getValue();
120  }
121 
122  return $this;
123  }
124 
134  public function setAccessTokenFromParams($accessToken)
135  {
136  $existingAccessToken = $this->getAccessToken();
137  if (!$existingAccessToken) {
138  $this->setAccessToken($accessToken);
139  } elseif ($accessToken !== $existingAccessToken) {
140  throw new FacebookSDKException('Access token mismatch. The access token provided in the FacebookRequest and the one provided in the URL or POST params do not match.');
141  }
142 
143  return $this;
144  }
145 
151  public function getAccessToken()
152  {
153  return $this->accessToken;
154  }
155 
161  public function getAccessTokenEntity()
162  {
163  return $this->accessToken ? new AccessToken($this->accessToken) : null;
164  }
165 
171  public function setApp(FacebookApp $app = null)
172  {
173  $this->app = $app;
174  }
175 
181  public function getApp()
182  {
183  return $this->app;
184  }
185 
191  public function getAppSecretProof()
192  {
193  if (!$accessTokenEntity = $this->getAccessTokenEntity()) {
194  return null;
195  }
196 
197  return $accessTokenEntity->getAppSecretProof($this->app->getSecret());
198  }
199 
205  public function validateAccessToken()
206  {
207  $accessToken = $this->getAccessToken();
208  if (!$accessToken) {
209  throw new FacebookSDKException('You must provide an access token.');
210  }
211  }
212 
218  public function setMethod($method)
219  {
220  $this->method = strtoupper($method);
221  }
222 
228  public function getMethod()
229  {
230  return $this->method;
231  }
232 
238  public function validateMethod()
239  {
240  if (!$this->method) {
241  throw new FacebookSDKException('HTTP method not specified.');
242  }
243 
244  if (!in_array($this->method, ['GET', 'POST', 'DELETE'])) {
245  throw new FacebookSDKException('Invalid HTTP method specified.');
246  }
247  }
248 
258  public function setEndpoint($endpoint)
259  {
260  // Harvest the access token from the endpoint to keep things in sync
261  $params = FacebookUrlManipulator::getParamsAsArray($endpoint);
262  if (isset($params['access_token'])) {
263  $this->setAccessTokenFromParams($params['access_token']);
264  }
265 
266  // Clean the token & app secret proof from the endpoint.
267  $filterParams = ['access_token', 'appsecret_proof'];
268  $this->endpoint = FacebookUrlManipulator::removeParamsFromUrl($endpoint, $filterParams);
269 
270  return $this;
271  }
272 
278  public function getEndpoint()
279  {
280  // For batch requests, this will be empty
281  return $this->endpoint;
282  }
283 
289  public function getHeaders()
290  {
291  $headers = static::getDefaultHeaders();
292 
293  if ($this->eTag) {
294  $headers['If-None-Match'] = $this->eTag;
295  }
296 
297  return array_merge($this->headers, $headers);
298  }
299 
305  public function setHeaders(array $headers)
306  {
307  $this->headers = array_merge($this->headers, $headers);
308  }
309 
315  public function setETag($eTag)
316  {
317  $this->eTag = $eTag;
318  }
319 
329  public function setParams(array $params = [])
330  {
331  if (isset($params['access_token'])) {
332  $this->setAccessTokenFromParams($params['access_token']);
333  }
334 
335  // Don't let these buggers slip in.
336  unset($params['access_token'], $params['appsecret_proof']);
337 
338  // @TODO Refactor code above with this
339  //$params = $this->sanitizeAuthenticationParams($params);
340  $params = $this->sanitizeFileParams($params);
341  $this->dangerouslySetParams($params);
342 
343  return $this;
344  }
345 
353  public function dangerouslySetParams(array $params = [])
354  {
355  $this->params = array_merge($this->params, $params);
356 
357  return $this;
358  }
359 
367  public function sanitizeFileParams(array $params)
368  {
369  foreach ($params as $key => $value) {
370  if ($value instanceof FacebookFile) {
371  $this->addFile($key, $value);
372  unset($params[$key]);
373  }
374  }
375 
376  return $params;
377  }
378 
385  public function addFile($key, FacebookFile $file)
386  {
387  $this->files[$key] = $file;
388  }
389 
393  public function resetFiles()
394  {
395  $this->files = [];
396  }
397 
403  public function getFiles()
404  {
405  return $this->files;
406  }
407 
413  public function containsFileUploads()
414  {
415  return !empty($this->files);
416  }
417 
423  public function containsVideoUploads()
424  {
425  foreach ($this->files as $file) {
426  if ($file instanceof FacebookVideo) {
427  return true;
428  }
429  }
430 
431  return false;
432  }
433 
439  public function getMultipartBody()
440  {
441  $params = $this->getPostParams();
442 
443  return new RequestBodyMultipart($params, $this->files);
444  }
445 
451  public function getUrlEncodedBody()
452  {
453  $params = $this->getPostParams();
454 
455  return new RequestBodyUrlEncoded($params);
456  }
457 
463  public function getParams()
464  {
465  $params = $this->params;
466 
467  $accessToken = $this->getAccessToken();
468  if ($accessToken) {
469  $params['access_token'] = $accessToken;
470  $params['appsecret_proof'] = $this->getAppSecretProof();
471  }
472 
473  return $params;
474  }
475 
481  public function getPostParams()
482  {
483  if ($this->getMethod() === 'POST') {
484  return $this->getParams();
485  }
486 
487  return [];
488  }
489 
495  public function getGraphVersion()
496  {
497  return $this->graphVersion;
498  }
499 
505  public function getUrl()
506  {
507  $this->validateMethod();
508 
509  $graphVersion = FacebookUrlManipulator::forceSlashPrefix($this->graphVersion);
510  $endpoint = FacebookUrlManipulator::forceSlashPrefix($this->getEndpoint());
511 
512  $url = $graphVersion . $endpoint;
513 
514  if ($this->getMethod() !== 'POST') {
515  $params = $this->getParams();
516  $url = FacebookUrlManipulator::appendParamsToUrl($url, $params);
517  }
518 
519  return $url;
520  }
521 
527  public static function getDefaultHeaders()
528  {
529  return [
530  'User-Agent' => 'fb-php-' . Facebook::VERSION,
531  'Accept-Encoding' => '*',
532  ];
533  }
534 }
Facebook\FacebookRequest\validateAccessToken
validateAccessToken()
Definition: FacebookRequest.php:205
Facebook\FacebookRequest\setApp
setApp(FacebookApp $app=null)
Definition: FacebookRequest.php:171
Facebook\FacebookRequest\setETag
setETag($eTag)
Definition: FacebookRequest.php:315
Facebook\FacebookRequest\getHeaders
getHeaders()
Definition: FacebookRequest.php:289
Facebook\FacebookRequest\setParams
setParams(array $params=[])
Definition: FacebookRequest.php:329
Facebook\FacebookRequest\getMultipartBody
getMultipartBody()
Definition: FacebookRequest.php:439
Facebook\FacebookRequest\$app
$app
Definition: FacebookRequest.php:44
Facebook\FacebookRequest\setEndpoint
setEndpoint($endpoint)
Definition: FacebookRequest.php:258
Facebook\Exceptions\FacebookSDKException
Definition: FacebookSDKException.php:32
Facebook\FacebookRequest\$method
$method
Definition: FacebookRequest.php:54
Facebook\FacebookRequest\__construct
__construct(FacebookApp $app=null, $accessToken=null, $method=null, $endpoint=null, array $params=[], $eTag=null, $graphVersion=null)
Definition: FacebookRequest.php:97
Facebook\FacebookRequest\getEndpoint
getEndpoint()
Definition: FacebookRequest.php:278
use
GNU LESSER GENERAL PUBLIC LICENSE February Free Software Inc Franklin Fifth MA USA Everyone is permitted to copy and distribute verbatim copies of this license but changing it is not allowed[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it By the GNU General Public Licenses are intended to guarantee your freedom to share and change free software to make sure the software is free for all its users This the Lesser General Public applies to some specially designated software packages typically libraries of the Free Software Foundation and other authors who decide to use it You can use it but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular based on the explanations below When we speak of free we are referring to freedom of use
Definition: license.txt:27
Facebook\FacebookRequest\getParams
getParams()
Definition: FacebookRequest.php:463
Facebook\FacebookRequest\resetFiles
resetFiles()
Definition: FacebookRequest.php:393
Facebook\FacebookRequest\containsFileUploads
containsFileUploads()
Definition: FacebookRequest.php:413
php
Facebook\FacebookRequest\setMethod
setMethod($method)
Definition: FacebookRequest.php:218
Facebook\FacebookRequest\getUrl
getUrl()
Definition: FacebookRequest.php:505
Facebook\FacebookRequest\dangerouslySetParams
dangerouslySetParams(array $params=[])
Definition: FacebookRequest.php:353
Facebook\FacebookRequest\getGraphVersion
getGraphVersion()
Definition: FacebookRequest.php:495
Facebook\FacebookRequest\setAccessToken
setAccessToken($accessToken)
Definition: FacebookRequest.php:115
Facebook\Authentication\AccessToken
Definition: AccessToken.php:32
$url
URI MungeSecretKey $url
Definition: URI.MungeSecretKey.txt:14
Facebook\FacebookRequest\getMethod
getMethod()
Definition: FacebookRequest.php:228
Facebook\Url\FacebookUrlManipulator
Definition: FacebookUrlManipulator.php:32
Facebook\FacebookRequest\$accessToken
$accessToken
Definition: FacebookRequest.php:49
Facebook\FacebookRequest\getFiles
getFiles()
Definition: FacebookRequest.php:403
Facebook\FacebookRequest\$graphVersion
$graphVersion
Definition: FacebookRequest.php:84
Facebook\FileUpload\FacebookVideo
Definition: FacebookVideo.php:32
Facebook\FacebookApp
Definition: FacebookApp.php:30
method
and that you are informed that you can do these things To protect your we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it For if you distribute copies of the whether gratis or for a you must give the recipients all the rights that we gave you You must make sure that receive or can get the source code If you link other code with the you must provide complete object files to the so that they can relink them with the library after making changes to the library and recompiling it And you must show them these terms so they know their rights We protect your rights with a two step method
Definition: license.txt:49
Facebook\Http\RequestBodyUrlEncoded
Definition: RequestBodyUrlEncoded.php:32
Facebook\FacebookRequest\getPostParams
getPostParams()
Definition: FacebookRequest.php:481
Facebook\FacebookRequest\getAppSecretProof
getAppSecretProof()
Definition: FacebookRequest.php:191
Facebook\FacebookRequest\getDefaultHeaders
static getDefaultHeaders()
Definition: FacebookRequest.php:527
Facebook\FacebookRequest\validateMethod
validateMethod()
Definition: FacebookRequest.php:238
Facebook
Facebook\FacebookRequest\getUrlEncodedBody
getUrlEncodedBody()
Definition: FacebookRequest.php:451
Facebook\FacebookRequest\getApp
getApp()
Definition: FacebookRequest.php:181
Facebook\FacebookRequest\setHeaders
setHeaders(array $headers)
Definition: FacebookRequest.php:305
Facebook\Http\RequestBodyMultipart
Definition: RequestBodyMultipart.php:38
Facebook\FacebookRequest\sanitizeFileParams
sanitizeFileParams(array $params)
Definition: FacebookRequest.php:367
Facebook\FacebookRequest\$endpoint
$endpoint
Definition: FacebookRequest.php:59
Facebook\FacebookRequest\getAccessToken
getAccessToken()
Definition: FacebookRequest.php:151
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
Facebook\FacebookRequest
Definition: FacebookRequest.php:40
Facebook\FacebookRequest\getAccessTokenEntity
getAccessTokenEntity()
Definition: FacebookRequest.php:161
Facebook\FacebookRequest\setAccessTokenFromParams
setAccessTokenFromParams($accessToken)
Definition: FacebookRequest.php:134
Facebook\FacebookRequest\addFile
addFile($key, FacebookFile $file)
Definition: FacebookRequest.php:385
Facebook\FacebookRequest\containsVideoUploads
containsVideoUploads()
Definition: FacebookRequest.php:423
Facebook\FacebookRequest\$eTag
$eTag
Definition: FacebookRequest.php:79
Facebook\FileUpload\FacebookFile
Definition: FacebookFile.php:34