worker.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package manager
  2. import (
  3. "Wine-Server/utils"
  4. "Wine-Server/utils/tables"
  5. "errors"
  6. "github.com/gorilla/websocket"
  7. )
  8. func keepAlive(conn *websocket.Conn) {
  9. _ = conn.WriteJSON(utils.WsEvent("pon", nil))
  10. }
  11. func getSecrets(conn *websocket.Conn) {
  12. _ = conn.WriteJSON(utils.WsEvent("secrets", utils.JsonType{
  13. "public": utils.ClientPub, "private": utils.ClientPri,
  14. }))
  15. }
  16. func userLogin(conn *websocket.Conn, data any) (string, error) {
  17. var param loginParam
  18. err := utils.AnyTrans(data, &param)
  19. if err != nil {
  20. _ = conn.WriteJSON(utils.WsError("param error"))
  21. return "", err
  22. }
  23. password, err := utils.Decrypt(param.Password)
  24. manager := tables.ManagerTable{Account: param.Account}
  25. err = manager.GetByAcc()
  26. if err != nil {
  27. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.JsonType{"status": false, "msg": "用户不存在"}))
  28. utils.Logger.Println(err)
  29. return "", err
  30. }
  31. if utils.IsPasswordMatch(manager.Password, password) {
  32. var token string
  33. utils.ManagerLock.Lock()
  34. if _, exist := utils.ManagerWss[manager.Id]; exist {
  35. utils.ManagerLock.Unlock()
  36. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.JsonType{"status": false, "msg": "账户已在别处登录"}))
  37. return "", errors.New("login other where")
  38. }
  39. for {
  40. token = utils.Format("ManagerToken_%s", utils.RandomString(19, utils.AlphaNumPatten))
  41. exist, _ := utils.Redis.Exists(utils.WxPayCli, token).Result()
  42. if exist != 1 {
  43. _ = utils.Redis.Set(utils.WxPayCli, token, manager.Id, utils.Duration(7*24*60*60)).Err()
  44. break
  45. }
  46. }
  47. utils.ManagerLock.Unlock()
  48. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Success(utils.JsonType{"token": token, "super": manager.Super})))
  49. return manager.Id, nil
  50. } else {
  51. utils.Logger.Println(utils.HashPassword(password))
  52. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("密码错误")))
  53. return "", errors.New("password error")
  54. }
  55. }
  56. func getUserInfo(conn *websocket.Conn, manager *tables.ManagerTable) {
  57. _ = conn.WriteJSON(utils.WsEvent("userInfo", utils.JsonType{
  58. "id": manager.Id, "super": manager.Super, "name": manager.Name,
  59. "order": manager.Order, "income": manager.Income,
  60. }))
  61. }
  62. func userLogout(conn *websocket.Conn, data any) {
  63. utils.Redis.Del(utils.WxPayCli, data.(string))
  64. _ = conn.WriteJSON(utils.WsEvent("logoutResult", nil))
  65. }