tStore flag as a struct rather than value - scoreboard - Interactive scoreboard for CTF-like games
(HTM) git clone git://git.z3bra.org/scoreboard.git
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit 6cc78df0825869cb50d130baee6429174c979827
(DIR) parent 8a7650dfacce3928c15355cff32ba81179141352
(HTM) Author: Willy Goiffon <contact@z3bra.org>
Date: Thu, 26 Sep 2024 11:07:55 +0200
Store flag as a struct rather than value
Diffstat:
M db.go | 12 ++++++++++++
M main.go | 8 ++++----
M player.go | 8 ++++----
3 files changed, 20 insertions(+), 8 deletions(-)
---
(DIR) diff --git a/db.go b/db.go
t@@ -100,6 +100,18 @@ func db_calculate_user_score(db *sql.DB, name string) (int, error) {
return count, err
}
+func db_get_flag(db *sql.DB, flag string) (Flag, error) {
+ var res Flag
+
+ query := `SELECT rowid,value,badge,score FROM flag WHERE value = ?;`
+
+ row := db.QueryRow(query, flag)
+ err := row.Scan(&res.id, &res.value, &res.badge, &res.score)
+
+ return res, err
+}
+
+
func db_get_flags(db *sql.DB) ([]Flag, error) {
query := `SELECT rowid,value,badge,score FROM flag ORDER BY score;`
(DIR) diff --git a/main.go b/main.go
t@@ -48,7 +48,7 @@ type Flag struct {
}
type Application struct {
- flag string
+ flag Flag
flag_ref []Flag
db *sql.DB
app *tview.Application
t@@ -166,7 +166,7 @@ func main() {
scoreboard.flag_ref, err = db_get_flags(scoreboard.db)
- scoreboard.flag = ""
+ scoreboard.flag = Flag{}
scoreboard.html = *html
scoreboard.app = tview.NewApplication()
scoreboard.pages = tview.NewPages()
t@@ -207,11 +207,11 @@ func main() {
/* anything not a command is treated as a flag */
default:
- if flagid(args[0]) < 0 {
+ scoreboard.flag, err = db_get_flag(scoreboard.db, args[0])
+ if err != nil {
fmt.Println("Incorrect flag")
return
}
- scoreboard.flag = args[0]
scoreboard.pages.SwitchToPage("token")
}
}
(DIR) diff --git a/player.go b/player.go
t@@ -171,15 +171,15 @@ func (p *Player) Exists() bool {
return (count > 0)
}
-func (p *Player) HasFlag(flag string) bool {
+func (p *Player) HasFlag(flag Flag) bool {
var count int
query := `SELECT count(*) FROM score WHERE name = ? AND flag = ?;`
- row := p.db.QueryRow(query, p.name, flag)
+ row := p.db.QueryRow(query, p.name, flag.value)
row.Scan(&count)
return (count > 0)
}
-func (p *Player) Submit(flag string) error {
+func (p *Player) Submit(flag Flag) error {
var err error
var ts int64
t@@ -187,7 +187,7 @@ func (p *Player) Submit(flag string) error {
return errors.New("Flag already submitted")
} else {
query := `INSERT INTO score(name,flag) VALUES(?,?);`
- _, err = p.db.Exec(query, p.name, flag)
+ _, err = p.db.Exec(query, p.name, flag.value)
if err != nil {
return err
}