clortho/apis/auth_endpoints.go
Maxime Duchene-Savard d295c13e78 auth api work
2025-03-30 23:43:03 -04:00

61 lines
1.2 KiB
Go

package apis
import (
"clortho/db"
"clortho/users"
"github.com/gin-gonic/gin"
)
func InitAuthEndpoints(r *gin.RouterGroup) {
group := r.Group("/auth")
group.POST("/login", authLogin)
group.GET("/me", getMe)
}
type loginRequest struct {
Username string `json:"username"`
Password string `json:"password"`
}
func authLogin(c *gin.Context) {
var loginRequest loginRequest
err := c.BindJSON(&loginRequest)
if err != nil {
return
}
user := users.GetUser(loginRequest.Username)
if user == nil || user.PasswordHash == nil {
c.JSON(200, gin.H{"valid": false})
return
}
valid := users.CheckPasswordHash(loginRequest.Password, *user.PasswordHash)
if !valid {
c.JSON(200, gin.H{"valid": false})
return
}
session := users.NewSession(*user)
jwt, err := users.GenerateJwt(session.ID)
if err != nil {
c.Error(err)
c.JSON(500, gin.H{})
return
}
c.SetCookie("token", jwt, 3600, "/", "", true, true)
c.JSON(200, gin.H{"valid": true})
}
func getMe(c *gin.Context) {
session, hasSession := c.Get("session")
if !hasSession {
c.JSON(200, gin.H{"loggedIn": false})
}
c.JSON(200, gin.H{
"loggedIn": true,
"user": session.(*db.UserSession).User,
})
}