mirror of
https://github.com/usual2970/certimate.git
synced 2025-10-05 14:04:54 +00:00
feat: add gcore uploader
This commit is contained in:
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
|
||||
}
|
Reference in New Issue
Block a user