checker: improve matrix check

This commit is contained in:
nemunaire 2021-03-08 13:44:23 +01:00
parent 78c42e312c
commit 405f3d6395

View File

@ -190,7 +190,7 @@ type matrix_result struct {
FederationOK bool FederationOK bool
} }
func check_matrix(domain string) (err error) { func check_matrix(domain string) (version string, err error) {
var resp *http.Response var resp *http.Response
resp, err = http.Get(fmt.Sprintf("https://federation-tester.adlin.nemunai.re/api/report?server_name=%s", strings.TrimSuffix(domain, "."))) resp, err = http.Get(fmt.Sprintf("https://federation-tester.adlin.nemunai.re/api/report?server_name=%s", strings.TrimSuffix(domain, ".")))
if err != nil { if err != nil {
@ -199,17 +199,18 @@ func check_matrix(domain string) (err error) {
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode >= 300 { if resp.StatusCode >= 300 {
return nil return "", fmt.Errorf("Sorry, the federation tester is broken. Check on https://federationtester.matrix.org/#%s", domain)
} }
var federationTest matrix_result var federationTest matrix_result
if federationTest.FederationOK { if federationTest.FederationOK {
return nil version = federationTest.Version.Name + " " + federationTest.Version.Version
return version, nil
} else if err = json.NewDecoder(resp.Body).Decode(&federationTest); err != nil { } else if err = json.NewDecoder(resp.Body).Decode(&federationTest); err != nil {
log.Printf("Error in chech_matrix, when decoding json:", err.Error()) log.Printf("Error in chech_matrix, when decoding json:", err.Error())
return nil return "", fmt.Errorf("Sorry, the federation tester is broken. Check on https://federationtester.matrix.org/#%s", domain)
} else if federationTest.DNSResult.SRVError != nil && federationTest.WellKnownResult.Result != "" { } else if federationTest.DNSResult.SRVError != nil && federationTest.WellKnownResult.Result != "" {
return fmt.Errorf("%s OR %s", federationTest.DNSResult.SRVError.Message, federationTest.WellKnownResult.Result) return "", fmt.Errorf("%s OR %s", federationTest.DNSResult.SRVError.Message, federationTest.WellKnownResult.Result)
} else if len(federationTest.ConnectionErrors) > 0 { } else if len(federationTest.ConnectionErrors) > 0 {
var msg strings.Builder var msg strings.Builder
for srv, cerr := range federationTest.ConnectionErrors { for srv, cerr := range federationTest.ConnectionErrors {
@ -220,9 +221,9 @@ func check_matrix(domain string) (err error) {
msg.WriteString(": ") msg.WriteString(": ")
msg.WriteString(cerr.Message) msg.WriteString(cerr.Message)
} }
return fmt.Errorf("Connection errors: %s", msg.String()) return "", fmt.Errorf("Connection errors: %s", msg.String())
} else { } 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) 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)
} }
} }
@ -349,11 +350,11 @@ func studentsChecker() {
// Check Matrix (only if GLUE Ok and) // Check Matrix (only if GLUE Ok and)
if glueErr == nil && istd%10 == check_matrix_for { if glueErr == nil && istd%10 == check_matrix_for {
if err := check_matrix(std.MyDelegatedDomain()); err == nil { if v, err := check_matrix(std.MyDelegatedDomain()); err == nil {
if verbose { if verbose {
log.Printf("%s just unlocked Matrix challenge\n", std.Login) log.Printf("%s just unlocked Matrix challenge\n", std.Login)
} }
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+6, ""); err != nil { if _, err := std.UnlockChallenge(100*(tunnel_version-1)+6, v); err != nil {
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error()) log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
} }
} else { } else {