diff --git a/checker/interactive.go b/checker/interactive.go new file mode 100644 index 0000000..4c00bd5 --- /dev/null +++ b/checker/interactive.go @@ -0,0 +1,48 @@ +package checker + +import ( + "errors" + "net/http" + "strings" + + sdk "git.happydns.org/checker-sdk-go/checker" +) + +// RenderForm implements sdk.CheckerInteractive. +func (p *matrixProvider) RenderForm() []sdk.CheckerOptionField { + return []sdk.CheckerOptionField{ + { + Id: "serviceDomain", + Type: "string", + Label: "Matrix domain", + Placeholder: "matrix.org", + Required: true, + }, + { + Id: "federationTesterServer", + Type: "string", + Label: "Federation Tester Server", + Placeholder: "https://federationtester.matrix.org/api/report?server_name=%s", + Default: "https://federationtester.matrix.org/api/report?server_name=%s", + Description: "URL template of the federation tester API; %s is replaced by the domain.", + }, + } +} + +// ParseForm implements sdk.CheckerInteractive. +func (p *matrixProvider) ParseForm(r *http.Request) (sdk.CheckerOptions, error) { + domain := strings.TrimSpace(r.FormValue("serviceDomain")) + if domain == "" { + return nil, errors.New("Matrix domain is required") + } + + opts := sdk.CheckerOptions{ + "serviceDomain": domain, + } + + if tester := strings.TrimSpace(r.FormValue("federationTesterServer")); tester != "" { + opts["federationTesterServer"] = tester + } + + return opts, nil +}