From 4866c6fe6bd84ef8a51a329c7dfce2b71057791c Mon Sep 17 00:00:00 2001 From: Araozu Date: Thu, 16 May 2024 16:17:41 -0500 Subject: [PATCH] Create lobby --- controller/lobby.go | 40 ++++++++++++++++++++++++++++++++++++++++ controller/utils.go | 20 ++++++++++++++++++++ go.mod | 2 +- main.go | 22 +++++----------------- 4 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 controller/lobby.go create mode 100644 controller/utils.go diff --git a/controller/lobby.go b/controller/lobby.go new file mode 100644 index 0000000..5bad277 --- /dev/null +++ b/controller/lobby.go @@ -0,0 +1,40 @@ +package controller + +import ( + "encoding/json" + "fmt" + "github.com/nrednav/cuid2" + "net/http" +) + +// TODO: This struct should have a creation time +type Lobby struct { + LobbyOwner string + LobbyPlayers [3]string +} + +type LobbyResult struct { + LobbyId string +} + +// TODO: We should remove entries from this map when they expire. +// TODO: Define how long lobbies last +var lobbies = make(map[string]Lobby) + +func CreateLobby(writer http.ResponseWriter, request *http.Request) { + writer.Header().Set("Content-Type", "application/json") + + lobbyId := cuid2.Generate() + + result := LobbyResult{LobbyId: lobbyId} + + jsonData, err := json.Marshal(result) + if err != nil { + fmt.Printf("Error in JSON marshal: %s\n", err) + writer.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(writer, "{\"error\": \"%s\"}", err) + return + } + + fmt.Fprintf(writer, "%s", jsonData) +} diff --git a/controller/utils.go b/controller/utils.go new file mode 100644 index 0000000..ddcd8d7 --- /dev/null +++ b/controller/utils.go @@ -0,0 +1,20 @@ +package controller + +import ( + "strings" +) + +func AuthHeaderIsValid(users *map[string]string, authHeader string) bool { + // (try to) get the Bearer token + reqToken := authHeader + if !strings.HasPrefix(reqToken, "Bearer ") { + return false + } + + bearerToken := reqToken[7:] + + // Check that the token is in the global map + _, ok := (*users)[bearerToken] + + return ok +} diff --git a/go.mod b/go.mod index 23a6a5e..108859c 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module git.araozu.dev/card-jong-be +module card-jong-be go 1.22.2 diff --git a/main.go b/main.go index 41ca94d..9460f26 100644 --- a/main.go +++ b/main.go @@ -1,13 +1,13 @@ package main import ( + "card-jong-be/controller" "encoding/json" "fmt" "log" "net/http" "net/url" "os" - "strings" "github.com/gorilla/mux" "github.com/nrednav/cuid2" @@ -30,6 +30,7 @@ func main() { router.HandleFunc("/register", Register) router.HandleFunc("/validate", ValidateId) + router.HandleFunc("/lobby/new", controller.CreateLobby).Methods("POST") port, ok := os.LookupEnv("PORT") if !ok { @@ -94,22 +95,9 @@ func Register(writer http.ResponseWriter, request *http.Request) { } func ValidateId(writer http.ResponseWriter, request *http.Request) { - // (try to) get the Bearer token - reqToken := request.Header.Get("Authorization") - if !strings.HasPrefix(reqToken, "Bearer ") { - // return 401 + if controller.AuthHeaderIsValid(&users, request.Header.Get("Authorization")) { + writer.WriteHeader(http.StatusOK) + } else { writer.WriteHeader(http.StatusUnauthorized) } - - bearerToken := reqToken[7:] - - // Check that the token is in the global map - _, ok := users[bearerToken] - if !ok { - // Return 401 - writer.WriteHeader(http.StatusUnauthorized) - } - - // Return Ok - writer.WriteHeader(http.StatusOK) }