mirror of https://github.com/usual2970/certimate
				
				
				
			refactor: clean code
							parent
							
								
									882f802585
								
							
						
					
					
						commit
						914c5b4870
					
				| 
						 | 
				
			
			@ -13,7 +13,7 @@ import (
 | 
			
		|||
	"golang.org/x/sync/singleflight"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/domain"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/repository"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ func newAcmeUser(ca, email string) (*acmeUser, error) {
 | 
			
		|||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		keyPEM, err := certs.ConvertECPrivateKeyToPEM(key)
 | 
			
		||||
		keyPEM, err := certutil.ConvertECPrivateKeyToPEM(key)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ func (u acmeUser) GetRegistration() *registration.Resource {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (u *acmeUser) GetPrivateKey() crypto.PrivateKey {
 | 
			
		||||
	rs, _ := certs.ParseECPrivateKeyFromPEM(u.privkey)
 | 
			
		||||
	rs, _ := certutil.ParseECPrivateKeyFromPEM(u.privkey)
 | 
			
		||||
	return rs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ import (
 | 
			
		|||
	"golang.org/x/time/rate"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/domain"
 | 
			
		||||
	uslices "github.com/usual2970/certimate/internal/pkg/utils/slices"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/sliceutil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/repository"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -58,12 +58,12 @@ func NewWithApplyNode(node *domain.WorkflowNode) (Applicant, error) {
 | 
			
		|||
 | 
			
		||||
	nodeConfig := node.GetConfigForApply()
 | 
			
		||||
	options := &applicantOptions{
 | 
			
		||||
		Domains:               uslices.Filter(strings.Split(nodeConfig.Domains, ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
		Domains:               sliceutil.Filter(strings.Split(nodeConfig.Domains, ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
		ContactEmail:          nodeConfig.ContactEmail,
 | 
			
		||||
		Provider:              domain.ApplyDNSProviderType(nodeConfig.Provider),
 | 
			
		||||
		ProviderApplyConfig:   nodeConfig.ProviderConfig,
 | 
			
		||||
		KeyAlgorithm:          nodeConfig.KeyAlgorithm,
 | 
			
		||||
		Nameservers:           uslices.Filter(strings.Split(nodeConfig.Nameservers, ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
		Nameservers:           sliceutil.Filter(strings.Split(nodeConfig.Nameservers, ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
		DnsPropagationTimeout: nodeConfig.DnsPropagationTimeout,
 | 
			
		||||
		DnsTTL:                nodeConfig.DnsTTL,
 | 
			
		||||
		DisableFollowCNAME:    nodeConfig.DisableFollowCNAME,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ import (
 | 
			
		|||
	pTencentCloud "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/tencentcloud"
 | 
			
		||||
	pVolcEngine "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/volcengine"
 | 
			
		||||
	pWestcn "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/westcn"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maps"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maputil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +41,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeACMEHttpReq:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForACMEHttpReq{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeAliyun, domain.ApplyDNSProviderTypeAliyunDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForAliyun{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -74,15 +74,15 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeAWS, domain.ApplyDNSProviderTypeAWSRoute53:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForAWS{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			applicant, err := pAWSRoute53.NewChallengeProvider(&pAWSRoute53.ChallengeProviderConfig{
 | 
			
		||||
				AccessKeyId:           access.AccessKeyId,
 | 
			
		||||
				SecretAccessKey:       access.SecretAccessKey,
 | 
			
		||||
				Region:                maps.GetValueAsString(options.ProviderApplyConfig, "region"),
 | 
			
		||||
				HostedZoneId:          maps.GetValueAsString(options.ProviderApplyConfig, "hostedZoneId"),
 | 
			
		||||
				Region:                maputil.GetString(options.ProviderApplyConfig, "region"),
 | 
			
		||||
				HostedZoneId:          maputil.GetString(options.ProviderApplyConfig, "hostedZoneId"),
 | 
			
		||||
				DnsPropagationTimeout: options.DnsPropagationTimeout,
 | 
			
		||||
				DnsTTL:                options.DnsTTL,
 | 
			
		||||
			})
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeAzure, domain.ApplyDNSProviderTypeAzureDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForAzure{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeBaiduCloud, domain.ApplyDNSProviderTypeBaiduCloudDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForBaiduCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +126,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeCloudflare:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForCloudflare{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +141,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeClouDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForClouDNS{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +157,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeCMCCCloud:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForCMCCCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +173,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeDNSLA:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForDNSLA{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +189,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeGcore:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForGcore{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeGname:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForGname{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +220,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeGoDaddy:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForGoDaddy{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -236,14 +236,14 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeHuaweiCloud, domain.ApplyDNSProviderTypeHuaweiCloudDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForHuaweiCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			applicant, err := pHuaweiCloud.NewChallengeProvider(&pHuaweiCloud.ChallengeProviderConfig{
 | 
			
		||||
				AccessKeyId:           access.AccessKeyId,
 | 
			
		||||
				SecretAccessKey:       access.SecretAccessKey,
 | 
			
		||||
				Region:                maps.GetValueAsString(options.ProviderApplyConfig, "region"),
 | 
			
		||||
				Region:                maputil.GetString(options.ProviderApplyConfig, "region"),
 | 
			
		||||
				DnsPropagationTimeout: options.DnsPropagationTimeout,
 | 
			
		||||
				DnsTTL:                options.DnsTTL,
 | 
			
		||||
			})
 | 
			
		||||
| 
						 | 
				
			
			@ -253,14 +253,14 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeJDCloud, domain.ApplyDNSProviderTypeJDCloudDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForJDCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			applicant, err := pJDCloud.NewChallengeProvider(&pJDCloud.ChallengeProviderConfig{
 | 
			
		||||
				AccessKeyId:           access.AccessKeyId,
 | 
			
		||||
				AccessKeySecret:       access.AccessKeySecret,
 | 
			
		||||
				RegionId:              maps.GetValueAsString(options.ProviderApplyConfig, "region_id"),
 | 
			
		||||
				RegionId:              maputil.GetString(options.ProviderApplyConfig, "region_id"),
 | 
			
		||||
				DnsPropagationTimeout: options.DnsPropagationTimeout,
 | 
			
		||||
				DnsTTL:                options.DnsTTL,
 | 
			
		||||
			})
 | 
			
		||||
| 
						 | 
				
			
			@ -270,7 +270,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeNamecheap:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForNamecheap{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -286,7 +286,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeNameDotCom:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForNameDotCom{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeNameSilo:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForNameSilo{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -317,7 +317,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeNS1:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForNS1{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -332,7 +332,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypePowerDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForPowerDNS{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -348,7 +348,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeRainYun:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForRainYun{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -363,7 +363,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeTencentCloud, domain.ApplyDNSProviderTypeTencentCloudDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForTencentCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -379,7 +379,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeVolcEngine, domain.ApplyDNSProviderTypeVolcEngineDNS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForVolcEngine{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -395,7 +395,7 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
 | 
			
		|||
	case domain.ApplyDNSProviderTypeWestcn:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForWestcn{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ import (
 | 
			
		|||
	"github.com/usual2970/certimate/internal/domain"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/domain/dtos"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/notify"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/repository"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ func (s *CertificateService) ArchiveFile(ctx context.Context, req *dtos.Certific
 | 
			
		|||
		{
 | 
			
		||||
			const pfxPassword = "certimate"
 | 
			
		||||
 | 
			
		||||
			certPFX, err := certs.TransformCertificateFromPEMToPFX(certificate.Certificate, certificate.PrivateKey, pfxPassword)
 | 
			
		||||
			certPFX, err := certutil.TransformCertificateFromPEMToPFX(certificate.Certificate, certificate.PrivateKey, pfxPassword)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ func (s *CertificateService) ArchiveFile(ctx context.Context, req *dtos.Certific
 | 
			
		|||
		{
 | 
			
		||||
			const jksPassword = "certimate"
 | 
			
		||||
 | 
			
		||||
			certJKS, err := certs.TransformCertificateFromPEMToJKS(certificate.Certificate, certificate.PrivateKey, jksPassword, jksPassword, jksPassword)
 | 
			
		||||
			certJKS, err := certutil.TransformCertificateFromPEMToJKS(certificate.Certificate, certificate.PrivateKey, jksPassword, jksPassword, jksPassword)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +187,7 @@ func (s *CertificateService) ArchiveFile(ctx context.Context, req *dtos.Certific
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (s *CertificateService) ValidateCertificate(ctx context.Context, req *dtos.CertificateValidateCertificateReq) (*dtos.CertificateValidateCertificateResp, error) {
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(req.Certificate)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(req.Certificate)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	} else if time.Now().After(certX509.NotAfter) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,8 +63,8 @@ import (
 | 
			
		|||
	pVolcEngineLive "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-live"
 | 
			
		||||
	pVolcEngineTOS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-tos"
 | 
			
		||||
	pWebhook "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/webhook"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maps"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/slices"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maputil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/sliceutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderType1PanelConsole, domain.DeployProviderType1PanelSite:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigFor1Panel{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
					ApiUrl:                   access.ApiUrl,
 | 
			
		||||
					ApiKey:                   access.ApiKey,
 | 
			
		||||
					AllowInsecureConnections: access.AllowInsecureConnections,
 | 
			
		||||
					AutoRestart:              maps.GetValueAsBool(options.ProviderDeployConfig, "autoRestart"),
 | 
			
		||||
					AutoRestart:              maputil.GetBool(options.ProviderDeployConfig, "autoRestart"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
					ApiUrl:                   access.ApiUrl,
 | 
			
		||||
					ApiKey:                   access.ApiKey,
 | 
			
		||||
					AllowInsecureConnections: access.AllowInsecureConnections,
 | 
			
		||||
					WebsiteId:                maps.GetValueAsInt64(options.ProviderDeployConfig, "websiteId"),
 | 
			
		||||
					WebsiteId:                maputil.GetInt64(options.ProviderDeployConfig, "websiteId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeAliyunALB, domain.DeployProviderTypeAliyunCASDeploy, domain.DeployProviderTypeAliyunCDN, domain.DeployProviderTypeAliyunCLB, domain.DeployProviderTypeAliyunDCDN, domain.DeployProviderTypeAliyunESA, domain.DeployProviderTypeAliyunFC, domain.DeployProviderTypeAliyunLive, domain.DeployProviderTypeAliyunNLB, domain.DeployProviderTypeAliyunOSS, domain.DeployProviderTypeAliyunVOD, domain.DeployProviderTypeAliyunWAF:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForAliyun{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -116,11 +116,11 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunALB.NewDeployer(&pAliyunALB.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pAliyunALB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maps.GetValueAsString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maps.GetValueAsString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pAliyunALB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maputil.GetString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maputil.GetString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -128,9 +128,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunCASDeploy.NewDeployer(&pAliyunCASDeploy.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceIds:     slices.Filter(strings.Split(maps.GetValueAsString(options.ProviderDeployConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
					ContactIds:      slices.Filter(strings.Split(maps.GetValueAsString(options.ProviderDeployConfig, "contactIds"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceIds:     sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderDeployConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
					ContactIds:      sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderDeployConfig, "contactIds"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunCDN.NewDeployer(&pAliyunCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,11 +146,11 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunCLB.NewDeployer(&pAliyunCLB.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pAliyunCLB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maps.GetValueAsString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerPort:    maps.GetValueOrDefaultAsInt32(options.ProviderDeployConfig, "listenerPort", 443),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pAliyunCLB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maputil.GetString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerPort:    maputil.GetOrDefaultInt32(options.ProviderDeployConfig, "listenerPort", 443),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +158,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunDCDN.NewDeployer(&pAliyunDCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -166,8 +166,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunESA.NewDeployer(&pAliyunESA.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					SiteId:          maps.GetValueAsInt64(options.ProviderDeployConfig, "siteId"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					SiteId:          maputil.GetInt64(options.ProviderDeployConfig, "siteId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -175,9 +175,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunFC.NewDeployer(&pAliyunFC.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ServiceVersion:  maps.GetValueAsString(options.ProviderDeployConfig, "serviceVersion"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ServiceVersion:  maputil.GetString(options.ProviderDeployConfig, "serviceVersion"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -185,8 +185,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunLive.NewDeployer(&pAliyunLive.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -194,10 +194,10 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunNLB.NewDeployer(&pAliyunNLB.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pAliyunNLB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maps.GetValueAsString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maps.GetValueAsString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pAliyunNLB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maputil.GetString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maputil.GetString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -205,9 +205,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunOSS.NewDeployer(&pAliyunOSS.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:          maps.GetValueAsString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:          maputil.GetString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -215,8 +215,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunVOD.NewDeployer(&pAliyunVOD.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -224,9 +224,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAliyunWAF.NewDeployer(&pAliyunWAF.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					InstanceId:      maps.GetValueAsString(options.ProviderDeployConfig, "instanceId"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					InstanceId:      maputil.GetString(options.ProviderDeployConfig, "instanceId"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +238,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeAWSCloudFront:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForAWS{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,8 +247,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pAWSCloudFront.NewDeployer(&pAWSCloudFront.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					SecretAccessKey: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					DistributionId:  maps.GetValueAsString(options.ProviderDeployConfig, "distributionId"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					DistributionId:  maputil.GetString(options.ProviderDeployConfig, "distributionId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -260,7 +260,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeBaiduCloudCDN:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForBaiduCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -269,7 +269,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pBaiduCloudCDN.NewDeployer(&pBaiduCloudCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					SecretAccessKey: access.SecretAccessKey,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -281,7 +281,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeBaishanCDN:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForBaishan{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -289,7 +289,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
			case domain.DeployProviderTypeBaishanCDN:
 | 
			
		||||
				deployer, err := pBaishanCDN.NewDeployer(&pBaishanCDN.DeployerConfig{
 | 
			
		||||
					ApiToken: access.ApiToken,
 | 
			
		||||
					Domain:   maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:   maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +301,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeBaotaPanelConsole, domain.DeployProviderTypeBaotaPanelSite:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForBaotaPanel{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -311,7 +311,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
					ApiUrl:                   access.ApiUrl,
 | 
			
		||||
					ApiKey:                   access.ApiKey,
 | 
			
		||||
					AllowInsecureConnections: access.AllowInsecureConnections,
 | 
			
		||||
					AutoRestart:              maps.GetValueAsBool(options.ProviderDeployConfig, "autoRestart"),
 | 
			
		||||
					AutoRestart:              maputil.GetBool(options.ProviderDeployConfig, "autoRestart"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -320,9 +320,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
					ApiUrl:                   access.ApiUrl,
 | 
			
		||||
					ApiKey:                   access.ApiKey,
 | 
			
		||||
					AllowInsecureConnections: access.AllowInsecureConnections,
 | 
			
		||||
					SiteType:                 maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "siteType", "other"),
 | 
			
		||||
					SiteName:                 maps.GetValueAsString(options.ProviderDeployConfig, "siteName"),
 | 
			
		||||
					SiteNames:                slices.Filter(strings.Split(maps.GetValueAsString(options.ProviderDeployConfig, "siteNames"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
					SiteType:                 maputil.GetOrDefaultString(options.ProviderDeployConfig, "siteType", "other"),
 | 
			
		||||
					SiteName:                 maputil.GetString(options.ProviderDeployConfig, "siteName"),
 | 
			
		||||
					SiteNames:                sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderDeployConfig, "siteNames"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -334,7 +334,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeBytePlusCDN:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForBytePlus{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -343,7 +343,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pBytePlusCDN.NewDeployer(&pBytePlusCDN.DeployerConfig{
 | 
			
		||||
					AccessKey: access.AccessKey,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -355,7 +355,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeCacheFly:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForCacheFly{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -368,7 +368,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeCdnfly:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForCdnfly{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -376,9 +376,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				ApiUrl:        access.ApiUrl,
 | 
			
		||||
				ApiKey:        access.ApiKey,
 | 
			
		||||
				ApiSecret:     access.ApiSecret,
 | 
			
		||||
				ResourceType:  pCdnfly.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
				SiteId:        maps.GetValueAsString(options.ProviderDeployConfig, "siteId"),
 | 
			
		||||
				CertificateId: maps.GetValueAsString(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
				ResourceType:  pCdnfly.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
				SiteId:        maputil.GetString(options.ProviderDeployConfig, "siteId"),
 | 
			
		||||
				CertificateId: maputil.GetString(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -386,14 +386,14 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeDogeCloudCDN:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForDogeCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			deployer, err := pDogeCDN.NewDeployer(&pDogeCDN.DeployerConfig{
 | 
			
		||||
				AccessKey: access.AccessKey,
 | 
			
		||||
				SecretKey: access.SecretKey,
 | 
			
		||||
				Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -401,14 +401,14 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeEdgioApplications:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForEdgio{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			deployer, err := pEdgioApplications.NewDeployer(&pEdgioApplications.DeployerConfig{
 | 
			
		||||
				ClientId:      access.ClientId,
 | 
			
		||||
				ClientSecret:  access.ClientSecret,
 | 
			
		||||
				EnvironmentId: maps.GetValueAsString(options.ProviderDeployConfig, "environmentId"),
 | 
			
		||||
				EnvironmentId: maputil.GetString(options.ProviderDeployConfig, "environmentId"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +416,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeGcoreCDN:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForGcore{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -424,7 +424,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
			case domain.DeployProviderTypeGcoreCDN:
 | 
			
		||||
				deployer, err := pGcoreCDN.NewDeployer(&pGcoreCDN.DeployerConfig{
 | 
			
		||||
					ApiToken:   access.ApiToken,
 | 
			
		||||
					ResourceId: maps.GetValueAsInt64(options.ProviderDeployConfig, "resourceId"),
 | 
			
		||||
					ResourceId: maputil.GetInt64(options.ProviderDeployConfig, "resourceId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -436,7 +436,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeHuaweiCloudCDN, domain.DeployProviderTypeHuaweiCloudELB, domain.DeployProviderTypeHuaweiCloudWAF:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForHuaweiCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -445,8 +445,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pHuaweiCloudCDN.NewDeployer(&pHuaweiCloudCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					SecretAccessKey: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -454,11 +454,11 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pHuaweiCloudELB.NewDeployer(&pHuaweiCloudELB.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					SecretAccessKey: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pHuaweiCloudELB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					CertificateId:   maps.GetValueAsString(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
					LoadbalancerId:  maps.GetValueAsString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maps.GetValueAsString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pHuaweiCloudELB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					CertificateId:   maputil.GetString(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
					LoadbalancerId:  maputil.GetString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maputil.GetString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -466,10 +466,10 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pHuaweiCloudWAF.NewDeployer(&pHuaweiCloudWAF.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					SecretAccessKey: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pHuaweiCloudWAF.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					CertificateId:   maps.GetValueAsString(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pHuaweiCloudWAF.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					CertificateId:   maputil.GetString(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -481,7 +481,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeJDCloudALB, domain.DeployProviderTypeJDCloudCDN, domain.DeployProviderTypeJDCloudLive, domain.DeployProviderTypeJDCloudVOD:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForJDCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -490,10 +490,10 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pJDCloudALB.NewDeployer(&pJDCloudALB.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					RegionId:        maps.GetValueAsString(options.ProviderDeployConfig, "regionId"),
 | 
			
		||||
					ResourceType:    pJDCloudALB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maps.GetValueAsString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maps.GetValueAsString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					RegionId:        maputil.GetString(options.ProviderDeployConfig, "regionId"),
 | 
			
		||||
					ResourceType:    pJDCloudALB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId:  maputil.GetString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:      maputil.GetString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -501,7 +501,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pJDCloudCDN.NewDeployer(&pJDCloudCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -509,7 +509,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pJDCloudLive.NewDeployer(&pJDCloudLive.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -517,7 +517,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pJDCloudVOD.NewDeployer(&pJDCloudVOD.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.AccessKeySecret,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -529,16 +529,16 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeLocal:
 | 
			
		||||
		{
 | 
			
		||||
			deployer, err := pLocal.NewDeployer(&pLocal.DeployerConfig{
 | 
			
		||||
				ShellEnv:       pLocal.ShellEnvType(maps.GetValueAsString(options.ProviderDeployConfig, "shellEnv")),
 | 
			
		||||
				PreCommand:     maps.GetValueAsString(options.ProviderDeployConfig, "preCommand"),
 | 
			
		||||
				PostCommand:    maps.GetValueAsString(options.ProviderDeployConfig, "postCommand"),
 | 
			
		||||
				OutputFormat:   pLocal.OutputFormatType(maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "format", string(pLocal.OUTPUT_FORMAT_PEM))),
 | 
			
		||||
				OutputCertPath: maps.GetValueAsString(options.ProviderDeployConfig, "certPath"),
 | 
			
		||||
				OutputKeyPath:  maps.GetValueAsString(options.ProviderDeployConfig, "keyPath"),
 | 
			
		||||
				PfxPassword:    maps.GetValueAsString(options.ProviderDeployConfig, "pfxPassword"),
 | 
			
		||||
				JksAlias:       maps.GetValueAsString(options.ProviderDeployConfig, "jksAlias"),
 | 
			
		||||
				JksKeypass:     maps.GetValueAsString(options.ProviderDeployConfig, "jksKeypass"),
 | 
			
		||||
				JksStorepass:   maps.GetValueAsString(options.ProviderDeployConfig, "jksStorepass"),
 | 
			
		||||
				ShellEnv:       pLocal.ShellEnvType(maputil.GetString(options.ProviderDeployConfig, "shellEnv")),
 | 
			
		||||
				PreCommand:     maputil.GetString(options.ProviderDeployConfig, "preCommand"),
 | 
			
		||||
				PostCommand:    maputil.GetString(options.ProviderDeployConfig, "postCommand"),
 | 
			
		||||
				OutputFormat:   pLocal.OutputFormatType(maputil.GetOrDefaultString(options.ProviderDeployConfig, "format", string(pLocal.OUTPUT_FORMAT_PEM))),
 | 
			
		||||
				OutputCertPath: maputil.GetString(options.ProviderDeployConfig, "certPath"),
 | 
			
		||||
				OutputKeyPath:  maputil.GetString(options.ProviderDeployConfig, "keyPath"),
 | 
			
		||||
				PfxPassword:    maputil.GetString(options.ProviderDeployConfig, "pfxPassword"),
 | 
			
		||||
				JksAlias:       maputil.GetString(options.ProviderDeployConfig, "jksAlias"),
 | 
			
		||||
				JksKeypass:     maputil.GetString(options.ProviderDeployConfig, "jksKeypass"),
 | 
			
		||||
				JksStorepass:   maputil.GetString(options.ProviderDeployConfig, "jksStorepass"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -546,17 +546,17 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeKubernetesSecret:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForKubernetes{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			deployer, err := pK8sSecret.NewDeployer(&pK8sSecret.DeployerConfig{
 | 
			
		||||
				KubeConfig:          access.KubeConfig,
 | 
			
		||||
				Namespace:           maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "namespace", "default"),
 | 
			
		||||
				SecretName:          maps.GetValueAsString(options.ProviderDeployConfig, "secretName"),
 | 
			
		||||
				SecretType:          maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "secretType", "kubernetes.io/tls"),
 | 
			
		||||
				SecretDataKeyForCrt: maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "secretDataKeyForCrt", "tls.crt"),
 | 
			
		||||
				SecretDataKeyForKey: maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "secretDataKeyForKey", "tls.key"),
 | 
			
		||||
				Namespace:           maputil.GetOrDefaultString(options.ProviderDeployConfig, "namespace", "default"),
 | 
			
		||||
				SecretName:          maputil.GetString(options.ProviderDeployConfig, "secretName"),
 | 
			
		||||
				SecretType:          maputil.GetOrDefaultString(options.ProviderDeployConfig, "secretType", "kubernetes.io/tls"),
 | 
			
		||||
				SecretDataKeyForCrt: maputil.GetOrDefaultString(options.ProviderDeployConfig, "secretDataKeyForCrt", "tls.crt"),
 | 
			
		||||
				SecretDataKeyForKey: maputil.GetOrDefaultString(options.ProviderDeployConfig, "secretDataKeyForKey", "tls.key"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -564,7 +564,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeQiniuCDN, domain.DeployProviderTypeQiniuPili:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForQiniu{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -573,7 +573,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pQiniuCDN.NewDeployer(&pQiniuCDN.DeployerConfig{
 | 
			
		||||
					AccessKey: access.AccessKey,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -581,8 +581,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pQiniuPili.NewDeployer(&pQiniuPili.DeployerConfig{
 | 
			
		||||
					AccessKey: access.AccessKey,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Hub:       maps.GetValueAsString(options.ProviderDeployConfig, "hub"),
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Hub:       maputil.GetString(options.ProviderDeployConfig, "hub"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -594,7 +594,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeSafeLine:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForSafeLine{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -602,8 +602,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				ApiUrl:                   access.ApiUrl,
 | 
			
		||||
				ApiToken:                 access.ApiToken,
 | 
			
		||||
				AllowInsecureConnections: access.AllowInsecureConnections,
 | 
			
		||||
				ResourceType:             pSafeLine.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
				CertificateId:            maps.GetValueAsInt32(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
				ResourceType:             pSafeLine.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
				CertificateId:            maputil.GetInt32(options.ProviderDeployConfig, "certificateId"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -611,7 +611,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeSSH:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForSSH{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -622,16 +622,16 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				SshPassword:      access.Password,
 | 
			
		||||
				SshKey:           access.Key,
 | 
			
		||||
				SshKeyPassphrase: access.KeyPassphrase,
 | 
			
		||||
				UseSCP:           maps.GetValueAsBool(options.ProviderDeployConfig, "useSCP"),
 | 
			
		||||
				PreCommand:       maps.GetValueAsString(options.ProviderDeployConfig, "preCommand"),
 | 
			
		||||
				PostCommand:      maps.GetValueAsString(options.ProviderDeployConfig, "postCommand"),
 | 
			
		||||
				OutputFormat:     pSSH.OutputFormatType(maps.GetValueOrDefaultAsString(options.ProviderDeployConfig, "format", string(pSSH.OUTPUT_FORMAT_PEM))),
 | 
			
		||||
				OutputCertPath:   maps.GetValueAsString(options.ProviderDeployConfig, "certPath"),
 | 
			
		||||
				OutputKeyPath:    maps.GetValueAsString(options.ProviderDeployConfig, "keyPath"),
 | 
			
		||||
				PfxPassword:      maps.GetValueAsString(options.ProviderDeployConfig, "pfxPassword"),
 | 
			
		||||
				JksAlias:         maps.GetValueAsString(options.ProviderDeployConfig, "jksAlias"),
 | 
			
		||||
				JksKeypass:       maps.GetValueAsString(options.ProviderDeployConfig, "jksKeypass"),
 | 
			
		||||
				JksStorepass:     maps.GetValueAsString(options.ProviderDeployConfig, "jksStorepass"),
 | 
			
		||||
				UseSCP:           maputil.GetBool(options.ProviderDeployConfig, "useSCP"),
 | 
			
		||||
				PreCommand:       maputil.GetString(options.ProviderDeployConfig, "preCommand"),
 | 
			
		||||
				PostCommand:      maputil.GetString(options.ProviderDeployConfig, "postCommand"),
 | 
			
		||||
				OutputFormat:     pSSH.OutputFormatType(maputil.GetOrDefaultString(options.ProviderDeployConfig, "format", string(pSSH.OUTPUT_FORMAT_PEM))),
 | 
			
		||||
				OutputCertPath:   maputil.GetString(options.ProviderDeployConfig, "certPath"),
 | 
			
		||||
				OutputKeyPath:    maputil.GetString(options.ProviderDeployConfig, "keyPath"),
 | 
			
		||||
				PfxPassword:      maputil.GetString(options.ProviderDeployConfig, "pfxPassword"),
 | 
			
		||||
				JksAlias:         maputil.GetString(options.ProviderDeployConfig, "jksAlias"),
 | 
			
		||||
				JksKeypass:       maputil.GetString(options.ProviderDeployConfig, "jksKeypass"),
 | 
			
		||||
				JksStorepass:     maputil.GetString(options.ProviderDeployConfig, "jksStorepass"),
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -639,7 +639,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeTencentCloudCDN, domain.DeployProviderTypeTencentCloudCLB, domain.DeployProviderTypeTencentCloudCOS, domain.DeployProviderTypeTencentCloudCSS, domain.DeployProviderTypeTencentCloudECDN, domain.DeployProviderTypeTencentCloudEO, domain.DeployProviderTypeTencentCloudSCF, domain.DeployProviderTypeTencentCloudSSLDeploy, domain.DeployProviderTypeTencentCloudVOD, domain.DeployProviderTypeTencentCloudWAF:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForTencentCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -648,7 +648,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudCDN.NewDeployer(&pTencentCloudCDN.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -656,11 +656,11 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudCLB.NewDeployer(&pTencentCloudCLB.DeployerConfig{
 | 
			
		||||
					SecretId:       access.SecretId,
 | 
			
		||||
					SecretKey:      access.SecretKey,
 | 
			
		||||
					Region:         maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:   pTencentCloudCLB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId: maps.GetValueAsString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:     maps.GetValueAsString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Domain:         maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:         maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:   pTencentCloudCLB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					LoadbalancerId: maputil.GetString(options.ProviderDeployConfig, "loadbalancerId"),
 | 
			
		||||
					ListenerId:     maputil.GetString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Domain:         maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -668,9 +668,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudCOS.NewDeployer(&pTencentCloudCOS.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Region:    maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:    maps.GetValueAsString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:    maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:    maputil.GetString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -678,7 +678,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudCSS.NewDeployer(&pTencentCloudCSS.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -686,7 +686,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudECDN.NewDeployer(&pTencentCloudECDN.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -694,8 +694,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudEO.NewDeployer(&pTencentCloudEO.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					ZoneId:    maps.GetValueAsString(options.ProviderDeployConfig, "zoneId"),
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					ZoneId:    maputil.GetString(options.ProviderDeployConfig, "zoneId"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -703,8 +703,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudSCF.NewDeployer(&pTencentCloudSCF.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					Region:    maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:    maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -712,9 +712,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudSSLDeploy.NewDeployer(&pTencentCloudSSLDeploy.DeployerConfig{
 | 
			
		||||
					SecretId:     access.SecretId,
 | 
			
		||||
					SecretKey:    access.SecretKey,
 | 
			
		||||
					Region:       maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType: maps.GetValueAsString(options.ProviderDeployConfig, "resourceType"),
 | 
			
		||||
					ResourceIds:  slices.Filter(strings.Split(maps.GetValueAsString(options.ProviderDeployConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
					Region:       maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType: maputil.GetString(options.ProviderDeployConfig, "resourceType"),
 | 
			
		||||
					ResourceIds:  sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderDeployConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -722,8 +722,8 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudVOD.NewDeployer(&pTencentCloudVOD.DeployerConfig{
 | 
			
		||||
					SecretId:  access.SecretId,
 | 
			
		||||
					SecretKey: access.SecretKey,
 | 
			
		||||
					SubAppId:  maps.GetValueAsInt64(options.ProviderDeployConfig, "subAppId"),
 | 
			
		||||
					Domain:    maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					SubAppId:  maputil.GetInt64(options.ProviderDeployConfig, "subAppId"),
 | 
			
		||||
					Domain:    maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -731,9 +731,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pTencentCloudWAF.NewDeployer(&pTencentCloudWAF.DeployerConfig{
 | 
			
		||||
					SecretId:   access.SecretId,
 | 
			
		||||
					SecretKey:  access.SecretKey,
 | 
			
		||||
					Domain:     maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					DomainId:   maps.GetValueAsString(options.ProviderDeployConfig, "domainId"),
 | 
			
		||||
					InstanceId: maps.GetValueAsString(options.ProviderDeployConfig, "instanceId"),
 | 
			
		||||
					Domain:     maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					DomainId:   maputil.GetString(options.ProviderDeployConfig, "domainId"),
 | 
			
		||||
					InstanceId: maputil.GetString(options.ProviderDeployConfig, "instanceId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -745,7 +745,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeUCloudUCDN, domain.DeployProviderTypeUCloudUS3:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForUCloud{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -755,7 +755,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
					PrivateKey: access.PrivateKey,
 | 
			
		||||
					PublicKey:  access.PublicKey,
 | 
			
		||||
					ProjectId:  access.ProjectId,
 | 
			
		||||
					DomainId:   maps.GetValueAsString(options.ProviderDeployConfig, "domainId"),
 | 
			
		||||
					DomainId:   maputil.GetString(options.ProviderDeployConfig, "domainId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -764,9 +764,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
					PrivateKey: access.PrivateKey,
 | 
			
		||||
					PublicKey:  access.PublicKey,
 | 
			
		||||
					ProjectId:  access.ProjectId,
 | 
			
		||||
					Region:     maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:     maps.GetValueAsString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:     maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:     maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:     maputil.GetString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:     maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -778,7 +778,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeVolcEngineCDN, domain.DeployProviderTypeVolcEngineCLB, domain.DeployProviderTypeVolcEngineDCDN, domain.DeployProviderTypeVolcEngineImageX, domain.DeployProviderTypeVolcEngineLive, domain.DeployProviderTypeVolcEngineTOS:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForVolcEngine{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -787,7 +787,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pVolcEngineCDN.NewDeployer(&pVolcEngineCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.SecretAccessKey,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -795,9 +795,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pVolcEngineCLB.NewDeployer(&pVolcEngineCLB.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pVolcEngineCLB.ResourceType(maps.GetValueAsString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					ListenerId:      maps.GetValueAsString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ResourceType:    pVolcEngineCLB.ResourceType(maputil.GetString(options.ProviderDeployConfig, "resourceType")),
 | 
			
		||||
					ListenerId:      maputil.GetString(options.ProviderDeployConfig, "listenerId"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -805,7 +805,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pVolcEngineDCDN.NewDeployer(&pVolcEngineDCDN.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.SecretAccessKey,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -813,9 +813,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pVolcEngineImageX.NewDeployer(&pVolcEngineImageX.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ServiceId:       maps.GetValueAsString(options.ProviderDeployConfig, "serviceId"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					ServiceId:       maputil.GetString(options.ProviderDeployConfig, "serviceId"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -823,7 +823,7 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pVolcEngineLive.NewDeployer(&pVolcEngineLive.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.SecretAccessKey,
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -831,9 +831,9 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
				deployer, err := pVolcEngineTOS.NewDeployer(&pVolcEngineTOS.DeployerConfig{
 | 
			
		||||
					AccessKeyId:     access.AccessKeyId,
 | 
			
		||||
					AccessKeySecret: access.SecretAccessKey,
 | 
			
		||||
					Region:          maps.GetValueAsString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:          maps.GetValueAsString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:          maps.GetValueAsString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
					Region:          maputil.GetString(options.ProviderDeployConfig, "region"),
 | 
			
		||||
					Bucket:          maputil.GetString(options.ProviderDeployConfig, "bucket"),
 | 
			
		||||
					Domain:          maputil.GetString(options.ProviderDeployConfig, "domain"),
 | 
			
		||||
				})
 | 
			
		||||
				return deployer, err
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -845,13 +845,13 @@ func createDeployer(options *deployerOptions) (deployer.Deployer, error) {
 | 
			
		|||
	case domain.DeployProviderTypeWebhook:
 | 
			
		||||
		{
 | 
			
		||||
			access := domain.AccessConfigForWebhook{}
 | 
			
		||||
			if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
			if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil {
 | 
			
		||||
				return nil, fmt.Errorf("failed to populate provider access config: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			deployer, err := pWebhook.NewDeployer(&pWebhook.DeployerConfig{
 | 
			
		||||
				WebhookUrl:               access.Url,
 | 
			
		||||
				WebhookData:              maps.GetValueAsString(options.ProviderDeployConfig, "webhookData"),
 | 
			
		||||
				WebhookData:              maputil.GetString(options.ProviderDeployConfig, "webhookData"),
 | 
			
		||||
				AllowInsecureConnections: access.AllowInsecureConnections,
 | 
			
		||||
			})
 | 
			
		||||
			return deployer, err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const CollectionNameCertificate = "certificate"
 | 
			
		||||
| 
						 | 
				
			
			@ -105,10 +105,10 @@ func (c *Certificate) PopulateFromPEM(certPEM, privkeyPEM string) *Certificate {
 | 
			
		|||
	c.Certificate = certPEM
 | 
			
		||||
	c.PrivateKey = privkeyPEM
 | 
			
		||||
 | 
			
		||||
	_, issuerCertPEM, _ := certs.ExtractCertificatesFromPEM(certPEM)
 | 
			
		||||
	_, issuerCertPEM, _ := certutil.ExtractCertificatesFromPEM(certPEM)
 | 
			
		||||
	c.IssuerCertificate = issuerCertPEM
 | 
			
		||||
 | 
			
		||||
	certX509, _ := certs.ParseCertificateFromPEM(certPEM)
 | 
			
		||||
	certX509, _ := certutil.ParseCertificateFromPEM(certPEM)
 | 
			
		||||
	if certX509 != nil {
 | 
			
		||||
		c.PopulateFromX509(certX509)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@ package domain
 | 
			
		|||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maps"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maputil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const CollectionNameWorkflow = "workflow"
 | 
			
		||||
| 
						 | 
				
			
			@ -97,19 +97,19 @@ type WorkflowNodeConfigForNotify struct {
 | 
			
		|||
	Message string `json:"message"` // 通知内容
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) getConfigValueAsString(key string) string {
 | 
			
		||||
	return maps.GetValueAsString(n.Config, key)
 | 
			
		||||
func (n *WorkflowNode) getConfigString(key string) string {
 | 
			
		||||
	return maputil.GetString(n.Config, key)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) getConfigValueAsBool(key string) bool {
 | 
			
		||||
	return maps.GetValueAsBool(n.Config, key)
 | 
			
		||||
func (n *WorkflowNode) getConfigBool(key string) bool {
 | 
			
		||||
	return maputil.GetBool(n.Config, key)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) getConfigValueAsInt32(key string) int32 {
 | 
			
		||||
	return maps.GetValueAsInt32(n.Config, key)
 | 
			
		||||
func (n *WorkflowNode) getConfigInt32(key string) int32 {
 | 
			
		||||
	return maputil.GetInt32(n.Config, key)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) getConfigValueAsMap(key string) map[string]any {
 | 
			
		||||
func (n *WorkflowNode) getConfigMap(key string) map[string]any {
 | 
			
		||||
	if val, ok := n.Config[key]; ok {
 | 
			
		||||
		if result, ok := val.(map[string]any); ok {
 | 
			
		||||
			return result
 | 
			
		||||
| 
						 | 
				
			
			@ -120,50 +120,50 @@ func (n *WorkflowNode) getConfigValueAsMap(key string) map[string]any {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) GetConfigForApply() WorkflowNodeConfigForApply {
 | 
			
		||||
	skipBeforeExpiryDays := n.getConfigValueAsInt32("skipBeforeExpiryDays")
 | 
			
		||||
	skipBeforeExpiryDays := n.getConfigInt32("skipBeforeExpiryDays")
 | 
			
		||||
	if skipBeforeExpiryDays == 0 {
 | 
			
		||||
		skipBeforeExpiryDays = 30
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return WorkflowNodeConfigForApply{
 | 
			
		||||
		Domains:               n.getConfigValueAsString("domains"),
 | 
			
		||||
		ContactEmail:          n.getConfigValueAsString("contactEmail"),
 | 
			
		||||
		Provider:              n.getConfigValueAsString("provider"),
 | 
			
		||||
		ProviderAccessId:      n.getConfigValueAsString("providerAccessId"),
 | 
			
		||||
		ProviderConfig:        n.getConfigValueAsMap("providerConfig"),
 | 
			
		||||
		KeyAlgorithm:          n.getConfigValueAsString("keyAlgorithm"),
 | 
			
		||||
		Nameservers:           n.getConfigValueAsString("nameservers"),
 | 
			
		||||
		DnsPropagationTimeout: n.getConfigValueAsInt32("dnsPropagationTimeout"),
 | 
			
		||||
		DnsTTL:                n.getConfigValueAsInt32("dnsTTL"),
 | 
			
		||||
		DisableFollowCNAME:    n.getConfigValueAsBool("disableFollowCNAME"),
 | 
			
		||||
		DisableARI:            n.getConfigValueAsBool("disableARI"),
 | 
			
		||||
		Domains:               n.getConfigString("domains"),
 | 
			
		||||
		ContactEmail:          n.getConfigString("contactEmail"),
 | 
			
		||||
		Provider:              n.getConfigString("provider"),
 | 
			
		||||
		ProviderAccessId:      n.getConfigString("providerAccessId"),
 | 
			
		||||
		ProviderConfig:        n.getConfigMap("providerConfig"),
 | 
			
		||||
		KeyAlgorithm:          n.getConfigString("keyAlgorithm"),
 | 
			
		||||
		Nameservers:           n.getConfigString("nameservers"),
 | 
			
		||||
		DnsPropagationTimeout: n.getConfigInt32("dnsPropagationTimeout"),
 | 
			
		||||
		DnsTTL:                n.getConfigInt32("dnsTTL"),
 | 
			
		||||
		DisableFollowCNAME:    n.getConfigBool("disableFollowCNAME"),
 | 
			
		||||
		DisableARI:            n.getConfigBool("disableARI"),
 | 
			
		||||
		SkipBeforeExpiryDays:  skipBeforeExpiryDays,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) GetConfigForUpload() WorkflowNodeConfigForUpload {
 | 
			
		||||
	return WorkflowNodeConfigForUpload{
 | 
			
		||||
		Certificate: n.getConfigValueAsString("certificate"),
 | 
			
		||||
		PrivateKey:  n.getConfigValueAsString("privateKey"),
 | 
			
		||||
		Domains:     n.getConfigValueAsString("domains"),
 | 
			
		||||
		Certificate: n.getConfigString("certificate"),
 | 
			
		||||
		PrivateKey:  n.getConfigString("privateKey"),
 | 
			
		||||
		Domains:     n.getConfigString("domains"),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) GetConfigForDeploy() WorkflowNodeConfigForDeploy {
 | 
			
		||||
	return WorkflowNodeConfigForDeploy{
 | 
			
		||||
		Certificate:         n.getConfigValueAsString("certificate"),
 | 
			
		||||
		Provider:            n.getConfigValueAsString("provider"),
 | 
			
		||||
		ProviderAccessId:    n.getConfigValueAsString("providerAccessId"),
 | 
			
		||||
		ProviderConfig:      n.getConfigValueAsMap("providerConfig"),
 | 
			
		||||
		SkipOnLastSucceeded: n.getConfigValueAsBool("skipOnLastSucceeded"),
 | 
			
		||||
		Certificate:         n.getConfigString("certificate"),
 | 
			
		||||
		Provider:            n.getConfigString("provider"),
 | 
			
		||||
		ProviderAccessId:    n.getConfigString("providerAccessId"),
 | 
			
		||||
		ProviderConfig:      n.getConfigMap("providerConfig"),
 | 
			
		||||
		SkipOnLastSucceeded: n.getConfigBool("skipOnLastSucceeded"),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *WorkflowNode) GetConfigForNotify() WorkflowNodeConfigForNotify {
 | 
			
		||||
	return WorkflowNodeConfigForNotify{
 | 
			
		||||
		Channel: n.getConfigValueAsString("channel"),
 | 
			
		||||
		Subject: n.getConfigValueAsString("subject"),
 | 
			
		||||
		Message: n.getConfigValueAsString("message"),
 | 
			
		||||
		Channel: n.getConfigString("channel"),
 | 
			
		||||
		Subject: n.getConfigString("subject"),
 | 
			
		||||
		Message: n.getConfigString("message"),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/domain"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/notifier"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maps"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maputil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/repository"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ func getEnabledNotifiers() ([]notifier.Notifier, error) {
 | 
			
		|||
 | 
			
		||||
	notifiers := make([]notifier.Notifier, 0)
 | 
			
		||||
	for k, v := range rs {
 | 
			
		||||
		if !maps.GetValueAsBool(v, "enabled") {
 | 
			
		||||
		if !maputil.GetBool(v, "enabled") {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ import (
 | 
			
		|||
	pTelegram "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/telegram"
 | 
			
		||||
	pWebhook "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/webhook"
 | 
			
		||||
	pWeCom "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/wecom"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maps"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/maputil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func createNotifier(channel domain.NotifyChannelType, channelConfig map[string]any) (notifier.Notifier, error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -24,52 +24,52 @@ func createNotifier(channel domain.NotifyChannelType, channelConfig map[string]a
 | 
			
		|||
	switch channel {
 | 
			
		||||
	case domain.NotifyChannelTypeBark:
 | 
			
		||||
		return pBark.NewNotifier(&pBark.NotifierConfig{
 | 
			
		||||
			DeviceKey: maps.GetValueAsString(channelConfig, "deviceKey"),
 | 
			
		||||
			ServerUrl: maps.GetValueAsString(channelConfig, "serverUrl"),
 | 
			
		||||
			DeviceKey: maputil.GetString(channelConfig, "deviceKey"),
 | 
			
		||||
			ServerUrl: maputil.GetString(channelConfig, "serverUrl"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeDingTalk:
 | 
			
		||||
		return pDingTalk.NewNotifier(&pDingTalk.NotifierConfig{
 | 
			
		||||
			AccessToken: maps.GetValueAsString(channelConfig, "accessToken"),
 | 
			
		||||
			Secret:      maps.GetValueAsString(channelConfig, "secret"),
 | 
			
		||||
			AccessToken: maputil.GetString(channelConfig, "accessToken"),
 | 
			
		||||
			Secret:      maputil.GetString(channelConfig, "secret"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeEmail:
 | 
			
		||||
		return pEmail.NewNotifier(&pEmail.NotifierConfig{
 | 
			
		||||
			SmtpHost:        maps.GetValueAsString(channelConfig, "smtpHost"),
 | 
			
		||||
			SmtpPort:        maps.GetValueAsInt32(channelConfig, "smtpPort"),
 | 
			
		||||
			SmtpTLS:         maps.GetValueOrDefaultAsBool(channelConfig, "smtpTLS", true),
 | 
			
		||||
			Username:        maps.GetValueOrDefaultAsString(channelConfig, "username", maps.GetValueAsString(channelConfig, "senderAddress")),
 | 
			
		||||
			Password:        maps.GetValueAsString(channelConfig, "password"),
 | 
			
		||||
			SenderAddress:   maps.GetValueAsString(channelConfig, "senderAddress"),
 | 
			
		||||
			ReceiverAddress: maps.GetValueAsString(channelConfig, "receiverAddress"),
 | 
			
		||||
			SmtpHost:        maputil.GetString(channelConfig, "smtpHost"),
 | 
			
		||||
			SmtpPort:        maputil.GetInt32(channelConfig, "smtpPort"),
 | 
			
		||||
			SmtpTLS:         maputil.GetOrDefaultBool(channelConfig, "smtpTLS", true),
 | 
			
		||||
			Username:        maputil.GetOrDefaultString(channelConfig, "username", maputil.GetString(channelConfig, "senderAddress")),
 | 
			
		||||
			Password:        maputil.GetString(channelConfig, "password"),
 | 
			
		||||
			SenderAddress:   maputil.GetString(channelConfig, "senderAddress"),
 | 
			
		||||
			ReceiverAddress: maputil.GetString(channelConfig, "receiverAddress"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeLark:
 | 
			
		||||
		return pLark.NewNotifier(&pLark.NotifierConfig{
 | 
			
		||||
			WebhookUrl: maps.GetValueAsString(channelConfig, "webhookUrl"),
 | 
			
		||||
			WebhookUrl: maputil.GetString(channelConfig, "webhookUrl"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeServerChan:
 | 
			
		||||
		return pServerChan.NewNotifier(&pServerChan.NotifierConfig{
 | 
			
		||||
			Url: maps.GetValueAsString(channelConfig, "url"),
 | 
			
		||||
			Url: maputil.GetString(channelConfig, "url"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeTelegram:
 | 
			
		||||
		return pTelegram.NewNotifier(&pTelegram.NotifierConfig{
 | 
			
		||||
			ApiToken: maps.GetValueAsString(channelConfig, "apiToken"),
 | 
			
		||||
			ChatId:   maps.GetValueAsInt64(channelConfig, "chatId"),
 | 
			
		||||
			ApiToken: maputil.GetString(channelConfig, "apiToken"),
 | 
			
		||||
			ChatId:   maputil.GetInt64(channelConfig, "chatId"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeWebhook:
 | 
			
		||||
		return pWebhook.NewNotifier(&pWebhook.NotifierConfig{
 | 
			
		||||
			Url:                      maps.GetValueAsString(channelConfig, "url"),
 | 
			
		||||
			AllowInsecureConnections: maps.GetValueAsBool(channelConfig, "allowInsecureConnections"),
 | 
			
		||||
			Url:                      maputil.GetString(channelConfig, "url"),
 | 
			
		||||
			AllowInsecureConnections: maputil.GetBool(channelConfig, "allowInsecureConnections"),
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
	case domain.NotifyChannelTypeWeCom:
 | 
			
		||||
		return pWeCom.NewNotifier(&pWeCom.NotifierConfig{
 | 
			
		||||
			WebhookUrl: maps.GetValueAsString(channelConfig, "webhookUrl"),
 | 
			
		||||
			WebhookUrl: maputil.GetString(channelConfig, "webhookUrl"),
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/slices"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/sliceutil"
 | 
			
		||||
	btsdk "github.com/usual2970/certimate/internal/pkg/vendors/btpanel-sdk"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +105,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
 | 
			
		||||
			// 设置站点证书
 | 
			
		||||
			sslSetBatchCertToSiteReq := &btsdk.SSLSetBatchCertToSiteRequest{
 | 
			
		||||
				BatchInfo: slices.Map(d.config.SiteNames, func(siteName string) *btsdk.SSLSetBatchCertToSiteRequestBatchInfo {
 | 
			
		||||
				BatchInfo: sliceutil.Map(d.config.SiteNames, func(siteName string) *btsdk.SSLSetBatchCertToSiteRequestBatchInfo {
 | 
			
		||||
					return &btsdk.SSLSetBatchCertToSiteRequestBatchInfo{
 | 
			
		||||
						SiteName: siteName,
 | 
			
		||||
						SSLHash:  sslCertSaveCertResp.SSLHash,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	edgsdk "github.com/usual2970/certimate/internal/pkg/vendors/edgio-sdk/applications/v7"
 | 
			
		||||
	edgsdkDtos "github.com/usual2970/certimate/internal/pkg/vendors/edgio-sdk/applications/v7/dtos"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer {
 | 
			
		|||
 | 
			
		||||
func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPem string) (*deployer.DeployResult, error) {
 | 
			
		||||
	// 提取 Edgio 所需的服务端证书和中间证书内容
 | 
			
		||||
	privateCertPem, intermediateCertPem, err := certs.ExtractCertificatesFromPEM(certPem)
 | 
			
		||||
	privateCertPem, intermediateCertPem, err := certutil.ExtractCertificatesFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ import (
 | 
			
		|||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/jdcloud-ssl"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/slices"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/sliceutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DeployerConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL
 | 
			
		|||
	} else {
 | 
			
		||||
		// 指定 SNI,需部署到扩展证书
 | 
			
		||||
 | 
			
		||||
		extCertSpecs := slices.Filter(describeListenerResp.Result.Listener.ExtensionCertificateSpecs, func(extCertSpec jdLbModel.ExtensionCertificateSpec) bool {
 | 
			
		||||
		extCertSpecs := sliceutil.Filter(describeListenerResp.Result.Listener.ExtensionCertificateSpecs, func(extCertSpec jdLbModel.ExtensionCertificateSpec) bool {
 | 
			
		||||
			return extCertSpec.Domain == d.config.Domain
 | 
			
		||||
		})
 | 
			
		||||
		if len(extCertSpecs) == 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -228,7 +228,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL
 | 
			
		|||
		updateListenerCertificatesReq := jdLbApi.NewUpdateListenerCertificatesRequest(
 | 
			
		||||
			d.config.RegionId,
 | 
			
		||||
			cloudListenerId,
 | 
			
		||||
			slices.Map(extCertSpecs, func(extCertSpec jdLbModel.ExtensionCertificateSpec) jdLbModel.ExtCertificateUpdateSpec {
 | 
			
		||||
			sliceutil.Map(extCertSpecs, func(extCertSpec jdLbModel.ExtensionCertificateSpec) jdLbModel.ExtCertificateUpdateSpec {
 | 
			
		||||
				return jdLbModel.ExtCertificateUpdateSpec{
 | 
			
		||||
					CertificateBindId: extCertSpec.CertificateBindId,
 | 
			
		||||
					CertificateId:     &cloudCertId,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ import (
 | 
			
		|||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DeployerConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
		return nil, errors.New("config `secretDataKeyForKey` is required")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,8 +11,8 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/files"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/fileutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DeployerConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -83,36 +83,36 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
	// 写入证书和私钥文件
 | 
			
		||||
	switch d.config.OutputFormat {
 | 
			
		||||
	case OUTPUT_FORMAT_PEM:
 | 
			
		||||
		if err := files.WriteString(d.config.OutputCertPath, certPem); err != nil {
 | 
			
		||||
		if err := fileutil.WriteString(d.config.OutputCertPath, certPem); err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to save certificate file")
 | 
			
		||||
		}
 | 
			
		||||
		d.logger.Info("ssl certificate file saved", slog.String("path", d.config.OutputCertPath))
 | 
			
		||||
 | 
			
		||||
		if err := files.WriteString(d.config.OutputKeyPath, privkeyPem); err != nil {
 | 
			
		||||
		if err := fileutil.WriteString(d.config.OutputKeyPath, privkeyPem); err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to save private key file")
 | 
			
		||||
		}
 | 
			
		||||
		d.logger.Info("ssl private key file saved", slog.String("path", d.config.OutputKeyPath))
 | 
			
		||||
 | 
			
		||||
	case OUTPUT_FORMAT_PFX:
 | 
			
		||||
		pfxData, err := certs.TransformCertificateFromPEMToPFX(certPem, privkeyPem, d.config.PfxPassword)
 | 
			
		||||
		pfxData, err := certutil.TransformCertificateFromPEMToPFX(certPem, privkeyPem, d.config.PfxPassword)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to transform certificate to PFX")
 | 
			
		||||
		}
 | 
			
		||||
		d.logger.Info("ssl certificate transformed to pfx")
 | 
			
		||||
 | 
			
		||||
		if err := files.Write(d.config.OutputCertPath, pfxData); err != nil {
 | 
			
		||||
		if err := fileutil.Write(d.config.OutputCertPath, pfxData); err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to save certificate file")
 | 
			
		||||
		}
 | 
			
		||||
		d.logger.Info("ssl certificate file saved", slog.String("path", d.config.OutputCertPath))
 | 
			
		||||
 | 
			
		||||
	case OUTPUT_FORMAT_JKS:
 | 
			
		||||
		jksData, err := certs.TransformCertificateFromPEMToJKS(certPem, privkeyPem, d.config.JksAlias, d.config.JksKeypass, d.config.JksStorepass)
 | 
			
		||||
		jksData, err := certutil.TransformCertificateFromPEMToJKS(certPem, privkeyPem, d.config.JksAlias, d.config.JksKeypass, d.config.JksStorepass)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to transform certificate to JKS")
 | 
			
		||||
		}
 | 
			
		||||
		d.logger.Info("ssl certificate transformed to jks")
 | 
			
		||||
 | 
			
		||||
		if err := files.Write(d.config.OutputCertPath, jksData); err != nil {
 | 
			
		||||
		if err := fileutil.Write(d.config.OutputCertPath, jksData); err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to save certificate file")
 | 
			
		||||
		}
 | 
			
		||||
		d.logger.Info("ssl certificate file saved", slog.String("path", d.config.OutputCertPath))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ import (
 | 
			
		|||
	"golang.org/x/crypto/ssh"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DeployerConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
		d.logger.Info("ssl private key file uploaded", slog.String("path", d.config.OutputKeyPath))
 | 
			
		||||
 | 
			
		||||
	case OUTPUT_FORMAT_PFX:
 | 
			
		||||
		pfxData, err := certs.TransformCertificateFromPEMToPFX(certPem, privkeyPem, d.config.PfxPassword)
 | 
			
		||||
		pfxData, err := certutil.TransformCertificateFromPEMToPFX(certPem, privkeyPem, d.config.PfxPassword)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to transform certificate to PFX")
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +137,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
		d.logger.Info("ssl certificate file uploaded", slog.String("path", d.config.OutputCertPath))
 | 
			
		||||
 | 
			
		||||
	case OUTPUT_FORMAT_JKS:
 | 
			
		||||
		jksData, err := certs.TransformCertificateFromPEMToJKS(certPem, privkeyPem, d.config.JksAlias, d.config.JksKeypass, d.config.JksStorepass)
 | 
			
		||||
		jksData, err := certutil.TransformCertificateFromPEMToJKS(certPem, privkeyPem, d.config.JksAlias, d.config.JksKeypass, d.config.JksStorepass)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, xerrors.Wrap(err, "failed to transform certificate to JKS")
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/deployer"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DeployerConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPem string) (*deployer.DeployResult, error) {
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, xerrors.Wrap(err, "failed to parse x509")
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -99,12 +99,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
					if *getUserCertificateDetailResp.Body.Cert == certPem {
 | 
			
		||||
						isSameCert = true
 | 
			
		||||
					} else {
 | 
			
		||||
						oldCertX509, err := certs.ParseCertificateFromPEM(*getUserCertificateDetailResp.Body.Cert)
 | 
			
		||||
						oldCertX509, err := certutil.ParseCertificateFromPEM(*getUserCertificateDetailResp.Body.Cert)
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							continue
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						isSameCert = certs.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
						isSameCert = certutil.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					// 如果已存在相同证书,直接返回
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import (
 | 
			
		|||
	"golang.org/x/exp/slices"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -60,13 +60,13 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 生成 AWS 业务参数
 | 
			
		||||
	scertPem, _ := certs.ConvertCertificateToPEM(certX509)
 | 
			
		||||
	scertPem, _ := certutil.ConvertCertificateToPEM(certX509)
 | 
			
		||||
	bcertPem := certPem
 | 
			
		||||
 | 
			
		||||
	// 获取证书列表,避免重复上传
 | 
			
		||||
| 
						 | 
				
			
			@ -112,12 +112,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
					oldCertPem = aws.ToString(getCertificateResp.Certificate)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				oldCertX509, err := certs.ParseCertificateFromPEM(oldCertPem)
 | 
			
		||||
				oldCertX509, err := certutil.ParseCertificateFromPEM(oldCertPem)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if !certs.EqualCertificate(certX509, oldCertX509) {
 | 
			
		||||
				if !certutil.EqualCertificate(certX509, oldCertX509) {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	azcommon "github.com/usual2970/certimate/internal/pkg/vendors/azure-sdk/common"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
					continue
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if !certs.EqualCertificate(certX509, oldCertX509) {
 | 
			
		||||
				if !certutil.EqualCertificate(certX509, oldCertX509) {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	hwsdk "github.com/usual2970/certimate/internal/pkg/vendors/huaweicloud-sdk"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -94,12 +94,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
				if certDetail.Certificate == certPem {
 | 
			
		||||
					isSameCert = true
 | 
			
		||||
				} else {
 | 
			
		||||
					oldCertX509, err := certs.ParseCertificateFromPEM(certDetail.Certificate)
 | 
			
		||||
					oldCertX509, err := certutil.ParseCertificateFromPEM(certDetail.Certificate)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						continue
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					isSameCert = certs.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
					isSameCert = certutil.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// 如果已存在相同证书,直接返回
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	hwsdk "github.com/usual2970/certimate/internal/pkg/vendors/huaweicloud-sdk"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -103,12 +103,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
				if *exportCertificateResp.Certificate == certPem {
 | 
			
		||||
					isSameCert = true
 | 
			
		||||
				} else {
 | 
			
		||||
					oldCertX509, err := certs.ParseCertificateFromPEM(*exportCertificateResp.Certificate)
 | 
			
		||||
					oldCertX509, err := certutil.ParseCertificateFromPEM(*exportCertificateResp.Certificate)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						continue
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					isSameCert = certs.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
					isSameCert = certutil.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// 如果已存在相同证书,直接返回
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ import (
 | 
			
		|||
	xerrors "github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	hwsdk "github.com/usual2970/certimate/internal/pkg/vendors/huaweicloud-sdk"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -103,12 +103,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
				if *showCertificateResp.Content == certPem {
 | 
			
		||||
					isSameCert = true
 | 
			
		||||
				} else {
 | 
			
		||||
					oldCertX509, err := certs.ParseCertificateFromPEM(*showCertificateResp.Content)
 | 
			
		||||
					oldCertX509, err := certutil.ParseCertificateFromPEM(*showCertificateResp.Content)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						continue
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					isSameCert = certs.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
					isSameCert = certutil.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// 如果已存在相同证书,直接返回
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ import (
 | 
			
		|||
	"golang.org/x/exp/slices"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ import (
 | 
			
		|||
	"github.com/qiniu/go-sdk/v7/auth"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	qiniusdk "github.com/usual2970/certimate/internal/pkg/vendors/qiniu-sdk"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ import (
 | 
			
		|||
	ucloudauth "github.com/ucloud/ucloud-sdk-go/ucloud/auth"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	usslsdk "github.com/usual2970/certimate/internal/pkg/vendors/ucloud-sdk/ussl"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ import (
 | 
			
		|||
	ve "github.com/volcengine/volcengine-go-sdk/volcengine"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import (
 | 
			
		|||
	ve "github.com/volcengine/volcengine-go-sdk/volcengine"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/core/uploader"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UploaderConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader {
 | 
			
		|||
 | 
			
		||||
func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) {
 | 
			
		||||
	// 解析证书内容
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(certPem)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -88,12 +88,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe
 | 
			
		|||
			if certificate == certPem {
 | 
			
		||||
				isSameCert = true
 | 
			
		||||
			} else {
 | 
			
		||||
				oldCertX509, err := certs.ParseCertificateFromPEM(certificate)
 | 
			
		||||
				oldCertX509, err := certutil.ParseCertificateFromPEM(certificate)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				isSameCert = certs.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
				isSameCert = certutil.EqualCertificate(certX509, oldCertX509)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// 如果已存在相同证书,直接返回
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package certs
 | 
			
		||||
package certutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/x509"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package certs
 | 
			
		||||
package certutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/ecdsa"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package certs
 | 
			
		||||
package certutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/pem"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package certs
 | 
			
		||||
package certutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package certs
 | 
			
		||||
package certutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package files
 | 
			
		||||
package fileutil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,7 @@
 | 
			
		|||
package maps
 | 
			
		||||
package maputil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	mapstructure "github.com/go-viper/mapstructure/v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 以字符串形式从字典中获取指定键的值。
 | 
			
		||||
| 
						 | 
				
			
			@ -14,8 +12,8 @@ import (
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在或者值的类型不是字符串,则返回空字符串。
 | 
			
		||||
func GetValueAsString(dict map[string]any, key string) string {
 | 
			
		||||
	return GetValueOrDefaultAsString(dict, key, "")
 | 
			
		||||
func GetString(dict map[string]any, key string) string {
 | 
			
		||||
	return GetOrDefaultString(dict, key, "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 以字符串形式从字典中获取指定键的值。
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +25,7 @@ func GetValueAsString(dict map[string]any, key string) string {
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在、值的类型不是字符串或者值为零值,则返回默认值。
 | 
			
		||||
func GetValueOrDefaultAsString(dict map[string]any, key string, defaultValue string) string {
 | 
			
		||||
func GetOrDefaultString(dict map[string]any, key string, defaultValue string) string {
 | 
			
		||||
	if dict == nil {
 | 
			
		||||
		return defaultValue
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -51,8 +49,8 @@ func GetValueOrDefaultAsString(dict map[string]any, key string, defaultValue str
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在或者值的类型不是 32 位整数,则返回 0。
 | 
			
		||||
func GetValueAsInt32(dict map[string]any, key string) int32 {
 | 
			
		||||
	return GetValueOrDefaultAsInt32(dict, key, 0)
 | 
			
		||||
func GetInt32(dict map[string]any, key string) int32 {
 | 
			
		||||
	return GetOrDefaultInt32(dict, key, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 以 32 位整数形式从字典中获取指定键的值。
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +62,7 @@ func GetValueAsInt32(dict map[string]any, key string) int32 {
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在、值的类型不是 32 位整数或者值为零值,则返回默认值。
 | 
			
		||||
func GetValueOrDefaultAsInt32(dict map[string]any, key string, defaultValue int32) int32 {
 | 
			
		||||
func GetOrDefaultInt32(dict map[string]any, key string, defaultValue int32) int32 {
 | 
			
		||||
	if dict == nil {
 | 
			
		||||
		return defaultValue
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -97,8 +95,8 @@ func GetValueOrDefaultAsInt32(dict map[string]any, key string, defaultValue int3
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在或者值的类型不是 64 位整数,则返回 0。
 | 
			
		||||
func GetValueAsInt64(dict map[string]any, key string) int64 {
 | 
			
		||||
	return GetValueOrDefaultAsInt64(dict, key, 0)
 | 
			
		||||
func GetInt64(dict map[string]any, key string) int64 {
 | 
			
		||||
	return GetOrDefaultInt64(dict, key, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 以 64 位整数形式从字典中获取指定键的值。
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +108,7 @@ func GetValueAsInt64(dict map[string]any, key string) int64 {
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在、值的类型不是 64 位整数或者值为零值,则返回默认值。
 | 
			
		||||
func GetValueOrDefaultAsInt64(dict map[string]any, key string, defaultValue int64) int64 {
 | 
			
		||||
func GetOrDefaultInt64(dict map[string]any, key string, defaultValue int64) int64 {
 | 
			
		||||
	if dict == nil {
 | 
			
		||||
		return defaultValue
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -149,8 +147,8 @@ func GetValueOrDefaultAsInt64(dict map[string]any, key string, defaultValue int6
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在或者值的类型不是布尔,则返回 false。
 | 
			
		||||
func GetValueAsBool(dict map[string]any, key string) bool {
 | 
			
		||||
	return GetValueOrDefaultAsBool(dict, key, false)
 | 
			
		||||
func GetBool(dict map[string]any, key string) bool {
 | 
			
		||||
	return GetOrDefaultBool(dict, key, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 以布尔形式从字典中获取指定键的值。
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +160,7 @@ func GetValueAsBool(dict map[string]any, key string) bool {
 | 
			
		|||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 字典中键对应的值。如果指定键不存在或者值的类型不是布尔,则返回默认值。
 | 
			
		||||
func GetValueOrDefaultAsBool(dict map[string]any, key string, defaultValue bool) bool {
 | 
			
		||||
func GetOrDefaultBool(dict map[string]any, key string, defaultValue bool) bool {
 | 
			
		||||
	if dict == nil {
 | 
			
		||||
		return defaultValue
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -182,28 +180,3 @@ func GetValueOrDefaultAsBool(dict map[string]any, key string, defaultValue bool)
 | 
			
		|||
 | 
			
		||||
	return defaultValue
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 将字典填充到指定类型的结构体。
 | 
			
		||||
// 与 [json.Unmarshal] 类似,但传入的是一个 [map[string]any] 对象而非 JSON 格式的字符串。
 | 
			
		||||
//
 | 
			
		||||
// 入参:
 | 
			
		||||
//   - dict: 字典。
 | 
			
		||||
//   - output: 结构体指针。
 | 
			
		||||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 错误信息。如果填充失败,则返回错误信息。
 | 
			
		||||
func Populate(dict map[string]any, output any) error {
 | 
			
		||||
	config := &mapstructure.DecoderConfig{
 | 
			
		||||
		Metadata:         nil,
 | 
			
		||||
		Result:           output,
 | 
			
		||||
		WeaklyTypedInput: true,
 | 
			
		||||
		TagName:          "json",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	decoder, err := mapstructure.NewDecoder(config)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return decoder.Decode(dict)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
package maputil
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	mapstructure "github.com/go-viper/mapstructure/v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 将字典填充到指定类型的结构体。
 | 
			
		||||
// 与 [json.Unmarshal] 类似,但传入的是一个 [map[string]any] 对象而非 JSON 格式的字符串。
 | 
			
		||||
//
 | 
			
		||||
// 入参:
 | 
			
		||||
//   - dict: 字典。
 | 
			
		||||
//   - output: 结构体指针。
 | 
			
		||||
//
 | 
			
		||||
// 出参:
 | 
			
		||||
//   - 错误信息。如果填充失败,则返回错误信息。
 | 
			
		||||
func Populate(dict map[string]any, output any) error {
 | 
			
		||||
	config := &mapstructure.DecoderConfig{
 | 
			
		||||
		Metadata:         nil,
 | 
			
		||||
		Result:           output,
 | 
			
		||||
		WeaklyTypedInput: true,
 | 
			
		||||
		TagName:          "json",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	decoder, err := mapstructure.NewDecoder(config)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return decoder.Decode(dict)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package slices
 | 
			
		||||
package sliceutil
 | 
			
		||||
 | 
			
		||||
// 创建给定切片一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package types
 | 
			
		||||
package typeutil
 | 
			
		||||
 | 
			
		||||
import "reflect"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/app"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/domain"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/slices"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/sliceutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var maxWorkers = 16
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ func (d *WorkflowDispatcher) Cancel(runId string) {
 | 
			
		|||
 | 
			
		||||
	// 移除排队中的 WorkflowRun
 | 
			
		||||
	d.queueMutex.Lock()
 | 
			
		||||
	d.queue = slices.Filter(d.queue, func(d *WorkflowWorkerData) bool {
 | 
			
		||||
	d.queue = sliceutil.Filter(d.queue, func(d *WorkflowWorkerData) bool {
 | 
			
		||||
		return d.RunId != runId
 | 
			
		||||
	})
 | 
			
		||||
	d.queueMutex.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/applicant"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/domain"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/repository"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ func (n *applyNode) Process(ctx context.Context) error {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	// 解析证书并生成实体
 | 
			
		||||
	certX509, err := certs.ParseCertificateFromPEM(applyResult.CertificateFullChain)
 | 
			
		||||
	certX509, err := certutil.ParseCertificateFromPEM(applyResult.CertificateFullChain)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		n.logger.Warn("failed to parse certificate, may be the CA responded error")
 | 
			
		||||
		return err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/pocketbase/pocketbase/core"
 | 
			
		||||
	m "github.com/pocketbase/pocketbase/migrations"
 | 
			
		||||
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certs"
 | 
			
		||||
	"github.com/usual2970/certimate/internal/pkg/utils/certutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
| 
						 | 
				
			
			@ -1754,21 +1753,21 @@ func init() {
 | 
			
		|||
			case "certificate":
 | 
			
		||||
				{
 | 
			
		||||
					if record.GetString("issuer") == "" {
 | 
			
		||||
						cert, _ := certs.ParseCertificateFromPEM(record.GetString("certificate"))
 | 
			
		||||
						cert, _ := certutil.ParseCertificateFromPEM(record.GetString("certificate"))
 | 
			
		||||
						if cert != nil {
 | 
			
		||||
							record.Set("issuer", strings.Join(cert.Issuer.Organization, ";"))
 | 
			
		||||
							changed = true
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					if record.GetString("serialNumber") == "" {
 | 
			
		||||
						cert, _ := certs.ParseCertificateFromPEM(record.GetString("certificate"))
 | 
			
		||||
						cert, _ := certutil.ParseCertificateFromPEM(record.GetString("certificate"))
 | 
			
		||||
						if cert != nil {
 | 
			
		||||
							record.Set("serialNumber", strings.ToUpper(cert.SerialNumber.Text(16)))
 | 
			
		||||
							changed = true
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					if record.GetString("keyAlgorithm") == "" {
 | 
			
		||||
						cert, _ := certs.ParseCertificateFromPEM(record.GetString("certificate"))
 | 
			
		||||
						cert, _ := certutil.ParseCertificateFromPEM(record.GetString("certificate"))
 | 
			
		||||
						if cert != nil {
 | 
			
		||||
							switch cert.SignatureAlgorithm {
 | 
			
		||||
							case x509.SHA256WithRSA, x509.SHA256WithRSAPSS:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue