tLoad flag values from database - scoreboard - Interactive scoreboard for CTF-like games
 (HTM) git clone git://git.z3bra.org/scoreboard.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit b1a8eb06be6bde0ee97f6e16c37c4f7f0330e09f
 (DIR) parent 68e71a2910f055a0365daf3662d2cab878a3501d
 (HTM) Author: Willy Goiffon <dev@z3bra.org>
       Date:   Thu,  5 Jan 2023 12:33:56 +0100
       
       Load flag values from database
       
       Diffstat:
         M db.go                               |      29 ++++++++++++++++++++++++++++-
         M main.go                             |      17 ++++++-----------
       
       2 files changed, 34 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/db.go b/db.go
       t@@ -29,7 +29,13 @@ const (
                    flag INT,
                    score INT,
                    ts INT
       -        );`
       +          );
       +        CREATE TABLE IF NOT EXISTS
       +          flag(
       +            chapter INT,
       +            value TEXT
       +          );
       +        `
        )
        
        
       t@@ -131,3 +137,24 @@ func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) {
        
                return players, nil
        }
       +
       +func db_flags(db *sql.DB) ([]string, error) {
       +        query := `SELECT value FROM flag ORDER BY chapter;`
       +
       +        rows, err := db.Query(query)
       +        if err != nil {
       +                return nil, err
       +        }
       +
       +        flags := make([]string, 0)
       +        for rows.Next() {
       +                var flag string
       +                err := rows.Scan(&flag)
       +                if err != nil {
       +                        return nil, err
       +                }
       +                flags = append(flags, flag)
       +        }
       +
       +        return flags, nil
       +}
 (DIR) diff --git a/main.go b/main.go
       t@@ -42,6 +42,7 @@ Good bye hunter. Good luck.
        
        type Application struct {
                flag int
       +        flag_ref []string
                db *sql.DB
                app *tview.Application
                html string
       t@@ -51,14 +52,6 @@ type Application struct {
                player *Player
        }
        
       -var flag_sha256 = [...]string {
       -        "FLAG0", // web cookie value
       -        "FLAG1", // garden account password
       -        "FLAG2",
       -        "FLAG3",
       -        "FLAG4"}
       -
       -
        var cyboard Application
        
        func usage() {
       t@@ -68,8 +61,8 @@ func usage() {
        
        
        func flagid(hash string) int {
       -        for i := 0; i<len(flag_sha256); i++ {
       -                if strings.ToUpper(hash) == flag_sha256[i] {
       +        for i := 0; i<len(cyboard.flag_ref); i++ {
       +                if strings.ToUpper(hash) == cyboard.flag_ref[i] {
                                return i
                        }
                }
       t@@ -159,6 +152,8 @@ func main() {
                }
                defer cyboard.db.Close()
        
       +        cyboard.flag_ref, err = db_flags(cyboard.db)
       +
                cyboard.flag = 0
                cyboard.html = *html
                cyboard.app = tview.NewApplication()
       t@@ -215,7 +210,7 @@ func main() {
                        os.Exit(1)
                }
        
       -        if cyboard.player.token != "" && cyboard.flag < (len(flag_sha256)) {
       +        if cyboard.player.token != "" && cyboard.flag < (len(cyboard.flag_ref)) {
                        fmt.Printf(TOKEN_REMINDER, cyboard.player.name, cyboard.player.token, cyboard.flag + 1)
                }
        }