checker: add test for Matrix
This commit is contained in:
parent
07e91271f4
commit
78c42e312c
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@ -165,6 +166,66 @@ func check_https(domain, ip string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// MATRIX
|
||||
|
||||
type matrix_result struct {
|
||||
WellKnownResult struct {
|
||||
Result string `json:"result"`
|
||||
}
|
||||
DNSResult struct {
|
||||
SRVError *struct {
|
||||
Message string
|
||||
}
|
||||
}
|
||||
ConnectionReports map[string]struct {
|
||||
Errors []string
|
||||
}
|
||||
ConnectionErrors map[string]struct {
|
||||
Message string
|
||||
}
|
||||
Version struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
}
|
||||
FederationOK bool
|
||||
}
|
||||
|
||||
func check_matrix(domain string) (err error) {
|
||||
var resp *http.Response
|
||||
resp, err = http.Get(fmt.Sprintf("https://federation-tester.adlin.nemunai.re/api/report?server_name=%s", strings.TrimSuffix(domain, ".")))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode >= 300 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var federationTest matrix_result
|
||||
if federationTest.FederationOK {
|
||||
return nil
|
||||
} else if err = json.NewDecoder(resp.Body).Decode(&federationTest); err != nil {
|
||||
log.Printf("Error in chech_matrix, when decoding json:", err.Error())
|
||||
return nil
|
||||
} else if federationTest.DNSResult.SRVError != nil && federationTest.WellKnownResult.Result != "" {
|
||||
return fmt.Errorf("%s OR %s", federationTest.DNSResult.SRVError.Message, federationTest.WellKnownResult.Result)
|
||||
} else if len(federationTest.ConnectionErrors) > 0 {
|
||||
var msg strings.Builder
|
||||
for srv, cerr := range federationTest.ConnectionErrors {
|
||||
if msg.Len() > 0 {
|
||||
msg.WriteString("; ")
|
||||
}
|
||||
msg.WriteString(srv)
|
||||
msg.WriteString(": ")
|
||||
msg.WriteString(cerr.Message)
|
||||
}
|
||||
return fmt.Errorf("Connection errors: %s", msg.String())
|
||||
} else {
|
||||
return fmt.Errorf("An unimplemented error occurs. Please report to nemunaire. But know that federation seems to be broken. Check https://federationtester.matrix.org/#%s", domain)
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
|
||||
func minTunnelVersion(std *adlin.Student, suffixip int) (int, error) {
|
||||
@ -193,9 +254,11 @@ func studentsChecker() {
|
||||
log.Println("Unable to check students:", err)
|
||||
return
|
||||
}
|
||||
log.Println("Checking students...")
|
||||
check_matrix_for := (time.Now().Second()/30)*5 + time.Now().Minute()%5
|
||||
|
||||
for _, s := range students {
|
||||
log.Printf("Checking students... (std_matrix%%10=%d)\n", check_matrix_for)
|
||||
|
||||
for istd, s := range students {
|
||||
time.Sleep(250 * time.Millisecond)
|
||||
// Check ping
|
||||
std := s
|
||||
@ -283,6 +346,23 @@ func studentsChecker() {
|
||||
log.Printf("%s and HTTPS (with DNS ip=%s): %s\n", std.Login, addr.String(), err)
|
||||
}
|
||||
}
|
||||
|
||||
// Check Matrix (only if GLUE Ok and)
|
||||
if glueErr == nil && istd%10 == check_matrix_for {
|
||||
if err := check_matrix(std.MyDelegatedDomain()); err == nil {
|
||||
if verbose {
|
||||
log.Printf("%s just unlocked Matrix challenge\n", std.Login)
|
||||
}
|
||||
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+6, ""); err != nil {
|
||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||
}
|
||||
} else {
|
||||
std.RegisterChallengeError(100*(tunnel_version-1)+6, err)
|
||||
if verbose {
|
||||
log.Printf("%s and Matrix: %s\n", std.Login, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if errreg := std.RegisterChallengeError(100*(tunnel_version-1)+3, err); errreg != nil {
|
||||
|
Reference in New Issue
Block a user