Compare commits

...

2 Commits

Author SHA1 Message Date
Grail Finder
a03253593c Feat: signout button 2025-07-10 10:56:48 +03:00
Grail Finder
5ba97d3423 Feat: signout endpoint 2025-07-10 10:43:52 +03:00
4 changed files with 36 additions and 11 deletions

View File

@@ -4,8 +4,12 @@
{{ else if ne .LinkLogin "" }}
{{template "linklogin" .LinkLogin}}
{{ else if not .State.RoomID }}
<div id="hello-user" class="text-xl py-2">
<p>Hello {{.State.Username}}</p>
<div id="hello-user" class="grid grid-cols-3 items-center text-xl py-2">
<div></div>
<p class="text-center">Hello {{.State.Username}}</p>
<div class="text-right">
<a href="/signout"><button class="bg-indigo-600 text-white font-semibold text-sm px-4 py-2 rounded hover:bg-indigo-500">signout</button></a>
</div>
</div>
<div id="create-room" class="create-room-div">
<button button id="create-form-btn" type="submit" class="justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" hx-get="/room/createform" hx-swap="outerHTML">SHOW ROOM CREATE FORM</button>

View File

@@ -5,13 +5,13 @@
<a href="/">
<div id="login_notice" class="bg-orange-100 border-l-4 border-orange-500 text-orange-700 p-4" role="alert">
<p class="font-bold">Be Warned</p>
<p>This Name is already taken. You won't be able to login with it until other person leaves.</p>
<p>This Name is already taken. But if it's yours, you should know the password.</p>
</div>
</a>
{{ else }}
<div id="login_notice" class="bg-orange-100 border-l-4 border-orange-500 text-orange-700 p-4" role="alert">
<p class="font-bold">Be Warned</p>
<p>This Name is already taken. You won't be able to login with it until other person leaves.</p>
<p>This Name is already taken. But if it's yours, you should know the password.</p>
</div>
{{end}}
{{end}}

View File

@@ -79,13 +79,6 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
// make sure username does not exists
cleanName := utils.RemoveSpacesFromStr(username)
clearPass := utils.RemoveSpacesFromStr(password)
// login user
cookie, err := makeCookie(cleanName, r.RemoteAddr)
if err != nil {
log.Error("failed to login", "error", err)
abortWithError(w, err.Error())
return
}
// check if that user was already in db
userstate, err := repo.PlayerGetByName(r.Context(), cleanName)
if err != nil || userstate == nil {
@@ -99,6 +92,13 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
return
}
}
// login user
cookie, err := makeCookie(cleanName, r.RemoteAddr)
if err != nil {
log.Error("failed to login", "error", err)
abortWithError(w, err.Error())
return
}
http.SetCookie(w, cookie)
fi := &models.FullInfo{
State: userstate,
@@ -190,3 +190,23 @@ func makeCookie(username string, remote string) (*http.Cookie, error) {
}
return cookie, nil
}
func HandleSignout(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "session_token",
Value: "",
Path: "/",
MaxAge: -1,
HttpOnly: true,
}
cookie.Secure = true
cookie.SameSite = http.SameSiteNoneMode
if strings.Contains(r.RemoteAddr, "192.168.0") {
cookie.Domain = "192.168.0.100"
cookie.SameSite = http.SameSiteLaxMode
cookie.Secure = false
log.Info("changing cookie domain for signout", "domain", cookie.Domain)
}
http.SetCookie(w, cookie)
http.Redirect(w, r, "/", http.StatusFound)
}

View File

@@ -69,6 +69,7 @@ func ListenToRequests(port string) *http.Server {
mux.HandleFunc("GET /ping", handlers.HandlePing)
mux.HandleFunc("GET /", handlers.HandleHome)
mux.HandleFunc("POST /login", handlers.HandleFrontLogin)
mux.HandleFunc("GET /signout", handlers.HandleSignout)
mux.HandleFunc("POST /join-team", handlers.HandleJoinTeam)
mux.HandleFunc("GET /end-turn", handlers.HandleEndTurn)
mux.HandleFunc("POST /room-create", handlers.HandleCreateRoom)