client.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package controllers
  2. import (
  3. "github.com/cnlh/nps/lib/crypt"
  4. "github.com/cnlh/nps/lib/file"
  5. "github.com/cnlh/nps/lib/rate"
  6. "github.com/cnlh/nps/server"
  7. )
  8. type ClientController struct {
  9. BaseController
  10. }
  11. func (s *ClientController) List() {
  12. if s.Ctx.Request.Method == "GET" {
  13. s.Data["menu"] = "client"
  14. s.SetInfo("客户端管理")
  15. s.display("client/list")
  16. return
  17. }
  18. start, length := s.GetAjaxParams()
  19. list, cnt := server.GetClientList(start, length)
  20. s.AjaxTable(list, cnt, cnt)
  21. }
  22. //添加客户端
  23. func (s *ClientController) Add() {
  24. if s.Ctx.Request.Method == "GET" {
  25. s.Data["menu"] = "client"
  26. s.SetInfo("新增")
  27. s.display()
  28. } else {
  29. t := &file.Client{
  30. VerifyKey: crypt.GetRandomString(16),
  31. Id: file.GetCsvDb().GetClientId(),
  32. Status: true,
  33. Remark: s.GetString("remark"),
  34. Cnf: &file.Config{
  35. U: s.GetString("u"),
  36. P: s.GetString("p"),
  37. Compress: s.GetString("compress"),
  38. Crypt: s.GetBoolNoErr("crypt"),
  39. },
  40. RateLimit: s.GetIntNoErr("rate_limit"),
  41. MaxConn: s.GetIntNoErr("max_conn"),
  42. Flow: &file.Flow{
  43. ExportFlow: 0,
  44. InletFlow: 0,
  45. FlowLimit: int64(s.GetIntNoErr("flow_limit")),
  46. },
  47. }
  48. if t.RateLimit > 0 {
  49. t.Rate = rate.NewRate(int64(t.RateLimit * 1024))
  50. t.Rate.Start()
  51. }
  52. file.GetCsvDb().NewClient(t)
  53. s.AjaxOk("添加成功")
  54. }
  55. }
  56. func (s *ClientController) GetClient() {
  57. if s.Ctx.Request.Method == "POST" {
  58. id := s.GetIntNoErr("id")
  59. data := make(map[string]interface{})
  60. if c, err := file.GetCsvDb().GetClient(id); err != nil {
  61. data["code"] = 0
  62. } else {
  63. data["code"] = 1
  64. data["data"] = c
  65. }
  66. s.Data["json"] = data
  67. s.ServeJSON()
  68. }
  69. }
  70. //修改客户端
  71. func (s *ClientController) Edit() {
  72. id := s.GetIntNoErr("id")
  73. if s.Ctx.Request.Method == "GET" {
  74. s.Data["menu"] = "client"
  75. if c, err := file.GetCsvDb().GetClient(id); err != nil {
  76. s.error()
  77. } else {
  78. s.Data["c"] = c
  79. }
  80. s.SetInfo("修改")
  81. s.display()
  82. } else {
  83. if c, err := file.GetCsvDb().GetClient(id); err != nil {
  84. s.error()
  85. } else {
  86. c.Remark = s.GetString("remark")
  87. c.Cnf.U = s.GetString("u")
  88. c.Cnf.P = s.GetString("p")
  89. c.Cnf.Compress = s.GetString("compress")
  90. c.Cnf.Crypt = s.GetBoolNoErr("crypt")
  91. c.Flow.FlowLimit = int64(s.GetIntNoErr("flow_limit"))
  92. c.RateLimit = s.GetIntNoErr("rate_limit")
  93. c.MaxConn = s.GetIntNoErr("max_conn")
  94. if c.Rate != nil {
  95. c.Rate.Stop()
  96. }
  97. if c.RateLimit > 0 {
  98. c.Rate = rate.NewRate(int64(c.RateLimit * 1024))
  99. c.Rate.Start()
  100. } else {
  101. c.Rate = nil
  102. }
  103. file.GetCsvDb().StoreClientsToCsv()
  104. }
  105. s.AjaxOk("修改成功")
  106. }
  107. }
  108. //更改状态
  109. func (s *ClientController) ChangeStatus() {
  110. id := s.GetIntNoErr("id")
  111. if client, err := file.GetCsvDb().GetClient(id); err == nil {
  112. client.Status = s.GetBoolNoErr("status")
  113. if client.Status == false {
  114. server.DelClientConnect(client.Id)
  115. }
  116. s.AjaxOk("修改成功")
  117. }
  118. s.AjaxErr("修改失败")
  119. }
  120. //删除客户端
  121. func (s *ClientController) Del() {
  122. id := s.GetIntNoErr("id")
  123. if err := file.GetCsvDb().DelClient(id); err != nil {
  124. s.AjaxErr("删除失败")
  125. }
  126. server.DelTunnelAndHostByClientId(id)
  127. server.DelClientConnect(id)
  128. s.AjaxOk("删除成功")
  129. }