1
0

login.go 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package controllers
  2. import (
  3. "time"
  4. "github.com/astaxie/beego"
  5. "github.com/cnlh/nps/lib/common"
  6. "github.com/cnlh/nps/lib/file"
  7. "github.com/cnlh/nps/server"
  8. )
  9. type LoginController struct {
  10. beego.Controller
  11. }
  12. func (self *LoginController) Index() {
  13. self.Data["register_allow"], _ = beego.AppConfig.Bool("allow_user_register")
  14. self.TplName = "login/index.html"
  15. }
  16. func (self *LoginController) Verify() {
  17. var auth bool
  18. if self.GetString("password") == beego.AppConfig.String("web_password") && self.GetString("username") == beego.AppConfig.String("web_username") {
  19. self.SetSession("isAdmin", true)
  20. auth = true
  21. server.Bridge.Register.Store(common.GetIpByAddr(self.Ctx.Request.RemoteAddr), time.Now().Add(time.Hour*time.Duration(2)))
  22. }
  23. b, err := beego.AppConfig.Bool("allow_user_login")
  24. if err == nil && b && !auth {
  25. file.GetDb().JsonDb.Clients.Range(func(key, value interface{}) bool {
  26. v := value.(*file.Client)
  27. if !v.Status || v.NoDisplay {
  28. return true
  29. }
  30. if v.WebUserName == "" && v.WebPassword == "" {
  31. if self.GetString("username") != "user" || v.VerifyKey != self.GetString("password") {
  32. return true
  33. } else {
  34. auth = true
  35. }
  36. }
  37. if !auth && v.WebPassword == self.GetString("password") && self.GetString("username") == v.WebUserName {
  38. auth = true
  39. }
  40. if auth {
  41. self.SetSession("isAdmin", false)
  42. self.SetSession("clientId", v.Id)
  43. self.SetSession("username", v.WebUserName)
  44. return false
  45. }
  46. return true
  47. })
  48. }
  49. if auth {
  50. self.SetSession("auth", true)
  51. self.Data["json"] = map[string]interface{}{"status": 1, "msg": "login success"}
  52. } else {
  53. self.Data["json"] = map[string]interface{}{"status": 0, "msg": "username or password incorrect"}
  54. }
  55. self.ServeJSON()
  56. }
  57. func (self *LoginController) Register() {
  58. if self.Ctx.Request.Method == "GET" {
  59. self.TplName = "login/register.html"
  60. } else {
  61. if b, err := beego.AppConfig.Bool("allow_user_register"); err != nil || !b {
  62. self.Data["json"] = map[string]interface{}{"status": 0, "msg": "register is not allow"}
  63. self.ServeJSON()
  64. return
  65. }
  66. if self.GetString("username") == "" || self.GetString("password") == "" || self.GetString("username") == beego.AppConfig.String("web_username") {
  67. self.Data["json"] = map[string]interface{}{"status": 0, "msg": "please check your input"}
  68. self.ServeJSON()
  69. return
  70. }
  71. t := &file.Client{
  72. Id: int(file.GetDb().JsonDb.GetClientId()),
  73. Status: true,
  74. Cnf: &file.Config{},
  75. WebUserName: self.GetString("username"),
  76. WebPassword: self.GetString("password"),
  77. Flow: &file.Flow{},
  78. }
  79. if err := file.GetDb().NewClient(t); err != nil {
  80. self.Data["json"] = map[string]interface{}{"status": 0, "msg": err.Error()}
  81. } else {
  82. self.Data["json"] = map[string]interface{}{"status": 1, "msg": "register success"}
  83. }
  84. self.ServeJSON()
  85. }
  86. }
  87. func (self *LoginController) Out() {
  88. self.SetSession("auth", false)
  89. self.Redirect("/login/index", 302)
  90. }