mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 05:29:51 +00:00
feat: add gcore uploader
This commit is contained in:
parent
e2a148c25f
commit
ea02190ad5
1
go.mod
1
go.mod
@ -57,6 +57,7 @@ require (
|
|||||||
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.9.0 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.9.0 // indirect
|
||||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect
|
||||||
|
github.com/G-Core/gcorelabscdn-go v1.0.26 // indirect
|
||||||
github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect
|
github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect
|
||||||
github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect
|
github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect
|
||||||
github.com/alibabacloud-go/tea-oss-sdk v1.1.3 // indirect
|
github.com/alibabacloud-go/tea-oss-sdk v1.1.3 // indirect
|
||||||
|
2
go.sum
2
go.sum
@ -79,6 +79,8 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0
|
|||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
|
github.com/G-Core/gcorelabscdn-go v1.0.26 h1:22SqETUw64s+It/op1T7y3ukEOU62CJOsUcsfSkhvZs=
|
||||||
|
github.com/G-Core/gcorelabscdn-go v1.0.26/go.mod h1:iSGXaTvZBzDHQW+rKFS918BgFVpONcyLEijwh8WsXpE=
|
||||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw=
|
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw=
|
||||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM=
|
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM=
|
||||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI=
|
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI=
|
||||||
|
79
internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go
Normal file
79
internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package gcorecdn
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
gprovider "github.com/G-Core/gcorelabscdn-go/gcore/provider"
|
||||||
|
gsslcerts "github.com/G-Core/gcorelabscdn-go/sslcerts"
|
||||||
|
xerrors "github.com/pkg/errors"
|
||||||
|
|
||||||
|
"github.com/usual2970/certimate/internal/pkg/core/uploader"
|
||||||
|
gcoresdk "github.com/usual2970/certimate/internal/pkg/vendors/gcore-sdk/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GcoreCDNUploaderConfig struct {
|
||||||
|
// Gcore API Token。
|
||||||
|
ApiToken string `json:"apiToken"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GcoreCDNUploader struct {
|
||||||
|
config *GcoreCDNUploaderConfig
|
||||||
|
sdkClient *gsslcerts.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ uploader.Uploader = (*GcoreCDNUploader)(nil)
|
||||||
|
|
||||||
|
func New(config *GcoreCDNUploaderConfig) (*GcoreCDNUploader, error) {
|
||||||
|
if config == nil {
|
||||||
|
return nil, errors.New("config is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
client, err := createSdkClient(config.ApiToken)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Wrap(err, "failed to create sdk client")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &GcoreCDNUploader{
|
||||||
|
config: config,
|
||||||
|
sdkClient: client,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *GcoreCDNUploader) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
|
||||||
|
// 生成新证书名(需符合 Gcore 命名规则)
|
||||||
|
var certId, certName string
|
||||||
|
certName = fmt.Sprintf("certimate_%d", time.Now().UnixMilli())
|
||||||
|
|
||||||
|
// 新增证书
|
||||||
|
// REF: https://api.gcore.com/docs/cdn#tag/CA-certificates/operation/ca_certificates-add
|
||||||
|
createCertificateReq := &gsslcerts.CreateRequest{
|
||||||
|
Name: certName,
|
||||||
|
Cert: certPem,
|
||||||
|
PrivateKey: privkeyPem,
|
||||||
|
Automated: false,
|
||||||
|
ValidateRootCA: false,
|
||||||
|
}
|
||||||
|
createCertificateResp, err := u.sdkClient.Create(context.TODO(), createCertificateReq)
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Wrap(err, "failed to execute sdk request 'sslcerts.Create'")
|
||||||
|
}
|
||||||
|
|
||||||
|
certId = fmt.Sprintf("%d", createCertificateResp.ID)
|
||||||
|
certName = createCertificateResp.Name
|
||||||
|
return &uploader.UploadResult{
|
||||||
|
CertId: certId,
|
||||||
|
CertName: certName,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func createSdkClient(apiToken string) (*gsslcerts.Service, error) {
|
||||||
|
requester := gprovider.NewClient(
|
||||||
|
gcoresdk.BASE_URL,
|
||||||
|
gprovider.WithSigner(gcoresdk.NewAuthRequestSigner(apiToken)),
|
||||||
|
)
|
||||||
|
service := gsslcerts.NewService(requester)
|
||||||
|
return service, nil
|
||||||
|
}
|
3
internal/pkg/vendors/gcore-sdk/common/endpoint.go
vendored
Normal file
3
internal/pkg/vendors/gcore-sdk/common/endpoint.go
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
const BASE_URL = "https://api.gcore.com"
|
24
internal/pkg/vendors/gcore-sdk/common/signer.go
vendored
Normal file
24
internal/pkg/vendors/gcore-sdk/common/signer.go
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/G-Core/gcorelabscdn-go/gcore"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AuthRequestSigner struct {
|
||||||
|
apiToken string
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ gcore.RequestSigner = (*AuthRequestSigner)(nil)
|
||||||
|
|
||||||
|
func NewAuthRequestSigner(apiToken string) *AuthRequestSigner {
|
||||||
|
return &AuthRequestSigner{
|
||||||
|
apiToken: apiToken,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AuthRequestSigner) Sign(req *http.Request) error {
|
||||||
|
req.Header.Set("Authorization", "APIKey "+s.apiToken)
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user