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 +} diff --git a/checker/report.go b/checker/report.go index 8066ae2..7952ae0 100644 --- a/checker/report.go +++ b/checker/report.go @@ -5,6 +5,8 @@ import ( "fmt" "html/template" "strings" + + sdk "git.happydns.org/checker-sdk-go/checker" ) // ── HTML report ─────────────────────────────────────────────────────────────── @@ -287,9 +289,9 @@ li { margin-bottom: .15rem; } ) // GetHTMLReport implements sdk.CheckerHTMLReporter. -func (p *matrixProvider) GetHTMLReport(raw json.RawMessage) (string, error) { +func (p *matrixProvider) GetHTMLReport(ctx sdk.ReportContext) (string, error) { var r MatrixFederationData - if err := json.Unmarshal(raw, &r); err != nil { + if err := json.Unmarshal(ctx.Data(), &r); err != nil { return "", fmt.Errorf("failed to unmarshal matrix report: %w", err) } diff --git a/checker/rule.go b/checker/rule.go index 5132325..8184137 100644 --- a/checker/rule.go +++ b/checker/rule.go @@ -27,14 +27,14 @@ func (r *matrixRule) ValidateOptions(opts sdk.CheckerOptions) error { return nil } -func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, opts sdk.CheckerOptions) sdk.CheckState { +func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, opts sdk.CheckerOptions) []sdk.CheckState { var data MatrixFederationData if err := obs.Get(ctx, ObservationKeyMatrix, &data); err != nil { - return sdk.CheckState{ + return []sdk.CheckState{{ Status: sdk.StatusError, Message: fmt.Sprintf("Failed to get Matrix federation data: %v", err), Code: "matrix_federation_error", - } + }} } domain, _ := opts["serviceDomain"].(string) @@ -42,14 +42,14 @@ func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, op if data.FederationOK { version := strings.TrimSpace(data.Version.Name + " " + data.Version.Version) - return sdk.CheckState{ + return []sdk.CheckState{{ Status: sdk.StatusOK, Message: fmt.Sprintf("Running %s", version), Code: "matrix_federation_ok", Meta: map[string]any{ "version": version, }, - } + }} } var statusLine string @@ -73,9 +73,9 @@ func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, op statusLine = fmt.Sprintf("Federation broken. Check https://federationtester.matrix.org/#%s", domain) } - return sdk.CheckState{ + return []sdk.CheckState{{ Status: sdk.StatusCrit, Message: statusLine, Code: "matrix_federation_fail", - } + }} } diff --git a/go.mod b/go.mod index 28304e8..8c5c78c 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,4 @@ module git.happydns.org/checker-matrix go 1.25.0 -require git.happydns.org/checker-sdk-go v0.0.1 +require git.happydns.org/checker-sdk-go v1.2.0 diff --git a/go.sum b/go.sum index 5282be1..272600a 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,2 @@ -git.happydns.org/checker-sdk-go v0.0.1 h1:4RxCJr73HWKxjOyU/6NJMO8lXJmH0gMLA68EzTqLbQI= -git.happydns.org/checker-sdk-go v0.0.1/go.mod h1:aNAcfYFfbhvH9kJhE0Njp5GX0dQbxdRB0rJ0KvSC5nI= +git.happydns.org/checker-sdk-go v1.2.0 h1:v4MpKAz0W3PwP+bxx3pya8w893sVH5xTD1of1cc0TV8= +git.happydns.org/checker-sdk-go v1.2.0/go.mod h1:aNAcfYFfbhvH9kJhE0Njp5GX0dQbxdRB0rJ0KvSC5nI=