mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-03 06:23:54 +08:00
refactor: clean code
This commit is contained in:
@@ -3,16 +3,14 @@ package internal
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/rand/v2"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
"github.com/aws/aws-sdk-go-v2/aws/retry"
|
||||
awsconfig "github.com/aws/aws-sdk-go-v2/config"
|
||||
"github.com/aws/aws-sdk-go-v2/credentials"
|
||||
aws "github.com/aws/aws-sdk-go-v2/aws"
|
||||
awscfg "github.com/aws/aws-sdk-go-v2/config"
|
||||
awscred "github.com/aws/aws-sdk-go-v2/credentials"
|
||||
"github.com/aws/aws-sdk-go-v2/service/lightsail"
|
||||
awstypes "github.com/aws/aws-sdk-go-v2/service/lightsail/types"
|
||||
"github.com/aws/aws-sdk-go-v2/service/lightsail/types"
|
||||
"github.com/go-acme/lego/v5/challenge"
|
||||
"github.com/go-acme/lego/v5/challenge/dns01"
|
||||
"github.com/go-acme/lego/v5/platform/env"
|
||||
@@ -68,19 +66,9 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
cfg, err := awsconfig.LoadDefaultConfig(ctx,
|
||||
awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(config.AccessKeyID, config.SecretAccessKey, config.SessionToken)),
|
||||
awsconfig.WithRegion(config.Region),
|
||||
awsconfig.WithRetryer(func() aws.Retryer {
|
||||
return retry.NewStandard(func(options *retry.StandardOptions) {
|
||||
options.MaxAttempts = maxRetries
|
||||
options.Backoff = retry.BackoffDelayerFunc(func(attempt int, err error) (time.Duration, error) {
|
||||
retryCount := min(attempt, 7)
|
||||
delay := (1 << uint(retryCount)) * (rand.IntN(50) + 200)
|
||||
return time.Duration(delay) * time.Millisecond, nil
|
||||
})
|
||||
})
|
||||
}),
|
||||
cfg, err := awscfg.LoadDefaultConfig(ctx,
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(config.AccessKeyID, config.SecretAccessKey, config.SessionToken)),
|
||||
awscfg.WithRegion(config.Region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -102,7 +90,7 @@ func (d *DNSProvider) Present(ctx context.Context, domain, _, keyAuth string) er
|
||||
|
||||
if _, err := d.client.CreateDomainEntry(ctx, &lightsail.CreateDomainEntryInput{
|
||||
DomainName: aws.String(dns01.UnFqdn(authZone)),
|
||||
DomainEntry: &awstypes.DomainEntry{
|
||||
DomainEntry: &types.DomainEntry{
|
||||
Type: aws.String("TXT"),
|
||||
Name: aws.String(info.EffectiveFQDN),
|
||||
Target: aws.String(strconv.Quote(info.Value)),
|
||||
@@ -124,7 +112,7 @@ func (d *DNSProvider) CleanUp(ctx context.Context, domain, _, keyAuth string) er
|
||||
|
||||
if _, err := d.client.DeleteDomainEntry(ctx, &lightsail.DeleteDomainEntryInput{
|
||||
DomainName: aws.String(dns01.UnFqdn(authZone)),
|
||||
DomainEntry: &awstypes.DomainEntry{
|
||||
DomainEntry: &types.DomainEntry{
|
||||
Type: aws.String("TXT"),
|
||||
Name: aws.String(info.EffectiveFQDN),
|
||||
Target: aws.String(strconv.Quote(info.Value)),
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
aws "github.com/aws/aws-sdk-go-v2/aws"
|
||||
awscfg "github.com/aws/aws-sdk-go-v2/config"
|
||||
awscred "github.com/aws/aws-sdk-go-v2/credentials"
|
||||
awsacm "github.com/aws/aws-sdk-go-v2/service/acm"
|
||||
"github.com/aws/aws-sdk-go-v2/service/acm"
|
||||
"github.com/aws/smithy-go"
|
||||
|
||||
"github.com/certimate-go/certimate/pkg/core"
|
||||
@@ -35,7 +35,7 @@ type CertmgrConfig struct {
|
||||
type Certmgr struct {
|
||||
config *CertmgrConfig
|
||||
logger *slog.Logger
|
||||
sdkClient *awsacm.Client
|
||||
sdkClient *acm.Client
|
||||
}
|
||||
|
||||
var _ Provider = (*Certmgr)(nil)
|
||||
@@ -89,7 +89,7 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
|
||||
default:
|
||||
}
|
||||
|
||||
listCertificatesReq := &awsacm.ListCertificatesInput{
|
||||
listCertificatesReq := &acm.ListCertificatesInput{
|
||||
NextToken: listCertificatesNextToken,
|
||||
MaxItems: aws.Int32(1000),
|
||||
}
|
||||
@@ -113,14 +113,14 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
|
||||
}
|
||||
|
||||
// 对比证书内容
|
||||
getCertificateReq := &awsacm.GetCertificateInput{
|
||||
getCertificateReq := &acm.GetCertificateInput{
|
||||
CertificateArn: certItem.CertificateArn,
|
||||
}
|
||||
getCertificateResp, err := c.sdkClient.GetCertificate(ctx, getCertificateReq)
|
||||
if err != nil {
|
||||
var sdkErr smithy.APIError
|
||||
if errors.As(err, &sdkErr) {
|
||||
if sdkErrCode := sdkErr.ErrorCode(); sdkErrCode == "NoSuchEntity" {
|
||||
if sdkErrCode := sdkErr.ErrorCode(); sdkErrCode == "InvalidArnException" || sdkErrCode == "ResourceNotFoundException" {
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
|
||||
|
||||
// 导入证书
|
||||
// REF: https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html
|
||||
importCertificateReq := &awsacm.ImportCertificateInput{
|
||||
importCertificateReq := &acm.ImportCertificateInput{
|
||||
Certificate: ([]byte)(serverCertPEM),
|
||||
CertificateChain: ([]byte)(issuerCertPEM),
|
||||
PrivateKey: ([]byte)(privkeyPEM),
|
||||
@@ -179,7 +179,7 @@ func (c *Certmgr) Replace(ctx context.Context, certIdOrName string, certPEM, pri
|
||||
|
||||
// 导入证书
|
||||
// REF: https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html
|
||||
importCertificateReq := &awsacm.ImportCertificateInput{
|
||||
importCertificateReq := &acm.ImportCertificateInput{
|
||||
CertificateArn: aws.String(certIdOrName),
|
||||
Certificate: ([]byte)(serverCertPEM),
|
||||
CertificateChain: ([]byte)(issuerCertPEM),
|
||||
@@ -194,15 +194,15 @@ func (c *Certmgr) Replace(ctx context.Context, certIdOrName string, certPEM, pri
|
||||
return &ReplaceResult{}, nil
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*awsacm.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*acm.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := awsacm.NewFromConfig(cfg, func(o *awsacm.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := acm.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
aws "github.com/aws/aws-sdk-go-v2/aws"
|
||||
awscfg "github.com/aws/aws-sdk-go-v2/config"
|
||||
awscred "github.com/aws/aws-sdk-go-v2/credentials"
|
||||
awsiam "github.com/aws/aws-sdk-go-v2/service/iam"
|
||||
"github.com/aws/aws-sdk-go-v2/service/iam"
|
||||
"github.com/aws/smithy-go"
|
||||
"github.com/samber/lo"
|
||||
|
||||
@@ -40,7 +40,7 @@ type CertmgrConfig struct {
|
||||
type Certmgr struct {
|
||||
config *CertmgrConfig
|
||||
logger *slog.Logger
|
||||
sdkClient *awsiam.Client
|
||||
sdkClient *iam.Client
|
||||
}
|
||||
|
||||
var _ Provider = (*Certmgr)(nil)
|
||||
@@ -94,7 +94,7 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
|
||||
default:
|
||||
}
|
||||
|
||||
listServerCertificatesReq := &awsiam.ListServerCertificatesInput{
|
||||
listServerCertificatesReq := &iam.ListServerCertificatesInput{
|
||||
PathPrefix: lo.EmptyableToPtr(c.config.CertificatePath),
|
||||
Marker: listServerCertificatesMarker,
|
||||
MaxItems: aws.Int32(1000),
|
||||
@@ -117,14 +117,14 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
|
||||
}
|
||||
|
||||
// 对比证书内容
|
||||
getServerCertificateReq := &awsiam.GetServerCertificateInput{
|
||||
getServerCertificateReq := &iam.GetServerCertificateInput{
|
||||
ServerCertificateName: certItem.ServerCertificateName,
|
||||
}
|
||||
getServerCertificateResp, err := c.sdkClient.GetServerCertificate(ctx, getServerCertificateReq)
|
||||
if err != nil {
|
||||
var sdkErr smithy.APIError
|
||||
if errors.As(err, &sdkErr) {
|
||||
if sdkErrCode := sdkErr.ErrorCode(); sdkErrCode == "InvalidArnException" || sdkErrCode == "ResourceNotFoundException" {
|
||||
if sdkErrCode := sdkErr.ErrorCode(); sdkErrCode == "NoSuchEntity" {
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -160,7 +160,7 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*Uplo
|
||||
|
||||
// 导入证书
|
||||
// REF: https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html
|
||||
uploadServerCertificateReq := &awsiam.UploadServerCertificateInput{
|
||||
uploadServerCertificateReq := &iam.UploadServerCertificateInput{
|
||||
ServerCertificateName: aws.String(certName),
|
||||
Path: aws.String(cmp.Or(c.config.CertificatePath, "/")),
|
||||
CertificateBody: aws.String(serverCertPEM),
|
||||
@@ -187,15 +187,15 @@ func (c *Certmgr) Replace(ctx context.Context, certIdOrName string, certPEM, pri
|
||||
return nil, core.ErrUnsupported
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*awsiam.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*iam.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := awsiam.NewFromConfig(cfg, func(o *awsiam.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := iam.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -221,14 +221,14 @@ func (d *Deployer) updateListenerSniCertificate(ctx context.Context, cloudListen
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*elasticloadbalancingv2.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := elasticloadbalancingv2.NewFromConfig(cfg, func(o *elasticloadbalancingv2.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := elasticloadbalancingv2.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -125,14 +125,14 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*amplify.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := amplify.NewFromConfig(cfg, func(o *amplify.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := amplify.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -120,14 +120,14 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*apigatewayv2.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := apigatewayv2.NewFromConfig(cfg, func(o *apigatewayv2.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := apigatewayv2.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -133,14 +133,14 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*elasticloadbalancing.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := elasticloadbalancing.NewFromConfig(cfg, func(o *elasticloadbalancing.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := elasticloadbalancing.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -159,14 +159,14 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*cloudfront.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := cloudfront.NewFromConfig(cfg, func(o *cloudfront.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := cloudfront.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -221,14 +221,14 @@ func (d *Deployer) updateListenerSniCertificate(ctx context.Context, cloudListen
|
||||
}
|
||||
|
||||
func createSDKClient(accessKeyId, secretAccessKey, region string) (*elasticloadbalancingv2.Client, error) {
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background())
|
||||
cfg, err := awscfg.LoadDefaultConfig(context.Background(),
|
||||
awscfg.WithCredentialsProvider(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")),
|
||||
awscfg.WithRegion(region),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := elasticloadbalancingv2.NewFromConfig(cfg, func(o *elasticloadbalancingv2.Options) {
|
||||
o.Region = region
|
||||
o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, ""))
|
||||
})
|
||||
client := elasticloadbalancingv2.NewFromConfig(cfg)
|
||||
return client, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user