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
	 Grail Finder
					Grail Finder