mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-06 02:36:49 +00:00
84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
package auth
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/gorilla/sessions"
|
|
"github.com/labstack/echo-contrib/session"
|
|
"github.com/labstack/echo/v4"
|
|
|
|
"github.com/rjNemo/rentease/internal/constant"
|
|
)
|
|
|
|
const (
|
|
sessionName = "rentease"
|
|
sessionAge = 86400 * 7 // 7 days
|
|
)
|
|
|
|
type Service struct {
|
|
secret string
|
|
admin string
|
|
adminSecret string
|
|
apiKey string
|
|
}
|
|
|
|
type ProviderIndex struct {
|
|
ProvidersMap map[string]string
|
|
Providers []string
|
|
}
|
|
|
|
func NewService(secret, admin, adminSecret, apiKey string) (*Service, error) {
|
|
if secret == "" || admin == "" || adminSecret == "" || apiKey == "" {
|
|
return nil, errors.New("error building Auth service. Verify your env variables")
|
|
}
|
|
|
|
return &Service{
|
|
secret,
|
|
admin,
|
|
adminSecret,
|
|
apiKey,
|
|
}, nil
|
|
}
|
|
|
|
func (as *Service) ValidCredentials(email, password string) bool {
|
|
return email == as.admin && password == as.adminSecret
|
|
}
|
|
|
|
func (as *Service) ValidateApiKey(key string) bool {
|
|
return key == as.apiKey
|
|
}
|
|
|
|
func (as *Service) getSession(c echo.Context) (*sessions.Session, error) {
|
|
sess, err := session.Get(sessionName, c)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sess.Options = &sessions.Options{
|
|
Path: constant.RouteLogin,
|
|
MaxAge: sessionAge,
|
|
HttpOnly: true,
|
|
}
|
|
|
|
return sess, nil
|
|
}
|
|
|
|
func (as *Service) Authenticate(c echo.Context, key string) error {
|
|
sess, err := as.getSession(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sess.Values["user"] = key
|
|
return sess.Save(c.Request(), c.Response())
|
|
}
|
|
|
|
func (as *Service) Authenticated(c echo.Context) bool {
|
|
sess, err := as.getSession(c)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
user, ok := sess.Values["user"]
|
|
return ok && user == "foo"
|
|
}
|