Scert/backend/internal/dnsprovider/cname_provider.go

39 lines
1.2 KiB
Go

package dnsprovider
import (
"context"
"strings"
"github.com/go-acme/lego/v5/challenge"
)
// cnameDelegationProvider 将原始域名的 DNS-01 挑战转发到专用验证域。
// 委派域上的 TXT 记录由目标 Provider 管理,原始域名上的 CNAME 记录由用户提前配置。
type cnameDelegationProvider struct {
delegatedDomain string
target challenge.Provider
}
func newCNAMEDelegationProvider(delegatedDomain string, target challenge.Provider) (challenge.Provider, error) {
delegatedDomain = normalizeProviderDomain(delegatedDomain)
if delegatedDomain == "" {
return nil, ErrInvalidDelegatedDomain
}
if target == nil {
return nil, ErrDelegatedProviderUnavailable
}
return &cnameDelegationProvider{delegatedDomain: delegatedDomain, target: target}, nil
}
func (p *cnameDelegationProvider) Present(ctx context.Context, _ string, token, keyAuth string) error {
return p.target.Present(ctx, p.delegatedDomain, token, keyAuth)
}
func (p *cnameDelegationProvider) CleanUp(ctx context.Context, _ string, token, keyAuth string) error {
return p.target.CleanUp(ctx, p.delegatedDomain, token, keyAuth)
}
func normalizeProviderDomain(value string) string {
return strings.ToLower(strings.TrimSuffix(strings.TrimSpace(value), "."))
}