checker: add test for Matrix
This commit is contained in:
parent
07e91271f4
commit
78c42e312c
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -165,6 +166,66 @@ func check_https(domain, ip string) (err error) {
|
|||||||
return
|
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
|
// Main
|
||||||
|
|
||||||
func minTunnelVersion(std *adlin.Student, suffixip int) (int, error) {
|
func minTunnelVersion(std *adlin.Student, suffixip int) (int, error) {
|
||||||
@ -193,9 +254,11 @@ func studentsChecker() {
|
|||||||
log.Println("Unable to check students:", err)
|
log.Println("Unable to check students:", err)
|
||||||
return
|
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)
|
time.Sleep(250 * time.Millisecond)
|
||||||
// Check ping
|
// Check ping
|
||||||
std := s
|
std := s
|
||||||
@ -283,6 +346,23 @@ func studentsChecker() {
|
|||||||
log.Printf("%s and HTTPS (with DNS ip=%s): %s\n", std.Login, addr.String(), err)
|
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 {
|
} else {
|
||||||
if errreg := std.RegisterChallengeError(100*(tunnel_version-1)+3, err); errreg != nil {
|
if errreg := std.RegisterChallengeError(100*(tunnel_version-1)+3, err); errreg != nil {
|
||||||
|
Reference in New Issue
Block a user