chore: git cache cleanup
This commit is contained in:
96
backend/pkg/dnsprovider/plugin.go
Normal file
96
backend/pkg/dnsprovider/plugin.go
Normal file
@@ -0,0 +1,96 @@
|
||||
// Package dnsprovider defines the plugin interface and types for DNS provider plugins.
|
||||
// Both built-in providers and external plugins implement this interface.
|
||||
package dnsprovider
|
||||
|
||||
import "time"
|
||||
|
||||
// InterfaceVersion is the current plugin interface version.
|
||||
// Plugins built against a different version may not be compatible.
|
||||
const InterfaceVersion = "v1"
|
||||
|
||||
// ProviderPlugin defines the interface that all DNS provider plugins must implement.
|
||||
// Both built-in providers and external plugins implement this interface.
|
||||
type ProviderPlugin interface {
|
||||
// Type returns the unique provider type identifier (e.g., "cloudflare", "powerdns").
|
||||
// This must be lowercase, alphanumeric with optional underscores.
|
||||
Type() string
|
||||
|
||||
// Metadata returns descriptive information about the provider for UI display.
|
||||
Metadata() ProviderMetadata
|
||||
|
||||
// Init is called after the plugin is registered. Use for startup initialization
|
||||
// (loading config files, validating environment, establishing connections).
|
||||
// Return an error to prevent the plugin from being registered.
|
||||
Init() error
|
||||
|
||||
// Cleanup is called before the plugin is unregistered. Use for resource cleanup
|
||||
// (closing connections, flushing caches). Note: Go plugins cannot be unloaded
|
||||
// from memory - this is only called during graceful shutdown.
|
||||
Cleanup() error
|
||||
|
||||
// RequiredCredentialFields returns the credential fields that must be provided.
|
||||
RequiredCredentialFields() []CredentialFieldSpec
|
||||
|
||||
// OptionalCredentialFields returns credential fields that may be provided.
|
||||
OptionalCredentialFields() []CredentialFieldSpec
|
||||
|
||||
// ValidateCredentials checks if the provided credentials are valid.
|
||||
// Returns nil if valid, error describing the issue otherwise.
|
||||
ValidateCredentials(creds map[string]string) error
|
||||
|
||||
// TestCredentials attempts to verify credentials work with the provider API.
|
||||
// This may make network calls to the provider.
|
||||
TestCredentials(creds map[string]string) error
|
||||
|
||||
// SupportsMultiCredential indicates if the provider can handle zone-specific credentials.
|
||||
// If true, BuildCaddyConfigForZone will be called instead of BuildCaddyConfig when
|
||||
// multi-credential mode is enabled (Phase 3 feature).
|
||||
SupportsMultiCredential() bool
|
||||
|
||||
// BuildCaddyConfig constructs the Caddy DNS challenge configuration.
|
||||
// The returned map is embedded into Caddy's TLS automation policy.
|
||||
// Used when multi-credential mode is disabled.
|
||||
BuildCaddyConfig(creds map[string]string) map[string]any
|
||||
|
||||
// BuildCaddyConfigForZone constructs config for a specific zone (multi-credential mode).
|
||||
// Only called if SupportsMultiCredential() returns true.
|
||||
// baseDomain is the zone being configured (e.g., "example.com").
|
||||
BuildCaddyConfigForZone(baseDomain string, creds map[string]string) map[string]any
|
||||
|
||||
// PropagationTimeout returns the recommended DNS propagation wait time.
|
||||
PropagationTimeout() time.Duration
|
||||
|
||||
// PollingInterval returns the recommended polling interval for DNS verification.
|
||||
PollingInterval() time.Duration
|
||||
}
|
||||
|
||||
// ProviderMetadata contains descriptive information about a DNS provider.
|
||||
type ProviderMetadata struct {
|
||||
Type string `json:"type"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
DocumentationURL string `json:"documentation_url,omitempty"`
|
||||
Author string `json:"author,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
IsBuiltIn bool `json:"is_built_in"`
|
||||
|
||||
// Version compatibility (required for external plugins)
|
||||
GoVersion string `json:"go_version,omitempty"` // Go version used to build (e.g., "1.23.4")
|
||||
InterfaceVersion string `json:"interface_version,omitempty"` // Plugin interface version (e.g., "v1")
|
||||
}
|
||||
|
||||
// CredentialFieldSpec defines a credential field for UI rendering.
|
||||
type CredentialFieldSpec struct {
|
||||
Name string `json:"name"` // Field key (e.g., "api_token")
|
||||
Label string `json:"label"` // Display label (e.g., "API Token")
|
||||
Type string `json:"type"` // "text", "password", "textarea", "select"
|
||||
Placeholder string `json:"placeholder,omitempty"` // Input placeholder text
|
||||
Hint string `json:"hint,omitempty"` // Help text shown below field
|
||||
Options []SelectOption `json:"options,omitempty"` // For "select" type
|
||||
}
|
||||
|
||||
// SelectOption represents an option in a select dropdown.
|
||||
type SelectOption struct {
|
||||
Value string `json:"value"`
|
||||
Label string `json:"label"`
|
||||
}
|
||||
Reference in New Issue
Block a user