index.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package controllers
  2. import (
  3. "github.com/cnlh/nps/lib/file"
  4. "github.com/cnlh/nps/server"
  5. "github.com/cnlh/nps/server/tool"
  6. )
  7. type IndexController struct {
  8. BaseController
  9. }
  10. func (s *IndexController) Index() {
  11. s.Data["data"] = server.GetDashboardData()
  12. s.SetInfo("dashboard")
  13. s.display("index/index")
  14. }
  15. func (s *IndexController) Help() {
  16. s.SetInfo("使用说明")
  17. s.display("index/help")
  18. }
  19. func (s *IndexController) Tcp() {
  20. s.SetInfo("tcp隧道管理")
  21. s.SetType("tcpServer")
  22. s.display("index/list")
  23. }
  24. func (s *IndexController) Udp() {
  25. s.SetInfo("udp隧道管理")
  26. s.SetType("udpServer")
  27. s.display("index/list")
  28. }
  29. func (s *IndexController) Socks5() {
  30. s.SetInfo("socks5管理")
  31. s.SetType("socks5Server")
  32. s.display("index/list")
  33. }
  34. func (s *IndexController) Http() {
  35. s.SetInfo("http代理管理")
  36. s.SetType("httpProxyServer")
  37. s.display("index/list")
  38. }
  39. func (s *IndexController) Secret() {
  40. s.SetInfo("私密代理管理")
  41. s.SetType("secretServer")
  42. s.display("index/list")
  43. }
  44. func (s *IndexController) Host() {
  45. s.SetInfo("host模式管理")
  46. s.SetType("hostServer")
  47. s.display("index/list")
  48. }
  49. func (s *IndexController) All() {
  50. s.Data["menu"] = "client"
  51. clientId := s.GetString("client_id")
  52. s.Data["client_id"] = clientId
  53. s.SetInfo("客户端" + clientId + "的所有隧道")
  54. s.display("index/list")
  55. }
  56. func (s *IndexController) GetTunnel() {
  57. start, length := s.GetAjaxParams()
  58. taskType := s.GetString("type")
  59. clientId := s.GetIntNoErr("client_id")
  60. list, cnt := server.GetTunnel(start, length, taskType, clientId)
  61. s.AjaxTable(list, cnt, cnt)
  62. }
  63. func (s *IndexController) Add() {
  64. if s.Ctx.Request.Method == "GET" {
  65. s.Data["type"] = s.GetString("type")
  66. s.Data["client_id"] = s.GetString("client_id")
  67. s.SetInfo("新增")
  68. s.display()
  69. } else {
  70. t := &file.Tunnel{
  71. Port: s.GetIntNoErr("port"),
  72. Mode: s.GetString("type"),
  73. Target: s.GetString("target"),
  74. Id: file.GetCsvDb().GetTaskId(),
  75. Status: true,
  76. Remark: s.GetString("remark"),
  77. Password: s.GetString("password"),
  78. Flow: &file.Flow{},
  79. }
  80. if !tool.TestServerPort(t.Port, t.Mode) {
  81. s.AjaxErr("The port cannot be opened because it may has been occupied or is no longer allowed.")
  82. }
  83. var err error
  84. if t.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  85. s.AjaxErr(err.Error())
  86. }
  87. file.GetCsvDb().NewTask(t)
  88. if err := server.AddTask(t); err != nil {
  89. s.AjaxErr(err.Error())
  90. } else {
  91. s.AjaxOk("添加成功")
  92. }
  93. }
  94. }
  95. func (s *IndexController) GetOneTunnel() {
  96. id := s.GetIntNoErr("id")
  97. data := make(map[string]interface{})
  98. if t, err := file.GetCsvDb().GetTask(id); err != nil {
  99. data["code"] = 0
  100. } else {
  101. data["code"] = 1
  102. data["data"] = t
  103. }
  104. s.Data["json"] = data
  105. s.ServeJSON()
  106. }
  107. func (s *IndexController) Edit() {
  108. id := s.GetIntNoErr("id")
  109. if s.Ctx.Request.Method == "GET" {
  110. if t, err := file.GetCsvDb().GetTask(id); err != nil {
  111. s.error()
  112. } else {
  113. s.Data["t"] = t
  114. }
  115. s.SetInfo("修改")
  116. s.display()
  117. } else {
  118. if t, err := file.GetCsvDb().GetTask(id); err != nil {
  119. s.error()
  120. } else {
  121. t.Port = s.GetIntNoErr("port")
  122. t.Mode = s.GetString("type")
  123. t.Target = s.GetString("target")
  124. t.Password = s.GetString("password")
  125. t.Id = id
  126. t.Remark = s.GetString("remark")
  127. if t.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  128. s.AjaxErr("修改失败")
  129. }
  130. file.GetCsvDb().UpdateTask(t)
  131. }
  132. s.AjaxOk("修改成功")
  133. }
  134. }
  135. func (s *IndexController) Stop() {
  136. id := s.GetIntNoErr("id")
  137. if err := server.StopServer(id); err != nil {
  138. s.AjaxErr("停止失败")
  139. }
  140. s.AjaxOk("停止成功")
  141. }
  142. func (s *IndexController) Del() {
  143. id := s.GetIntNoErr("id")
  144. if err := server.DelTask(id); err != nil {
  145. s.AjaxErr("删除失败")
  146. }
  147. s.AjaxOk("删除成功")
  148. }
  149. func (s *IndexController) Start() {
  150. id := s.GetIntNoErr("id")
  151. if err := server.StartTask(id); err != nil {
  152. s.AjaxErr("开启失败")
  153. }
  154. s.AjaxOk("开启成功")
  155. }
  156. func (s *IndexController) HostList() {
  157. if s.Ctx.Request.Method == "GET" {
  158. s.Data["client_id"] = s.GetString("client_id")
  159. s.Data["menu"] = "host"
  160. s.SetInfo("域名列表")
  161. s.display("index/hlist")
  162. } else {
  163. start, length := s.GetAjaxParams()
  164. clientId := s.GetIntNoErr("client_id")
  165. list, cnt := file.GetCsvDb().GetHost(start, length, clientId)
  166. s.AjaxTable(list, cnt, cnt)
  167. }
  168. }
  169. func (s *IndexController) GetHost() {
  170. if s.Ctx.Request.Method == "POST" {
  171. data := make(map[string]interface{})
  172. if h, err := file.GetCsvDb().GetHostById(s.GetIntNoErr("id")); err != nil {
  173. data["code"] = 0
  174. } else {
  175. data["data"] = h
  176. data["code"] = 1
  177. }
  178. s.Data["json"] = data
  179. s.ServeJSON()
  180. }
  181. }
  182. func (s *IndexController) DelHost() {
  183. id := s.GetIntNoErr("id")
  184. if err := file.GetCsvDb().DelHost(id); err != nil {
  185. s.AjaxErr("删除失败")
  186. }
  187. s.AjaxOk("删除成功")
  188. }
  189. func (s *IndexController) AddHost() {
  190. if s.Ctx.Request.Method == "GET" {
  191. s.Data["client_id"] = s.GetString("client_id")
  192. s.Data["menu"] = "host"
  193. s.SetInfo("新增")
  194. s.display("index/hadd")
  195. } else {
  196. h := &file.Host{
  197. Id: file.GetCsvDb().GetHostId(),
  198. Host: s.GetString("host"),
  199. Target: s.GetString("target"),
  200. HeaderChange: s.GetString("header"),
  201. HostChange: s.GetString("hostchange"),
  202. Remark: s.GetString("remark"),
  203. Location: s.GetString("location"),
  204. Flow: &file.Flow{},
  205. }
  206. var err error
  207. if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  208. s.AjaxErr("添加失败")
  209. }
  210. file.GetCsvDb().NewHost(h)
  211. s.AjaxOk("添加成功")
  212. }
  213. }
  214. func (s *IndexController) EditHost() {
  215. id := s.GetIntNoErr("id")
  216. if s.Ctx.Request.Method == "GET" {
  217. s.Data["menu"] = "host"
  218. if h, err := file.GetCsvDb().GetHostById(id); err != nil {
  219. s.error()
  220. } else {
  221. s.Data["h"] = h
  222. }
  223. s.SetInfo("修改")
  224. s.display("index/hedit")
  225. } else {
  226. if h, err := file.GetCsvDb().GetHostById(id); err != nil {
  227. s.error()
  228. } else {
  229. h.Host = s.GetString("host")
  230. h.Target = s.GetString("target")
  231. h.HeaderChange = s.GetString("header")
  232. h.HostChange = s.GetString("hostchange")
  233. h.Remark = s.GetString("remark")
  234. h.TargetArr = nil
  235. h.Location = s.GetString("location")
  236. file.GetCsvDb().UpdateHost(h)
  237. var err error
  238. if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  239. s.AjaxErr("修改失败")
  240. }
  241. }
  242. s.AjaxOk("修改成功")
  243. }
  244. }