refactor: clean code

This commit is contained in:
Fu Diwei
2026-07-21 07:46:38 +08:00
parent 2360ba0d09
commit dfca532415
9 changed files with 64 additions and 76 deletions

View File

@@ -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)),

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}