summaryrefslogtreecommitdiff
path: root/Postman/Postman-Mail/google-api-client/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php
diff options
context:
space:
mode:
Diffstat (limited to 'Postman/Postman-Mail/google-api-client/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php')
-rw-r--r--Postman/Postman-Mail/google-api-client/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php177
1 files changed, 177 insertions, 0 deletions
diff --git a/Postman/Postman-Mail/google-api-client/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php b/Postman/Postman-Mail/google-api-client/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php
new file mode 100644
index 0000000..db391ec
--- /dev/null
+++ b/Postman/Postman-Mail/google-api-client/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php
@@ -0,0 +1,177 @@
+<?php
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Google\Auth\Credentials;
+
+use Google\Auth\CredentialsLoader;
+use Google\Auth\OAuth2;
+
+/**
+ * ServiceAccountCredentials supports authorization using a Google service
+ * account.
+ *
+ * (cf https://developers.google.com/accounts/docs/OAuth2ServiceAccount)
+ *
+ * It's initialized using the json key file that's downloadable from developer
+ * console, which should contain a private_key and client_email fields that it
+ * uses.
+ *
+ * Use it with AuthTokenMiddleware to authorize http requests:
+ *
+ * use Google\Auth\Credentials\ServiceAccountCredentials;
+ * use Google\Auth\Middleware\AuthTokenMiddleware;
+ * use GuzzleHttp\Client;
+ * use GuzzleHttp\HandlerStack;
+ *
+ * $sa = new ServiceAccountCredentials(
+ * 'https://www.googleapis.com/auth/taskqueue',
+ * '/path/to/your/json/key_file.json'
+ * );
+ * $middleware = new AuthTokenMiddleware($sa);
+ * $stack = HandlerStack::create();
+ * $stack->push($middleware);
+ *
+ * $client = new Client([
+ * 'handler' => $stack,
+ * 'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',
+ * 'auth' => 'google_auth' // authorize all requests
+ * ]);
+ *
+ * $res = $client->get('myproject/taskqueues/myqueue');
+ */
+class ServiceAccountCredentials extends CredentialsLoader
+{
+ /**
+ * The OAuth2 instance used to conduct authorization.
+ *
+ * @var OAuth2
+ */
+ protected $auth;
+
+ /**
+ * Create a new ServiceAccountCredentials.
+ *
+ * @param string|array $scope the scope of the access request, expressed
+ * either as an Array or as a space-delimited String.
+ * @param string|array $jsonKey JSON credential file path or JSON credentials
+ * as an associative array
+ * @param string $sub an email address account to impersonate, in situations when
+ * the service account has been delegated domain wide access.
+ */
+ public function __construct(
+ $scope,
+ $jsonKey,
+ $sub = null
+ ) {
+ if (is_string($jsonKey)) {
+ if (!file_exists($jsonKey)) {
+ throw new \InvalidArgumentException('file does not exist');
+ }
+ $jsonKeyStream = file_get_contents($jsonKey);
+ if (!$jsonKey = json_decode($jsonKeyStream, true)) {
+ throw new \LogicException('invalid json for auth config');
+ }
+ }
+ if (!array_key_exists('client_email', $jsonKey)) {
+ throw new \InvalidArgumentException(
+ 'json key is missing the client_email field');
+ }
+ if (!array_key_exists('private_key', $jsonKey)) {
+ throw new \InvalidArgumentException(
+ 'json key is missing the private_key field');
+ }
+ $this->auth = new OAuth2([
+ 'audience' => self::TOKEN_CREDENTIAL_URI,
+ 'issuer' => $jsonKey['client_email'],
+ 'scope' => $scope,
+ 'signingAlgorithm' => 'RS256',
+ 'signingKey' => $jsonKey['private_key'],
+ 'sub' => $sub,
+ 'tokenCredentialUri' => self::TOKEN_CREDENTIAL_URI,
+ ]);
+ }
+
+ /**
+ * @param callable $httpHandler
+ *
+ * @return array
+ */
+ public function fetchAuthToken(callable $httpHandler = null)
+ {
+ return $this->auth->fetchAuthToken($httpHandler);
+ }
+
+ /**
+ * @return string
+ */
+ public function getCacheKey()
+ {
+ $key = $this->auth->getIssuer() . ':' . $this->auth->getCacheKey();
+ if ($sub = $this->auth->getSub()) {
+ $key .= ':' . $sub;
+ }
+
+ return $key;
+ }
+
+ /**
+ * @return array
+ */
+ public function getLastReceivedToken()
+ {
+ return $this->auth->getLastReceivedToken();
+ }
+
+ /**
+ * Updates metadata with the authorization token.
+ *
+ * @param array $metadata metadata hashmap
+ * @param string $authUri optional auth uri
+ * @param callable $httpHandler callback which delivers psr7 request
+ *
+ * @return array updated metadata hashmap
+ */
+ public function updateMetadata(
+ $metadata,
+ $authUri = null,
+ callable $httpHandler = null
+ ) {
+ // scope exists. use oauth implementation
+ $scope = $this->auth->getScope();
+ if (!is_null($scope)) {
+ return parent::updateMetadata($metadata, $authUri, $httpHandler);
+ }
+
+ // no scope found. create jwt with the auth uri
+ $credJson = array(
+ 'private_key' => $this->auth->getSigningKey(),
+ 'client_email' => $this->auth->getIssuer(),
+ );
+ $jwtCreds = new ServiceAccountJwtAccessCredentials($credJson);
+
+ return $jwtCreds->updateMetadata($metadata, $authUri, $httpHandler);
+ }
+
+ /**
+ * @param string $sub an email address account to impersonate, in situations when
+ * the service account has been delegated domain wide access.
+ */
+ public function setSub($sub)
+ {
+ $this->auth->setSub($sub);
+ }
+}