39 lines
1.2 KiB
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), "."))
|
|
}
|