itChange player.Fetch() to retrieve user info from token or name - 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 999af0860e61802b8d01a8087ad0f52aba0384ac /scm/scoreboard/commit/999af0860e61802b8d01a8087ad0f52aba0384ac.gph z3bra.org 70 1parent 3733b227f90b501b4f2817d9d0d4de8402fcf446 /scm/scoreboard/commit/3733b227f90b501b4f2817d9d0d4de8402fcf446.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:contact@z3bra.org z3bra.org 70 iDate: Wed, 2 Oct 2024 23:21:53 +0200 Err z3bra.org 70 i Err z3bra.org 70 iChange player.Fetch() to retrieve user info from token or name Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M player.go | 36 ++++++++++--------------------- Err z3bra.org 70 i M ui.go | 6 +++--- Err z3bra.org 70 i Err z3bra.org 70 i2 files changed, 14 insertions(+), 28 deletions(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/player.go b/player.go /scm/scoreboard/file/player.go.gph z3bra.org 70 it@@ -65,12 +65,12 @@ func mktoken(key []byte, salt string) (string, string, error) { Err z3bra.org 70 i return token32, hash32, nil Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-func hashtoken(token string) (string, error) { Err z3bra.org 70 i+func hashtoken(token string) (string, string, error) { Err z3bra.org 70 i var err error Err z3bra.org 70 i Err z3bra.org 70 i blob, err := base32.StdEncoding.DecodeString(token) Err z3bra.org 70 i if err != nil { Err z3bra.org 70 i- return "", err Err z3bra.org 70 i+ return "", "", err Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i key := blob[:12] Err z3bra.org 70 it@@ -80,11 +80,11 @@ func hashtoken(token string) (string, error) { Err z3bra.org 70 i Err z3bra.org 70 i dk, err := scrypt.Key(key, []byte(salt), 1<<15, 8, 1, 32) Err z3bra.org 70 i if err != nil { Err z3bra.org 70 i- return "", err Err z3bra.org 70 i+ return "", "", err Err z3bra.org 70 i } Err z3bra.org 70 i hash := base32.StdEncoding.EncodeToString(dk) Err z3bra.org 70 i Err z3bra.org 70 i- return hash, nil Err z3bra.org 70 i+ return name, hash, nil Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i /* Register a user in the database */ Err z3bra.org 70 it@@ -109,10 +109,15 @@ func (p *Player) Register() error { Err z3bra.org 70 i Err z3bra.org 70 i func (p *Player) Fetch() error { Err z3bra.org 70 i var err error Err z3bra.org 70 i+ var hash string Err z3bra.org 70 i+ Err z3bra.org 70 i+ if (p.token != "") { Err z3bra.org 70 i+ p.name, hash, err = hashtoken(p.token) Err z3bra.org 70 i+ } Err z3bra.org 70 i Err z3bra.org 70 i /* Fill player struct with basic info */ Err z3bra.org 70 i- query := `SELECT rowid,ts FROM user WHERE name = ?;` Err z3bra.org 70 i- row := p.db.QueryRow(query, p.name) Err z3bra.org 70 i+ query := `SELECT rowid,ts FROM user WHERE hash = ? OR name = ?;` Err z3bra.org 70 i+ row := p.db.QueryRow(query, hash, p.name) Err z3bra.org 70 i row.Scan(&p.id, &p.ts) Err z3bra.org 70 i Err z3bra.org 70 i /* Calculate score based on submitted flags */ Err z3bra.org 70 it@@ -234,22 +239,3 @@ func (p *Player) Submit(flag Flag) error { Err z3bra.org 70 i return nil Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-/* Retrieve username from given token */ Err z3bra.org 70 i-func (p *Player) FromToken(token string) error { Err z3bra.org 70 i- var err error Err z3bra.org 70 i- hash, err := hashtoken(token) Err z3bra.org 70 i- if err != nil { Err z3bra.org 70 i- return err Err z3bra.org 70 i- } Err z3bra.org 70 i- Err z3bra.org 70 i- query := `SELECT name,ts FROM user WHERE hash = ?` Err z3bra.org 70 i- Err z3bra.org 70 i- row := p.db.QueryRow(query, hash) Err z3bra.org 70 i- err = row.Scan(&p.name, &p.ts) Err z3bra.org 70 i- if err == sql.ErrNoRows { Err z3bra.org 70 i- return errors.New("Unknown token") Err z3bra.org 70 i- } Err z3bra.org 70 i- p.Fetch() Err z3bra.org 70 i- Err z3bra.org 70 i- return nil Err z3bra.org 70 i-} Err z3bra.org 70 1diff --git a/ui.go b/ui.go /scm/scoreboard/file/ui.go.gph z3bra.org 70 it@@ -251,14 +251,14 @@ func (a *Application) Token(callback func()) tview.Primitive { Err z3bra.org 70 i a.Popup("ERROR", "Invalid token format") Err z3bra.org 70 i return Err z3bra.org 70 i } Err z3bra.org 70 i- err := a.player.FromToken(token) Err z3bra.org 70 i+ a.player.token = token Err z3bra.org 70 i+ Err z3bra.org 70 i+ err := a.player.Fetch() Err z3bra.org 70 i if err != nil { Err z3bra.org 70 i a.Fatal(err) Err z3bra.org 70 i return Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i- a.player.Fetch() Err z3bra.org 70 i- a.player.token = token; Err z3bra.org 70 i a.pages.RemovePage("token"); Err z3bra.org 70 i a.frame.Clear() Err z3bra.org 70 i a.frame.AddText(fmt.Sprintf("🔑%s", a.player.token), false, tview.AlignCenter, 0) Err z3bra.org 70 .