//go:build standalone package checker import ( "errors" "net/http" "slices" "strconv" "strings" sdk "git.happydns.org/checker-sdk-go/checker" ) // RenderForm implements server.Interactive. func (p *xmppProvider) RenderForm() []sdk.CheckerOptionField { return []sdk.CheckerOptionField{ { Id: "domain", Type: "string", Label: "Domain", Placeholder: "example.com", Required: true, }, { Id: "mode", Type: "string", Label: "Mode", Default: string(ModeBoth), Choices: validModes, }, { Id: "timeout", Type: "number", Label: "Per-endpoint timeout (seconds)", Default: 10, }, } } // ParseForm implements server.Interactive. func (p *xmppProvider) ParseForm(r *http.Request) (sdk.CheckerOptions, error) { domain := strings.TrimSpace(r.FormValue("domain")) domain = strings.TrimSuffix(domain, ".") if domain == "" { return nil, errors.New("domain is required") } if err := validateDomain(domain); err != nil { return nil, err } opts := sdk.CheckerOptions{"domain": domain} if mode := strings.TrimSpace(r.FormValue("mode")); mode != "" { if !slices.Contains(validModes, mode) { return nil, errors.New("mode must be one of: c2s, s2s, both") } opts["mode"] = mode } if to := strings.TrimSpace(r.FormValue("timeout")); to != "" { v, err := strconv.ParseFloat(to, 64) if err != nil { return nil, errors.New("timeout must be a number") } opts["timeout"] = v } return opts, nil }