nps/web/controllers/index.go

308 lines
7.7 KiB
Go
Raw Normal View History

2018-12-11 08:37:12 +00:00
package controllers
import (
2019-02-09 09:07:47 +00:00
"github.com/cnlh/nps/lib/file"
2019-02-05 16:35:23 +00:00
"github.com/cnlh/nps/server"
2019-02-16 12:43:26 +00:00
"github.com/cnlh/nps/server/tool"
2018-12-11 08:37:12 +00:00
)
type IndexController struct {
BaseController
}
func (s *IndexController) Index() {
s.Data["data"] = server.GetDashboardData()
s.SetInfo("dashboard")
2018-12-11 08:37:12 +00:00
s.display("index/index")
}
func (s *IndexController) Help() {
s.SetInfo("about")
s.display("index/help")
}
2018-12-11 08:37:12 +00:00
func (s *IndexController) Tcp() {
s.SetInfo("tcp")
s.SetType("tcp")
2018-12-11 08:37:12 +00:00
s.display("index/list")
}
func (s *IndexController) Udp() {
s.SetInfo("udp")
s.SetType("udp")
2018-12-11 08:37:12 +00:00
s.display("index/list")
}
func (s *IndexController) Socks5() {
s.SetInfo("socks5")
s.SetType("socks5")
2018-12-11 08:37:12 +00:00
s.display("index/list")
}
func (s *IndexController) Http() {
s.SetInfo("http proxy")
s.SetType("httpProxy")
2018-12-11 08:37:12 +00:00
s.display("index/list")
}
2019-03-02 09:43:21 +00:00
func (s *IndexController) File() {
s.SetInfo("file server")
s.SetType("file")
s.display("index/list")
}
2018-12-11 08:37:12 +00:00
2019-02-23 15:29:48 +00:00
func (s *IndexController) Secret() {
s.SetInfo("secret")
s.SetType("secret")
s.display("index/list")
}
func (s *IndexController) P2p() {
s.SetInfo("p2p")
s.SetType("p2p")
2019-02-23 15:29:48 +00:00
s.display("index/list")
}
2018-12-11 08:37:12 +00:00
func (s *IndexController) Host() {
s.SetInfo("host")
2018-12-11 08:37:12 +00:00
s.SetType("hostServer")
s.display("index/list")
}
func (s *IndexController) All() {
s.Data["menu"] = "client"
clientId := s.GetString("client_id")
s.Data["client_id"] = clientId
s.SetInfo("client id:" + clientId)
s.display("index/list")
}
2019-01-26 09:27:28 +00:00
func (s *IndexController) GetTunnel() {
2018-12-11 08:37:12 +00:00
start, length := s.GetAjaxParams()
taskType := s.GetString("type")
clientId := s.GetIntNoErr("client_id")
2019-03-23 14:19:59 +00:00
list, cnt := server.GetTunnel(start, length, taskType, clientId, s.GetString("search"))
2018-12-11 08:37:12 +00:00
s.AjaxTable(list, cnt, cnt)
}
func (s *IndexController) Add() {
if s.Ctx.Request.Method == "GET" {
s.Data["type"] = s.GetString("type")
s.Data["client_id"] = s.GetString("client_id")
s.SetInfo("add tunnel")
2018-12-11 08:37:12 +00:00
s.display()
} else {
2019-02-09 09:07:47 +00:00
t := &file.Tunnel{
2019-03-02 09:43:21 +00:00
Port: s.GetIntNoErr("port"),
ServerIp: s.GetString("server_ip"),
2019-03-02 09:43:21 +00:00
Mode: s.GetString("type"),
2019-03-29 02:41:57 +00:00
Target: &file.Target{TargetStr: s.GetString("target")},
2019-03-23 14:19:59 +00:00
Id: int(file.GetCsvDb().GetTaskId()),
2019-03-02 09:43:21 +00:00
Status: true,
Remark: s.GetString("remark"),
Password: s.GetString("password"),
LocalPath: s.GetString("local_path"),
StripPre: s.GetString("strip_pre"),
Flow: &file.Flow{},
2018-12-11 08:37:12 +00:00
}
2019-02-16 12:43:26 +00:00
if !tool.TestServerPort(t.Port, t.Mode) {
s.AjaxErr("The port cannot be opened because it may has been occupied or is no longer allowed.")
}
2019-01-26 09:27:28 +00:00
var err error
2019-02-09 09:07:47 +00:00
if t.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
2019-01-26 09:27:28 +00:00
s.AjaxErr(err.Error())
}
2019-03-02 09:43:21 +00:00
if err := file.GetCsvDb().NewTask(t); err != nil {
s.AjaxErr(err.Error())
}
2019-01-09 12:33:00 +00:00
if err := server.AddTask(t); err != nil {
2018-12-11 08:37:12 +00:00
s.AjaxErr(err.Error())
} else {
s.AjaxOk("add success")
2018-12-11 08:37:12 +00:00
}
}
}
2019-01-29 03:20:39 +00:00
func (s *IndexController) GetOneTunnel() {
id := s.GetIntNoErr("id")
data := make(map[string]interface{})
2019-02-09 09:07:47 +00:00
if t, err := file.GetCsvDb().GetTask(id); err != nil {
2019-01-29 03:20:39 +00:00
data["code"] = 0
} else {
data["code"] = 1
data["data"] = t
}
s.Data["json"] = data
s.ServeJSON()
}
2018-12-11 08:37:12 +00:00
func (s *IndexController) Edit() {
id := s.GetIntNoErr("id")
2018-12-11 08:37:12 +00:00
if s.Ctx.Request.Method == "GET" {
2019-02-09 09:07:47 +00:00
if t, err := file.GetCsvDb().GetTask(id); err != nil {
2018-12-11 08:37:12 +00:00
s.error()
} else {
s.Data["t"] = t
}
s.SetInfo("edit tunnel")
2018-12-11 08:37:12 +00:00
s.display()
} else {
2019-02-09 09:07:47 +00:00
if t, err := file.GetCsvDb().GetTask(id); err != nil {
2018-12-11 08:37:12 +00:00
s.error()
} else {
2019-03-29 02:41:57 +00:00
if client, err := file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
s.AjaxErr("modified error,the client is not exist")
return
} else {
t.Client = client
}
if s.GetIntNoErr("port") != t.Port {
2019-03-29 02:41:57 +00:00
if !tool.TestServerPort(s.GetIntNoErr("port"), t.Mode) {
s.AjaxErr("The port cannot be opened because it may has been occupied or is no longer allowed.")
return
}
t.Port = s.GetIntNoErr("port")
}
t.ServerIp = s.GetString("server_ip")
2018-12-11 08:37:12 +00:00
t.Mode = s.GetString("type")
2019-03-29 02:41:57 +00:00
t.Target = &file.Target{TargetStr: s.GetString("target")}
2019-02-23 15:29:48 +00:00
t.Password = s.GetString("password")
t.Id = id
2019-03-02 09:43:21 +00:00
t.LocalPath = s.GetString("local_path")
t.StripPre = s.GetString("strip_pre")
t.Remark = s.GetString("remark")
2019-02-09 09:07:47 +00:00
file.GetCsvDb().UpdateTask(t)
2019-03-02 09:43:21 +00:00
server.StopServer(t.Id)
server.StartTask(t.Id)
2018-12-11 08:37:12 +00:00
}
s.AjaxOk("modified success")
2018-12-11 08:37:12 +00:00
}
}
func (s *IndexController) Stop() {
id := s.GetIntNoErr("id")
if err := server.StopServer(id); err != nil {
s.AjaxErr("stop error")
2018-12-11 08:37:12 +00:00
}
s.AjaxOk("stop success")
2018-12-11 08:37:12 +00:00
}
2018-12-11 08:37:12 +00:00
func (s *IndexController) Del() {
id := s.GetIntNoErr("id")
if err := server.DelTask(id); err != nil {
s.AjaxErr("delete error")
2018-12-11 08:37:12 +00:00
}
s.AjaxOk("delete success")
2018-12-11 08:37:12 +00:00
}
func (s *IndexController) Start() {
id := s.GetIntNoErr("id")
if err := server.StartTask(id); err != nil {
s.AjaxErr("start error")
2018-12-11 08:37:12 +00:00
}
s.AjaxOk("start success")
2018-12-11 08:37:12 +00:00
}
func (s *IndexController) HostList() {
if s.Ctx.Request.Method == "GET" {
s.Data["client_id"] = s.GetString("client_id")
s.Data["menu"] = "host"
s.SetInfo("host list")
2018-12-11 08:37:12 +00:00
s.display("index/hlist")
} else {
start, length := s.GetAjaxParams()
clientId := s.GetIntNoErr("client_id")
2019-03-23 14:19:59 +00:00
list, cnt := file.GetCsvDb().GetHost(start, length, clientId, s.GetString("search"))
2018-12-11 08:37:12 +00:00
s.AjaxTable(list, cnt, cnt)
}
}
2019-01-29 03:20:39 +00:00
func (s *IndexController) GetHost() {
if s.Ctx.Request.Method == "POST" {
data := make(map[string]interface{})
2019-02-15 14:59:28 +00:00
if h, err := file.GetCsvDb().GetHostById(s.GetIntNoErr("id")); err != nil {
2019-01-29 03:20:39 +00:00
data["code"] = 0
} else {
data["data"] = h
data["code"] = 1
}
s.Data["json"] = data
s.ServeJSON()
}
}
2018-12-11 08:37:12 +00:00
func (s *IndexController) DelHost() {
2019-02-15 14:59:28 +00:00
id := s.GetIntNoErr("id")
if err := file.GetCsvDb().DelHost(id); err != nil {
s.AjaxErr("delete error")
2018-12-11 08:37:12 +00:00
}
s.AjaxOk("delete success")
2018-12-11 08:37:12 +00:00
}
func (s *IndexController) AddHost() {
if s.Ctx.Request.Method == "GET" {
s.Data["client_id"] = s.GetString("client_id")
s.Data["menu"] = "host"
s.SetInfo("add host")
2018-12-11 08:37:12 +00:00
s.display("index/hadd")
} else {
2019-02-09 09:07:47 +00:00
h := &file.Host{
2019-03-23 14:19:59 +00:00
Id: int(file.GetCsvDb().GetHostId()),
2019-01-12 16:09:12 +00:00
Host: s.GetString("host"),
2019-03-29 02:41:57 +00:00
Target: &file.Target{TargetStr: s.GetString("target")},
2019-01-12 16:09:12 +00:00
HeaderChange: s.GetString("header"),
HostChange: s.GetString("hostchange"),
Remark: s.GetString("remark"),
2019-02-15 14:59:28 +00:00
Location: s.GetString("location"),
2019-02-09 09:07:47 +00:00
Flow: &file.Flow{},
2019-03-05 01:23:18 +00:00
Scheme: s.GetString("scheme"),
2019-01-28 06:45:55 +00:00
}
var err error
2019-02-09 09:07:47 +00:00
if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
s.AjaxErr("add error")
}
if err := file.GetCsvDb().NewHost(h); err != nil {
s.AjaxErr("add fail" + err.Error())
2018-12-11 08:37:12 +00:00
}
s.AjaxOk("add success")
2018-12-11 08:37:12 +00:00
}
}
2019-01-12 16:09:12 +00:00
func (s *IndexController) EditHost() {
2019-02-15 14:59:28 +00:00
id := s.GetIntNoErr("id")
2019-01-12 16:09:12 +00:00
if s.Ctx.Request.Method == "GET" {
s.Data["menu"] = "host"
2019-02-15 14:59:28 +00:00
if h, err := file.GetCsvDb().GetHostById(id); err != nil {
2019-01-12 16:09:12 +00:00
s.error()
} else {
s.Data["h"] = h
}
s.SetInfo("edit")
2019-01-12 16:09:12 +00:00
s.display("index/hedit")
} else {
2019-02-15 14:59:28 +00:00
if h, err := file.GetCsvDb().GetHostById(id); err != nil {
2019-01-12 16:09:12 +00:00
s.error()
} else {
2019-03-29 02:41:57 +00:00
if h.Host != s.GetString("host") {
tmpHost := new(file.Host)
tmpHost.Host = s.GetString("host")
tmpHost.Location = s.GetString("location")
tmpHost.Scheme = s.GetString("scheme")
if file.GetCsvDb().IsHostExist(tmpHost) {
s.AjaxErr("host has exist")
return
}
}
if client, err := file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
s.AjaxErr("modified error,the client is not exist")
} else {
h.Client = client
}
2019-02-15 14:59:28 +00:00
h.Host = s.GetString("host")
2019-03-29 02:41:57 +00:00
h.Target = &file.Target{TargetStr: s.GetString("target")}
2019-01-12 16:09:12 +00:00
h.HeaderChange = s.GetString("header")
h.HostChange = s.GetString("hostchange")
h.Remark = s.GetString("remark")
2019-02-15 14:59:28 +00:00
h.Location = s.GetString("location")
2019-03-05 01:23:18 +00:00
h.Scheme = s.GetString("scheme")
2019-03-23 14:19:59 +00:00
file.GetCsvDb().StoreHostToCsv()
2019-01-12 16:09:12 +00:00
}
s.AjaxOk("modified success")
2019-01-12 16:09:12 +00:00
}
}