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