46 lines
872 B
Go
46 lines
872 B
Go
package middleware
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
type Session struct {
|
|
SessionID string `json:"session_id"`
|
|
ExpiresAt string `json:"expires_at"`
|
|
}
|
|
|
|
func AdminMiddleware(db *sql.DB) func(c fiber.Ctx) error {
|
|
return func(c fiber.Ctx) error {
|
|
sessionToken := c.Cookies("SessionToken")
|
|
if sessionToken == "" {
|
|
return c.Next()
|
|
}
|
|
|
|
// Check if session exists
|
|
var session Session
|
|
err := db.QueryRow(`
|
|
SELECT session_id, expires_at
|
|
FROM sessions
|
|
WHERE session_id = ?
|
|
`, sessionToken).Scan(&session.SessionID, &session.ExpiresAt)
|
|
if err != nil {
|
|
return c.Next()
|
|
}
|
|
|
|
sessionExpiry, err := time.Parse("2006-01-02 15:04:05-07:00", session.ExpiresAt)
|
|
if err != nil {
|
|
return c.Next()
|
|
}
|
|
|
|
if sessionExpiry.Before(time.Now()) {
|
|
return c.Next()
|
|
}
|
|
|
|
c.Locals("IsAdmin", true)
|
|
return c.Next()
|
|
}
|
|
}
|