@@ -16,33 +16,56 @@ function camSafeUrlEncode(str) {
1616}
1717
1818var getObjectKeys = function ( obj , forKey ) {
19- var list = [ ] ;
20- for ( var key in obj ) {
21- if ( obj . hasOwnProperty ( key ) ) {
22- list . push ( forKey ? camSafeUrlEncode ( key ) . toLowerCase ( ) : key ) ;
23- }
24- }
25- return list . sort ( function ( a , b ) {
26- a = a . toLowerCase ( ) ;
27- b = b . toLowerCase ( ) ;
28- return a === b ? 0 : ( a > b ? 1 : - 1 ) ;
29- } ) ;
19+ var list = [ ] ;
20+ for ( var key in obj ) {
21+ if ( obj . hasOwnProperty ( key ) ) {
22+ list . push ( forKey ? camSafeUrlEncode ( key ) . toLowerCase ( ) : key ) ;
23+ }
24+ }
25+ return list . sort ( function ( a , b ) {
26+ a = a . toLowerCase ( ) ;
27+ b = b . toLowerCase ( ) ;
28+ return a === b ? 0 : ( a > b ? 1 : - 1 ) ;
29+ } ) ;
3030} ;
3131
32- var obj2str = function ( obj ) {
33- var i , key , val ;
34- var list = [ ] ;
35- var keyList = getObjectKeys ( obj ) ;
36- for ( i = 0 ; i < keyList . length ; i ++ ) {
37- key = keyList [ i ] ;
38- val = ( obj [ key ] === undefined || obj [ key ] === null ) ? '' : ( '' + obj [ key ] ) ;
39- key = camSafeUrlEncode ( key ) . toLowerCase ( ) ;
40- val = camSafeUrlEncode ( val ) || '' ;
41- list . push ( key + '=' + val )
42- }
43- return list . join ( '&' ) ;
32+ /**
33+ * obj转为string
34+ * @param {Object } obj 需要转的对象,必须
35+ * @param {Boolean } lowerCaseKey key是否转为小写,默认false,非必须
36+ * @return {String } data 返回字符串
37+ */
38+ var obj2str = function ( obj , lowerCaseKey ) {
39+ var i , key , val ;
40+ var list = [ ] ;
41+ var keyList = getObjectKeys ( obj ) ;
42+ for ( i = 0 ; i < keyList . length ; i ++ ) {
43+ key = keyList [ i ] ;
44+ val = ( obj [ key ] === undefined || obj [ key ] === null ) ? '' : ( '' + obj [ key ] ) ;
45+ key = lowerCaseKey ? camSafeUrlEncode ( key ) . toLowerCase ( ) : camSafeUrlEncode ( key ) ;
46+ val = camSafeUrlEncode ( val ) || '' ;
47+ list . push ( key + '=' + val )
48+ }
49+ return list . join ( '&' ) ;
4450} ;
4551
52+ // 可以签入签名的headers
53+ var signHeaders = [ 'content-disposition' , 'content-encoding' , 'content-length' , 'content-md5' ,
54+ 'expect' , 'expires' , 'host' , 'if-match' , 'if-modified-since' , 'if-none-match' , 'if-unmodified-since' ,
55+ 'origin' , 'range' , 'response-cache-control' , 'response-content-disposition' , 'response-content-encoding' ,
56+ 'response-content-language' , 'response-content-type' , 'response-expires' , 'transfer-encoding' , 'versionid' ] ;
57+
58+ var getSignHeaderObj = function ( headers ) {
59+ var signHeaderObj = { } ;
60+ for ( var i in headers ) {
61+ var key = i . toLowerCase ( ) ;
62+ if ( key . indexOf ( 'x-cos-' ) > - 1 || signHeaders . indexOf ( key ) > - 1 ) {
63+ signHeaderObj [ i ] = headers [ i ] ;
64+ }
65+ }
66+ return signHeaderObj ;
67+ }
68+
4669//测试用的key后面可以去掉
4770var getAuth = function ( opt ) {
4871 opt = opt || { } ;
@@ -52,7 +75,7 @@ var getAuth = function (opt) {
5275 var KeyTime = opt . KeyTime ;
5376 var method = ( opt . method || opt . Method || 'get' ) . toLowerCase ( ) ;
5477 var queryParams = clone ( opt . Query || opt . params || { } ) ;
55- var headers = clone ( opt . Headers || opt . headers || { } ) ;
78+ var headers = getSignHeaderObj ( clone ( opt . Headers || opt . headers || { } ) ) ;
5679
5780 var Key = opt . Key || '' ;
5881 var pathname ;
@@ -93,7 +116,7 @@ var getAuth = function (opt) {
93116 var signKey = crypto . createHmac ( 'sha1' , SecretKey ) . update ( qKeyTime ) . digest ( 'hex' ) ;
94117
95118 // 步骤二:构成 FormatString
96- var formatString = [ method , pathname , obj2str ( queryParams ) , obj2str ( headers ) , '' ] . join ( '\n' ) ;
119+ var formatString = [ method , pathname , obj2str ( queryParams , true ) , obj2str ( headers , true ) , '' ] . join ( '\n' ) ;
97120 formatString = Buffer . from ( formatString , 'utf8' ) ;
98121
99122 // 步骤三:计算 StringToSign
0 commit comments