itRework database to allow random flag submissions - 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 f2372a7f800172e4b59c983b08daff889b05274b /scm/scoreboard/commit/f2372a7f800172e4b59c983b08daff889b05274b.gph z3bra.org 70 1parent 18522b155c6c058696e5699d7d321ddebb4302b1 /scm/scoreboard/commit/18522b155c6c058696e5699d7d321ddebb4302b1.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:contact@z3bra.org z3bra.org 70 iDate: Wed, 25 Sep 2024 22:59:01 +0200 Err z3bra.org 70 i Err z3bra.org 70 iRework database to allow random flag submissions Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M db.go | 103 +++++++++---------------------- Err z3bra.org 70 i M html.go | 3 +++ Err z3bra.org 70 i M main.go | 107 +++++++++++++------------------ Err z3bra.org 70 i M player.go | 116 +++++++++++++++---------------- Err z3bra.org 70 i M playerbox.go | 15 +++++++-------- Err z3bra.org 70 i M ui.go | 7 ++++--- Err z3bra.org 70 i Err z3bra.org 70 i6 files changed, 143 insertions(+), 208 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@@ -23,17 +23,23 @@ const ( Err z3bra.org 70 i // DB queries Err z3bra.org 70 i DB_CREATE string = ` Err z3bra.org 70 i CREATE TABLE IF NOT EXISTS Err z3bra.org 70 i- score( Err z3bra.org 70 i- hash TEXT, Err z3bra.org 70 i- name TEXT, Err z3bra.org 70 i- flag INT, Err z3bra.org 70 i+ user( Err z3bra.org 70 i+ name TEXT PRIMARY KEY, Err z3bra.org 70 i+ hash TEXT NOT NULL UNIQUE, Err z3bra.org 70 i score INT, Err z3bra.org 70 i+ flag INT, Err z3bra.org 70 i ts INT Err z3bra.org 70 i ); Err z3bra.org 70 i CREATE TABLE IF NOT EXISTS Err z3bra.org 70 i flag( Err z3bra.org 70 i- chapter INT, Err z3bra.org 70 i- value TEXT Err z3bra.org 70 i+ value TEXT PRIMARY KEY, Err z3bra.org 70 i+ badge TEXT, Err z3bra.org 70 i+ score INT Err z3bra.org 70 i+ ); Err z3bra.org 70 i+ CREATE TABLE IF NOT EXISTS Err z3bra.org 70 i+ score( Err z3bra.org 70 i+ name TEXT, Err z3bra.org 70 i+ flag TEXT Err z3bra.org 70 i ); Err z3bra.org 70 i ` Err z3bra.org 70 i ) Err z3bra.org 70 it@@ -57,61 +63,31 @@ func db_init(file string) (*sql.DB, error) { Err z3bra.org 70 i return db, nil Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-func db_count(db *sql.DB) int { Err z3bra.org 70 i- var count int Err z3bra.org 70 i- query := `SELECT count(*) FROM score;` Err z3bra.org 70 i- row := db.QueryRow(query) Err z3bra.org 70 i- row.Scan(&count) Err z3bra.org 70 i- return count Err z3bra.org 70 i-} Err z3bra.org 70 i- Err z3bra.org 70 i-func db_score_count(db *sql.DB, score, ts int) int { Err z3bra.org 70 i- var count int Err z3bra.org 70 i- query := `SELECT Err z3bra.org 70 i- count(id) Err z3bra.org 70 i- FROM score Err z3bra.org 70 i- WHERE Err z3bra.org 70 i- score >= ? AND Err z3bra.org 70 i- ts => ? Err z3bra.org 70 i- ;` Err z3bra.org 70 i- Err z3bra.org 70 i- row := db.QueryRow(query, score, 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 i- Err z3bra.org 70 i-func db_flag_count(db *sql.DB, flag int) int { Err z3bra.org 70 i- var count int Err z3bra.org 70 i- query := `SELECT Err z3bra.org 70 i- count(*) Err z3bra.org 70 i- FROM score Err z3bra.org 70 i- WHERE Err z3bra.org 70 i- flag >= ? Err z3bra.org 70 i- ;` Err z3bra.org 70 i+func db_get_flags(db *sql.DB) ([]Flag, error) { Err z3bra.org 70 i+ query := `SELECT rowid,value,badge,score FROM flag ORDER BY score;` Err z3bra.org 70 i Err z3bra.org 70 i- row := db.QueryRow(query, flag) Err z3bra.org 70 i- row.Scan(&count) Err z3bra.org 70 i- return count Err z3bra.org 70 i-} Err z3bra.org 70 i+ rows, err := db.Query(query) 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 i Err z3bra.org 70 i-func db_id(db *sql.DB, nick string) bool { Err z3bra.org 70 i- var count int Err z3bra.org 70 i- query := `SELECT Err z3bra.org 70 i- count(*) Err z3bra.org 70 i- FROM score Err z3bra.org 70 i- WHERE Err z3bra.org 70 i- name = ? Err z3bra.org 70 i- ;` Err z3bra.org 70 i+ flags := make([]Flag, 0) Err z3bra.org 70 i+ for rows.Next() { Err z3bra.org 70 i+ var flag Flag Err z3bra.org 70 i+ err := rows.Scan(&flag.id, &flag.value, &flag.badge, &flag.score) 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 i+ flags = append(flags, flag) Err z3bra.org 70 i+ } Err z3bra.org 70 i Err z3bra.org 70 i- row := db.QueryRow(query, nick) Err z3bra.org 70 i- row.Scan(&count) Err z3bra.org 70 i- return (count > 0) Err z3bra.org 70 i+ return flags, nil Err z3bra.org 70 i } 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,ts Err z3bra.org 70 i- FROM score Err z3bra.org 70 i+ FROM user Err z3bra.org 70 i ORDER BY Err z3bra.org 70 i score DESC, Err z3bra.org 70 i flag DESC, Err z3bra.org 70 it@@ -137,24 +113,3 @@ func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) { Err z3bra.org 70 i Err z3bra.org 70 i return players, nil Err z3bra.org 70 i } Err z3bra.org 70 i- Err z3bra.org 70 i-func db_flags(db *sql.DB) ([]Flag, error) { Err z3bra.org 70 i- query := `SELECT chapter,value FROM flag ORDER BY chapter;` Err z3bra.org 70 i- Err z3bra.org 70 i- rows, err := db.Query(query) 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 i- Err z3bra.org 70 i- flags := make([]Flag, 0) Err z3bra.org 70 i- for rows.Next() { Err z3bra.org 70 i- var flag Flag Err z3bra.org 70 i- err := rows.Scan(&flag.chapter, &flag.value) 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 i- flags = append(flags, flag) Err z3bra.org 70 i- } Err z3bra.org 70 i- Err z3bra.org 70 i- return flags, nil 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@@ -53,10 +53,13 @@ var html string = ` 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 := make([]Player, 0) Err z3bra.org 70 i+ /* 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 Err z3bra.org 70 i data := Template{} Err z3bra.org 70 i for i:=0; i ? OR (score == ? AND ts <= ?)) Err z3bra.org 70 i ;` Err z3bra.org 70 it@@ -110,31 +132,8 @@ func (p *Player) ScoreRank() int { Err z3bra.org 70 i return count Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-func (p *Player) FlagRank() int { Err z3bra.org 70 i- var count int Err z3bra.org 70 i- query := `SELECT Err z3bra.org 70 i- count(*) Err z3bra.org 70 i- FROM score Err z3bra.org 70 i- WHERE Err z3bra.org 70 i- flag >= ? Err z3bra.org 70 i- ;` Err z3bra.org 70 i- Err z3bra.org 70 i- row := p.db.QueryRow(query, p.flag) Err z3bra.org 70 i- row.Scan(&count) Err z3bra.org 70 i- return count Err z3bra.org 70 i-} Err z3bra.org 70 i- Err z3bra.org 70 i func (p *Player) FlagStr() string { Err z3bra.org 70 i- var str [7]byte Err z3bra.org 70 i- for i:=0; i