summaryrefslogtreecommitdiff
path: root/api/handlers/handlers.go
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-04-08 14:37:33 +0200
committerSanto Cariotti <santo@dcariotti.me>2025-04-08 14:39:13 +0200
commit1f0d9ec8452f15c27cd33c4e3874454c35993743 (patch)
treec453a31ae5eb823aaf48868eea9fc4daf65f108b /api/handlers/handlers.go
parentc5b10e28b358308d8349b940af09f64368172f2e (diff)
Use internal/pkg structure
Diffstat (limited to 'api/handlers/handlers.go')
-rw-r--r--api/handlers/handlers.go200
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)
-}