Fix: on login add player once
This commit is contained in:
@ -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) {
|
||||
|
@ -128,8 +128,10 @@ func HandleStats(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
fi, err := getFullInfoByCtx(r.Context())
|
||||
if err != nil {
|
||||
if err != nil || fi == nil {
|
||||
log.Error("failed to fetch fi", "error", err)
|
||||
http.Redirect(w, r, "/", 302)
|
||||
return
|
||||
}
|
||||
// there must be a better way
|
||||
if fi != nil && fi.Room != nil && fi.Room.ID != "" && fi.State != nil {
|
||||
|
@ -61,8 +61,6 @@ func GetSession(next http.Handler) http.Handler {
|
||||
return
|
||||
}
|
||||
userSession, err := repo.SessionByToken(r.Context(), sessionToken)
|
||||
// userSession, err := cacheGetSession(sessionToken)
|
||||
// log.Debug("userSession from cache", "us", userSession)
|
||||
if err != nil {
|
||||
msg := "auth failed; session does not exists"
|
||||
log.Debug(msg, "error", err, "key", sessionToken)
|
||||
@ -83,13 +81,6 @@ func GetSession(next http.Handler) http.Handler {
|
||||
models.CtxUsernameKey, userSession.Username)
|
||||
ctx = context.WithValue(ctx,
|
||||
models.CtxSessionKey, userSession)
|
||||
// if err := cacheSetSession(sessionToken,
|
||||
// userSession); err != nil {
|
||||
// msg := "failed to marshal user session"
|
||||
// log.Warn(msg, "error", err)
|
||||
// next.ServeHTTP(w, r)
|
||||
// return
|
||||
// }
|
||||
next.ServeHTTP(w, r.WithContext(ctx))
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user