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

ServiceFactory.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 6.97 KiB


001  <?php
002   
003  /**
004   * OAuth service factory.
005   *
006   * PHP version 5.4
007   *
008   * @category   OAuth
009   * @author     David Desberg <david@daviddesberg.com>
010   * @author     Pieter Hordijk <info@pieterhordijk.com>
011   * @copyright  Copyright (c) 2013 The authors
012   * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
013   */
014   
015  namespace OAuth;
016   
017  use OAuth\Common\Service\ServiceInterface;
018  use OAuth\Common\Consumer\CredentialsInterface;
019  use OAuth\Common\Storage\TokenStorageInterface;
020  use OAuth\Common\Http\Client\ClientInterface;
021  use OAuth\Common\Http\Client\StreamClient;
022  use OAuth\Common\Http\Uri\UriInterface;
023  use OAuth\Common\Exception\Exception;
024  use OAuth\OAuth1\Signature\Signature;
025   
026  class ServiceFactory
027  {
028      /**
029       *@var ClientInterface
030       */
031      protected $httpClient;
032   
033      /**
034       * @var array
035       */
036      protected $serviceClassMap = array(
037          'OAuth1' => array(),
038          'OAuth2' => array()
039      );
040   
041      /**
042       * @var array
043       */
044      protected $serviceBuilders = array(
045          'OAuth2' => 'buildV2Service',
046          'OAuth1' => 'buildV1Service',
047      );
048   
049      /**
050       * @param ClientInterface $httpClient
051       *
052       * @return ServiceFactory
053       */
054      public function setHttpClient(ClientInterface $httpClient)
055      {
056          $this->httpClient = $httpClient;
057   
058          return $this;
059      }
060   
061      /**
062       * Register a custom service to classname mapping.
063       *
064       * @param string $serviceName Name of the service
065       * @param string $className   Class to instantiate
066       *
067       * @return ServiceFactory
068       *
069       * @throws Exception If the class is nonexistent or does not implement a valid ServiceInterface
070       */
071      public function registerService($serviceName, $className)
072      {
073          if (!class_exists($className)) {
074              throw new Exception(sprintf('Service class %s does not exist.', $className));
075          }
076   
077          $reflClass = new \ReflectionClass($className);
078   
079          foreach (array('OAuth2', 'OAuth1') as $version) {
080              if ($reflClass->implementsInterface('OAuth\\' . $version . '\\Service\\ServiceInterface')) {
081                  $this->serviceClassMap[$version][ucfirst($serviceName)] = $className;
082   
083                  return $this;
084              }
085          }
086   
087          throw new Exception(sprintf('Service class %s must implement ServiceInterface.', $className));
088      }
089   
090      /**
091       * Builds and returns oauth services
092       *
093       * It will first try to build an OAuth2 service and if none found it will try to build an OAuth1 service
094       *
095       * @param string                $serviceName Name of service to create
096       * @param CredentialsInterface  $credentials
097       * @param TokenStorageInterface $storage
098       * @param array|null            $scopes      If creating an oauth2 service, array of scopes
099       * @param UriInterface|null     $baseApiUri
100       * @param string                $apiVersion version of the api call
101       *
102       * @return ServiceInterface
103       */
104      public function createService(
105          $serviceName,
106          CredentialsInterface $credentials,
107          TokenStorageInterface $storage,
108          $scopes = array(),
109          UriInterface $baseApiUri = null,
110          $apiVersion = ""
111      ) {
112          if (!$this->httpClient) {
113              // for backwards compatibility.
114              $this->httpClient = new StreamClient();
115          }
116   
117          foreach ($this->serviceBuilders as $version => $buildMethod) {
118              $fullyQualifiedServiceName = $this->getFullyQualifiedServiceName($serviceName, $version);
119   
120              if (class_exists($fullyQualifiedServiceName)) {
121                  return $this->$buildMethod(
122                      $fullyQualifiedServiceName,
123                      $credentials,
124                      $storage,
125                      $scopes,
126                      $baseApiUri,
127                      $apiVersion
128                  );
129              }
130          }
131   
132          return null;
133      }
134   
135      /**
136       * Gets the fully qualified name of the service
137       *
138       * @param string $serviceName The name of the service of which to get the fully qualified name
139       * @param string $type        The type of the service to get (either OAuth1 or OAuth2)
140       *
141       * @return string The fully qualified name of the service
142       */
143      private function getFullyQualifiedServiceName($serviceName, $type)
144      {
145          $serviceName = ucfirst($serviceName);
146   
147          if (isset($this->serviceClassMap[$type][$serviceName])) {
148              return $this->serviceClassMap[$type][$serviceName];
149          }
150   
151          return '\\OAuth\\' . $type . '\\Service\\' . $serviceName;
152      }
153   
154      /**
155       * Builds v2 services
156       *
157       * @param string                $serviceName The fully qualified service name
158       * @param CredentialsInterface  $credentials
159       * @param TokenStorageInterface $storage
160       * @param array|null            $scopes      Array of scopes for the service
161       * @param UriInterface|null     $baseApiUri
162       *
163       * @return ServiceInterface
164       *
165       * @throws Exception
166       */
167      private function buildV2Service(
168          $serviceName,
169          CredentialsInterface $credentials,
170          TokenStorageInterface $storage,
171          array $scopes,
172          UriInterface $baseApiUri = null,
173          $apiVersion = ""
174      ) {
175          return new $serviceName(
176              $credentials,
177              $this->httpClient,
178              $storage,
179              $this->resolveScopes($serviceName, $scopes),
180              $baseApiUri,
181              $apiVersion
182          );
183      }
184   
185      /**
186       * Resolves scopes for v2 services
187       *
188       * @param string  $serviceName The fully qualified service name
189       * @param array   $scopes      List of scopes for the service
190       *
191       * @return array List of resolved scopes
192       */
193      private function resolveScopes($serviceName, array $scopes)
194      {
195          $reflClass = new \ReflectionClass($serviceName);
196          $constants = $reflClass->getConstants();
197   
198          $resolvedScopes = array();
199          foreach ($scopes as $scope) {
200              $key = strtoupper('SCOPE_' . $scope);
201   
202              if (array_key_exists($key, $constants)) {
203                  $resolvedScopes[] = $constants[$key];
204              } else {
205                  $resolvedScopes[] = $scope;
206              }
207          }
208   
209          return $resolvedScopes;
210      }
211   
212      /**
213       * Builds v1 services
214       *
215       * @param string                $serviceName The fully qualified service name
216       * @param CredentialsInterface  $credentials
217       * @param TokenStorageInterface $storage
218       * @param array                 $scopes
219       * @param UriInterface          $baseApiUri
220       *
221       * @return ServiceInterface
222       *
223       * @throws Exception
224       */
225      private function buildV1Service(
226          $serviceName,
227          CredentialsInterface $credentials,
228          TokenStorageInterface $storage,
229          $scopes,
230          UriInterface $baseApiUri = null
231      ) {
232          if (!empty($scopes)) {
233              throw new Exception(
234                  'Scopes passed to ServiceFactory::createService but an OAuth1 service was requested.'
235              );
236          }
237   
238          return new $serviceName($credentials, $this->httpClient, $storage, new Signature($credentials), $baseApiUri);
239      }
240  }
241