timon_playgroud/auth.go

72 lines
1.5 KiB
Go

package main
import (
"crypto/rand"
"myproject/tools"
"net/http"
"strings"
"github.com/gorilla/sessions"
"github.com/labstack/echo/v4"
)
func NewAuthStore() *sessions.CookieStore {
auth := make([]byte, 32)
_, _ = rand.Read(auth)
enc := make([]byte, 16)
_, _ = rand.Read(enc)
s := sessions.NewCookieStore(auth, enc)
s.Options.Secure = false
s.Options.SameSite = http.SameSiteDefaultMode
s.MaxAge(3600)
return s
}
func setAuth(onlyAdmin bool, g *echo.Group) *echo.Group {
g.Use(
func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
sess, err := c.Get("authStore").(*sessions.CookieStore).New(c.Request(), tools.SessionName)
if err != nil {
// journal.Debug(ctx, commerr.Trace(err).Error())
}
userName := sess.Values[tools.UserNameSessionKey]
if userName == nil {
return echo.ErrUnauthorized
}
email, lp, domain := SplitEmail(userName.(string))
c.Set(tools.UserCtxKey, email)
c.Set(tools.LpCtxKey, lp)
c.Set(tools.DomainCtxKey, domain)
return next(c)
}
},
func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
if onlyAdmin && tools.GetUser(c) != "admin" {
return echo.ErrUnauthorized
}
return next(c)
}
},
)
return g
}
func SplitEmail(toSplit string) (email, user, domain string) {
email = strings.TrimSpace(toSplit)
email = strings.ToLower(email)
parts := strings.Split(email, "@")
user = parts[0]
if len(parts) > 1 {
domain = parts[1]
}
return
}