package checker import ( "errors" "net/http" "strconv" "strings" sdk "git.happydns.org/checker-sdk-go/checker" ) // RenderForm implements sdk.CheckerInteractive. 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: "both", Choices: []string{"c2s", "s2s", "both"}, }, { Id: "timeout", Type: "number", Label: "Per-endpoint timeout (seconds)", Default: 10, }, } } // ParseForm implements sdk.CheckerInteractive. 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") } opts := sdk.CheckerOptions{"domain": domain} if mode := strings.TrimSpace(r.FormValue("mode")); mode != "" { switch mode { case "c2s", "s2s", "both": opts["mode"] = mode default: return nil, errors.New("mode must be one of: c2s, s2s, both") } } 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 }