diff --git a/internal/server/auth.go b/internal/server/auth.go index 9d7bdcc..5fff223 100644 --- a/internal/server/auth.go +++ b/internal/server/auth.go @@ -3,12 +3,10 @@ package server import ( "net/http" "os" - "strconv" "time" "github.com/golang-jwt/jwt/v5" "github.com/labstack/echo/v4" - "github.com/labstack/gommon/log" ) const ( @@ -20,7 +18,6 @@ var validityTime = time.Now().Add(time.Hour * 24) type Claims struct { jwt.RegisteredClaims - Id int `json:"id"` } func MakeAuthMiddleware(secretKey string) echo.MiddlewareFunc { @@ -45,47 +42,26 @@ func MakeAuthMiddleware(secretKey string) echo.MiddlewareFunc { return c.Redirect(http.StatusSeeOther, routeLogin) } - var id int - switch v := token.Claims.(jwt.MapClaims)["id"].(type) { - case int: - id = v - case string: - id, err = strconv.Atoi(token.Claims.(jwt.MapClaims)["id"].(string)) - if err != nil { - return c.Redirect(http.StatusSeeOther, routeLogin) - } - case float64: - id = int(v) - default: - log.Errorf("id %v is of type %T", v, v) - return c.Redirect(http.StatusSeeOther, routeLogin) - } - - email, err := token.Claims.GetSubject() + _, err = token.Claims.GetSubject() if err != nil { return c.Redirect(http.StatusSeeOther, routeLogin) } - log.Printf("id: %d, email: %q", id, email) - - //c.Set("user", services.User{Id: id, Email: email, PaymentValid: paymentValid}) - return next(c) } } } -// refactor to use a `AuthService` -func writeCookie(c echo.Context, userId int, email string) error { +// TODO: refactor to use a `AuthService` +func writeCookie(c echo.Context, email string) error { claims := &Claims{ jwt.RegisteredClaims{ Subject: email, ExpiresAt: jwt.NewNumericDate(validityTime), }, - userId, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - signedToken, err := token.SignedString(os.Getenv("SECRET_KEY")) + signedToken, err := token.SignedString([]byte(os.Getenv("SECRET_KEY"))) if err != nil { return err } diff --git a/internal/server/handle_auth.go b/internal/server/handle_auth.go index 9350454..2a09ece 100644 --- a/internal/server/handle_auth.go +++ b/internal/server/handle_auth.go @@ -1,8 +1,10 @@ package server import ( + "errors" "fmt" "net/http" + "os" "github.com/labstack/echo/v4" @@ -15,18 +17,25 @@ func handleLoginPage() echo.HandlerFunc { } } +// TODO: move to auth service +func signIn(email, pwd string) error { + if email != os.Getenv("ADMIN") || pwd != os.Getenv("ADMIN_PASSWORD") { + return errors.New("unauthorized") + } + return nil +} + func handleLogin() echo.HandlerFunc { return func(c echo.Context) error { email := c.FormValue("email") - _ = c.FormValue("password") + pwd := c.FormValue("password") - //user, err := s.us.SignIn(email, pwd) - user := struct{ Id int }{Id: 1} - var err error = nil + err := signIn(email, pwd) if err != nil { return c.Redirect(http.StatusSeeOther, fmt.Sprintf("%s?err=invalid+credentials", "/login")) } - if err = writeCookie(c, user.Id, email); err != nil { + + if err = writeCookie(c, email); err != nil { return c.Redirect(http.StatusSeeOther, fmt.Sprintf("%s?err=invalid+credentials", "/login")) } return c.Redirect(http.StatusFound, "/bookings") diff --git a/internal/view/layout/base.templ b/internal/view/layout/base.templ index f84fa2e..abdf492 100644 --- a/internal/view/layout/base.templ +++ b/internal/view/layout/base.templ @@ -2,7 +2,7 @@ package layout templ BaseLayout() { - +