支持天翼yun
This commit is contained in:
parent
3698635fe2
commit
9135fc097b
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { CTYunInstance } from './service/ctyun/CTYun';
|
||||||
|
declare class CTYunSDK {
|
||||||
|
ctyunMap: Record<string, CTYunInstance>;
|
||||||
|
constructor();
|
||||||
|
getInstance(accessKey: string, accessSecret: string): CTYunInstance;
|
||||||
|
}
|
||||||
|
declare const SDK: CTYunSDK;
|
||||||
|
export default SDK;
|
||||||
|
export { CTYunInstance };
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { CTYunInstance } from './service/ctyun/CTYun';
|
||||||
|
class CTYunSDK {
|
||||||
|
ctyunMap;
|
||||||
|
constructor() {
|
||||||
|
this.ctyunMap = {};
|
||||||
|
}
|
||||||
|
getInstance(accessKey, accessSecret) {
|
||||||
|
if (this.ctyunMap[accessKey]) {
|
||||||
|
return this.ctyunMap[accessKey];
|
||||||
|
}
|
||||||
|
const instance = new CTYunInstance(accessKey, accessSecret);
|
||||||
|
Object.assign(this.ctyunMap, {
|
||||||
|
[accessKey]: instance,
|
||||||
|
});
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const SDK = new CTYunSDK();
|
||||||
|
export default SDK;
|
||||||
|
export { CTYunInstance };
|
||||||
|
|
@ -2,6 +2,7 @@ import WechatSDK, { WechatMpInstance, WechatPublicInstance, WechatWebInstance }
|
||||||
import AmapSDK from './AmapSDK';
|
import AmapSDK from './AmapSDK';
|
||||||
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
||||||
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
||||||
|
import CTYunSDk, { CTYunInstance } from './CTYunSDK';
|
||||||
export * from './service/amap/Amap';
|
export * from './service/amap/Amap';
|
||||||
export { AmapSDK, QiniuSDK, WechatSDK, WechatMpInstance, WechatPublicInstance, WechatWebInstance, QiniuCloudInstance, SmsSdk, TencentSmsInstance, AliSmsInstance, };
|
export { AmapSDK, QiniuSDK, WechatSDK, CTYunSDk, CTYunInstance, WechatMpInstance, WechatPublicInstance, WechatWebInstance, QiniuCloudInstance, SmsSdk, TencentSmsInstance, AliSmsInstance, };
|
||||||
export * from './types';
|
export * from './types';
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import WechatSDK, { WechatMpInstance, WechatPublicInstance, WechatWebInstance }
|
||||||
import AmapSDK from './AmapSDK';
|
import AmapSDK from './AmapSDK';
|
||||||
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
||||||
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
||||||
|
import CTYunSDk, { CTYunInstance } from './CTYunSDK';
|
||||||
export * from './service/amap/Amap';
|
export * from './service/amap/Amap';
|
||||||
export { AmapSDK, QiniuSDK, WechatSDK, WechatMpInstance, WechatPublicInstance, WechatWebInstance, QiniuCloudInstance, SmsSdk, TencentSmsInstance, AliSmsInstance, };
|
export { AmapSDK, QiniuSDK, WechatSDK, CTYunSDk, CTYunInstance, WechatMpInstance, WechatPublicInstance, WechatWebInstance, QiniuCloudInstance, SmsSdk, TencentSmsInstance, AliSmsInstance, };
|
||||||
export * from './types';
|
export * from './types';
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { Action, CTYunZone } from '../../types/CTYun';
|
||||||
|
export declare class CTYunInstance {
|
||||||
|
private accessKey;
|
||||||
|
private secretKey;
|
||||||
|
constructor(accessKey: string, secretKey: string);
|
||||||
|
getUploadInfo(bucket: string, zone: CTYunZone, key?: string, actions?: Action[]): {
|
||||||
|
key: string | undefined;
|
||||||
|
uploadToken: void;
|
||||||
|
uploadHost: string;
|
||||||
|
bucket: string;
|
||||||
|
};
|
||||||
|
getToken(zone: CTYunZone, bucket: string, actions?: Action[]): void;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
import AWS from 'aws-sdk';
|
||||||
|
const CTYun_ENDPOINT_LIST = {
|
||||||
|
hazz: {
|
||||||
|
ul: 'oos-hazz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
lnsy: {
|
||||||
|
ul: 'oos-lnsy.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sccd: {
|
||||||
|
ul: 'oos-sccd.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
xjwlmq: {
|
||||||
|
ul: 'oos-xjwlmq.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gslz: {
|
||||||
|
ul: 'oos-gslz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sdqd: {
|
||||||
|
ul: 'oos-sdqd.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gzgy: {
|
||||||
|
ul: 'oos-gzgy.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
hbwh: {
|
||||||
|
ul: 'oos-gslz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
xzls: {
|
||||||
|
ul: 'oos-xzls.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
ahwh: {
|
||||||
|
ul: 'oos-ahwh.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gdsz: {
|
||||||
|
ul: 'oos-gdsz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
jssz: {
|
||||||
|
ul: 'oos-jssz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sh2: {
|
||||||
|
ul: 'oos-sh2.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
export class CTYunInstance {
|
||||||
|
accessKey;
|
||||||
|
secretKey;
|
||||||
|
constructor(accessKey, secretKey) {
|
||||||
|
this.accessKey = accessKey;
|
||||||
|
this.secretKey = secretKey;
|
||||||
|
}
|
||||||
|
getUploadInfo(bucket, zone, key, actions) {
|
||||||
|
try {
|
||||||
|
const uploadToken = this.getToken(zone, bucket, actions);
|
||||||
|
return {
|
||||||
|
key,
|
||||||
|
uploadToken,
|
||||||
|
uploadHost: `https://${CTYun_ENDPOINT_LIST[zone].ul}`,
|
||||||
|
bucket,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getToken(zone, bucket, actions) {
|
||||||
|
const config = {
|
||||||
|
accessKeyId: this.accessKey,
|
||||||
|
secretAccessKey: this.secretKey,
|
||||||
|
endpoint: `http://${CTYun_ENDPOINT_LIST[zone].ul}`,
|
||||||
|
region: "ctyun",
|
||||||
|
};
|
||||||
|
const stsClient = new AWS.STS(config);
|
||||||
|
const actions2 = actions ? actions.map((ele) => `s3:${ele}`) : ['s3:*'];
|
||||||
|
const params = {
|
||||||
|
Policy: `{"Version":"2012-10-17","Statement":{"Effect":"Allow","A
|
||||||
|
ction":${actions2},"Resource":["arn:aws:s3:::${bucket}","arn:aws:s
|
||||||
|
3:::${bucket}/*"]}}`,
|
||||||
|
RoleArn: "arn:aws:iam:::role/oak",
|
||||||
|
RoleSessionName: "oak",
|
||||||
|
DurationSeconds: 900, // 过期时间
|
||||||
|
};
|
||||||
|
stsClient.assumeRole(params, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('success', data);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
/**
|
||||||
|
* 此处记录ctyun操作权限名称,更多操作权限参考下方链接
|
||||||
|
* https://www.ctyun.cn/document/10306929/10136179
|
||||||
|
*/
|
||||||
|
export type Action = '*' | 'PutObject' | 'GetObject' | 'DeleteObject' | 'ListBucket';
|
||||||
|
export type CTYunZone = 'hazz' | 'lnsy' | 'sccd' | 'xjwlmq' | 'gslz' | 'sdqd' | 'gzgy' | 'hbwh' | 'xzls' | 'ahwh' | 'gdsz' | 'jssz' | 'sh2';
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
export {};
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
export * from './Wechat';
|
export * from './Wechat';
|
||||||
export * from './Qiniu';
|
export * from './Qiniu';
|
||||||
|
export * from './CTYun';
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
export * from './Wechat';
|
export * from './Wechat';
|
||||||
export * from './Qiniu';
|
export * from './Qiniu';
|
||||||
|
export * from './CTYun';
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { CTYunInstance } from './service/ctyun/CTYun';
|
||||||
|
declare class CTYunSDK {
|
||||||
|
ctyunMap: Record<string, CTYunInstance>;
|
||||||
|
constructor();
|
||||||
|
getInstance(accessKey: string, accessSecret: string): CTYunInstance;
|
||||||
|
}
|
||||||
|
declare const SDK: CTYunSDK;
|
||||||
|
export default SDK;
|
||||||
|
export { CTYunInstance };
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.CTYunInstance = void 0;
|
||||||
|
const CTYun_1 = require("./service/ctyun/CTYun");
|
||||||
|
Object.defineProperty(exports, "CTYunInstance", { enumerable: true, get: function () { return CTYun_1.CTYunInstance; } });
|
||||||
|
class CTYunSDK {
|
||||||
|
ctyunMap;
|
||||||
|
constructor() {
|
||||||
|
this.ctyunMap = {};
|
||||||
|
}
|
||||||
|
getInstance(accessKey, accessSecret) {
|
||||||
|
if (this.ctyunMap[accessKey]) {
|
||||||
|
return this.ctyunMap[accessKey];
|
||||||
|
}
|
||||||
|
const instance = new CTYun_1.CTYunInstance(accessKey, accessSecret);
|
||||||
|
Object.assign(this.ctyunMap, {
|
||||||
|
[accessKey]: instance,
|
||||||
|
});
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const SDK = new CTYunSDK();
|
||||||
|
exports.default = SDK;
|
||||||
|
|
@ -2,6 +2,7 @@ import WechatSDK, { WechatMpInstance, WechatPublicInstance, WechatWebInstance }
|
||||||
import AmapSDK from './AmapSDK';
|
import AmapSDK from './AmapSDK';
|
||||||
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
||||||
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
||||||
|
import CTYunSDk, { CTYunInstance } from './CTYunSDK';
|
||||||
export * from './service/amap/Amap';
|
export * from './service/amap/Amap';
|
||||||
export { AmapSDK, QiniuSDK, WechatSDK, WechatMpInstance, WechatPublicInstance, WechatWebInstance, QiniuCloudInstance, SmsSdk, TencentSmsInstance, AliSmsInstance, };
|
export { AmapSDK, QiniuSDK, WechatSDK, CTYunSDk, CTYunInstance, WechatMpInstance, WechatPublicInstance, WechatWebInstance, QiniuCloudInstance, SmsSdk, TencentSmsInstance, AliSmsInstance, };
|
||||||
export * from './types';
|
export * from './types';
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.AliSmsInstance = exports.TencentSmsInstance = exports.SmsSdk = exports.QiniuCloudInstance = exports.WechatWebInstance = exports.WechatPublicInstance = exports.WechatMpInstance = exports.WechatSDK = exports.QiniuSDK = exports.AmapSDK = void 0;
|
exports.AliSmsInstance = exports.TencentSmsInstance = exports.SmsSdk = exports.QiniuCloudInstance = exports.WechatWebInstance = exports.WechatPublicInstance = exports.WechatMpInstance = exports.CTYunInstance = exports.CTYunSDk = exports.WechatSDK = exports.QiniuSDK = exports.AmapSDK = void 0;
|
||||||
const tslib_1 = require("tslib");
|
const tslib_1 = require("tslib");
|
||||||
const WechatSDK_1 = tslib_1.__importStar(require("./WechatSDK"));
|
const WechatSDK_1 = tslib_1.__importStar(require("./WechatSDK"));
|
||||||
exports.WechatSDK = WechatSDK_1.default;
|
exports.WechatSDK = WechatSDK_1.default;
|
||||||
|
|
@ -16,5 +16,8 @@ const SmsSdk_1 = tslib_1.__importStar(require("./SmsSdk"));
|
||||||
exports.SmsSdk = SmsSdk_1.default;
|
exports.SmsSdk = SmsSdk_1.default;
|
||||||
Object.defineProperty(exports, "TencentSmsInstance", { enumerable: true, get: function () { return SmsSdk_1.TencentSmsInstance; } });
|
Object.defineProperty(exports, "TencentSmsInstance", { enumerable: true, get: function () { return SmsSdk_1.TencentSmsInstance; } });
|
||||||
Object.defineProperty(exports, "AliSmsInstance", { enumerable: true, get: function () { return SmsSdk_1.AliSmsInstance; } });
|
Object.defineProperty(exports, "AliSmsInstance", { enumerable: true, get: function () { return SmsSdk_1.AliSmsInstance; } });
|
||||||
|
const CTYunSDK_1 = tslib_1.__importStar(require("./CTYunSDK"));
|
||||||
|
exports.CTYunSDk = CTYunSDK_1.default;
|
||||||
|
Object.defineProperty(exports, "CTYunInstance", { enumerable: true, get: function () { return CTYunSDK_1.CTYunInstance; } });
|
||||||
tslib_1.__exportStar(require("./service/amap/Amap"), exports);
|
tslib_1.__exportStar(require("./service/amap/Amap"), exports);
|
||||||
tslib_1.__exportStar(require("./types"), exports);
|
tslib_1.__exportStar(require("./types"), exports);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { Action, CTYunZone } from '../../types/CTYun';
|
||||||
|
export declare class CTYunInstance {
|
||||||
|
private accessKey;
|
||||||
|
private secretKey;
|
||||||
|
constructor(accessKey: string, secretKey: string);
|
||||||
|
getUploadInfo(bucket: string, zone: CTYunZone, key?: string, actions?: Action[]): {
|
||||||
|
key: string | undefined;
|
||||||
|
uploadToken: void;
|
||||||
|
uploadHost: string;
|
||||||
|
bucket: string;
|
||||||
|
};
|
||||||
|
getToken(zone: CTYunZone, bucket: string, actions?: Action[]): void;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.CTYunInstance = void 0;
|
||||||
|
const tslib_1 = require("tslib");
|
||||||
|
const aws_sdk_1 = tslib_1.__importDefault(require("aws-sdk"));
|
||||||
|
const CTYun_ENDPOINT_LIST = {
|
||||||
|
hazz: {
|
||||||
|
ul: 'oos-hazz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
lnsy: {
|
||||||
|
ul: 'oos-lnsy.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sccd: {
|
||||||
|
ul: 'oos-sccd.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
xjwlmq: {
|
||||||
|
ul: 'oos-xjwlmq.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gslz: {
|
||||||
|
ul: 'oos-gslz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sdqd: {
|
||||||
|
ul: 'oos-sdqd.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gzgy: {
|
||||||
|
ul: 'oos-gzgy.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
hbwh: {
|
||||||
|
ul: 'oos-gslz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
xzls: {
|
||||||
|
ul: 'oos-xzls.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
ahwh: {
|
||||||
|
ul: 'oos-ahwh.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gdsz: {
|
||||||
|
ul: 'oos-gdsz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
jssz: {
|
||||||
|
ul: 'oos-jssz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sh2: {
|
||||||
|
ul: 'oos-sh2.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
class CTYunInstance {
|
||||||
|
accessKey;
|
||||||
|
secretKey;
|
||||||
|
constructor(accessKey, secretKey) {
|
||||||
|
this.accessKey = accessKey;
|
||||||
|
this.secretKey = secretKey;
|
||||||
|
}
|
||||||
|
getUploadInfo(bucket, zone, key, actions) {
|
||||||
|
try {
|
||||||
|
const uploadToken = this.getToken(zone, bucket, actions);
|
||||||
|
return {
|
||||||
|
key,
|
||||||
|
uploadToken,
|
||||||
|
uploadHost: `https://${CTYun_ENDPOINT_LIST[zone].ul}`,
|
||||||
|
bucket,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getToken(zone, bucket, actions) {
|
||||||
|
const config = {
|
||||||
|
accessKeyId: this.accessKey,
|
||||||
|
secretAccessKey: this.secretKey,
|
||||||
|
endpoint: `http://${CTYun_ENDPOINT_LIST[zone].ul}`,
|
||||||
|
region: "ctyun",
|
||||||
|
};
|
||||||
|
const stsClient = new aws_sdk_1.default.STS(config);
|
||||||
|
const actions2 = actions ? actions.map((ele) => `s3:${ele}`) : ['s3:*'];
|
||||||
|
const params = {
|
||||||
|
Policy: `{"Version":"2012-10-17","Statement":{"Effect":"Allow","A
|
||||||
|
ction":${actions2},"Resource":["arn:aws:s3:::${bucket}","arn:aws:s
|
||||||
|
3:::${bucket}/*"]}}`,
|
||||||
|
RoleArn: "arn:aws:iam:::role/oak",
|
||||||
|
RoleSessionName: "oak",
|
||||||
|
DurationSeconds: 900, // 过期时间
|
||||||
|
};
|
||||||
|
stsClient.assumeRole(params, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('success', data);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.CTYunInstance = CTYunInstance;
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
/**
|
||||||
|
* 此处记录ctyun操作权限名称,更多操作权限参考下方链接
|
||||||
|
* https://www.ctyun.cn/document/10306929/10136179
|
||||||
|
*/
|
||||||
|
export type Action = '*' | 'PutObject' | 'GetObject' | 'DeleteObject' | 'ListBucket';
|
||||||
|
export type CTYunZone = 'hazz' | 'lnsy' | 'sccd' | 'xjwlmq' | 'gslz' | 'sdqd' | 'gzgy' | 'hbwh' | 'xzls' | 'ahwh' | 'gdsz' | 'jssz' | 'sh2';
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
export * from './Wechat';
|
export * from './Wechat';
|
||||||
export * from './Qiniu';
|
export * from './Qiniu';
|
||||||
|
export * from './CTYun';
|
||||||
|
|
|
||||||
|
|
@ -3,3 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const tslib_1 = require("tslib");
|
const tslib_1 = require("tslib");
|
||||||
tslib_1.__exportStar(require("./Wechat"), exports);
|
tslib_1.__exportStar(require("./Wechat"), exports);
|
||||||
tslib_1.__exportStar(require("./Qiniu"), exports);
|
tslib_1.__exportStar(require("./Qiniu"), exports);
|
||||||
|
tslib_1.__exportStar(require("./CTYun"), exports);
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alicloud/pop-core": "^1.7.12",
|
"@alicloud/pop-core": "^1.7.12",
|
||||||
|
"aws-sdk": "^2.1499.0",
|
||||||
"cheerio": "^1.0.0-rc.12",
|
"cheerio": "^1.0.0-rc.12",
|
||||||
"isomorphic-fetch": "^3.0.0",
|
"isomorphic-fetch": "^3.0.0",
|
||||||
"oak-domain": "file:../oak-domain",
|
"oak-domain": "file:../oak-domain",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
import { CTYunInstance } from './service/ctyun/CTYun';
|
||||||
|
|
||||||
|
class CTYunSDK {
|
||||||
|
ctyunMap: Record<string, CTYunInstance>;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.ctyunMap = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
getInstance(
|
||||||
|
accessKey: string,
|
||||||
|
accessSecret: string,
|
||||||
|
) {
|
||||||
|
if (this.ctyunMap[accessKey]) {
|
||||||
|
return this.ctyunMap[accessKey];
|
||||||
|
}
|
||||||
|
const instance = new CTYunInstance(accessKey, accessSecret);
|
||||||
|
Object.assign(this.ctyunMap, {
|
||||||
|
[accessKey]: instance,
|
||||||
|
});
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const SDK = new CTYunSDK();
|
||||||
|
export default SDK;
|
||||||
|
|
||||||
|
export { CTYunInstance };
|
||||||
|
|
||||||
|
|
@ -2,12 +2,15 @@ import WechatSDK, { WechatMpInstance, WechatPublicInstance, WechatWebInstance }
|
||||||
import AmapSDK from './AmapSDK';
|
import AmapSDK from './AmapSDK';
|
||||||
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
import QiniuSDK, { QiniuCloudInstance } from './QiniuSDK';
|
||||||
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
import SmsSdk, { TencentSmsInstance, AliSmsInstance } from './SmsSdk';
|
||||||
|
import CTYunSDk, { CTYunInstance } from './CTYunSDK';
|
||||||
|
|
||||||
export * from './service/amap/Amap';
|
export * from './service/amap/Amap';
|
||||||
export {
|
export {
|
||||||
AmapSDK,
|
AmapSDK,
|
||||||
QiniuSDK,
|
QiniuSDK,
|
||||||
WechatSDK,
|
WechatSDK,
|
||||||
|
CTYunSDk,
|
||||||
|
CTYunInstance,
|
||||||
WechatMpInstance,
|
WechatMpInstance,
|
||||||
WechatPublicInstance,
|
WechatPublicInstance,
|
||||||
WechatWebInstance,
|
WechatWebInstance,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,129 @@
|
||||||
|
import AWS from 'aws-sdk';
|
||||||
|
import crypto from 'crypto';
|
||||||
|
import { Action, CTYunZone } from '../../types/CTYun';
|
||||||
|
|
||||||
|
const CTYun_ENDPOINT_LIST = {
|
||||||
|
hazz: {
|
||||||
|
ul: 'oos-hazz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
lnsy: {
|
||||||
|
ul: 'oos-lnsy.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sccd: {
|
||||||
|
ul: 'oos-sccd.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
xjwlmq: {
|
||||||
|
ul: 'oos-xjwlmq.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gslz: {
|
||||||
|
ul: 'oos-gslz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sdqd: {
|
||||||
|
ul: 'oos-sdqd.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gzgy: {
|
||||||
|
ul: 'oos-gzgy.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
hbwh: {
|
||||||
|
ul: 'oos-gslz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
xzls: {
|
||||||
|
ul: 'oos-xzls.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
ahwh: {
|
||||||
|
ul: 'oos-ahwh.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
gdsz: {
|
||||||
|
ul: 'oos-gdsz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
jssz: {
|
||||||
|
ul: 'oos-jssz.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
sh2: {
|
||||||
|
ul: 'oos-sh2.ctyunapi.cn',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CTYunInstance {
|
||||||
|
private accessKey: string;
|
||||||
|
private secretKey: string;
|
||||||
|
|
||||||
|
constructor(accessKey: string, secretKey: string,) {
|
||||||
|
this.accessKey = accessKey;
|
||||||
|
this.secretKey = secretKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
getUploadInfo(bucket: string, zone: CTYunZone, key?: string, actions?: Action[]) {
|
||||||
|
try {
|
||||||
|
const uploadToken = this.getToken(zone, bucket, actions);
|
||||||
|
const signInfo = this.getSignInfo(bucket, actions);
|
||||||
|
return {
|
||||||
|
key,
|
||||||
|
uploadToken,
|
||||||
|
accessKey: this.accessKey,
|
||||||
|
policy: signInfo.encodePolicy,
|
||||||
|
signature: signInfo.signature,
|
||||||
|
uploadHost: `https://${CTYun_ENDPOINT_LIST[zone].ul}`,
|
||||||
|
bucket,
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getSignInfo(bucket: string, actions?: Action[]) {
|
||||||
|
const actions2 = actions ? actions.map((ele) => `s3:${ele}`) : ['s3:*'];
|
||||||
|
const policy = `{"Version":"2012-10-17","Statement":{"Effect":"Allow","A
|
||||||
|
ction":${actions2},"Resource":["arn:aws:s3:::${bucket}","arn:aws:s
|
||||||
|
3:::${bucket}/*"]}}`;
|
||||||
|
const encodePolicy = this.urlSafeBase64Encode(policy);
|
||||||
|
const signature = this.hmacSha1(encodePolicy, this.secretKey);
|
||||||
|
return {
|
||||||
|
encodePolicy,
|
||||||
|
signature
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getToken(zone: CTYunZone, bucket: string, actions?: Action[]) {
|
||||||
|
const config = {
|
||||||
|
accessKeyId: this.accessKey,
|
||||||
|
secretAccessKey: this.secretKey,
|
||||||
|
endpoint: `http://${CTYun_ENDPOINT_LIST[zone].ul}`,
|
||||||
|
region: "ctyun",
|
||||||
|
}
|
||||||
|
const stsClient = new AWS.STS(config);
|
||||||
|
const actions2 = actions ? actions.map((ele) => `s3:${ele}`) : ['s3:*'];
|
||||||
|
const params = {
|
||||||
|
Policy: `{"Version":"2012-10-17","Statement":{"Effect":"Allow","A
|
||||||
|
ction":${actions2},"Resource":["arn:aws:s3:::${bucket}","arn:aws:s
|
||||||
|
3:::${bucket}/*"]}}`,
|
||||||
|
RoleArn: "arn:aws:iam:::role/oak",
|
||||||
|
RoleSessionName: "oak",
|
||||||
|
DurationSeconds: 900, // 过期时间
|
||||||
|
}
|
||||||
|
stsClient.assumeRole(params, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('success', data);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private base64ToUrlSafe(v: string) {
|
||||||
|
return v.replace(/\//g, '_').replace(/\+/g, '-');
|
||||||
|
}
|
||||||
|
|
||||||
|
private hmacSha1(encodedFlags: any, secretKey: string) {
|
||||||
|
const hmac = crypto.createHmac('sha1', secretKey);
|
||||||
|
hmac.update(encodedFlags);
|
||||||
|
return hmac.digest('base64');
|
||||||
|
}
|
||||||
|
|
||||||
|
private urlSafeBase64Encode(jsonFlags: string) {
|
||||||
|
const encoded = Buffer.from(jsonFlags).toString('base64');
|
||||||
|
return this.base64ToUrlSafe(encoded);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 此处记录ctyun操作权限名称,更多操作权限参考下方链接
|
||||||
|
* https://www.ctyun.cn/document/10306929/10136179
|
||||||
|
*/
|
||||||
|
export type Action = '*' | 'PutObject' | 'GetObject' | 'DeleteObject' | 'ListBucket';
|
||||||
|
|
||||||
|
export type CTYunZone = 'hazz' | 'lnsy' | 'sccd' | 'xjwlmq' | 'gslz' | 'sdqd' | 'gzgy' | 'hbwh' | 'xzls' | 'ahwh' | 'gdsz' | 'jssz' | 'sh2';
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
export * from './Wechat';
|
export * from './Wechat';
|
||||||
export * from './Qiniu';
|
export * from './Qiniu';
|
||||||
|
export * from './CTYun';
|
||||||
Loading…
Reference in New Issue