ks3
Version:
本代码库为`金山云存储KS3`服务.主要提供`KS3 nodejs SDK`和`命令行工具`.
164 lines (145 loc) • 4.54 kB
JavaScript
const requestPromise = require('request-promise')
var aws4 = require('aws4');
var debug = require('debug')('ks3:iam');
var util = require('../util')
/**
* 获取项目列表
*
* @param {*} opts
* @param opt - { protocol, domain, region, ak, sk }
*/
function getProjectList(opts = {}) {
var params = Object.assign({
protocol: 'http',
domain: 'iam.api.ksyun.com',
region: 'cn-beijing-6'
}, opts)
var qs = {
Action: 'GetAccountAllProjectList',
Version: '2015-11-01'
}
var path = `/?Action=${qs.Action}&Version=${qs.Version}`
const { domain, protocol, region, ak, sk } = params
var opts = { host: domain, path: path, service: 'iam', region: region}
const accessKeyId = ak || this.ak
const secretAccessKey = sk || this.sk
if (!accessKeyId && !secretAccessKey) {
throw new Error('require ak and sk ~')
}
var awsOpts = aws4.sign(opts, {
accessKeyId,
secretAccessKey
})
debug('awsOpts', awsOpts)
var options = {
'method': 'GET',
'url': `${protocol}://${domain}` + path,
'headers': {
'accept': 'application/json',
'x-amz-date': awsOpts.headers['X-Amz-Date'],
'Authorization': awsOpts.headers['Authorization']
}
};
return requestPromise(options, function (error, response) {
if (error) throw new Error(error);
debug(response.body);
return JSON.parse(response.body)
});
}
/**
* 批量获取桶对应的项目信息
*/
function batchGetBucketProject(instanceIds) {
var qs = {
Action: 'BatchGetInstanceProjectInfo',
Version: '2015-11-01'
}
debug(qs)
var path = `/?Action=${qs.Action}&Version=${qs.Version}`
// var opts = { host: 'iam.api.ksyun.com', path: path, service: 'iam', region: 'cn-beijing-6', method: 'GET', body: JSON.stringify({
// InstanceIds: instanceIds
// }), headers: {
// 'content-type': 'application/json'
// }}
var opts = { host: 'iam.api.ksyun.com', path: path, service: 'iam', region: 'cn-beijing-6' }
var awsOpts = aws4.sign(opts, { accessKeyId: this.ak, secretAccessKey: this.sk })
debug('awsOpts', awsOpts)
var options = {
'method': 'GET',
'url': 'http://iam.api.ksyun.com' + path,
'headers': {
'content-type': 'application/json',
'accept': 'application/json',
'x-amz-date': awsOpts.headers['X-Amz-Date'],
'Authorization': awsOpts.headers['Authorization']
}
};
return requestPromise(options, function (error, response) {
if (error) throw new Error(error);
debug(response.body);
return response.body
});
}
/**
* 批量获取桶的计量信息
*/
function queryKs3Data(instanceIds) {
var qs = {
Action: 'QueryKs3Data',
Version: 'v1'
}
var path = `/?Action=${qs.Action}&Version=${qs.Version}&StartTime=202111030000&EndTime=202111032359&DateType=Day&Bucketname=testcrrconsumer-0,ks3.caiyuan,video-livedvr-kshbp2,zhilianyi-test-shanghai,wpsfile-archive&Ks3Product=DataSize,BandwidthDown,NetBandwidthDown,CDNBandwidthDown`
var opts = { host: 'ks3bill.api.ksyun.com', path: path, service: 'ks3bill', region: 'cn-beijing-6' }
var awsOpts = aws4.sign(opts, { accessKeyId: this.ak, secretAccessKey: this.sk })
debug('awsOpts', awsOpts)
var options = {
'method': 'GET',
'url': 'http://ks3bill.api.ksyun.com' + path,
'headers': {
'content-type': 'application/json',
'accept': 'application/json',
'x-amz-date': awsOpts.headers['X-Amz-Date'],
'Authorization': awsOpts.headers['Authorization']
}
};
return requestPromise(options, function (error, response) {
if (error) throw new Error(error);
debug(response.body);
return response.body
});
}
/**
* 根据projectId获取项目制下的所有资源
* @param {*} ProjectId
* @returns
*/
function getResourceList (ProjectId) {
var qs = {
Action: 'GetProjectInstanceList',
Version: '2015-11-01'
}
var path = `/?ProjectId=${ProjectId}&Pn=1&${util.paramsEncode(qs)}`
var opts = { host: 'iam.api.ksyun.com', path: path, service: 'iam', region: 'cn-beijing-6' }
var awsOpts = aws4.sign(opts, { accessKeyId: this.ak, secretAccessKey: this.sk })
var options = {
'method': 'GET',
'url': 'http://iam.api.ksyun.com' + path,
'headers': {
'content-type': 'application/json',
'accept': 'application/json',
'x-amz-date': awsOpts.headers['X-Amz-Date'],
'Authorization': awsOpts.headers['Authorization']
}
};
return requestPromise(options, function (error, response) {
if (error) throw new Error(error);
debug(response.body);
return response.body
});
}
module.exports = {
getProjectList: getProjectList,
// batchGetBucketProject: batchGetBucketProject
// queryKs3Data
getResourceList
}