Club Log refuses with its ordinary web page rather than an error string, so the new test reported a rejected login by pasting a 403 page — title, stylesheets, navigation and all — into the status bar. The body now goes to the log, where a real diagnosis happens, and the operator gets the one sentence there is to act on: check the e-mail, the password and the logbook callsign. Dropped the startyear=2099 filter with it, and that one matters more than it looks. It was there to keep the reply small, but it was never verified against Club Log's API — and Club Log answers an unrecognised request with the SAME 403 it uses for a refused login. An unverified parameter would therefore have made every CORRECT password look wrong, which is precisely the failure this change set out to end. The reply is capped at 4 KB and closed at once instead; the status code arrives ahead of the body either way.
27 lines
819 B
Go
27 lines
819 B
Go
package extsvc
|
|
|
|
import "testing"
|
|
|
|
// Club Log answers a refused login with its ordinary web page. The operator must
|
|
// get a sentence they can act on, not four kilobytes of markup — that was the
|
|
// first thing reported once the test started working at all.
|
|
func TestLooksLikeHTML(t *testing.T) {
|
|
cases := []struct {
|
|
body string
|
|
want bool
|
|
}{
|
|
{"<!DOCTYPE html>\n<html lang='en'>…403 - Access denied…", true},
|
|
{" <html><head><title>403</title></head></html>", true},
|
|
{"<HTML>", true},
|
|
{"Invalid credentials", false},
|
|
{"", false},
|
|
// An ADIF answer must never be mistaken for a page.
|
|
{"<eoh>\n<call:5>F4BPO <band:3>20m <eor>", false},
|
|
}
|
|
for _, c := range cases {
|
|
if got := looksLikeHTML(c.body); got != c.want {
|
|
t.Errorf("looksLikeHTML(%.40q) = %v, want %v", c.body, got, c.want)
|
|
}
|
|
}
|
|
}
|