PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.4
Booking for Appointments and Events Calendar – Amelia v2.4.4
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / google / auth / src / Middleware / AuthTokenMiddleware.php
ameliabooking / vendor / google / auth / src / Middleware Last commit date
AuthTokenMiddleware.php 6 months ago ProxyAuthTokenMiddleware.php 6 months ago ScopedAccessTokenMiddleware.php 6 months ago SimpleMiddleware.php 1 week ago
AuthTokenMiddleware.php
163 lines
1 <?php
2 /*
3 * Copyright 2015 Google Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 namespace AmeliaVendor\Google\Auth\Middleware;
19
20 use AmeliaVendor\Google\Auth\FetchAuthTokenCache;
21 use AmeliaVendor\Google\Auth\FetchAuthTokenInterface;
22 use AmeliaVendor\Google\Auth\GetQuotaProjectInterface;
23 use AmeliaVendor\Google\Auth\UpdateMetadataInterface;
24 use AmeliaVendor\GuzzleHttp\Psr7\Utils;
25 use AmeliaVendor\Psr\Http\Message\RequestInterface;
26
27 /**
28 * AuthTokenMiddleware is a Guzzle Middleware that adds an Authorization header
29 * provided by an object implementing FetchAuthTokenInterface.
30 *
31 * The FetchAuthTokenInterface#fetchAuthToken is used to obtain a hash; one of
32 * the values value in that hash is added as the authorization header.
33 *
34 * Requests will be accessed with the authorization header:
35 *
36 * 'authorization' 'Bearer <value of auth_token>'
37 */
38 class AuthTokenMiddleware
39 {
40 /**
41 * @var callable
42 */
43 private $httpHandler;
44
45 /**
46 * It must be an implementation of FetchAuthTokenInterface.
47 * It may also implement UpdateMetadataInterface allowing direct
48 * retrieval of auth related headers
49 * @var FetchAuthTokenInterface
50 */
51 private $fetcher;
52
53 /**
54 * @var ?callable
55 */
56 private $tokenCallback;
57
58 /**
59 * Creates a new AuthTokenMiddleware.
60 *
61 * @param FetchAuthTokenInterface $fetcher is used to fetch the auth token
62 * @param callable $httpHandler (optional) callback which delivers psr7 request
63 * @param callable $tokenCallback (optional) function to be called when a new token is fetched.
64 */
65 public function __construct(
66 FetchAuthTokenInterface $fetcher,
67 ?callable $httpHandler = null,
68 ?callable $tokenCallback = null
69 ) {
70 $this->fetcher = $fetcher;
71 $this->httpHandler = $httpHandler;
72 $this->tokenCallback = $tokenCallback;
73 }
74
75 /**
76 * Updates the request with an Authorization header when auth is 'google_auth'.
77 *
78 * use AmeliaVendor\Google\Auth\Middleware\AuthTokenMiddleware;
79 * use AmeliaVendor\Google\Auth\OAuth2;
80 * use AmeliaVendor\GuzzleHttp\Client;
81 * use AmeliaVendor\GuzzleHttp\HandlerStack;
82 *
83 * $config = [..<oauth config param>.];
84 * $oauth2 = new OAuth2($config)
85 * $middleware = new AuthTokenMiddleware($oauth2);
86 * $stack = HandlerStack::create();
87 * $stack->push($middleware);
88 *
89 * $client = new Client([
90 * 'handler' => $stack,
91 * 'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',
92 * 'auth' => 'google_auth' // authorize all requests
93 * ]);
94 *
95 * $res = $client->get('myproject/taskqueues/myqueue');
96 *
97 * @param callable $handler
98 * @return \Closure
99 */
100 public function __invoke(callable $handler)
101 {
102 return function (RequestInterface $request, array $options) use ($handler) {
103 // Requests using "auth"="google_auth" will be authorized.
104 if (!isset($options['auth']) || $options['auth'] !== 'google_auth') {
105 return $handler($request, $options);
106 }
107
108 $request = $this->addAuthHeaders($request);
109
110 if ($quotaProject = $this->getQuotaProject()) {
111 $request = $request->withHeader(
112 GetQuotaProjectInterface::X_GOOG_USER_PROJECT_HEADER,
113 $quotaProject
114 );
115 }
116
117 return $handler($request, $options);
118 };
119 }
120
121 /**
122 * Adds auth related headers to the request.
123 *
124 * @param RequestInterface $request
125 * @return RequestInterface
126 */
127 private function addAuthHeaders(RequestInterface $request)
128 {
129 if (!$this->fetcher instanceof UpdateMetadataInterface ||
130 ($this->fetcher instanceof FetchAuthTokenCache &&
131 !$this->fetcher->getFetcher() instanceof UpdateMetadataInterface)
132 ) {
133 $token = $this->fetcher->fetchAuthToken();
134 $request = $request->withHeader(
135 'authorization', 'Bearer ' . ($token['access_token'] ?? $token['id_token'] ?? '')
136 );
137 } else {
138 $headers = $this->fetcher->updateMetadata($request->getHeaders(), null, $this->httpHandler);
139 $request = Utils::modifyRequest($request, ['set_headers' => $headers]);
140 }
141
142 if ($this->tokenCallback && ($token = $this->fetcher->getLastReceivedToken())) {
143 if (array_key_exists('access_token', $token)) {
144 call_user_func($this->tokenCallback, $this->fetcher->getCacheKey(), $token['access_token']);
145 }
146 }
147
148 return $request;
149 }
150
151 /**
152 * @return string|null
153 */
154 private function getQuotaProject()
155 {
156 if ($this->fetcher instanceof GetQuotaProjectInterface) {
157 return $this->fetcher->getQuotaProject();
158 }
159
160 return null;
161 }
162 }
163