Validate from_address option via net/mail at the host
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Reject malformed addresses up-front instead of letting them surface as a runtime SMTP failure during Collect.
This commit is contained in:
parent
7fe4e4b3a4
commit
ae8efc2f64
1 changed files with 24 additions and 0 deletions
|
|
@ -2,6 +2,9 @@ package checker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/mail"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
sdk "git.happydns.org/checker-sdk-go/checker"
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
||||||
|
|
@ -21,6 +24,27 @@ func (p *happyDeliverProvider) Definition() *sdk.CheckerDefinition {
|
||||||
return Definition()
|
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) {
|
func (p *happyDeliverProvider) ExtractMetrics(ctx sdk.ReportContext, collectedAt time.Time) ([]sdk.CheckMetric, error) {
|
||||||
var data HappyDeliverData
|
var data HappyDeliverData
|
||||||
if err := json.Unmarshal(ctx.Data(), &data); err != nil {
|
if err := json.Unmarshal(ctx.Data(), &data); err != nil {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue