50 lines
923 B
Go
50 lines
923 B
Go
package controllers
|
|
|
|
import (
|
|
"goweb/ent/user"
|
|
"goweb/msg"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
|
|
"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)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
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.")
|
|
}
|
|
}
|
|
|
|
return l.Get(c)
|
|
}
|