| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | 
							- <?php
 
- namespace Aws\Rds;
 
- use Aws\Credentials\CredentialsInterface;
 
- use Aws\Credentials\Credentials;
 
- use Aws\Signature\SignatureV4;
 
- use GuzzleHttp\Psr7\Request;
 
- use GuzzleHttp\Psr7\Uri;
 
- use GuzzleHttp\Promise;
 
- use Aws;
 
- /**
 
-  * Generates RDS auth tokens for use with IAM authentication.
 
-  */
 
- class AuthTokenGenerator
 
- {
 
-     private $credentialProvider;
 
-     /**
 
-      * The constructor takes an instance of Credentials or a CredentialProvider
 
-      *
 
-      * @param callable|Credentials $creds
 
-      */
 
-     public function __construct($creds)
 
-     {
 
-         if ($creds instanceof CredentialsInterface) {
 
-             if (!function_exists('Aws\constantly')) {
 
-                 $promise = new Promise\FulfilledPromise($creds);
 
-                 $this->credentialProvider = Aws\constantly($promise);
 
-             }
 
-         } else {
 
-             $this->credentialProvider = $creds;
 
-         }
 
-     }
 
-     /**
 
-      * Create the token for database login
 
-      *
 
-      * @param string $endpoint The database hostname with port number specified
 
-      *                         (e.g., host:port)
 
-      * @param string $region The region where the database is located
 
-      * @param string $username The username to login as
 
-      * @param int $lifetime The lifetime of the token in minutes
 
-      *
 
-      * @return string Token generated
 
-      */
 
-     public function createToken($endpoint, $region, $username, $lifetime = 15)
 
-     {
 
-         if (!is_numeric($lifetime) || $lifetime > 15 || $lifetime <= 0) {
 
-             throw new \InvalidArgumentException(
 
-                 "Lifetime must be a positive number less than or equal to 15, was {$lifetime}"
 
-             );
 
-         }
 
-         $uri = new Uri($endpoint);
 
-         $uri = $uri->withPath('/');
 
-         $uri = $uri->withQuery('Action=connect&DBUser=' . $username);
 
-         $request = new Request('GET', $uri);
 
-         $signer = new SignatureV4('rds-db', $region);
 
-         $provider = $this->credentialProvider;
 
-         $url = (string) $signer->presign(
 
-             $request,
 
-             $provider()->wait(),
 
-             '+' . $lifetime . ' minutes'
 
-         )->getUri();
 
-         // Remove 2 extra slash from the presigned url result
 
-         return substr($url, 2);
 
-     }
 
- }
 
 
  |