saasitone/controllers/login.go

50 lines
923 B
Go
Raw Normal View History

2021-12-03 12:41:40 -08:00
package controllers
import (
"goweb/ent/user"
2021-12-03 13:35:11 -08:00
"goweb/msg"
"golang.org/x/crypto/bcrypt"
2021-12-03 12:41:40 -08:00
"github.com/labstack/echo/v4"
)
type Login struct {
Controller
}
func (l *Login) Get(c echo.Context) error {
p := NewPage(c)
p.Layout = "auth"
p.Name = "login"
p.Title = "Log in"
p.Data = "This is the login page"
return l.RenderPage(c, p)
}
2021-12-03 13:35:11 -08:00
func (l *Login) Post(c echo.Context) error {
name := c.FormValue("username")
pw := c.FormValue("password")
if name == "" || pw == "" {
msg.Warning(c, "All fields are required.")
return l.Get(c)
}
2021-12-11 10:18:32 -08:00
u, err := l.Container.ORM.User.
Query().
Where(user.Username(name)).
First(c.Request().Context())
if err != nil {
c.Logger().Errorf("error querying user during login: %v", err)
} else {
err = bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(pw))
if err != nil {
msg.Danger(c, "Invalid credentials. Please try again.")
}
}
2021-12-03 13:35:11 -08:00
return l.Get(c)
}