yinxing
Version:
127 lines (112 loc) • 2.9 kB
JavaScript
const crypto=require("crypto")
const R=require("ramda")
const {URLSearchParams}=require('url')
const utility = require('utility')
const superagent=require('superagent')
// expand_qs({x:1,x_0:1,y:[1,2,3]}) -> { x: 1,'x.0':1, 'y.0': 1, 'y.1': 2, 'y.2': 3 }
const expand_qs=R.pipe(
R.toPairs,
R.map(([k,v])=>Array.isArray(v)
?
v.map((x,i)=>[k+"."+i,x])
:[[k.replace('_',"."),v]]
),
R.invoker(0,'flat'),
R.fromPairs,
)
const sort_join=R.pipe(
R.toPairs,
R.sort(R.ascend(R.prop(0))),
R.map(R.join('=')),
R.join('&')
)
const {
SecretId="xxx",
SecretKey="xxx",
Region="ap-guangzhou",
}=process.env
const encode=(s="",
signMethod="HmacSHA256",
{SecretKey}=process.env
)=> {
let signMethodMap = {
HmacSHA1: "sha1",
HmacSHA256: "sha256"
};
let m=signMethodMap[signMethod]
let hmac = crypto.createHmac(m , SecretKey);
return hmac
.update(Buffer.from(s, 'utf8'))
.digest('base64')
}
const formatSignString= (
url="ssss",
method="GET",
params={},
path=""
)=>method.toLocaleUpperCase() + url + path + "?" + sort_join(params)
//new URLSearchParams(params)
const sign=(q={"Action":"DescribeApiKeysStatus"},module="apigateway",)=>{
const q1=expand_qs(q)
const u=module + ".api.qcloud.com/v2/index.php"
const m="GET"
const d={
//"Action":"",
'Nonce': utility.random(1e5),
'Region': Region,
'SecretId': SecretId,
'SignatureMethod': 'HmacSHA256',
//"Signature":"",
'Timestamp': utility.timestamp(),
//'Token':"",
}
const p=""
const d1=R.merge(d,q1)
//const d1=R.merge(d,R.pickAll(['Action'],q1))
const ss=formatSignString(u,m,d1,p)
const r={
...d,
...q1,
Signature:encode(ss),
}
console.log(r)
return r
}
const get=(
q={"Action":"DescribeApiKeysStatus"},
module="apigateway",
)=>superagent
.get('https://'+module+".api.qcloud.com/v2/index.php")
.query(sign(q,module))
.type('json')
const test=async ()=>{
let qq={
"Action":"DescribeApiKeysStatus",
"offset":"0",
"limit":"2",
"orderby":"createdTime",
"order":"desc",
//"searchKey":"aa",
"secretIds":[
"AKID20n8cYBb0k7ydY38TV2w0L1MM8qkveNtkn5r",
"AKIDktnI9rRlc1kAhy30737sw7JAW34llDVaf8lT",
],
}
let q={
'Action': 'CreateApiKey',
'secretName': 'wuhan',
}
let r1=await get(q)
console.log(r1.request.url)
console.log(JSON.parse(r1.text))
let r2=await get(qq)
console.log(JSON.parse(r2.text))
return [r1,r2]
}
module.exports={
encode,
sign,
formatSignString,
get,
test,
}