client.go 3.0 KB

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