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) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder