PluginProbe
Media Cloud Sync / 1.4.1
Media Cloud Sync v1.4.1
1.4.1 1.4.0 1.3.12 1.3.11 1.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.2.0 1.2.10 1.2.11 1.2.12 1.2.13 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 All 35 releases
← All changes | includes/sdk/s3/Aws/Middleware.php +55 -19 1.2.01.4.1 View file →
@@ -4,9 +4,13 @@
4 4
5 5 use Dudlewebs\WPMCS\s3\Aws\Api\Service;
6 6 use Dudlewebs\WPMCS\s3\Aws\Api\Validator;
7 7 use Dudlewebs\WPMCS\s3\Aws\Credentials\CredentialsInterface;
8 +use Dudlewebs\WPMCS\s3\Aws\EndpointV2\EndpointProviderV2;
8 9 use Dudlewebs\WPMCS\s3\Aws\Exception\AwsException;
10 +use Dudlewebs\WPMCS\s3\Aws\Signature\S3ExpressSignature;
11 +use Dudlewebs\WPMCS\s3\Aws\Token\TokenAuthorization;
12 +use Dudlewebs\WPMCS\s3\Aws\Token\TokenInterface;
9 13 use Dudlewebs\WPMCS\s3\GuzzleHttp\Promise;
10 14 use Dudlewebs\WPMCS\s3\GuzzleHttp\Psr7;
11 15 use Dudlewebs\WPMCS\s3\GuzzleHttp\Psr7\LazyOpenStream;
12 16 use Dudlewebs\WPMCS\s3\Psr\Http\Message\RequestInterface;
@@ -24,14 +28,28 @@
24 28 */
25 29 public static function sourceFile(Service $api, $bodyParameter = 'Body', $sourceParameter = 'SourceFile')
26 30 {
27 31 return function (callable $handler) use($api, $bodyParameter, $sourceParameter) {
28 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $api, $bodyParameter, $sourceParameter) {
32 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $api, $bodyParameter, $sourceParameter) {
29 33 $operation = $api->getOperation($command->getName());
30 34 $source = $command[$sourceParameter];
31 35 if ($source !== null && $operation->getInput()->hasMember($bodyParameter)) {
32 - $command[$bodyParameter] = new LazyOpenStream($source, 'r');
36 + $lazyOpenStream = new LazyOpenStream($source, 'r');
37 + $command[$bodyParameter] = $lazyOpenStream;
33 38 unset($command[$sourceParameter]);
39 + $next = $handler($command, $request);
40 + // To avoid failures in some tests cases
41 + if ($next !== null && \method_exists($next, 'then')) {
42 + return $next->then(function ($result) use($lazyOpenStream) {
43 + // To make sure the resource is closed.
44 + $lazyOpenStream->close();
45 + return $result;
46 + })->otherwise(function (\Throwable $e) use($lazyOpenStream) {
47 + $lazyOpenStream->close();
48 + throw $e;
49 + });
50 + }
51 + return $next;
34 52 }
35 53 return $handler($command, $request);
36 54 };
37 55 };
@@ -42,13 +60,16 @@
42 60 * @param Service $api API being accessed.
43 61 *
44 62 * @return callable
45 63 */
46 - public static function validation(Service $api, Validator $validator = null)
64 + public static function validation(Service $api, ?Validator $validator = null)
47 65 {
48 66 $validator = $validator ?: new Validator();
49 67 return function (callable $handler) use($api, $validator) {
50 - return function (CommandInterface $command, RequestInterface $request = null) use($api, $validator, $handler) {
68 + return function (CommandInterface $command, ?RequestInterface $request = null) use($api, $validator, $handler) {
69 + if ($api->isModifiedModel()) {
70 + $api = new Service($api->getDefinition(), $api->getProvider());
71 + }
51 72 $operation = $api->getOperation($command->getName());
52 73 $validator->validate($command->getName(), $operation->getInput(), $command->toArray());
53 74 return $handler($command, $request);
54 75 };
@@ -58,15 +79,17 @@
58 79 * Builds an HTTP request for a command.
59 80 *
60 81 * @param callable $serializer Function used to serialize a request for a
61 82 * command.
83 + * @param EndpointProviderV2 | null $endpointProvider
84 + * @param array $providerArgs
62 85 * @return callable
63 86 */
64 - public static function requestBuilder(callable $serializer)
87 + public static function requestBuilder($serializer)
65 88 {
66 89 return function (callable $handler) use($serializer) {
67 - return function (CommandInterface $command) use($serializer, $handler) {
68 - return $handler($command, $serializer($command));
90 + return function (CommandInterface $command, $endpoint = null) use($serializer, $handler) {
91 + return $handler($command, $serializer($command, $endpoint));
69 92 };
70 93 };
71 94 }
72 95 /**
@@ -80,14 +103,27 @@
80 103 * SignatureInterface.
81 104 *
82 105 * @return callable
83 106 */
84 - public static function signer(callable $credProvider, callable $signatureFunction)
107 + public static function signer(callable $credProvider, callable $signatureFunction, $tokenProvider = null, $config = [])
85 108 {
86 - return function (callable $handler) use($signatureFunction, $credProvider) {
87 - return function (CommandInterface $command, RequestInterface $request) use($handler, $signatureFunction, $credProvider) {
109 + return function (callable $handler) use($signatureFunction, $credProvider, $tokenProvider, $config) {
110 + return function (CommandInterface $command, RequestInterface $request) use($handler, $signatureFunction, $credProvider, $tokenProvider, $config) {
88 111 $signer = $signatureFunction($command);
89 - return $credProvider()->then(function (CredentialsInterface $creds) use($handler, $command, $signer, $request) {
112 + if ($signer instanceof TokenAuthorization) {
113 + return $tokenProvider()->then(function (TokenInterface $token) use($handler, $command, $signer, $request) {
114 + $command->getMetricsBuilder()->identifyMetricByValueAndAppend('token', $token);
115 + return $handler($command, $signer->authorizeRequest($request, $token));
116 + });
117 + }
118 + if ($signer instanceof S3ExpressSignature) {
119 + $credentialPromise = $config['s3_express_identity_provider']($command);
120 + } else {
121 + $credentialPromise = $credProvider();
122 + }
123 + return $credentialPromise->then(function (CredentialsInterface $creds) use($handler, $command, $signer, $request) {
124 + // Capture credentials metric
125 + $command->getMetricsBuilder()->identifyMetricByValueAndAppend('credentials', $creds);
90 126 return $handler($command, $signer->signRequest($request, $creds));
91 127 });
92 128 };
93 129 };
@@ -106,9 +142,9 @@
106 142 */
107 143 public static function tap(callable $fn)
108 144 {
109 145 return function (callable $handler) use($fn) {
110 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $fn) {
146 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $fn) {
111 147 $fn($command, $request);
112 148 return $handler($command, $request);
113 149 };
114 150 };
@@ -129,9 +165,9 @@
129 165 * associated delay.
130 166 *
131 167 * @return callable
132 168 */
133 - public static function retry(callable $decider = null, callable $delay = null, $stats = \false)
169 + public static function retry(?callable $decider = null, ?callable $delay = null, $stats = \false)
134 170 {
135 171 $decider = $decider ?: RetryMiddleware::createDefaultDecider();
136 172 $delay = $delay ?: [RetryMiddleware::class, 'exponentialDelay'];
137 173 return function (callable $handler) use($decider, $delay, $stats) {
@@ -167,9 +203,9 @@
167 203 */
168 204 public static function contentType(array $operations)
169 205 {
170 206 return function (callable $handler) use($operations) {
171 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $operations) {
207 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $operations) {
172 208 if (!$request->hasHeader('Content-Type') && \in_array($command->getName(), $operations, \true) && ($uri = $request->getBody()->getMetadata('uri'))) {
173 209 $request = $request->withHeader('Content-Type', Psr7\MimeType::fromFilename($uri) ?: 'application/octet-stream');
174 210 }
175 211 return $handler($command, $request);
@@ -217,9 +253,9 @@
217 253 */
218 254 public static function history(History $history)
219 255 {
220 256 return function (callable $handler) use($history) {
221 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $history) {
257 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $history) {
222 258 $ticket = $history->start($command, $request);
223 259 return $handler($command, $request)->then(function ($result) use($history, $ticket) {
224 260 $history->finish($ticket, $result);
225 261 return $result;
@@ -241,9 +277,9 @@
241 277 */
242 278 public static function mapRequest(callable $f)
243 279 {
244 280 return function (callable $handler) use($f) {
245 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $f) {
281 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $f) {
246 282 return $handler($command, $f($request));
247 283 };
248 284 };
249 285 }
@@ -258,9 +294,9 @@
258 294 */
259 295 public static function mapCommand(callable $f)
260 296 {
261 297 return function (callable $handler) use($f) {
262 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $f) {
298 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $f) {
263 299 return $handler($f($command), $request);
264 300 };
265 301 };
266 302 }
@@ -274,9 +310,9 @@
274 310 */
275 311 public static function mapResult(callable $f)
276 312 {
277 313 return function (callable $handler) use($f) {
278 - return function (CommandInterface $command, RequestInterface $request = null) use($handler, $f) {
314 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler, $f) {
279 315 return $handler($command, $request)->then($f);
280 316 };
281 317 };
282 318 }
@@ -282,9 +318,9 @@
282 318 }
283 319 public static function timer()
284 320 {
285 321 return function (callable $handler) {
286 - return function (CommandInterface $command, RequestInterface $request = null) use($handler) {
322 + return function (CommandInterface $command, ?RequestInterface $request = null) use($handler) {
287 323 $start = \microtime(\true);
288 324 return $handler($command, $request)->then(function (ResultInterface $res) use($start) {
289 325 if (!isset($res['@metadata'])) {
290 326 $res['@metadata'] = [];