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)
}
}