Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/google-site-kit/third-party/google/auth/src/Iam.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
3
+
/*
4
+
* Copyright 2019 Google LLC
5
+
*
6
+
* Licensed under the Apache License, Version 2.0 (the "License");
7
+
* you may not use this file except in compliance with the License.
8
+
* You may obtain a copy of the License at
9
+
*
10
+
* http://www.apache.org/licenses/LICENSE-2.0
11
+
*
12
+
* Unless required by applicable law or agreed to in writing, software
13
+
* distributed under the License is distributed on an "AS IS" BASIS,
14
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+
* See the License for the specific language governing permissions and
16
+
* limitations under the License.
17
+
*/
18
+
namespace Google\Site_Kit_Dependencies\Google\Auth;
19
+
20
+
use Google\Site_Kit_Dependencies\Google\Auth\HttpHandler\HttpClientCache;
21
+
use Google\Site_Kit_Dependencies\Google\Auth\HttpHandler\HttpHandlerFactory;
22
+
use Google\Site_Kit_Dependencies\GuzzleHttp\Psr7;
23
+
use Google\Site_Kit_Dependencies\GuzzleHttp\Psr7\Utils;
24
+
/**
25
+
* Tools for using the IAM API.
26
+
*
27
+
* @see https://cloud.google.com/iam/docs IAM Documentation
28
+
*/
29
+
class Iam
30
+
{
31
+
/**
32
+
* @deprecated
33
+
*/
34
+
const IAM_API_ROOT = 'https://iamcredentials.googleapis.com/v1';
35
+
const SIGN_BLOB_PATH = '%s:signBlob?alt=json';
36
+
const SERVICE_ACCOUNT_NAME = 'projects/-/serviceAccounts/%s';
37
+
private const IAM_API_ROOT_TEMPLATE = 'https://iamcredentials.UNIVERSE_DOMAIN/v1';
38
+
/**
39
+
* @var callable
40
+
*/
41
+
private $httpHandler;
42
+
private string $universeDomain;
43
+
/**
44
+
* @param callable $httpHandler [optional] The HTTP Handler to send requests.
45
+
*/
46
+
public function __construct(?callable $httpHandler = null, string $universeDomain = \Google\Site_Kit_Dependencies\Google\Auth\GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN)
47
+
{
48
+
$this->httpHandler = $httpHandler ?: \Google\Site_Kit_Dependencies\Google\Auth\HttpHandler\HttpHandlerFactory::build(\Google\Site_Kit_Dependencies\Google\Auth\HttpHandler\HttpClientCache::getHttpClient());
49
+
$this->universeDomain = $universeDomain;
50
+
}
51
+
/**
52
+
* Sign a string using the IAM signBlob API.
53
+
*
54
+
* Note that signing using IAM requires your service account to have the
55
+
* `iam.serviceAccounts.signBlob` permission, part of the "Service Account
56
+
* Token Creator" IAM role.
57
+
*
58
+
* @param string $email The service account email.
59
+
* @param string $accessToken An access token from the service account.
60
+
* @param string $stringToSign The string to be signed.
61
+
* @param array<string> $delegates [optional] A list of service account emails to
62
+
* add to the delegate chain. If omitted, the value of `$email` will
63
+
* be used.
64
+
* @return string The signed string, base64-encoded.
65
+
*/
66
+
public function signBlob($email, $accessToken, $stringToSign, array $delegates = [])
67
+
{
68
+
$httpHandler = $this->httpHandler;
69
+
$name = \sprintf(self::SERVICE_ACCOUNT_NAME, $email);
70
+
$apiRoot = \str_replace('UNIVERSE_DOMAIN', $this->universeDomain, self::IAM_API_ROOT_TEMPLATE);
71
+
$uri = $apiRoot . '/' . \sprintf(self::SIGN_BLOB_PATH, $name);
72
+
if ($delegates) {
73
+
foreach ($delegates as &$delegate) {
74
+
$delegate = \sprintf(self::SERVICE_ACCOUNT_NAME, $delegate);
75
+
}
76
+
} else {
77
+
$delegates = [$name];
78
+
}
79
+
$body = ['delegates' => $delegates, 'payload' => \base64_encode($stringToSign)];
80
+
$headers = ['Authorization' => 'Bearer ' . $accessToken];
81
+
$request = new \Google\Site_Kit_Dependencies\GuzzleHttp\Psr7\Request('POST', $uri, $headers, \Google\Site_Kit_Dependencies\GuzzleHttp\Psr7\Utils::streamFor(\json_encode($body)));
82
+
$res = $httpHandler($request);
83
+
$body = \json_decode((string) $res->getBody(), \true);
84
+
return $body['signedBlob'];
85
+
}
86
+
}
87
+