From 29d17d84fb854ceed1497479c908d1c5f5add42e Mon Sep 17 00:00:00 2001 From: xinyi Date: Thu, 22 Apr 2021 09:52:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=AF=BC=E8=87=B4=E7=9A=84=E5=BC=82=E5=B8=B8=E6=96=AD?= =?UTF-8?q?=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes common/core/ssh_shell_conn.go | 2 +- controller/login.go | 4 +-- controller/stfp.go | 54 +++++++++++++++++----------------- controller/term.go | 40 ++++++++++++------------- database/conn.go | 14 ++++----- go.sum | 10 +++++-- ssh_manage.go | 2 +- static/xterm/main.js | 32 ++++++++++++++------ view/term.html | 2 +- 10 files changed, 89 insertions(+), 71 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..49bf50cb822334d790e417fc940f790f2ed8ee38 GIT binary patch literal 6148 zcmeHKO;6iE5Pe%h2tln77kc!OQ=*=GaUnS%0S8cf4f$${nhz8^h2DJOKlCs3SHhdw zRkdq7*9xH>Yj?c6Z)RuS#NHTyIo(V?0fzuuY@!=&b~PgF(kk-K%^Xo1^|8Y8e7+iw z=BrT!9Va3Kk%8C7fIPcRjIqLkSNQzOOW`xy$+L=vZm~;z#~o(gvo6@bCG3Ivby#$e z>n`)q${d%h+RiG+n)o@dDb^*Mr;<$z6AbBph!I{&-pJiBDdV_oRZBJbZK$ zGvYeR&m{D$(br)!Y_KR{C2AkLhYOtJ41HYT2K^8%F`Jeb^RC^Wk(U@0-UH-5uIcj& zdbp&PxND*gEZXEO!w(FI9b(BgE3;x4y?ONFskOP!M;DtcUo+E`IsK;BoDnb3#W$@c zS>ZV2xW`?jVqJXYSn46OkNjONX?LdxLH^X=%{|AiTD+5b4Di5y&Gjx(mFPJOY>V;A z#aO#eyZ5yoJF;(0m3&q{)LIUh(-aS(tupFYxJg@KBxm;H5UVxz_i5l4QB|LOnu01Z znXSSzTcmYhb?hSpk%7p-KL+Iekg$nPoi41_R|h-&1fXtkT7~!WS3qnMr&Fg3tGPlk z)|A?s8uy7|tU2cshfAFwXv5E%#=*s;SyIsg0H zzyCv{IEoBJ2Hq3{rqR3UoiZhNwpNmpvo>M7WfKuxVYQmDbH}mX$Wi=}O@(WT+)$@Z U7glqI68{J&4Y7+1{8t8E01z|_A^-pY literal 0 HcmV?d00001 diff --git a/common/core/ssh_shell_conn.go b/common/core/ssh_shell_conn.go index 21553fb..cd96923 100644 --- a/common/core/ssh_shell_conn.go +++ b/common/core/ssh_shell_conn.go @@ -54,7 +54,7 @@ type SshConn struct { //flushComboOutput flush ssh.session combine output into websocket response func flushComboOutput(w *wsBufferWriter, wsConn *websocket.Conn) error { if w.buffer.Len() != 0 { - err := wsConn.WriteMessage(websocket.TextMessage, w.buffer.Bytes()) + err := wsConn.WriteMessage(websocket.BinaryMessage, w.buffer.Bytes()) if err != nil { return err } diff --git a/controller/login.go b/controller/login.go index f6b69e8..a4edb5d 100644 --- a/controller/login.go +++ b/controller/login.go @@ -24,12 +24,12 @@ func Login(c *gin.Context) { db := database.Get() defer db.Close() db.DB.Where(model.User{Phone: user.Phone}).FirstOrCreate(&userinfo) - new_token, err := common.ReleaseToken(userinfo.ID) + newToken, err := common.ReleaseToken(userinfo.ID) if err == nil && userinfo.ID > 0 { resp.Code = errcode.C_nil_err resp.Msg = "登陆成功" resp.Data = userinfo - resp.Token = new_token + resp.Token = newToken } else { resp.Code = errcode.S_auth_err resp.Msg = "Token创建失败" diff --git a/controller/stfp.go b/controller/stfp.go index bba47ac..b430720 100644 --- a/controller/stfp.go +++ b/controller/stfp.go @@ -13,19 +13,19 @@ import ( "ssh_manage/model/Apiform" ) -type sftp_req struct { +type sftpReq struct { Type string `json:"type"` Token string `json:"token"` } -type sftp_resp struct { +type sftpResp struct { Code int `json:"code"` Type string `json:"type"` Msg string `json:"msg"` Data string `json:"data"` } -func Sftp_ssh(c *gin.Context) { +func SftpSsh(c *gin.Context) { wsConn, err := upGrader.Upgrade(c.Writer, c.Request, nil) if core.HandleError(c, err) { return @@ -35,8 +35,8 @@ func Sftp_ssh(c *gin.Context) { var auth Apiform.WsAuth if c.ShouldBindUri(&auth) != nil { - wsConn.WriteMessage(websocket.TextMessage, []byte("参数错误\r\n")) - wsConn.Close() + _ = wsConn.WriteMessage(websocket.TextMessage, []byte("参数错误\r\n")) + _ = wsConn.Close() return } @@ -44,60 +44,60 @@ func Sftp_ssh(c *gin.Context) { _, wsData, err := wsConn.ReadMessage() if err != nil { log.Println(err.Error()) - wsConn.Close() + _ = wsConn.Close() //logrus.WithError(err).Error("reading webSocket message failed") return } //unmashal bytes into struct - msgObj := sftp_req{} + msgObj := sftpReq{} if err := json.Unmarshal(wsData, &msgObj); err != nil { log.Println("Auth : unmarshal websocket message failed:", string(wsData)) continue } - resp_msg := sftp_resp{} + respMsg := sftpResp{} token := msgObj.Token claims, err := common.ParseToken(token) valid := claims.Valid() if valid != nil || err != nil { - resp_msg.Code = errcode.S_auth_fmt_err - resp_msg.Msg = "身份令牌校验不通过" - resp_msg.Data = err.Error() - msg, _ := json.Marshal(resp_msg) + respMsg.Code = errcode.S_auth_fmt_err + respMsg.Msg = "身份令牌校验不通过" + respMsg.Data = err.Error() + msg, _ := json.Marshal(respMsg) if err := wsConn.WriteMessage(websocket.TextMessage, msg); err != nil { log.Println("sftp token fmt err:", err) } - wsConn.Close() + _ = wsConn.Close() return } if claims.Userid != sftp_clients.Client.C[auth.Sid].Uid { //身份与缓存不符合 - resp_msg.Code = errcode.S_auth_fmt_err - resp_msg.Msg = "用户权限不通过" - resp_msg.Data = err.Error() - msg, _ := json.Marshal(resp_msg) + respMsg.Code = errcode.S_auth_fmt_err + respMsg.Msg = "用户权限不通过" + respMsg.Data = err.Error() + msg, _ := json.Marshal(respMsg) if err := wsConn.WriteMessage(websocket.TextMessage, msg); err != nil { log.Println("sftp server_user err:", err) } - wsConn.Close() + _ = wsConn.Close() return } path, err := sftp_clients.Client.C[auth.Sid].Sftp.Getwd() if err != nil { - resp_msg.Code = errcode.S_send_err - resp_msg.Type = "connect" - resp_msg.Msg = "SFTP连接失败" - msg, _ := json.Marshal(resp_msg) + respMsg.Code = errcode.S_send_err + respMsg.Type = "connect" + respMsg.Msg = "SFTP连接失败" + msg, _ := json.Marshal(respMsg) if err := wsConn.WriteMessage(websocket.TextMessage, msg); err != nil { log.Println("sftp connect err:", err) } return } - resp_msg.Code = 200 - resp_msg.Type = "connect" - resp_msg.Msg = "连接成功" - resp_msg.Data = path - msg, _ := json.Marshal(resp_msg) + respMsg.Code = 200 + respMsg.Type = "connect" + respMsg.Msg = "连接成功" + respMsg.Data = path + msg, _ := json.Marshal(respMsg) if err := wsConn.WriteMessage(websocket.TextMessage, msg); err != nil { log.Println("sftp return err:", err) return diff --git a/controller/term.go b/controller/term.go index 501d970..7e45669 100644 --- a/controller/term.go +++ b/controller/term.go @@ -24,7 +24,7 @@ var upGrader = websocket.Upgrader{ }, } -type Auth_msg struct { +type AuthMsg struct { Type string `json:"type"` Token string `json:"token"` } @@ -50,12 +50,12 @@ func WsSsh(c *gin.Context) { return } - var ser_info Apiform.SerInfo //接收反序列化数据 + var serInfo Apiform.SerInfo //接收反序列化数据 var auth Apiform.WsAuth if c.ShouldBindUri(&auth) != nil { - wsConn.WriteMessage(websocket.TextMessage, []byte("参数错误\r\n")) - wsConn.Close() + _ = wsConn.WriteMessage(websocket.BinaryMessage, []byte("参数错误\r\n")) + _ = wsConn.Close() return } @@ -63,12 +63,12 @@ func WsSsh(c *gin.Context) { _, wsData, err := wsConn.ReadMessage() if err != nil { log.Println(err.Error()) - wsConn.Close() + _ = wsConn.Close() //logrus.WithError(err).Error("reading webSocket message failed") return } //unmashal bytes into struct - msgObj := Auth_msg{} + msgObj := AuthMsg{} if err := json.Unmarshal(wsData, &msgObj); err != nil { log.Println("Auth : unmarshal websocket message failed:", string(wsData)) continue @@ -77,35 +77,35 @@ func WsSsh(c *gin.Context) { claims, err := common.ParseToken(token) valid := claims.Valid() if valid != nil || err != nil { - wsConn.WriteMessage(websocket.TextMessage, []byte("身份验证失败\r\n")) - wsConn.Close() + _ = wsConn.WriteMessage(websocket.BinaryMessage, []byte("身份验证失败\r\n")) + _ = wsConn.Close() return } cache := database.Cache.Get() defer cache.Close() //log.Println(auth) - s_info, err := redis.Bytes(cache.Do("GET", auth.Sid)) + sInfo, err := redis.Bytes(cache.Do("GET", auth.Sid)) //log.Println(string(s_info)) - if err != nil || len(s_info) == 0 { - wsConn.WriteMessage(websocket.TextMessage, []byte("连接超时,请重试!\r\n")) - wsConn.Close() + if err != nil || len(sInfo) == 0 { + _ = wsConn.WriteMessage(websocket.BinaryMessage, []byte("连接超时,请重试!\r\n")) + _ = wsConn.Close() return } - if json.Unmarshal(s_info, &ser_info) != nil { - wsConn.WriteMessage(websocket.TextMessage, []byte("服务器信息获取失败,请重试!\r\n")) - wsConn.Close() + if json.Unmarshal(sInfo, &serInfo) != nil { + _ = wsConn.WriteMessage(websocket.BinaryMessage, []byte("服务器信息获取失败,请重试!\r\n")) + _ = wsConn.Close() return } //log.Println(ser_info) - if claims.Userid != ser_info.BindUser { //验证权限 - wsConn.WriteMessage(websocket.TextMessage, []byte("权限验证失败,请重试!\r\n")) - wsConn.Close() + if claims.Userid != serInfo.BindUser { //验证权限 + _ = wsConn.WriteMessage(websocket.BinaryMessage, []byte("权限验证失败,请重试!\r\n")) + _ = wsConn.Close() return } break //break } - client, err := core.NewSshClient(core.Server{ser_info.Ip, ser_info.Port, ser_info.Username, ser_info.Password}) + client, err := core.NewSshClient(core.Server{serInfo.Ip, serInfo.Port, serInfo.Username, serInfo.Password}) if core.WshandleError(wsConn, err) { return } @@ -116,7 +116,7 @@ func WsSsh(c *gin.Context) { return } sftp_clients.Client.Lock() - sftp_clients.Client.C[auth.Sid] = &sftp_clients.MyClient{ser_info.BindUser, ssConn.SftpClient} + sftp_clients.Client.C[auth.Sid] = &sftp_clients.MyClient{serInfo.BindUser, ssConn.SftpClient} sftp_clients.Client.Unlock() defer func() { sftp_clients.Client.Lock() diff --git a/database/conn.go b/database/conn.go index 95488b6..2e83169 100644 --- a/database/conn.go +++ b/database/conn.go @@ -9,20 +9,20 @@ import ( "ssh_manage/model" ) -var dbconf = config.Config.Database +var dbConf = config.Config.Database var pool *sqlpool -type Mydb struct { +type MyDb struct { DB *gorm.DB } func init() { - pool = newpool(newDb, dbconf.Poolsize) + pool = newpool(newDb, dbConf.Poolsize) } func newDb() *gorm.DB { - db, err := gorm.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",dbconf.Username,dbconf.Password,dbconf.Host,dbconf.Port,dbconf.Dbname)) + db, err := gorm.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", dbConf.Username, dbConf.Password, dbConf.Host, dbConf.Port, dbConf.Dbname)) if err != nil { log.Panicf("db open err :%s", err.Error()) } @@ -33,10 +33,10 @@ func newDb() *gorm.DB { return db } -func (s *Mydb) Close() { +func (s *MyDb) Close() { pool.put(s.DB) } -func Get() *Mydb { - return &Mydb{pool.get()} +func Get() *MyDb { + return &MyDb{pool.get()} } diff --git a/go.sum b/go.sum index 115a84f..554302b 100644 --- a/go.sum +++ b/go.sum @@ -2,9 +2,11 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Gre-Z/common v0.0.0-20191024025434-2dbc6bd196f9 h1:q+nKJ4E5tIiGVcXcRqwPxjxRmGHtC+wWohKHtCHzJmE= github.com/Gre-Z/common v0.0.0-20191024025434-2dbc6bd196f9/go.mod h1:b5J9o16Ec1LAwq6QVv+pNECF3sxcin2dMKprGZX43mA= +github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/aliyun/alibaba-cloud-sdk-go v1.61.623 h1:iKyKSF67tLwsVSs6okuvVdr9C9kV7y4OGNTCx16IKfg= github.com/aliyun/alibaba-cloud-sdk-go v1.61.623/go.mod h1:pUKYbK5JQ+1Dfxk80P0qxGqe5dkxDoabbZS7zOcouyA= +github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -31,11 +33,13 @@ github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1 github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d h1:lBXNCxVENCipq4D1Is42JVOP4eQjlB8TQ6H69Yx5J9Q= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -66,7 +70,6 @@ github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/ github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -84,9 +87,9 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -96,7 +99,6 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd h1:GGJVjV8waZKRHrgwvtH66z9ZGVurTD1MT0n1Bb+q4aM= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -104,6 +106,7 @@ golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -114,6 +117,7 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 h1:TFlARGu6Czu1z7q93HTxcP1P+/ZFC/IKythI5RzrnRg= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/ssh_manage.go b/ssh_manage.go index 85bc02b..e28635c 100644 --- a/ssh_manage.go +++ b/ssh_manage.go @@ -55,7 +55,7 @@ func main() { api.POST("/login", controller.Login) api.POST("/send", controller.Send) api.GET("/term/:sid", controller.WsSsh) - api.GET("/sftp/:sid", controller.Sftp_ssh) + api.GET("/sftp/:sid", controller.SftpSsh) api.Use(middleware.Auth()).GET("/userinfo", controller.Info) api.Use(middleware.Auth()).POST("/nickname", controller.UpdataNick) api.Use(middleware.Auth()).POST("/addser", controller.Addser) diff --git a/static/xterm/main.js b/static/xterm/main.js index 892807e..3765711 100644 --- a/static/xterm/main.js +++ b/static/xterm/main.js @@ -59,7 +59,7 @@ socket.onopen = function () { type: "cmd", cmd: data, } - socket.send(JSON.stringify(sdata)); + socket.send(str2utf8(JSON.stringify(sdata))); }); term.on('resize', size => { @@ -78,8 +78,17 @@ socket.onopen = function () { create_sftp() is_login = true } - term.write(msg.data); - update_path(msg.data) + let reader = new FileReader(); + reader.onload = function (event) { + let content = reader.result;//内容就在这里 + //delete reader + //console.log(content) + term.write(content); + update_path(content); + }; + reader.readAsText(msg.data); + //term.write(msg.data); + }; socket.onerror = function (e) { is_login = false @@ -95,6 +104,11 @@ socket.onopen = function () { }; }; +function str2utf8(str) { + let encoder = new TextEncoder('utf8'); + return encoder.encode(str); +} + function update_path(str) { //判断是否有效路径后更新当前所在路径,用于SFTP功能 //console.log(str) let splice = String.fromCharCode(7) @@ -103,14 +117,14 @@ function update_path(str) { //判断是否有效路径后更新当前所在 if (start >= 0 && end >= 0) { let path = trimStr(str.substring(start + 1, end)) let verify = path.indexOf(" ") - if(verify == -1){ + if (verify == -1) { //console.log(path) - if(path.substr(0,1) == "~" || path.substr(0,1) == "/"){ - if(path.substr(0,1) == "~"){ //替换~为用户目录 + if (path.substr(0, 1) == "~" || path.substr(0, 1) == "/") { + if (path.substr(0, 1) == "~") { //替换~为用户目录 path = server_pwd + path.substr(1) } //console.log(path) - if(session_path != path){ + if (session_path != path) { session_path = path } } @@ -118,6 +132,6 @@ function update_path(str) { //判断是否有效路径后更新当前所在 } } -function trimStr(str){ - return str.replace(/(^\s*)|(\s*$)/g,""); +function trimStr(str) { + return str.replace(/(^\s*)|(\s*$)/g, ""); } \ No newline at end of file diff --git a/view/term.html b/view/term.html index 7392927..abed102 100644 --- a/view/term.html +++ b/view/term.html @@ -39,7 +39,7 @@ - + \ No newline at end of file