delphi.market/server/router/middleware/session.go

55 lines
1.3 KiB
Go
Raw Normal View History

package middleware
import (
2024-07-12 13:30:41 +00:00
"database/sql"
"net/http"
"git.ekzyis.com/ekzyis/delphi.market/server/router/context"
2024-07-12 13:30:41 +00:00
"git.ekzyis.com/ekzyis/delphi.market/types"
"github.com/labstack/echo/v4"
)
2024-07-09 20:41:29 +00:00
func Session(sc context.Context) echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
2024-07-12 13:30:41 +00:00
var (
db = sc.Db
ctx = c.Request().Context()
cookie *http.Cookie
err error
u = types.User{}
)
if cookie, err = c.Cookie("session"); err != nil {
// cookie not found
return next(c)
}
if err = db.QueryRowContext(
ctx,
""+
"SELECT u.id, u.created_at, COALESCE(u.ln_pubkey, ''), COALESCE(u.nostr_pubkey, ''), u.msats "+
"FROM sessions s LEFT JOIN users u ON u.id = s.user_id "+
"WHERE s.id = $1",
cookie.Value).
Scan(&u.Id, &u.CreatedAt, &u.LnPubkey, &u.NostrPubkey, &u.Msats); err == nil {
// session found
c.Set("session", u)
} else if err != sql.ErrNoRows {
return err
}
return next(c)
}
}
}
2024-07-09 20:41:29 +00:00
func SessionGuard(sc context.Context) echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
session := c.Get("session")
if session == nil {
return c.Redirect(http.StatusTemporaryRedirect, "/login")
}
return next(c)
}
}
}