@@ -16,33 +16,56 @@ function camSafeUrlEncode(str) {
16
16
}
17
17
18
18
var 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
+ } ) ;
30
30
} ;
31
31
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 ( '&' ) ;
44
50
} ;
45
51
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
+
46
69
//测试用的key后面可以去掉
47
70
var getAuth = function ( opt ) {
48
71
opt = opt || { } ;
@@ -52,7 +75,7 @@ var getAuth = function (opt) {
52
75
var KeyTime = opt . KeyTime ;
53
76
var method = ( opt . method || opt . Method || 'get' ) . toLowerCase ( ) ;
54
77
var queryParams = clone ( opt . Query || opt . params || { } ) ;
55
- var headers = clone ( opt . Headers || opt . headers || { } ) ;
78
+ var headers = getSignHeaderObj ( clone ( opt . Headers || opt . headers || { } ) ) ;
56
79
57
80
var Key = opt . Key || '' ;
58
81
var pathname ;
@@ -93,7 +116,7 @@ var getAuth = function (opt) {
93
116
var signKey = crypto . createHmac ( 'sha1' , SecretKey ) . update ( qKeyTime ) . digest ( 'hex' ) ;
94
117
95
118
// 步骤二:构成 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' ) ;
97
120
formatString = Buffer . from ( formatString , 'utf8' ) ;
98
121
99
122
// 步骤三:计算 StringToSign
0 commit comments