index.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package controller
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "net/http"
  5. "x-ui/logger"
  6. "x-ui/web/service"
  7. "x-ui/web/session"
  8. )
  9. type LoginForm struct {
  10. Username string `json:"username" form:"username"`
  11. Password string `json:"password" form:"password"`
  12. }
  13. type IndexController struct {
  14. BaseController
  15. userService service.UserService
  16. }
  17. func NewIndexController(g *gin.RouterGroup) *IndexController {
  18. a := &IndexController{}
  19. a.initRouter(g)
  20. return a
  21. }
  22. func (a *IndexController) initRouter(g *gin.RouterGroup) {
  23. g.GET("/", a.index)
  24. g.POST("/login", a.login)
  25. g.GET("/logout", a.logout)
  26. }
  27. func (a *IndexController) index(c *gin.Context) {
  28. html(c, "login.html", "登录", nil)
  29. }
  30. func (a *IndexController) login(c *gin.Context) {
  31. var form LoginForm
  32. err := c.ShouldBind(&form)
  33. if err != nil {
  34. pureJsonMsg(c, false, "数据格式错误")
  35. return
  36. }
  37. if form.Username == "" {
  38. pureJsonMsg(c, false, "请输入用户名")
  39. return
  40. }
  41. if form.Password == "" {
  42. pureJsonMsg(c, false, "请输入密码")
  43. return
  44. }
  45. user := a.userService.CheckUser(form.Username, form.Password)
  46. if user == nil {
  47. logger.Infof("wrong username or password: \"%s\" \"%s\"", form.Username, form.Password)
  48. pureJsonMsg(c, false, "用户名或密码错误")
  49. return
  50. }
  51. err = session.SetLoginUser(c, user)
  52. logger.Info("user", user.Id, "login success")
  53. jsonMsg(c, "登录", err)
  54. }
  55. func (a *IndexController) logout(c *gin.Context) {
  56. user := session.GetLoginUser(c)
  57. if user != nil {
  58. logger.Info("user", user.Id, "logout")
  59. }
  60. session.ClearSession(c)
  61. c.Redirect(http.StatusTemporaryRedirect, "")
  62. }