-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAws.gs
66 lines (66 loc) · 2.46 KB
/
Aws.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function test(){
var a={}
Logger.log(a.hoge.toString())
}
/**
* aws(アクセスキー,シークレットキー, server(ホスト名))
*/
function Aws(accessKey,secretAccessKey,server){
if(accessKey==undefined||accessKey==null||accessKey.toString()==""
|| secretAccessKey==undefined||secretAccessKey==null||secretAccessKey.toString()==""){
throw Error(" accessKey, secretAccessKey を設定してください")
}
return {
/**
* URLエンコードする。encodeURIComponentより多めにエンコードする
* encodeURIComponent のままだと署名が違ってしまう。
* @param str エンコードされる文字列
*/
encodeRFC3986:function(str){
return encodeURIComponent(str).replace(/[!*'()]/g, function(p){
return "%" + p.charCodeAt(0).toString(16).toUpperCase();
});
},
/** クエリパラメータに署名する
* @param method HTTPメソッド
* @param path パス
* @param params クエリパラメータオブジェクト
*/
sign:function sign(method, path, params){
params.AWSAccessKeyId = accessKey;
params.SignatureVersion = 2;
params.SignatureMethod = 'HmacSHA256';
var keys = [];
for(var i in params){
keys.push(i);
}
keys.sort();
var vals = [];
for(var i=0; i<keys.length; i++){
vals.push(keys[i]+"="+ this.encodeRFC3986(params[keys[i]]));
}
var queryParams = vals.join("&");
var sign = [method.toUpperCase(), server.toLowerCase(), path, queryParams].join("\n");
var sig = Utilities.base64Encode(Utilities.computeHmacSha256Signature(sign, secretAccessKey));
return queryParams + '&Signature=' + encodeURIComponent(sig);
},
/** フォーマットされたタイムスタンプを得る。
* @param date 対象時刻。未定の場合は現在時刻
*/
getTimestamp:function(date){
return Utilities.formatDate((date||new Date()), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
},
/** https で get して結果のbody文字列を得る
* @param params クエリパラメータ
* @param path 対象のパス。未指定の場合は "/"
*/
httpsGet:function(params,path){
path = typeof(path)=='undefined' ? "/" : path
var url = "https://" + server + path + "?" + this.sign("get",path,params);
Logger.log(url);
var xml= UrlFetchApp.fetch(url).getContentText();
Logger.log(xml);
return xml;
}
};
}