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  }