Files
Charon/backend/pkg/dnsprovider/errors.go
GitHub Actions b86aa3921b feat(dns): add custom DNS provider plugin system
- Add plugin interface with lifecycle hooks (Init/Cleanup)
- Implement thread-safe provider registry
- Add plugin loader with SHA-256 signature verification
- Migrate 10 built-in providers to registry pattern
- Add multi-credential support to plugin interface
- Create plugin management UI with enable/disable controls
- Add dynamic credential fields based on provider metadata
- Include PowerDNS example plugin
- Add comprehensive user & developer documentation
- Fix frontend test hang (33min → 1.5min, 22x faster)

Platform: Linux/macOS only (Go plugin limitation)
Security: Signature verification, directory permission checks

Backend coverage: 85.1%
Frontend coverage: 85.31%

Closes: DNS Challenge Future Features - Phase 5
2026-01-07 02:54:01 +00:00

46 lines
2.0 KiB
Go

package dnsprovider
import "errors"
// Common errors returned by the plugin system.
var (
// ErrProviderNotFound is returned when a requested provider type is not registered.
ErrProviderNotFound = errors.New("dns provider not found")
// ErrProviderAlreadyRegistered is returned when attempting to register
// a provider with a type that is already registered.
ErrProviderAlreadyRegistered = errors.New("dns provider already registered")
// ErrInvalidPlugin is returned when a plugin doesn't meet requirements
// (e.g., nil plugin, empty type, missing required symbol).
ErrInvalidPlugin = errors.New("invalid plugin: missing required fields or interface")
// ErrSignatureMismatch is returned when a plugin's signature doesn't match
// the expected signature in the allowlist.
ErrSignatureMismatch = errors.New("plugin signature does not match allowlist")
// ErrPluginNotInAllowlist is returned when attempting to load a plugin
// that isn't in the configured allowlist.
ErrPluginNotInAllowlist = errors.New("plugin not in allowlist")
// ErrInterfaceVersionMismatch is returned when a plugin was built against
// a different interface version than the host application.
ErrInterfaceVersionMismatch = errors.New("plugin interface version mismatch")
// ErrPluginLoadFailed is returned when the Go plugin system fails to load
// a .so file (e.g., missing symbol, incompatible Go version).
ErrPluginLoadFailed = errors.New("failed to load plugin")
// ErrPluginInitFailed is returned when a plugin's Init() method returns an error.
ErrPluginInitFailed = errors.New("plugin initialization failed")
// ErrPluginDisabled is returned when attempting to use a disabled plugin.
ErrPluginDisabled = errors.New("plugin is disabled")
// ErrCredentialsInvalid is returned when credential validation fails.
ErrCredentialsInvalid = errors.New("invalid credentials")
// ErrCredentialsTestFailed is returned when credential testing fails.
ErrCredentialsTestFailed = errors.New("credential test failed")
)