Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

AbstractService.php

Zuletzt modifiziert: 09.10.2024, 12:59 - Dateigröße: 9.87 KiB


001  <?php
002   
003  namespace OAuth\OAuth1\Service;
004   
005  use OAuth\Common\Consumer\CredentialsInterface;
006  use OAuth\Common\Storage\TokenStorageInterface;
007  use OAuth\Common\Http\Exception\TokenResponseException;
008  use OAuth\Common\Http\Client\ClientInterface;
009  use OAuth\Common\Http\Uri\UriInterface;
010  use OAuth\OAuth1\Signature\SignatureInterface;
011  use OAuth\OAuth1\Token\TokenInterface;
012  use OAuth\OAuth1\Token\StdOAuth1Token;
013  use OAuth\Common\Service\AbstractService as BaseAbstractService;
014   
015  abstract class AbstractService extends BaseAbstractService implements ServiceInterface
016  {
017      /** @const OAUTH_VERSION */
018      const OAUTH_VERSION = 1;
019   
020      /** @var SignatureInterface */
021      protected $signature;
022   
023      /** @var UriInterface|null */
024      protected $baseApiUri;
025   
026      /**
027       * {@inheritDoc}
028       */
029      public function __construct(
030          CredentialsInterface $credentials,
031          ClientInterface $httpClient,
032          TokenStorageInterface $storage,
033          SignatureInterface $signature,
034          UriInterface $baseApiUri = null
035      ) {
036          parent::__construct($credentials, $httpClient, $storage);
037   
038          $this->signature = $signature;
039          $this->baseApiUri = $baseApiUri;
040   
041          $this->signature->setHashingAlgorithm($this->getSignatureMethod());
042      }
043   
044      /**
045       * {@inheritDoc}
046       */
047      public function requestRequestToken()
048      {
049          $authorizationHeader = array('Authorization' => $this->buildAuthorizationHeaderForTokenRequest());
050          $headers = array_merge($authorizationHeader, $this->getExtraOAuthHeaders());
051   
052          $responseBody = $this->httpClient->retrieveResponse($this->getRequestTokenEndpoint(), array(), $headers);
053   
054          $token = $this->parseRequestTokenResponse($responseBody);
055          $this->storage->storeAccessToken($this->service(), $token);
056   
057          return $token;
058      }
059   
060      /**
061       * {@inheritdoc}
062       */
063      public function getAuthorizationUri(array $additionalParameters = array())
064      {
065          // Build the url
066          $url = clone $this->getAuthorizationEndpoint();
067          foreach ($additionalParameters as $key => $val) {
068              $url->addToQuery($key, $val);
069          }
070   
071          return $url;
072      }
073   
074      /**
075       * {@inheritDoc}
076       */
077      public function requestAccessToken($token, $verifier, $tokenSecret = null)
078      {
079          if (is_null($tokenSecret)) {
080              $storedRequestToken = $this->storage->retrieveAccessToken($this->service());
081              $tokenSecret = $storedRequestToken->getRequestTokenSecret();
082          }
083          $this->signature->setTokenSecret($tokenSecret);
084   
085          $bodyParams = array(
086              'oauth_verifier' => $verifier,
087          );
088   
089          $authorizationHeader = array(
090              'Authorization' => $this->buildAuthorizationHeaderForAPIRequest(
091                  'POST',
092                  $this->getAccessTokenEndpoint(),
093                  $this->storage->retrieveAccessToken($this->service()),
094                  $bodyParams
095              )
096          );
097   
098          $headers = array_merge($authorizationHeader, $this->getExtraOAuthHeaders());
099   
100          $responseBody = $this->httpClient->retrieveResponse($this->getAccessTokenEndpoint(), $bodyParams, $headers);
101   
102          $token = $this->parseAccessTokenResponse($responseBody);
103          $this->storage->storeAccessToken($this->service(), $token);
104   
105          return $token;
106      }
107   
108      /**
109       * Refreshes an OAuth1 access token
110       * @param  TokenInterface $token
111       * @return TokenInterface $token
112       */
113      public function refreshAccessToken(TokenInterface $token)
114      {
115      }
116   
117      /**
118       * Sends an authenticated API request to the path provided.
119       * If the path provided is not an absolute URI, the base API Uri (must be passed into constructor) will be used.
120       *
121       * @param string|UriInterface $path
122       * @param string              $method       HTTP method
123       * @param array               $body         Request body if applicable (key/value pairs)
124       * @param array               $extraHeaders Extra headers if applicable.
125       *                                          These will override service-specific any defaults.
126       *
127       * @return string
128       */
129      public function request($path, $method = 'GET', $body = null, array $extraHeaders = array())
130      {
131          $uri = $this->determineRequestUriFromPath($path, $this->baseApiUri);
132   
133          /** @var $token StdOAuth1Token */
134          $token = $this->storage->retrieveAccessToken($this->service());
135          $extraHeaders = array_merge($this->getExtraApiHeaders(), $extraHeaders);
136          $authorizationHeader = array(
137              'Authorization' => $this->buildAuthorizationHeaderForAPIRequest($method, $uri, $token, $body)
138          );
139          $headers = array_merge($authorizationHeader, $extraHeaders);
140   
141          return $this->httpClient->retrieveResponse($uri, $body, $headers, $method);
142      }
143   
144      /**
145       * Return any additional headers always needed for this service implementation's OAuth calls.
146       *
147       * @return array
148       */
149      protected function getExtraOAuthHeaders()
150      {
151          return array();
152      }
153   
154      /**
155       * Return any additional headers always needed for this service implementation's API calls.
156       *
157       * @return array
158       */
159      protected function getExtraApiHeaders()
160      {
161          return array();
162      }
163   
164      /**
165       * Builds the authorization header for getting an access or request token.
166       *
167       * @param array $extraParameters
168       *
169       * @return string
170       */
171      protected function buildAuthorizationHeaderForTokenRequest(array $extraParameters = array())
172      {
173          $parameters = $this->getBasicAuthorizationHeaderInfo();
174          $parameters = array_merge($parameters, $extraParameters);
175          $parameters['oauth_signature'] = $this->signature->getSignature(
176              $this->getRequestTokenEndpoint(),
177              $parameters,
178              'POST'
179          );
180   
181          $authorizationHeader = 'OAuth ';
182          $delimiter = '';
183          foreach ($parameters as $key => $value) {
184              $authorizationHeader .= $delimiter . rawurlencode($key) . '="' . rawurlencode($value) . '"';
185   
186              $delimiter = ', ';
187          }
188   
189          return $authorizationHeader;
190      }
191   
192      /**
193       * Builds the authorization header for an authenticated API request
194       *
195       * @param string         $method
196       * @param UriInterface   $uri        The uri the request is headed
197       * @param TokenInterface $token
198       * @param array          $bodyParams Request body if applicable (key/value pairs)
199       *
200       * @return string
201       */
202      protected function buildAuthorizationHeaderForAPIRequest(
203          $method,
204          UriInterface $uri,
205          TokenInterface $token,
206          $bodyParams = null
207      ) {
208          $this->signature->setTokenSecret($token->getAccessTokenSecret());
209          $authParameters = $this->getBasicAuthorizationHeaderInfo();
210          if (isset($authParameters['oauth_callback'])) {
211              unset($authParameters['oauth_callback']);
212          }
213   
214          $authParameters = array_merge($authParameters, array('oauth_token' => $token->getAccessToken()));
215   
216          $signatureParams = (is_array($bodyParams)) ? array_merge($authParameters, $bodyParams) : $authParameters;
217          $authParameters['oauth_signature'] = $this->signature->getSignature($uri, $signatureParams, $method);
218   
219          if (is_array($bodyParams) && isset($bodyParams['oauth_session_handle'])) {
220              $authParameters['oauth_session_handle'] = $bodyParams['oauth_session_handle'];
221              unset($bodyParams['oauth_session_handle']);
222          }
223   
224          $authorizationHeader = 'OAuth ';
225          $delimiter = '';
226   
227          foreach ($authParameters as $key => $value) {
228              $authorizationHeader .= $delimiter . rawurlencode($key) . '="' . rawurlencode($value) . '"';
229              $delimiter = ', ';
230          }
231   
232          return $authorizationHeader;
233      }
234   
235      /**
236       * Builds the authorization header array.
237       *
238       * @return array
239       */
240      protected function getBasicAuthorizationHeaderInfo()
241      {
242          $dateTime = new \DateTime();
243          $headerParameters = array(
244              'oauth_callback'         => $this->credentials->getCallbackUrl(),
245              'oauth_consumer_key'     => $this->credentials->getConsumerId(),
246              'oauth_nonce'            => $this->generateNonce(),
247              'oauth_signature_method' => $this->getSignatureMethod(),
248              'oauth_timestamp'        => $dateTime->format('U'),
249              'oauth_version'          => $this->getVersion(),
250          );
251   
252          return $headerParameters;
253      }
254   
255      /**
256       * Pseudo random string generator used to build a unique string to sign each request
257       *
258       * @param int $length
259       *
260       * @return string
261       */
262      protected function generateNonce($length = 32)
263      {
264          $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
265   
266          $nonce = '';
267          $maxRand = strlen($characters)-1;
268          for ($i = 0; $i < $length; $i++) {
269              $nonce.= $characters[rand(0, $maxRand)];
270          }
271   
272          return $nonce;
273      }
274   
275      /**
276       * @return string
277       */
278      protected function getSignatureMethod()
279      {
280          return 'HMAC-SHA1';
281      }
282   
283      /**
284       * This returns the version used in the authorization header of the requests
285       *
286       * @return string
287       */
288      protected function getVersion()
289      {
290          return '1.0';
291      }
292   
293      /**
294       * Parses the request token response and returns a TokenInterface.
295       * This is only needed to verify the `oauth_callback_confirmed` parameter. The actual
296       * parsing logic is contained in the access token parser.
297       *
298       * @abstract
299       *
300       * @param string $responseBody
301       *
302       * @return TokenInterface
303       *
304       * @throws TokenResponseException
305       */
306      abstract protected function parseRequestTokenResponse($responseBody);
307   
308      /**
309       * Parses the access token response and returns a TokenInterface.
310       *
311       * @abstract
312       *
313       * @param string $responseBody
314       *
315       * @return TokenInterface
316       *
317       * @throws TokenResponseException
318       */
319      abstract protected function parseAccessTokenResponse($responseBody);
320  }
321