github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/web/user/user.go (about) 1 package webuser 2 3 import ( 4 "net/http" 5 6 "time" 7 8 "github.com/ngocphuongnb/tetua/app/auth" 9 "github.com/ngocphuongnb/tetua/app/config" 10 "github.com/ngocphuongnb/tetua/app/repositories" 11 "github.com/ngocphuongnb/tetua/app/server" 12 "github.com/ngocphuongnb/tetua/app/utils" 13 "github.com/ngocphuongnb/tetua/views" 14 ) 15 16 type LoginData struct { 17 Login string `json:"login"` 18 Password string `json:"password"` 19 } 20 21 func Login(c server.Context) (err error) { 22 if c.User() != nil && c.User().ID > 0 { 23 return c.Redirect(utils.Url("")) 24 } 25 c.Meta().Title = "Login" 26 return c.Render(views.Login()) 27 } 28 29 func PostLogin(c server.Context) (err error) { 30 loginData := &LoginData{} 31 if err := c.BodyParser(loginData); err != nil { 32 c.Logger().Error(err) 33 c.Messages().AppendError("Something went wrong") 34 return c.Render(views.Login()) 35 } 36 37 foundUsers, err := repositories.User.ByUsernameOrEmail(c.Context(), loginData.Login, loginData.Login) 38 39 if err != nil { 40 c.Logger().Error(err) 41 c.Messages().AppendError("Something went wrong") 42 return c.Render(views.Login()) 43 } 44 45 if len(foundUsers) == 0 { 46 c.Messages().AppendError("Invalid login information") 47 return c.Render(views.Login()) 48 } 49 50 if err = utils.CheckHash(loginData.Password, foundUsers[0].Password); err != nil { 51 c.Messages().AppendError("Invalid login information") 52 return c.Render(views.Login()) 53 } 54 55 if !foundUsers[0].IsRoot() && !foundUsers[0].Active { 56 return c.Redirect(utils.Url("/inactive")) 57 } 58 59 if err = auth.SetLoginInfo(c, foundUsers[0]); err != nil { 60 c.Logger().Error("Error setting login info", err) 61 return c.Status(http.StatusBadGateway).SendString("Something went wrong") 62 } 63 64 return c.Redirect(utils.Url("")) 65 } 66 67 func Inactive(c server.Context) (err error) { 68 return c.Render(views.Inactive()) 69 } 70 71 func Logout(c server.Context) (err error) { 72 c.Cookie(&server.Cookie{ 73 Name: config.APP_TOKEN_KEY, 74 Value: "", 75 Expires: time.Now().Add(time.Hour * 100 * 365 * 24), 76 }) 77 78 return c.Redirect("/") 79 }