123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- <?php
- namespace Qcloud\Cos;
- use Psr\Http\Message\RequestInterface;
- class Signature {
- private $accessKey; // string: access key.
- private $secretKey; // string: secret key.
- public function __construct($accessKey, $secretKey, $token=null) {
- $this->accessKey = $accessKey;
- $this->secretKey = $secretKey;
- $this->token = $token;
- date_default_timezone_set("PRC");
- }
- public function __destruct() {
- }
- public function signRequest(RequestInterface $request) {
- $authorization = $this->createAuthorization($request);
- return $request->withHeader('Authorization', $authorization);
- }
- public function createAuthorization(RequestInterface $request, $expires = "+30 minutes") {
- if (is_null($expires)) {
- $expires = "+30 minutes";
- }
- $signTime = (string)(time() - 60) . ';' . (string)(strtotime($expires));
- $httpString = strtolower($request->getMethod()) . "\n" . urldecode($request->getUri()->getPath()) .
- "\n\nhost=" . $request->getHeader("Host")[0]. "\n";
- $sha1edHttpString = sha1($httpString);
- $stringToSign = "sha1\n$signTime\n$sha1edHttpString\n";
- $signKey = hash_hmac('sha1', $signTime, $this->secretKey);
- $signature = hash_hmac('sha1', $stringToSign, $signKey);
- $authorization = 'q-sign-algorithm=sha1&q-ak='. $this->accessKey .
- "&q-sign-time=$signTime&q-key-time=$signTime&q-header-list=host&q-url-param-list=&" .
- "q-signature=$signature";
- return $authorization;
- }
- public function createPresignedUrl(RequestInterface $request, $expires = "+30 minutes") {
- $authorization = $this->createAuthorization($request, $expires);
- $uri = $request->getUri();
- $query = "sign=".urlencode($authorization);
- if ($this->token != null) {
- $query = $query."&x-cos-security-token=".$this->token;
- }
- $uri = $uri->withQuery($query);
- return $uri;
- }
- }
|