修复文件编码导致的异常断开
This commit is contained in:
parent
cd718bde5f
commit
29d17d84fb
@ -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
|
||||
}
|
||||
|
||||
@ -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创建失败"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()}
|
||||
}
|
||||
|
||||
10
go.sum
10
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=
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
<script src="/static/xterm/search.min.js"></script>
|
||||
<script src="/static/js/net.js?v=1.9"></script>
|
||||
<script src="/static/js/sftp.js?v=0.17"></script>
|
||||
<script src="/static/xterm/main.js?v=0.87"></script>
|
||||
<script src="/static/xterm/main.js?v=0.88"></script>
|
||||
<script src="/static/js/polyfill.js"></script>
|
||||
<script src="/static/js/fileupload.js?v=0.75"></script>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user