redo web UI |web close| client log |system info |p2p |max、ump optimization

This commit is contained in:
刘河
2019-03-01 17:23:14 +08:00
parent 534d428c6d
commit f526c56784
82 changed files with 15199 additions and 4561 deletions

32
web/controllers/auth.go Normal file
View File

@@ -0,0 +1,32 @@
package controllers
import (
"github.com/cnlh/nps/lib/crypt"
"github.com/cnlh/nps/vender/github.com/astaxie/beego"
)
type AuthController struct {
beego.Controller
}
func (s *AuthController) GetAuthKey() {
m := make(map[string]interface{})
defer func() {
s.Data["json"] = m
s.ServeJSON()
}()
if cryptKey := beego.AppConfig.String("cryptKey"); len(cryptKey) != 16 {
m["status"] = 0
return
} else {
b, err := crypt.AesEncrypt([]byte(beego.AppConfig.String("authKey")), []byte(cryptKey))
if err != nil {
m["status"] = 0
return
}
m["status"] = 1
m["crypt_auth_key"] = string(b)
m["crypt_type"] = "aes cbc"
return
}
}

View File

@@ -2,10 +2,12 @@ package controllers
import (
"github.com/cnlh/nps/lib/common"
"github.com/cnlh/nps/lib/crypt"
"github.com/cnlh/nps/server"
"github.com/cnlh/nps/vender/github.com/astaxie/beego"
"strconv"
"strings"
"time"
)
type BaseController struct {
@@ -19,8 +21,13 @@ func (s *BaseController) Prepare() {
controllerName, actionName := s.GetControllerAndAction()
s.controllerName = strings.ToLower(controllerName[0 : len(controllerName)-10])
s.actionName = strings.ToLower(actionName)
arr := strings.Split(s.Ctx.Request.RemoteAddr, ":")
if len(arr) > 0 && arr[0] != beego.AppConfig.String("authip") {
// web api verify
// param 1 is md5(authKey+Current timestamp)
// param 2 is timestamp (It's limited to 20 seconds.)
md5Key := s.GetString("auth_key")
timestamp := s.GetIntNoErr("timestamp")
configKey := beego.AppConfig.String("authKey")
if !(time.Now().Unix()-int64(timestamp) < 20 && time.Now().Unix()-int64(timestamp) > 0 && crypt.Md5(configKey+strconv.Itoa(timestamp)) == md5Key) {
if s.GetSession("auth") != true {
s.Redirect("/login/index", 302)
}
@@ -100,11 +107,8 @@ func ajax(str string, status int) map[string]interface{} {
//ajax table返回
func (s *BaseController) AjaxTable(list interface{}, cnt int, recordsTotal int) {
json := make(map[string]interface{})
json["data"] = list
json["draw"] = s.GetIntNoErr("draw")
json["err"] = ""
json["recordsTotal"] = recordsTotal
json["recordsFiltered"] = cnt
json["rows"] = list
json["total"] = recordsTotal
s.Data["json"] = json
s.ServeJSON()
s.StopRun()
@@ -112,9 +116,7 @@ func (s *BaseController) AjaxTable(list interface{}, cnt int, recordsTotal int)
//ajax table参数
func (s *BaseController) GetAjaxParams() (start, limit int) {
s.Ctx.Input.Bind(&start, "start")
s.Ctx.Input.Bind(&limit, "length")
return
return s.GetIntNoErr("offset"), s.GetIntNoErr("limit")
}
func (s *BaseController) SetInfo(name string) {

View File

@@ -1,6 +1,7 @@
package controllers
import (
"github.com/cnlh/nps/lib/common"
"github.com/cnlh/nps/lib/file"
"github.com/cnlh/nps/lib/rate"
"github.com/cnlh/nps/server"
@@ -13,7 +14,7 @@ type ClientController struct {
func (s *ClientController) List() {
if s.Ctx.Request.Method == "GET" {
s.Data["menu"] = "client"
s.SetInfo("客户端管理")
s.SetInfo("client")
s.display("client/list")
return
}
@@ -26,7 +27,7 @@ func (s *ClientController) List() {
func (s *ClientController) Add() {
if s.Ctx.Request.Method == "GET" {
s.Data["menu"] = "client"
s.SetInfo("新增")
s.SetInfo("add client")
s.display()
} else {
t := &file.Client{
@@ -37,7 +38,7 @@ func (s *ClientController) Add() {
Cnf: &file.Config{
U: s.GetString("u"),
P: s.GetString("p"),
Compress: s.GetString("compress"),
Compress: common.GetBoolByStr(s.GetString("compress")),
Crypt: s.GetBoolNoErr("crypt"),
},
RateLimit: s.GetIntNoErr("rate_limit"),
@@ -55,7 +56,7 @@ func (s *ClientController) Add() {
if err := file.GetCsvDb().NewClient(t); err != nil {
s.AjaxErr(err.Error())
}
s.AjaxOk("添加成功")
s.AjaxOk("add success")
}
}
func (s *ClientController) GetClient() {
@@ -83,7 +84,7 @@ func (s *ClientController) Edit() {
} else {
s.Data["c"] = c
}
s.SetInfo("修改")
s.SetInfo("edit client")
s.display()
} else {
if c, err := file.GetCsvDb().GetClient(id); err != nil {
@@ -96,7 +97,7 @@ func (s *ClientController) Edit() {
c.Remark = s.GetString("remark")
c.Cnf.U = s.GetString("u")
c.Cnf.P = s.GetString("p")
c.Cnf.Compress = s.GetString("compress")
c.Cnf.Compress = common.GetBoolByStr(s.GetString("compress"))
c.Cnf.Crypt = s.GetBoolNoErr("crypt")
c.Flow.FlowLimit = int64(s.GetIntNoErr("flow_limit"))
c.RateLimit = s.GetIntNoErr("rate_limit")
@@ -112,7 +113,7 @@ func (s *ClientController) Edit() {
}
file.GetCsvDb().StoreClientsToCsv()
}
s.AjaxOk("修改成功")
s.AjaxOk("save success")
}
}
@@ -124,18 +125,18 @@ func (s *ClientController) ChangeStatus() {
if client.Status == false {
server.DelClientConnect(client.Id)
}
s.AjaxOk("修改成功")
s.AjaxOk("modified success")
}
s.AjaxErr("修改失败")
s.AjaxErr("modified fail")
}
//删除客户端
func (s *ClientController) Del() {
id := s.GetIntNoErr("id")
if err := file.GetCsvDb().DelClient(id); err != nil {
s.AjaxErr("删除失败")
s.AjaxErr("delete error")
}
server.DelTunnelAndHostByClientId(id)
server.DelClientConnect(id)
s.AjaxOk("删除成功")
s.AjaxOk("delete success")
}

View File

@@ -16,42 +16,47 @@ func (s *IndexController) Index() {
s.display("index/index")
}
func (s *IndexController) Help() {
s.SetInfo("使用说明")
s.SetInfo("about")
s.display("index/help")
}
func (s *IndexController) Tcp() {
s.SetInfo("tcp隧道管理")
s.SetType("tcpServer")
s.SetInfo("tcp")
s.SetType("tcp")
s.display("index/list")
}
func (s *IndexController) Udp() {
s.SetInfo("udp隧道管理")
s.SetType("udpServer")
s.SetInfo("udp")
s.SetType("udp")
s.display("index/list")
}
func (s *IndexController) Socks5() {
s.SetInfo("socks5管理")
s.SetType("socks5Server")
s.SetInfo("socks5")
s.SetType("socks5")
s.display("index/list")
}
func (s *IndexController) Http() {
s.SetInfo("http代理管理")
s.SetType("httpProxyServer")
s.SetInfo("http proxy")
s.SetType("httpProxy")
s.display("index/list")
}
func (s *IndexController) Secret() {
s.SetInfo("私密代理管理")
s.SetType("secretServer")
s.SetInfo("secret")
s.SetType("secret")
s.display("index/list")
}
func (s *IndexController) P2p() {
s.SetInfo("p2p")
s.SetType("p2p")
s.display("index/list")
}
func (s *IndexController) Host() {
s.SetInfo("host模式管理")
s.SetInfo("host")
s.SetType("hostServer")
s.display("index/list")
}
@@ -60,7 +65,7 @@ func (s *IndexController) All() {
s.Data["menu"] = "client"
clientId := s.GetString("client_id")
s.Data["client_id"] = clientId
s.SetInfo("客户端" + clientId + "的所有隧道")
s.SetInfo("client id:" + clientId)
s.display("index/list")
}
@@ -76,7 +81,7 @@ 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("新增")
s.SetInfo("add tunnel")
s.display()
} else {
t := &file.Tunnel{
@@ -100,7 +105,7 @@ func (s *IndexController) Add() {
if err := server.AddTask(t); err != nil {
s.AjaxErr(err.Error())
} else {
s.AjaxOk("添加成功")
s.AjaxOk("add success")
}
}
}
@@ -124,7 +129,7 @@ func (s *IndexController) Edit() {
} else {
s.Data["t"] = t
}
s.SetInfo("修改")
s.SetInfo("edit tunnel")
s.display()
} else {
if t, err := file.GetCsvDb().GetTask(id); err != nil {
@@ -137,43 +142,43 @@ func (s *IndexController) Edit() {
t.Id = id
t.Remark = s.GetString("remark")
if t.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
s.AjaxErr("修改失败")
s.AjaxErr("modified error")
}
file.GetCsvDb().UpdateTask(t)
}
s.AjaxOk("修改成功")
s.AjaxOk("modified success")
}
}
func (s *IndexController) Stop() {
id := s.GetIntNoErr("id")
if err := server.StopServer(id); err != nil {
s.AjaxErr("停止失败")
s.AjaxErr("stop error")
}
s.AjaxOk("停止成功")
s.AjaxOk("stop success")
}
func (s *IndexController) Del() {
id := s.GetIntNoErr("id")
if err := server.DelTask(id); err != nil {
s.AjaxErr("删除失败")
s.AjaxErr("delete error")
}
s.AjaxOk("删除成功")
s.AjaxOk("delete success")
}
func (s *IndexController) Start() {
id := s.GetIntNoErr("id")
if err := server.StartTask(id); err != nil {
s.AjaxErr("开启失败")
s.AjaxErr("start error")
}
s.AjaxOk("开启成功")
s.AjaxOk("start success")
}
func (s *IndexController) HostList() {
if s.Ctx.Request.Method == "GET" {
s.Data["client_id"] = s.GetString("client_id")
s.Data["menu"] = "host"
s.SetInfo("域名列表")
s.SetInfo("host list")
s.display("index/hlist")
} else {
start, length := s.GetAjaxParams()
@@ -200,16 +205,16 @@ func (s *IndexController) GetHost() {
func (s *IndexController) DelHost() {
id := s.GetIntNoErr("id")
if err := file.GetCsvDb().DelHost(id); err != nil {
s.AjaxErr("删除失败")
s.AjaxErr("delete error")
}
s.AjaxOk("删除成功")
s.AjaxOk("delete success")
}
func (s *IndexController) AddHost() {
if s.Ctx.Request.Method == "GET" {
s.Data["client_id"] = s.GetString("client_id")
s.Data["menu"] = "host"
s.SetInfo("新增")
s.SetInfo("add host")
s.display("index/hadd")
} else {
h := &file.Host{
@@ -224,10 +229,12 @@ func (s *IndexController) AddHost() {
}
var err error
if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
s.AjaxErr("添加失败")
s.AjaxErr("add error")
}
file.GetCsvDb().NewHost(h)
s.AjaxOk("添加成功")
if err := file.GetCsvDb().NewHost(h); err != nil {
s.AjaxErr("add fail" + err.Error())
}
s.AjaxOk("add success")
}
}
@@ -240,7 +247,7 @@ func (s *IndexController) EditHost() {
} else {
s.Data["h"] = h
}
s.SetInfo("修改")
s.SetInfo("edit")
s.display("index/hedit")
} else {
if h, err := file.GetCsvDb().GetHostById(id); err != nil {
@@ -256,9 +263,9 @@ func (s *IndexController) EditHost() {
file.GetCsvDb().UpdateHost(h)
var err error
if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
s.AjaxErr("修改失败")
s.AjaxErr("modified error")
}
}
s.AjaxOk("修改成功")
s.AjaxOk("modified success")
}
}

View File

@@ -12,12 +12,12 @@ func (self *LoginController) Index() {
self.TplName = "login/index.html"
}
func (self *LoginController) Verify() {
if self.GetString("psd") == beego.AppConfig.String("password") {
if self.GetString("password") == beego.AppConfig.String("password") && self.GetString("username") == beego.AppConfig.String("username") {
self.SetSession("auth", true)
self.Data["json"] = map[string]interface{}{"status": 1, "msg": "验证成功"}
self.Data["json"] = map[string]interface{}{"status": 1, "msg": "login success"}
self.ServeJSON()
} else {
self.Data["json"] = map[string]interface{}{"status": 0, "msg": "验证失败"}
self.Data["json"] = map[string]interface{}{"status": 0, "msg": "username or password incorrect"}
self.ServeJSON()
}
}