index.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. if session.IsLogin(c) {
  29. c.Redirect(http.StatusTemporaryRedirect, "xui/")
  30. return
  31. }
  32. html(c, "login.html", "登录", nil)
  33. }
  34. func (a *IndexController) login(c *gin.Context) {
  35. var form LoginForm
  36. err := c.ShouldBind(&form)
  37. if err != nil {
  38. pureJsonMsg(c, false, "数据格式错误")
  39. return
  40. }
  41. if form.Username == "" {
  42. pureJsonMsg(c, false, "请输入用户名")
  43. return
  44. }
  45. if form.Password == "" {
  46. pureJsonMsg(c, false, "请输入密码")
  47. return
  48. }
  49. user := a.userService.CheckUser(form.Username, form.Password)
  50. if user == nil {
  51. logger.Infof("wrong username or password: \"%s\" \"%s\"", form.Username, form.Password)
  52. pureJsonMsg(c, false, "用户名或密码错误")
  53. return
  54. }
  55. err = session.SetLoginUser(c, user)
  56. logger.Info("user", user.Id, "login success")
  57. jsonMsg(c, "登录", err)
  58. }
  59. func (a *IndexController) logout(c *gin.Context) {
  60. user := session.GetLoginUser(c)
  61. if user != nil {
  62. logger.Info("user", user.Id, "logout")
  63. }
  64. session.ClearSession(c)
  65. c.Redirect(http.StatusTemporaryRedirect, c.GetString("base_path"))
  66. }