| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | 
							- <?php
 
- namespace Qiniu;
 
- use Qiniu\Zone;
 
- final class Auth
 
- {
 
-     private $accessKey;
 
-     private $secretKey;
 
-     public function __construct($accessKey, $secretKey)
 
-     {
 
-         $this->accessKey = $accessKey;
 
-         $this->secretKey = $secretKey;
 
-     }
 
-     public function getAccessKey()
 
-     {
 
-         return $this->accessKey;
 
-     }
 
-     public function sign($data)
 
-     {
 
-         $hmac = hash_hmac('sha1', $data, $this->secretKey, true);
 
-         return $this->accessKey . ':' . \Qiniu\base64_urlSafeEncode($hmac);
 
-     }
 
-     public function signWithData($data)
 
-     {
 
-         $encodedData = \Qiniu\base64_urlSafeEncode($data);
 
-         return $this->sign($encodedData) . ':' . $encodedData;
 
-     }
 
-     public function signRequest($urlString, $body, $contentType = null)
 
-     {
 
-         $url = parse_url($urlString);
 
-         $data = '';
 
-         if (array_key_exists('path', $url)) {
 
-             $data = $url['path'];
 
-         }
 
-         if (array_key_exists('query', $url)) {
 
-             $data .= '?' . $url['query'];
 
-         }
 
-         $data .= "\n";
 
-         if ($body !== null && $contentType === 'application/x-www-form-urlencoded') {
 
-             $data .= $body;
 
-         }
 
-         return $this->sign($data);
 
-     }
 
-     public function verifyCallback($contentType, $originAuthorization, $url, $body)
 
-     {
 
-         $authorization = 'QBox ' . $this->signRequest($url, $body, $contentType);
 
-         return $originAuthorization === $authorization;
 
-     }
 
-     public function privateDownloadUrl($baseUrl, $expires = 3600)
 
-     {
 
-         $deadline = time() + $expires;
 
-         $pos = strpos($baseUrl, '?');
 
-         if ($pos !== false) {
 
-             $baseUrl .= '&e=';
 
-         } else {
 
-             $baseUrl .= '?e=';
 
-         }
 
-         $baseUrl .= $deadline;
 
-         $token = $this->sign($baseUrl);
 
-         return "$baseUrl&token=$token";
 
-     }
 
-     public function uploadToken($bucket, $key = null, $expires = 3600, $policy = null, $strictPolicy = true)
 
-     {
 
-         $deadline = time() + $expires;
 
-         $scope = $bucket;
 
-         if ($key !== null) {
 
-             $scope .= ':' . $key;
 
-         }
 
-         $args = self::copyPolicy($args, $policy, $strictPolicy);
 
-         $args['scope'] = $scope;
 
-         $args['deadline'] = $deadline;
 
-         $b = json_encode($args);
 
-         return $this->signWithData($b);
 
-     }
 
-     /**
 
-      *上传策略,参数规格详见
 
-      *http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html
 
-      */
 
-     private static $policyFields = array(
 
-         'callbackUrl',
 
-         'callbackBody',
 
-         'callbackHost',
 
-         'callbackBodyType',
 
-         'callbackFetchKey',
 
-         'returnUrl',
 
-         'returnBody',
 
-         'endUser',
 
-         'saveKey',
 
-         'insertOnly',
 
-         'detectMime',
 
-         'mimeLimit',
 
-         'fsizeMin',
 
-         'fsizeLimit',
 
-         'persistentOps',
 
-         'persistentNotifyUrl',
 
-         'persistentPipeline',
 
-         'deleteAfterDays',
 
-         'fileType',
 
-         'isPrefixalScope',
 
-     );
 
-     private static function copyPolicy(&$policy, $originPolicy, $strictPolicy)
 
-     {
 
-         if ($originPolicy === null) {
 
-             return array();
 
-         }
 
-         foreach ($originPolicy as $key => $value) {
 
-             if (!$strictPolicy || in_array((string)$key, self::$policyFields, true)) {
 
-                 $policy[$key] = $value;
 
-             }
 
-         }
 
-         return $policy;
 
-     }
 
-     public function authorization($url, $body = null, $contentType = null)
 
-     {
 
-         $authorization = 'QBox ' . $this->signRequest($url, $body, $contentType);
 
-         return array('Authorization' => $authorization);
 
-     }
 
-     public function authorizationV2($url, $method, $body = null, $contentType = null)
 
-     {
 
-         $urlItems = parse_url($url);
 
-         $host = $urlItems['host'];
 
-         if (isset($urlItems['port'])) {
 
-             $port = $urlItems['port'];
 
-         } else {
 
-             $port = '';
 
-         }
 
-         $path = $urlItems['path'];
 
-         if (isset($urlItems['query'])) {
 
-             $query = $urlItems['query'];
 
-         } else {
 
-             $query = '';
 
-         }
 
-         //write request uri
 
-         $toSignStr = $method . ' ' . $path;
 
-         if (!empty($query)) {
 
-             $toSignStr .= '?' . $query;
 
-         }
 
-         //write host and port
 
-         $toSignStr .= "\nHost: " . $host;
 
-         if (!empty($port)) {
 
-             $toSignStr .= ":" . $port;
 
-         }
 
-         //write content type
 
-         if (!empty($contentType)) {
 
-             $toSignStr .= "\nContent-Type: " . $contentType;
 
-         }
 
-         $toSignStr .= "\n\n";
 
-         //write body
 
-         if (!empty($body)) {
 
-             $toSignStr .= $body;
 
-         }
 
-         $sign = $this->sign($toSignStr);
 
-         $auth = 'Qiniu ' . $sign;
 
-         return array('Authorization' => $auth);
 
-     }
 
- }
 
 
  |