diff options
author | Santo Cariotti <santo@dcariotti.me> | 2025-04-08 14:37:33 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2025-04-08 14:39:13 +0200 |
commit | 1f0d9ec8452f15c27cd33c4e3874454c35993743 (patch) | |
tree | c453a31ae5eb823aaf48868eea9fc4daf65f108b /api/handlers/handlers.go | |
parent | c5b10e28b358308d8349b940af09f64368172f2e (diff) |
Use internal/pkg structure
Diffstat (limited to 'api/handlers/handlers.go')
-rw-r--r-- | api/handlers/handlers.go | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/api/handlers/handlers.go b/api/handlers/handlers.go deleted file mode 100644 index 601b770..0000000 --- a/api/handlers/handlers.go +++ /dev/null @@ -1,200 +0,0 @@ -package handlers - -import ( - "encoding/json" - "log/slog" - "net/http" - "time" - - "github.com/boozec/rahanna/api/auth" - "github.com/boozec/rahanna/api/database" - "github.com/boozec/rahanna/network" - utils "github.com/boozec/rahanna/pkg" - "golang.org/x/crypto/bcrypt" - "gorm.io/gorm" -) - -type NewGameRequest struct { - IP string `json:"ip"` -} - -func RegisterUser(w http.ResponseWriter, r *http.Request) { - slog.Info("POST /auth/register") - var user database.User - err := json.NewDecoder(r.Body).Decode(&user) - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - if len(user.Password) < 4 { - utils.JsonError(&w, "password too short") - return - } - - var storedUser database.User - db, _ := database.GetDb() - result := db.Where("username = ?", user.Username).First(&storedUser) - - if result.Error == nil { - utils.JsonError(&w, "user with this username already exists") - return - } - - hashedPassword, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost) - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - user.Password = string(hashedPassword) - - result = db.Create(&user) - if result.Error != nil { - utils.JsonError(&w, result.Error.Error()) - return - } - - token, err := auth.GenerateJWT(user.ID) - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - json.NewEncoder(w).Encode(map[string]string{"token": token}) -} - -func LoginUser(w http.ResponseWriter, r *http.Request) { - slog.Info("POST /auth/login") - var inputUser database.User - err := json.NewDecoder(r.Body).Decode(&inputUser) - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - var storedUser database.User - - db, _ := database.GetDb() - result := db.Where("username = ?", inputUser.Username).First(&storedUser) - if result.Error != nil { - utils.JsonError(&w, "invalid credentials") - return - } - - err = bcrypt.CompareHashAndPassword([]byte(storedUser.Password), []byte(inputUser.Password)) - if err != nil { - utils.JsonError(&w, "invalid credentials") - return - } - - token, err := auth.GenerateJWT(storedUser.ID) - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - json.NewEncoder(w).Encode(map[string]string{"token": token}) -} - -func NewPlay(w http.ResponseWriter, r *http.Request) { - slog.Info("POST /play") - claims, err := auth.ValidateJWT(r.Header.Get("Authorization")) - - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - var payload struct { - IP string `json:"ip"` - } - - if err := json.NewDecoder(r.Body).Decode(&payload); err != nil { - utils.JsonError(&w, err.Error()) - return - } - - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - db, _ := database.GetDb() - - name := network.NewSession() - play := database.Game{ - Player1ID: claims.UserID, - Player2ID: nil, - Name: name, - IP1: payload.IP, - IP2: "", - } - - result := db.Create(&play) - if result.Error != nil { - utils.JsonError(&w, result.Error.Error()) - return - } - - json.NewEncoder(w).Encode(map[string]string{"name": name}) -} - -func EnterGame(w http.ResponseWriter, r *http.Request) { - slog.Info("POST /enter-game") - claims, err := auth.ValidateJWT(r.Header.Get("Authorization")) - - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - var payload struct { - Name string `json:"name"` - IP string `json:"ip"` - } - - if err := json.NewDecoder(r.Body).Decode(&payload); err != nil { - utils.JsonError(&w, err.Error()) - return - } - - if err != nil { - utils.JsonError(&w, err.Error()) - return - } - - db, _ := database.GetDb() - - var play database.Game - - result := db.Where("name = ? AND player2_id IS NULL", payload.Name).First(&play) - if result.Error != nil { - utils.JsonError(&w, result.Error.Error()) - return - } - - play.Player2ID = &claims.UserID - play.IP2 = payload.IP - play.UpdatedAt = time.Now() - - if err := db.Save(&play).Error; err != nil { - utils.JsonError(&w, err.Error()) - return - } - - result = db.Where("id = ?", play.ID). - Preload("Player1", func(db *gorm.DB) *gorm.DB { - return db.Omit("Password") - }). - Preload("Player2", func(db *gorm.DB) *gorm.DB { - return db.Omit("Password") - }). - First(&play) - - if result.Error != nil { - utils.JsonError(&w, result.Error.Error()) - return - } - - json.NewEncoder(w).Encode(play) -} |