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

Signature.php

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


 001  <?php
 002   
 003  namespace OAuth\OAuth1\Signature;
 004   
 005  use OAuth\Common\Consumer\CredentialsInterface;
 006  use OAuth\Common\Http\Uri\UriInterface;
 007  use OAuth\OAuth1\Signature\Exception\UnsupportedHashAlgorithmException;
 008   
 009  class Signature implements SignatureInterface
 010  {
 011      /**
 012       * @var Credentials
 013       */
 014      protected $credentials;
 015   
 016      /**
 017       * @var string
 018       */
 019      protected $algorithm;
 020   
 021      /**
 022       * @var string
 023       */
 024      protected $tokenSecret = null;
 025   
 026      /**
 027       * @param CredentialsInterface $credentials
 028       */
 029      public function __construct(CredentialsInterface $credentials)
 030      {
 031          $this->credentials = $credentials;
 032      }
 033   
 034      /**
 035       * @param string $algorithm
 036       */
 037      public function setHashingAlgorithm($algorithm)
 038      {
 039          $this->algorithm = $algorithm;
 040      }
 041   
 042      /**
 043       * @param string $token
 044       */
 045      public function setTokenSecret($token)
 046      {
 047          $this->tokenSecret = $token;
 048      }
 049   
 050      /**
 051       * @param UriInterface $uri
 052       * @param array        $params
 053       * @param string       $method
 054       *
 055       * @return string
 056       */
 057      public function getSignature(UriInterface $uri, array $params, $method = 'POST')
 058      {
 059          parse_str($uri->getQuery(), $queryStringData);
 060   
 061          foreach (array_merge($queryStringData, $params) as $key => $value) {
 062              $signatureData[rawurlencode($key)] = rawurlencode($value);
 063          }
 064   
 065          ksort($signatureData);
 066   
 067          // determine base uri
 068          $baseUri = $uri->getScheme() . '://' . $uri->getRawAuthority();
 069   
 070          if ('/' === $uri->getPath()) {
 071              $baseUri .= $uri->hasExplicitTrailingHostSlash() ? '/' : '';
 072          } else {
 073              $baseUri .= $uri->getPath();
 074          }
 075   
 076          $baseString = strtoupper($method) . '&';
 077          $baseString .= rawurlencode($baseUri) . '&';
 078          $baseString .= rawurlencode($this->buildSignatureDataString($signatureData));
 079   
 080          return base64_encode($this->hash($baseString));
 081      }
 082   
 083      /**
 084       * @param array $signatureData
 085       *
 086       * @return string
 087       */
 088      protected function buildSignatureDataString(array $signatureData)
 089      {
 090          $signatureString = '';
 091          $delimiter = '';
 092          foreach ($signatureData as $key => $value) {
 093              $signatureString .= $delimiter . $key . '=' . $value;
 094   
 095              $delimiter = '&';
 096          }
 097   
 098          return $signatureString;
 099      }
 100   
 101      /**
 102       * @return string
 103       */
 104      protected function getSigningKey()
 105      {
 106          $signingKey = rawurlencode($this->credentials->getConsumerSecret()) . '&';
 107          if ($this->tokenSecret !== null) {
 108              $signingKey .= rawurlencode($this->tokenSecret);
 109          }
 110   
 111          return $signingKey;
 112      }
 113   
 114      /**
 115       * @param string $data
 116       *
 117       * @return string
 118       *
 119       * @throws UnsupportedHashAlgorithmException
 120       */
 121      protected function hash($data)
 122      {
 123          switch (strtoupper($this->algorithm)) {
 124              case 'HMAC-SHA1':
 125                  return hash_hmac('sha1', $data, $this->getSigningKey(), true);
 126              default:
 127                  throw new UnsupportedHashAlgorithmException(
 128                      'Unsupported hashing algorithm (' . $this->algorithm . ') used.'
 129                  );
 130          }
 131      }
 132  }
 133