mirror of
https://github.com/ehang-io/nps.git
synced 2025-09-02 03:16:53 +00:00
redo web UI |web close| client log |system info |p2p |max、ump optimization
This commit is contained in:
32
web/controllers/auth.go
Normal file
32
web/controllers/auth.go
Normal 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
|
||||
}
|
||||
}
|
@@ -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) {
|
||||
|
@@ -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")
|
||||
}
|
||||
|
@@ -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")
|
||||
}
|
||||
}
|
||||
|
@@ -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()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user