54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
|
package sessions
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"git.tijl.dev/tijl/tijl.dev/internal/db"
|
||
|
"git.tijl.dev/tijl/tijl.dev/internal/utils"
|
||
|
"git.tijl.dev/tijl/tijl.dev/modules/database"
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
)
|
||
|
|
||
|
func NewSession(uid string, c *fiber.Ctx) (string, error) {
|
||
|
createSessionParams := database.CreateSessionParams{
|
||
|
Uid: uid,
|
||
|
Token: utils.RandString(64),
|
||
|
}
|
||
|
err := db.Queries.CreateSession(context.TODO(), createSessionParams)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
c.Cookie(&fiber.Cookie{
|
||
|
Name: "session",
|
||
|
Value: createSessionParams.Token,
|
||
|
Secure: true,
|
||
|
})
|
||
|
|
||
|
err = db.Queries.QuickUpdateSession(context.TODO(), database.QuickUpdateSessionParams{
|
||
|
Token: createSessionParams.Token,
|
||
|
IpAddress: c.IP(),
|
||
|
Agent: string(c.Context().UserAgent()),
|
||
|
})
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
return createSessionParams.Token, nil
|
||
|
}
|
||
|
|
||
|
func GetSession(c *fiber.Ctx) (database.Session, error) {
|
||
|
err := db.Queries.QuickUpdateSession(context.TODO(), database.QuickUpdateSessionParams{
|
||
|
Token: c.Cookies("session"),
|
||
|
IpAddress: c.IP(),
|
||
|
Agent: string(c.Context().UserAgent()),
|
||
|
})
|
||
|
if err != nil {
|
||
|
return database.Session{}, err
|
||
|
}
|
||
|
session, err := db.Queries.GetSession(context.TODO(), c.Cookies("session"))
|
||
|
if err != nil {
|
||
|
return session, err
|
||
|
}
|
||
|
return session, nil
|
||
|
}
|