mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 05:29:51 +00:00
feat: add baiducloud cdn deployer
This commit is contained in:
parent
76de837214
commit
269a97e81e
1
go.mod
1
go.mod
@ -13,6 +13,7 @@ require (
|
|||||||
github.com/alibabacloud-go/slb-20140515/v4 v4.0.9
|
github.com/alibabacloud-go/slb-20140515/v4 v4.0.9
|
||||||
github.com/alibabacloud-go/tea v1.2.2
|
github.com/alibabacloud-go/tea v1.2.2
|
||||||
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
|
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
|
||||||
|
github.com/baidubce/bce-sdk-go v0.9.197
|
||||||
github.com/go-acme/lego/v4 v4.19.2
|
github.com/go-acme/lego/v4 v4.19.2
|
||||||
github.com/gojek/heimdall/v7 v7.0.3
|
github.com/gojek/heimdall/v7 v7.0.3
|
||||||
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.114
|
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.114
|
||||||
|
2
go.sum
2
go.sum
@ -159,6 +159,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 h1:NKTa1eqZYw8tiHSRGpP0VtTdub/8
|
|||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7/go.mod h1:NXi1dIAGteSaRLqYgarlhP/Ij0cFT+qmCwiJqWh/U5o=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7/go.mod h1:NXi1dIAGteSaRLqYgarlhP/Ij0cFT+qmCwiJqWh/U5o=
|
||||||
github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4=
|
github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4=
|
||||||
github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
||||||
|
github.com/baidubce/bce-sdk-go v0.9.197 h1:TQqa4J+FTagrywhaTQ707ffE1eG3ix1s06eSZ/K+Wk0=
|
||||||
|
github.com/baidubce/bce-sdk-go v0.9.197/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg=
|
||||||
github.com/blinkbean/dingtalk v1.1.3 h1:MbidFZYom7DTFHD/YIs+eaI7kRy52kmWE/sy0xjo6E4=
|
github.com/blinkbean/dingtalk v1.1.3 h1:MbidFZYom7DTFHD/YIs+eaI7kRy52kmWE/sy0xjo6E4=
|
||||||
github.com/blinkbean/dingtalk v1.1.3/go.mod h1:9BaLuGSBqY3vT5hstValh48DbsKO7vaHaJnG9pXwbto=
|
github.com/blinkbean/dingtalk v1.1.3/go.mod h1:9BaLuGSBqY3vT5hstValh48DbsKO7vaHaJnG9pXwbto=
|
||||||
github.com/cactus/go-statsd-client/statsd v0.0.0-20200423205355-cb0885a1018c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI=
|
github.com/cactus/go-statsd-client/statsd v0.0.0-20200423205355-cb0885a1018c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI=
|
||||||
|
80
internal/deployer/baiducloud_cdn.go
Normal file
80
internal/deployer/baiducloud_cdn.go
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package deployer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
baiduCdn "github.com/baidubce/bce-sdk-go/services/cdn"
|
||||||
|
baiduCdnApi "github.com/baidubce/bce-sdk-go/services/cdn/api"
|
||||||
|
xerrors "github.com/pkg/errors"
|
||||||
|
|
||||||
|
"github.com/usual2970/certimate/internal/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BaiduCloudCDNDeployer struct {
|
||||||
|
option *DeployerOption
|
||||||
|
infos []string
|
||||||
|
|
||||||
|
sdkClient *baiduCdn.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBaiduCloudCDNDeployer(option *DeployerOption) (Deployer, error) {
|
||||||
|
access := &domain.BaiduCloudAccess{}
|
||||||
|
if err := json.Unmarshal([]byte(option.Access), access); err != nil {
|
||||||
|
return nil, xerrors.Wrap(err, "failed to get access")
|
||||||
|
}
|
||||||
|
|
||||||
|
client, err := (&BaiduCloudCDNDeployer{}).createSdkClient(
|
||||||
|
access.AccessKeyId,
|
||||||
|
access.SecretAccessKey,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Wrap(err, "failed to create sdk client")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &BaiduCloudCDNDeployer{
|
||||||
|
option: option,
|
||||||
|
infos: make([]string, 0),
|
||||||
|
sdkClient: client,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *BaiduCloudCDNDeployer) GetID() string {
|
||||||
|
return fmt.Sprintf("%s-%s", d.option.AccessRecord.GetString("name"), d.option.AccessRecord.Id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *BaiduCloudCDNDeployer) GetInfos() []string {
|
||||||
|
return d.infos
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *BaiduCloudCDNDeployer) Deploy(ctx context.Context) error {
|
||||||
|
// 修改域名证书
|
||||||
|
// REF: https://cloud.baidu.com/doc/CDN/s/qjzuz2hp8
|
||||||
|
putCertResp, err := d.sdkClient.PutCert(
|
||||||
|
d.option.DeployConfig.GetConfigAsString("domain"),
|
||||||
|
&baiduCdnApi.UserCertificate{
|
||||||
|
CertName: fmt.Sprintf("certimate-%d", time.Now().UnixMilli()),
|
||||||
|
ServerData: d.option.Certificate.Certificate,
|
||||||
|
PrivateData: d.option.Certificate.PrivateKey,
|
||||||
|
},
|
||||||
|
"ON",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Wrap(err, "failed to execute sdk request 'cdn.PutCert'")
|
||||||
|
}
|
||||||
|
|
||||||
|
d.infos = append(d.infos, toStr("已修改域名证书", putCertResp))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *BaiduCloudCDNDeployer) createSdkClient(accessKeyId, secretAccessKey string) (*baiduCdn.Client, error) {
|
||||||
|
client, err := baiduCdn.NewClient(accessKeyId, secretAccessKey, "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return client, nil
|
||||||
|
}
|
@ -33,6 +33,7 @@ const (
|
|||||||
targetTencentTEO = "tencent-teo"
|
targetTencentTEO = "tencent-teo"
|
||||||
targetHuaweiCloudCDN = "huaweicloud-cdn"
|
targetHuaweiCloudCDN = "huaweicloud-cdn"
|
||||||
targetHuaweiCloudELB = "huaweicloud-elb"
|
targetHuaweiCloudELB = "huaweicloud-elb"
|
||||||
|
targetBaiduCloudCDN = "baiducloud-cdn"
|
||||||
targetQiniuCdn = "qiniu-cdn"
|
targetQiniuCdn = "qiniu-cdn"
|
||||||
targetDogeCloudCdn = "dogecloud-cdn"
|
targetDogeCloudCdn = "dogecloud-cdn"
|
||||||
targetLocal = "local"
|
targetLocal = "local"
|
||||||
@ -135,6 +136,8 @@ func getWithDeployConfig(record *models.Record, cert *applicant.Certificate, dep
|
|||||||
return NewHuaweiCloudCDNDeployer(option)
|
return NewHuaweiCloudCDNDeployer(option)
|
||||||
case targetHuaweiCloudELB:
|
case targetHuaweiCloudELB:
|
||||||
return NewHuaweiCloudELBDeployer(option)
|
return NewHuaweiCloudELBDeployer(option)
|
||||||
|
case targetBaiduCloudCDN:
|
||||||
|
return NewBaiduCloudCDNDeployer(option)
|
||||||
case targetQiniuCdn:
|
case targetQiniuCdn:
|
||||||
return NewQiniuCDNDeployer(option)
|
return NewQiniuCDNDeployer(option)
|
||||||
case targetDogeCloudCdn:
|
case targetDogeCloudCdn:
|
||||||
|
@ -20,6 +20,7 @@ import DeployToTencentCOS from "./DeployToTencentCOS";
|
|||||||
import DeployToTencentTEO from "./DeployToTencentTEO";
|
import DeployToTencentTEO from "./DeployToTencentTEO";
|
||||||
import DeployToHuaweiCloudCDN from "./DeployToHuaweiCloudCDN";
|
import DeployToHuaweiCloudCDN from "./DeployToHuaweiCloudCDN";
|
||||||
import DeployToHuaweiCloudELB from "./DeployToHuaweiCloudELB";
|
import DeployToHuaweiCloudELB from "./DeployToHuaweiCloudELB";
|
||||||
|
import DeployToBaiduCloudCDN from "./DeployToBaiduCloudCDN";
|
||||||
import DeployToQiniuCDN from "./DeployToQiniuCDN";
|
import DeployToQiniuCDN from "./DeployToQiniuCDN";
|
||||||
import DeployToDogeCloudCDN from "./DeployToDogeCloudCDN";
|
import DeployToDogeCloudCDN from "./DeployToDogeCloudCDN";
|
||||||
import DeployToLocal from "./DeployToLocal";
|
import DeployToLocal from "./DeployToLocal";
|
||||||
@ -152,6 +153,9 @@ const DeployEditDialog = ({ trigger, deployConfig, onSave }: DeployEditDialogPro
|
|||||||
case "huaweicloud-elb":
|
case "huaweicloud-elb":
|
||||||
childComponent = <DeployToHuaweiCloudELB />;
|
childComponent = <DeployToHuaweiCloudELB />;
|
||||||
break;
|
break;
|
||||||
|
case "baiducloud-cdn":
|
||||||
|
childComponent = <DeployToBaiduCloudCDN />;
|
||||||
|
break;
|
||||||
case "qiniu-cdn":
|
case "qiniu-cdn":
|
||||||
childComponent = <DeployToQiniuCDN />;
|
childComponent = <DeployToQiniuCDN />;
|
||||||
break;
|
break;
|
||||||
|
68
ui/src/components/certimate/DeployToBaiduCloudCDN.tsx
Normal file
68
ui/src/components/certimate/DeployToBaiduCloudCDN.tsx
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import { useEffect } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { z } from "zod";
|
||||||
|
import { produce } from "immer";
|
||||||
|
|
||||||
|
import { Input } from "@/components/ui/input";
|
||||||
|
import { Label } from "@/components/ui/label";
|
||||||
|
import { useDeployEditContext } from "./DeployEdit";
|
||||||
|
|
||||||
|
type DeployToBaiduCloudCDNConfigParams = {
|
||||||
|
domain?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const DeployToBaiduCloudCDN = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const { config, setConfig, errors, setErrors } = useDeployEditContext<DeployToBaiduCloudCDNConfigParams>();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!config.id) {
|
||||||
|
setConfig({
|
||||||
|
...config,
|
||||||
|
config: {},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setErrors({});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const formSchema = z.object({
|
||||||
|
domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, {
|
||||||
|
message: t("common.errmsg.domain_invalid"),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const res = formSchema.safeParse(config.config);
|
||||||
|
setErrors({
|
||||||
|
...errors,
|
||||||
|
domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message,
|
||||||
|
});
|
||||||
|
}, [config]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex flex-col space-y-8">
|
||||||
|
<div>
|
||||||
|
<Label>{t("domain.deployment.form.domain.label")}</Label>
|
||||||
|
<Input
|
||||||
|
placeholder={t("domain.deployment.form.domain.placeholder")}
|
||||||
|
className="w-full mt-1"
|
||||||
|
value={config?.config?.domain}
|
||||||
|
onChange={(e) => {
|
||||||
|
const nv = produce(config, (draft) => {
|
||||||
|
draft.config ??= {};
|
||||||
|
draft.config.domain = e.target.value?.trim();
|
||||||
|
});
|
||||||
|
setConfig(nv);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div className="text-red-600 text-sm mt-1">{errors?.domain}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DeployToBaiduCloudCDN;
|
@ -85,6 +85,7 @@ export const deployTargetsMap: Map<DeployTarget["type"], DeployTarget> = new Map
|
|||||||
["tencent-teo", "common.provider.tencent.teo", "/imgs/providers/tencent.svg"],
|
["tencent-teo", "common.provider.tencent.teo", "/imgs/providers/tencent.svg"],
|
||||||
["huaweicloud-cdn", "common.provider.huaweicloud.cdn", "/imgs/providers/huaweicloud.svg"],
|
["huaweicloud-cdn", "common.provider.huaweicloud.cdn", "/imgs/providers/huaweicloud.svg"],
|
||||||
["huaweicloud-elb", "common.provider.huaweicloud.elb", "/imgs/providers/huaweicloud.svg"],
|
["huaweicloud-elb", "common.provider.huaweicloud.elb", "/imgs/providers/huaweicloud.svg"],
|
||||||
|
["baiducloud-cdn", "common.provider.baiducloud.cdn", "/imgs/providers/baiducloud.svg"],
|
||||||
["qiniu-cdn", "common.provider.qiniu.cdn", "/imgs/providers/qiniu.svg"],
|
["qiniu-cdn", "common.provider.qiniu.cdn", "/imgs/providers/qiniu.svg"],
|
||||||
["dogecloud-cdn", "common.provider.dogecloud.cdn", "/imgs/providers/dogecloud.svg"],
|
["dogecloud-cdn", "common.provider.dogecloud.cdn", "/imgs/providers/dogecloud.svg"],
|
||||||
["local", "common.provider.local", "/imgs/providers/local.svg"],
|
["local", "common.provider.local", "/imgs/providers/local.svg"],
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
"common.provider.huaweicloud.cdn": "Huawei Cloud - CDN",
|
"common.provider.huaweicloud.cdn": "Huawei Cloud - CDN",
|
||||||
"common.provider.huaweicloud.elb": "Huawei Cloud - ELB",
|
"common.provider.huaweicloud.elb": "Huawei Cloud - ELB",
|
||||||
"common.provider.baiducloud": "Baidu Cloud",
|
"common.provider.baiducloud": "Baidu Cloud",
|
||||||
|
"common.provider.baiducloud.cdn": "Baidu Cloud - CDN",
|
||||||
"common.provider.qiniu": "Qiniu Cloud",
|
"common.provider.qiniu": "Qiniu Cloud",
|
||||||
"common.provider.qiniu.cdn": "Qiniu Cloud - CDN",
|
"common.provider.qiniu.cdn": "Qiniu Cloud - CDN",
|
||||||
"common.provider.dogecloud": "Doge Cloud",
|
"common.provider.dogecloud": "Doge Cloud",
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
"common.provider.huaweicloud.cdn": "华为云 - 内容分发网络 CDN",
|
"common.provider.huaweicloud.cdn": "华为云 - 内容分发网络 CDN",
|
||||||
"common.provider.huaweicloud.elb": "华为云 - 弹性负载均衡 ELB",
|
"common.provider.huaweicloud.elb": "华为云 - 弹性负载均衡 ELB",
|
||||||
"common.provider.baiducloud": "百度智能云",
|
"common.provider.baiducloud": "百度智能云",
|
||||||
|
"common.provider.baiducloud.cdn": "百度智能云 - 内容分发网络 CDN",
|
||||||
"common.provider.qiniu": "七牛云",
|
"common.provider.qiniu": "七牛云",
|
||||||
"common.provider.qiniu.cdn": "七牛云 - 内容分发网络 CDN",
|
"common.provider.qiniu.cdn": "七牛云 - 内容分发网络 CDN",
|
||||||
"common.provider.dogecloud": "多吉云",
|
"common.provider.dogecloud": "多吉云",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user