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
                        }