82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Qcloud\Cos;
 | 
						|
 | 
						|
use GuzzleHttp\Command\CommandInterface;
 | 
						|
use GuzzleHttp\Command\Guzzle\DescriptionInterface;
 | 
						|
use GuzzleHttp\Command\Guzzle\Serializer as DefaultSerializer;
 | 
						|
use Psr\Http\Message\RequestInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * Override Request serializer to modify authentication mechanism
 | 
						|
 */
 | 
						|
class Serializer extends DefaultSerializer
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * {@inheritdoc}
 | 
						|
     */
 | 
						|
    public function __construct(
 | 
						|
        DescriptionInterface $description,
 | 
						|
        array $requestLocations = []
 | 
						|
    ) {
 | 
						|
        // Override Guzzle's body location as it isn't raw binary data
 | 
						|
        $requestLocations['body'] = new Request\BodyLocation;
 | 
						|
        parent::__construct($description, $requestLocations);
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * Authorization header is Loco's preferred authorization method.
 | 
						|
     * Add Authorization header to request if API key is set, unless query is explicitly configured as auth method.
 | 
						|
     * Unset key from command to avoid sending it as a query param.
 | 
						|
     *
 | 
						|
     * @override
 | 
						|
     *
 | 
						|
     * @param CommandInterface $command
 | 
						|
     * @param RequestInterface $request
 | 
						|
     *
 | 
						|
     * @return RequestInterface
 | 
						|
     *
 | 
						|
     * @throws \InvalidArgumentException
 | 
						|
     */
 | 
						|
    protected function prepareRequest(
 | 
						|
        CommandInterface $command,
 | 
						|
        RequestInterface $request
 | 
						|
    ) {
 | 
						|
		/*
 | 
						|
        if ($command->offsetExists('key') === true) {
 | 
						|
            $mode = empty($command->offsetGet('auth')) === false
 | 
						|
                    ? $command->offsetGet('auth')
 | 
						|
                    : 'loco';
 | 
						|
            if ($mode !== 'query') {
 | 
						|
                // else use Authorization header of various types
 | 
						|
                if ($mode === 'loco') {
 | 
						|
                    $value = 'Loco '.$command->offsetGet('key');
 | 
						|
                    $request = $request->withHeader('Authorization', $value);
 | 
						|
                } elseif ($mode === 'basic') {
 | 
						|
                    $value = 'Basic '.base64_encode($command->offsetGet('key').':');
 | 
						|
                    $request = $request->withHeader('Authorization', $value);
 | 
						|
                } else {
 | 
						|
                    throw new \InvalidArgumentException("Invalid auth type: {$mode}");
 | 
						|
                }
 | 
						|
                // avoid request sending key parameter in query string
 | 
						|
                $command->offsetUnset('key');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        // Remap legacy parameters to common `data` binding on request body
 | 
						|
        static $remap = [
 | 
						|
            'import' => ['src'=>'data'],
 | 
						|
            'translate' => ['translation'=>'data'],
 | 
						|
        ];
 | 
						|
        $name = $command->getName();
 | 
						|
        if (isset($remap[$name])) {
 | 
						|
            foreach ($remap[$name] as $old => $new) {
 | 
						|
                if ($command->offsetExists($old)) {
 | 
						|
                    $command->offsetSet($new, $command->offsetGet($old));
 | 
						|
                    $command->offsetUnset($old);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
		*/
 | 
						|
        return parent::prepareRequest($command, $request);
 | 
						|
    }
 | 
						|
}
 |