import { AccessInput, BaseAccess, IsAccess } from "@certd/pipeline"; import { AliyunAccess } from "./aliyun-access.js"; @IsAccess({ name: "alioss", title: "阿里云OSS授权", desc: "包含地域和Bucket", icon: "ant-design:aliyun-outlined", }) export class AliossAccess extends BaseAccess { @AccessInput({ title: "阿里云授权", component: { name: "access-selector", vModel: "modelValue", type: "aliyun", }, helper: "请选择阿里云授权", required: true, }) accessId = ""; @AccessInput({ title: "大区", component: { name: "remote-auto-complete", vModel: "value", type: "access", typeName: "alioss", action: AliossAccess.prototype.onGetRegionList.name, }, required: true, }) region!: string; @AccessInput({ title: "Bucket", helper: "存储桶名称", required: true, component: { name: "remote-auto-complete", vModel: "value", type: "access", action: AliossAccess.prototype.onGetBucketList.name, search: false, pager: false, watches: ["accessId", "region"], }, }) bucket!: string; onGetRegionList() { return { list: [ { value: "oss-cn-hangzhou", label: "华东1(杭州)" }, { value: "oss-cn-shanghai", label: "华东2(上海)" }, { value: "oss-cn-nanjing", label: "华东5(南京-本地地域)" }, { value: "oss-cn-fuzhou", label: "华东6(福州-本地地域)" }, { value: "oss-cn-wuhan-lr", label: "华中1(武汉-本地地域)" }, { value: "oss-cn-qingdao", label: "华北1(青岛)" }, { value: "oss-cn-beijing", label: "华北2(北京)" }, { value: "oss-cn-zhangjiakou", label: "华北 3(张家口)" }, { value: "oss-cn-huhehaote", label: "华北5(呼和浩特)" }, { value: "oss-cn-wulanchabu", label: "华北6(乌兰察布)" }, { value: "oss-cn-shenzhen", label: "华南1(深圳)" }, { value: "oss-cn-heyuan", label: "华南2(河源)" }, { value: "oss-cn-guangzhou", label: "华南3(广州)" }, { value: "oss-cn-chengdu", label: "西南1(成都)" }, { value: "oss-cn-hongkong", label: "中国香港" }, { value: "oss-us-west-1", label: "美国(硅谷)①" }, { value: "oss-us-east-1", label: "美国(弗吉尼亚)①" }, { value: "oss-ap-northeast-1", label: "日本(东京)①" }, { value: "oss-ap-northeast-2", label: "韩国(首尔)" }, { value: "oss-ap-southeast-1", label: "新加坡①" }, { value: "oss-ap-southeast-2", label: "澳大利亚(悉尼)①" }, { value: "oss-ap-southeast-3", label: "马来西亚(吉隆坡)①" }, { value: "oss-ap-southeast-5", label: "印度尼西亚(雅加达)①" }, { value: "oss-ap-southeast-6", label: "菲律宾(马尼拉)" }, { value: "oss-ap-southeast-7", label: "泰国(曼谷)" }, { value: "oss-eu-central-1", label: "德国(法兰克福)①" }, { value: "oss-eu-west-1", label: "英国(伦敦)" }, { value: "oss-me-east-1", label: "阿联酋(迪拜)①" }, { value: "oss-rg-china-mainland", label: "无地域属性(中国内地)" }, ], }; } async onGetBucketList() { const access = (await this.ctx.accessService.getById(this.accessId)) as AliyunAccess; const client = await this.getClient(access); let res; const buckets = []; do { const requestData = { marker: res?.nextMarker || null, "max-keys": 1000 }; res = await client.listBuckets(requestData); buckets.push(...(res?.buckets || [])); } while (!!res?.nextMarker); return buckets.filter(bucket => bucket?.region === this.region).map(bucket => ({ label: `${bucket.name}<${bucket.region}>`, value: bucket.name })); } async getClient(access: AliyunAccess) { // @ts-ignore const OSS = await this.importRuntime("ali-oss"); return new OSS.default({ accessKeyId: access.accessKeyId, accessKeySecret: access.accessKeySecret, // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。 region: this.region, //@ts-ignore authorizationV4: true, }); } } new AliossAccess();