itImplement HTML score page generation - scoreboard - Interactive scoreboard for CTF-like games Err z3bra.org 70 hgit clone git://git.z3bra.org/scoreboard.git URL:git://git.z3bra.org/scoreboard.git z3bra.org 70 1Log /scm/scoreboard/log.gph z3bra.org 70 1Files /scm/scoreboard/files.gph z3bra.org 70 1Refs /scm/scoreboard/refs.gph z3bra.org 70 i--- Err z3bra.org 70 1commit 528d94f22d463e41294bd92095b4953f52dc1fdd /scm/scoreboard/commit/528d94f22d463e41294bd92095b4953f52dc1fdd.gph z3bra.org 70 1parent e060760bef0f2e589d993fa17bbf11cc6762f3dc /scm/scoreboard/commit/e060760bef0f2e589d993fa17bbf11cc6762f3dc.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:dev@z3bra.org z3bra.org 70 iDate: Wed, 7 Dec 2022 12:45:04 +0100 Err z3bra.org 70 i Err z3bra.org 70 iImplement HTML score page generation Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M db.go | 4 ++-- Err z3bra.org 70 i A html.go | 97 ++++++++++++++++++++++++++++++ Err z3bra.org 70 i M main.go | 16 +++++++++++----- Err z3bra.org 70 i M player.go | 15 ++++++++++----- Err z3bra.org 70 i M playerbox.go | 1 + Err z3bra.org 70 i Err z3bra.org 70 i5 files changed, 121 insertions(+), 12 deletions(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/db.go b/db.go /scm/scoreboard/file/db.go.gph z3bra.org 70 it@@ -104,7 +104,7 @@ func db_id(db *sql.DB, nick string) bool { Err z3bra.org 70 i Err z3bra.org 70 i func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) { Err z3bra.org 70 i query := `SELECT Err z3bra.org 70 i- name,flag,score Err z3bra.org 70 i+ name,flag,score,ts Err z3bra.org 70 i FROM score Err z3bra.org 70 i ORDER BY Err z3bra.org 70 i score DESC, Err z3bra.org 70 it@@ -122,7 +122,7 @@ func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) { Err z3bra.org 70 i players := make([]Player, 0) Err z3bra.org 70 i for rows.Next() { Err z3bra.org 70 i var p Player Err z3bra.org 70 i- err := rows.Scan(&p.name, &p.flag, &p.score) Err z3bra.org 70 i+ err := rows.Scan(&p.name, &p.flag, &p.score, &p.ts) Err z3bra.org 70 i if err != nil { Err z3bra.org 70 i return nil, err Err z3bra.org 70 i } Err z3bra.org 70 1diff --git a/html.go b/html.go /scm/scoreboard/file/html.go.gph z3bra.org 70 it@@ -0,0 +1,97 @@ Err z3bra.org 70 i+package main Err z3bra.org 70 i+ Err z3bra.org 70 i+import ( Err z3bra.org 70 i+ "os" Err z3bra.org 70 i+ "fmt" Err z3bra.org 70 i+ "html/template" Err z3bra.org 70 i+ "github.com/dustin/go-humanize" Err z3bra.org 70 i+) Err z3bra.org 70 i+ Err z3bra.org 70 i+type Boardline struct { Err z3bra.org 70 i+ Name string Err z3bra.org 70 i+ Rank string Err z3bra.org 70 i+ Flag string Err z3bra.org 70 i+ Score string Err z3bra.org 70 i+} Err z3bra.org 70 i+ Err z3bra.org 70 i+type Template struct { Err z3bra.org 70 i+ Players []Boardline Err z3bra.org 70 i+ Placeholders []Boardline Err z3bra.org 70 i+} Err z3bra.org 70 i+ Err z3bra.org 70 i+var html string = ` Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ High scores Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+

CYB3R HUNT

Err z3bra.org 70 i+

HIGH SCORES

Err z3bra.org 70 i+
Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+{{range .Players}} Err z3bra.org 70 i+{{end}} Err z3bra.org 70 i+{{range .Placeholders}} Err z3bra.org 70 i+{{end}} Err z3bra.org 70 i+ Err z3bra.org 70 i+
RANKNAMEFLAGSSCORE
{{.Rank}}{{.Name}}{{.Flag}}{{.Score}}
{{.Rank}}{{.Name}}{{.Flag}}{{.Score}}
Err z3bra.org 70 i+
Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+` Err z3bra.org 70 i+ Err z3bra.org 70 i+func (a *Application) GenerateHTML() { Err z3bra.org 70 i+ players, err := db_ranked_players(a.db, 0, -1) Err z3bra.org 70 i+ if err != nil { Err z3bra.org 70 i+ panic(err) Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ data := Template{} Err z3bra.org 70 i+ for i:=0; i 1 || (len(args) == 1 && args[0] == "help") { Err z3bra.org 70 1diff --git a/player.go b/player.go /scm/scoreboard/file/player.go.gph z3bra.org 70 it@@ -49,8 +49,6 @@ func tokenize(name string) (string, string, error) { Err z3bra.org 70 i key := randbuf(12) Err z3bra.org 70 i salt := base32.StdEncoding.EncodeToString([]byte(name)) Err z3bra.org 70 i Err z3bra.org 70 i- //token := []byte(name) Err z3bra.org 70 i- //token = append(token, key...) Err z3bra.org 70 i token := key Err z3bra.org 70 i token = append(token, []byte(name)...) Err z3bra.org 70 i Err z3bra.org 70 it@@ -104,10 +102,10 @@ func (p *Player) ScoreRank() int { Err z3bra.org 70 i count(*) Err z3bra.org 70 i FROM score Err z3bra.org 70 i WHERE Err z3bra.org 70 i- score >= ? OR (score == ? AND ts <= ?) Err z3bra.org 70 i+ name != ? AND (score > ? OR (score == ? AND ts <= ?)) Err z3bra.org 70 i ;` Err z3bra.org 70 i Err z3bra.org 70 i- row := p.db.QueryRow(query, p.score, p.score, p.ts) Err z3bra.org 70 i+ row := p.db.QueryRow(query, p.name, p.score, p.score, p.ts) Err z3bra.org 70 i row.Scan(&count) Err z3bra.org 70 i return count Err z3bra.org 70 i } Err z3bra.org 70 it@@ -139,6 +137,10 @@ func (p *Player) FlagStr() string { Err z3bra.org 70 i return fmt.Sprintf("%s", str) Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i+func (p *Player) RankStr() string { Err z3bra.org 70 i+ return humanize.Ordinal(p.ScoreRank() + 1) Err z3bra.org 70 i+} Err z3bra.org 70 i+ Err z3bra.org 70 i func (p *Player) Exists() bool { Err z3bra.org 70 i forbidden := []string{"KKK"} Err z3bra.org 70 i for i := 0; i