Fix: on login add player once

This commit is contained in:
Grail Finder
2025-07-11 09:03:18 +03:00
parent d056c4a07e
commit 37fe76456e
7 changed files with 30 additions and 34 deletions

View File

@ -1,7 +1,6 @@
package handlers
import (
"context"
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
@ -9,7 +8,6 @@ import (
"gralias/models"
"gralias/utils"
"html/template"
"log/slog"
"net/http"
"strings"
"time"
@ -93,7 +91,7 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
}
}
// login user
cookie, err := makeCookie(cleanName, r.RemoteAddr)
cookie, session, err := makeCookie(cleanName, r.RemoteAddr)
if err != nil {
log.Error("failed to login", "error", err)
abortWithError(w, err.Error())
@ -136,10 +134,15 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
}
}
}
if err := repo.SessionCreate(r.Context(), session); err != nil {
log.Error("failed to save session", "error", err)
abortWithError(w, err.Error())
return
}
http.Redirect(w, r, "/", 302)
}
func makeCookie(username string, remote string) (*http.Cookie, error) {
func makeCookie(username string, remote string) (*http.Cookie, *models.Session, error) {
// secret
// Create a new random session token
// sessionToken := xid.New().String()
@ -176,19 +179,19 @@ func makeCookie(username string, remote string) (*http.Cookie, error) {
cookie.Secure = false
log.Info("changing cookie domain", "domain", cookie.Domain)
}
player, err := repo.PlayerGetByName(context.Background(), username)
if err != nil || player == nil {
// make player first, since username is fk to players table
player = models.InitPlayer(username)
if err := repo.PlayerAdd(context.Background(), player); err != nil {
slog.Error("failed to create player", "username", username)
return nil, err
}
}
if err := repo.SessionCreate(context.Background(), session); err != nil {
return nil, err
}
return cookie, nil
// player, err := repo.PlayerGetByName(context.Background(), username)
// if err != nil || player == nil {
// // make player first, since username is fk to players table
// player = models.InitPlayer(username)
// if err := repo.PlayerAdd(context.Background(), player); err != nil {
// slog.Error("failed to create player", "username", username)
// return nil, err
// }
// }
// if err := repo.SessionCreate(context.Background(), session); err != nil {
// return nil, err
// }
return cookie, session, nil
}
func HandleSignout(w http.ResponseWriter, r *http.Request) {