diff --git a/checker/collect.go b/checker/collect.go index 8ec5c38..d675434 100644 --- a/checker/collect.go +++ b/checker/collect.go @@ -158,11 +158,7 @@ func loadConfig(opts sdk.CheckerOptions) (*runConfig, error) { return nil, fmt.Errorf("smtp_host is required") } if cfg.FromAddress == "" { - domain := strings.TrimSpace(stringOpt(opts, "domain_name")) - if domain == "" { - return nil, fmt.Errorf("from_address is required when domain_name is not set") - } - cfg.FromAddress = "no-reply@" + strings.TrimSuffix(domain, ".") + return nil, fmt.Errorf("from_address is required") } parsedFrom, err := mail.ParseAddress(cfg.FromAddress) if err != nil { diff --git a/checker/definition.go b/checker/definition.go index 787ff00..50d9612 100644 --- a/checker/definition.go +++ b/checker/definition.go @@ -35,6 +35,19 @@ func Definition() *sdk.CheckerDefinition { }, }, UserOpts: []sdk.CheckerOptionDocumentation{ + { + Id: "happydeliver_url", + Type: "string", + Label: "happyDeliver instance URL (override)", + Description: "Override the operator-provided happyDeliver URL.", + }, + { + Id: "happydeliver_token", + Type: "string", + Label: "happyDeliver API token (override)", + Description: "Override the operator-provided happyDeliver token.", + Secret: true, + }, { Id: "smtp_host", Type: "string", @@ -71,6 +84,13 @@ func Definition() *sdk.CheckerDefinition { Choices: []string{"starttls", "tls", "none"}, Default: "starttls", }, + { + Id: "from_address", + Type: "string", + Label: "From address", + Description: "Address used in the From header of the test email. Must be in the tested domain.", + Required: true, + }, { Id: "subject_override", Type: "string", @@ -112,12 +132,6 @@ func Definition() *sdk.CheckerDefinition { Label: "Domain name", AutoFill: sdk.AutoFillDomainName, }, - { - Id: "from_address", - Type: "string", - Label: "From address", - Description: "Address used in the From header of the test email. Must be in the tested domain. Defaults to no-reply@.", - }, }, }, Rules: []sdk.CheckRule{ diff --git a/checker/provider.go b/checker/provider.go index d66de34..2cf6a50 100644 --- a/checker/provider.go +++ b/checker/provider.go @@ -2,9 +2,6 @@ package checker import ( "encoding/json" - "fmt" - "net/mail" - "strings" "time" sdk "git.happydns.org/checker-sdk-go/checker" @@ -24,27 +21,6 @@ func (p *happyDeliverProvider) Definition() *sdk.CheckerDefinition { return Definition() } -// ValidateOptions runs on the host before Collect so bad options are rejected -// up-front rather than surfacing as a runtime SMTP failure. -func (p *happyDeliverProvider) ValidateOptions(opts sdk.CheckerOptions) error { - raw, ok := opts["from_address"] - if !ok { - return nil - } - s, ok := raw.(string) - if !ok { - return fmt.Errorf("from_address must be a string") - } - s = strings.TrimSpace(s) - if s == "" { - return nil - } - if _, err := mail.ParseAddress(s); err != nil { - return fmt.Errorf("invalid from_address: %w", err) - } - return nil -} - func (p *happyDeliverProvider) ExtractMetrics(ctx sdk.ReportContext, collectedAt time.Time) ([]sdk.CheckMetric, error) { var data HappyDeliverData if err := json.Unmarshal(ctx.Data(), &data); err != nil { diff --git a/checker/provider_test.go b/checker/provider_test.go index e57c4e7..f2d9629 100644 --- a/checker/provider_test.go +++ b/checker/provider_test.go @@ -86,8 +86,8 @@ func TestDefinitionShape(t *testing.T) { if def.ID != "happydeliver" { t.Errorf("ID = %q", def.ID) } - if !def.Availability.ApplyToService { - t.Error("should apply to service") + if !def.Availability.ApplyToDomain { + t.Error("should apply to domain") } if !def.HasMetrics { t.Error("HasMetrics should be true")