aliyun-mns
Version:
阿里云 消息服务 非官方 SDK for node.js
32 lines (29 loc) • 1.1 kB
JavaScript
/*
* @Author: zyc
* @Date: 2016-01-20 11:50:39
* @Last Modified by: zyc
* @Last Modified time: 2016-01-31 15:40:12
*/
const assert = require('assert')
const crypto = require('crypto')
module.exports = class {
constructor (AccessKeySecret, XMnsVersion) {
this.AccessKeySecret = AccessKeySecret
this.XMnsVersion = XMnsVersion
}
sign (options) {
const { VERB, CanonicalizedResource } = options
assert.ok(VERB, 'VERB required')
assert.ok(CanonicalizedResource, 'CanonicalizedResource required')
let { CONTENT_MD5, CONTENT_TYPE, CanonicalizedMNSHeaders } = options
CONTENT_MD5 = CONTENT_MD5 || ''
CONTENT_TYPE = CONTENT_TYPE || ''
const DATE = new Date().toGMTString()
CanonicalizedMNSHeaders = CanonicalizedMNSHeaders || 'x-mns-version:' + this.XMnsVersion
const signature = `${VERB}\n${CONTENT_MD5}\n${CONTENT_TYPE}\n${DATE}\n${CanonicalizedMNSHeaders}\n${CanonicalizedResource}`
const hmac = crypto.createHmac('sha1', this.AccessKeySecret)
hmac.update(signature)
return { DATE, Signature: hmac.digest('base64') }
}
}