From c8ab4d5479b22b013dda3133da8dc3ed3a472c2d Mon Sep 17 00:00:00 2001 From: NGnius Date: Tue, 31 Mar 2020 12:35:40 -0400 Subject: [PATCH] Add player autocreate option --- config.go | 1 + handlers.go | 2 +- json_structs.go | 1 + sql_service.go | 12 +++++++++++- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/config.go b/config.go index 9cbf013..139f4ad 100644 --- a/config.go +++ b/config.go @@ -29,6 +29,7 @@ func initArgs() { flag.StringVar(&corsHeader, "cors-header", defaultCorsHeader, "Access-Control-Allow-Origin HTTP request header") flag.StringVar(&password, "entry-pwd", defaultPassword, "Password provided in POST JSON to authenticate") flag.BoolVar(&reuseTokens, "reuse-tokens", false, "Generate a single token for every player") + flag.BoolVar(&autocreate, "autocreate-players", false, "Create a player during a token request") } func parseArgs() { diff --git a/handlers.go b/handlers.go index 914b7a0..25bd566 100644 --- a/handlers.go +++ b/handlers.go @@ -221,7 +221,7 @@ func newKeyHandler(w http.ResponseWriter, r *http.Request) { key, sqlErr = keyByPlayer(newKey.PlayerID) } if (sqlErr != nil && reuseTokens) || !reuseTokens { - key, sqlErr = newKeySql(newKey.PlayerID) + key, sqlErr = newKeySql(newKey.PlayerID, newKey.PlayerName) } if sqlErr != nil { fmt.Println(sqlErr) diff --git a/json_structs.go b/json_structs.go index 16241ed..02a478e 100644 --- a/json_structs.go +++ b/json_structs.go @@ -56,6 +56,7 @@ type KeyJSON struct { // NewKeyJSON a new API key to be generated type NewKeyJSON struct { PlayerID int64 + PlayerName string } func UnmarshalNewKeyJSON(data []byte) (NewKeyJSON, error) { diff --git a/sql_service.go b/sql_service.go index d1b15d3..8cf4836 100644 --- a/sql_service.go +++ b/sql_service.go @@ -22,6 +22,7 @@ var ( sqlConnection string buildTables bool populateTables bool + autocreate bool // internal variables db *sql.DB queryType int @@ -137,8 +138,17 @@ func newEntrySql(score, player, board int64) error { return nil } -func newKeySql(player int64) (*Key, error) { +func newKeySql(player int64, name string) (*Key, error) { tx, _ := db.Begin() + if autocreate { + sqlPlayer := &Player{ID: player, Name: name} + if (sqlPlayer.Load() != nil) { + playerErr := sqlPlayer.Commit() + if playerErr != nil { + return nil, playerErr + } + } + } newKey := &Key{Token: "new", Player: player, Time: time.Now().Unix()} stmt, _ := tx.Prepare(queryStrings[queryType][3]) _, err := stmt.Exec(newKey.Token, newKey.Player, newKey.Time)