//go:build standalone package checker import ( "errors" "net/http" "strconv" "strings" sdk "git.happydns.org/checker-sdk-go/checker" ) // RenderForm exposes the run + admin options documented in Definition() // so the standalone form stays in sync with the host-side documentation. func (p *kerberosProvider) RenderForm() []sdk.CheckerOptionField { docs := p.Definition().Options fields := make([]sdk.CheckerOptionField, 0, len(docs.RunOpts)+len(docs.AdminOpts)) fields = append(fields, docs.RunOpts...) fields = append(fields, docs.AdminOpts...) return fields } // ParseForm turns the submitted form into a CheckerOptions, using the // documented field types to coerce values. func (p *kerberosProvider) ParseForm(r *http.Request) (sdk.CheckerOptions, error) { opts := sdk.CheckerOptions{} for _, f := range p.RenderForm() { raw := r.FormValue(f.Id) if f.Type != "bool" { raw = strings.TrimSpace(raw) } if raw == "" { if f.Required { return nil, errors.New(f.Id + " is required") } continue } switch f.Type { case "bool": opts[f.Id] = raw == "true" || raw == "1" || raw == "on" case "number": if v, err := strconv.ParseFloat(raw, 64); err == nil { opts[f.Id] = v } else { opts[f.Id] = raw } default: opts[f.Id] = raw } } return opts, nil }