From 7599c0919172b427dcfd19e0b89aaa6da08a3d9f Mon Sep 17 00:00:00 2001
From: dushixiang <798148596@qq.com>
Date: Fri, 12 Feb 2021 15:42:02 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=B5=84=E4=BA=A7=E9=99=84?=
=?UTF-8?q?=E5=8A=A0=E5=B1=9E=E6=80=A7=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
main.go | 2 +-
pkg/api/session.go | 11 ++-
pkg/api/ssh.go | 32 +++---
pkg/api/tunnel.go | 3 +-
pkg/global/store.go | 3 +-
pkg/model/asset-attribute.go | 2 +
web/package.json | 2 +-
web/src/components/access/Access.js | 54 +++++++---
web/src/components/asset/AssetModal.js | 130 -------------------------
web/src/components/setting/Setting.js | 103 +-------------------
10 files changed, 72 insertions(+), 270 deletions(-)
diff --git a/main.go b/main.go
index 716cb45..9ab7820 100644
--- a/main.go
+++ b/main.go
@@ -22,7 +22,7 @@ import (
"time"
)
-const Version = "v0.1.2"
+const Version = "v0.2.0"
func main() {
log.Fatal(Run())
diff --git a/pkg/api/session.go b/pkg/api/session.go
index 44138b5..2f3bbc7 100644
--- a/pkg/api/session.go
+++ b/pkg/api/session.go
@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"github.com/labstack/echo/v4"
+ "github.com/pkg/sftp"
"github.com/sirupsen/logrus"
"io"
"io/ioutil"
@@ -362,8 +363,16 @@ func SessionLsEndpoint(c echo.Context) error {
return errors.New("获取sftp客户端失败")
}
+ if tun.Subject.NextTerminal == nil {
+ nextTerminal, err := CreateNextTerminalBySession(session)
+ if err != nil {
+ return err
+ }
+ tun.Subject.NextTerminal = nextTerminal
+ }
+
if tun.Subject.NextTerminal.SftpClient == nil {
- sftpClient, err := CreateSftpClient(session)
+ sftpClient, err := sftp.NewClient(tun.Subject.NextTerminal.SshClient)
if err != nil {
logrus.Errorf("创建sftp客户端失败:%v", err.Error())
return err
diff --git a/pkg/api/ssh.go b/pkg/api/ssh.go
index 6c6753b..5621233 100644
--- a/pkg/api/ssh.go
+++ b/pkg/api/ssh.go
@@ -4,9 +4,7 @@ import (
"encoding/json"
"github.com/gorilla/websocket"
"github.com/labstack/echo/v4"
- "github.com/pkg/sftp"
"github.com/sirupsen/logrus"
- "golang.org/x/crypto/ssh"
"net/http"
"next-terminal/pkg/global"
"next-terminal/pkg/guacd"
@@ -97,6 +95,7 @@ func SSHEndpoint(c echo.Context) (err error) {
tun := global.Tun{
Protocol: session.Protocol,
+ Mode: session.Mode,
WebSocket: ws,
}
@@ -242,18 +241,6 @@ func WriteMessage(ws *websocket.Conn, msg Message) error {
return err
}
-func CreateSshClientBySession(session model.Session) (sshClient *ssh.Client, err error) {
-
- var (
- username = session.Username
- password = session.Password
- privateKey = session.PrivateKey
- passphrase = session.Passphrase
- )
-
- return term.NewSshClient(session.IP, session.Port, username, password, privateKey, passphrase)
-}
-
func WriteByteMessage(ws *websocket.Conn, p []byte) {
err := ws.WriteMessage(websocket.TextMessage, p)
if err != nil {
@@ -261,11 +248,14 @@ func WriteByteMessage(ws *websocket.Conn, p []byte) {
}
}
-func CreateSftpClient(session model.Session) (sftpClient *sftp.Client, err error) {
- sshClient, err := CreateSshClientBySession(session)
- if err != nil {
- return nil, err
- }
-
- return sftp.NewClient(sshClient)
+func CreateNextTerminalBySession(session model.Session) (*term.NextTerminal, error) {
+ var (
+ username = session.Username
+ password = session.Password
+ privateKey = session.PrivateKey
+ passphrase = session.Passphrase
+ ip = session.IP
+ port = session.Port
+ )
+ return term.NewNextTerminal(ip, port, username, password, privateKey, passphrase, 10, 10, "")
}
diff --git a/pkg/api/tunnel.go b/pkg/api/tunnel.go
index ddf1510..85563ab 100644
--- a/pkg/api/tunnel.go
+++ b/pkg/api/tunnel.go
@@ -154,8 +154,9 @@ func TunEndpoint(c echo.Context) error {
tun := global.Tun{
Protocol: session.Protocol,
- Tunnel: tunnel,
+ Mode: session.Mode,
WebSocket: ws,
+ Tunnel: tunnel,
}
if len(session.ConnectionId) == 0 {
diff --git a/pkg/global/store.go b/pkg/global/store.go
index a418503..28e6ab8 100644
--- a/pkg/global/store.go
+++ b/pkg/global/store.go
@@ -10,6 +10,7 @@ import (
type Tun struct {
Protocol string
+ Mode string
WebSocket *websocket.Conn
Tunnel *guacd.Tunnel
NextTerminal *term.NextTerminal
@@ -25,7 +26,7 @@ func (r *Tun) Close(code int, reason string) {
ws := r.WebSocket
if ws != nil {
- if r.Protocol == "rdp" || r.Protocol == "vnc" {
+ if r.Mode == "guacd" {
err := guacd.NewInstruction("error", reason, strconv.Itoa(code))
_ = ws.WriteMessage(websocket.TextMessage, []byte(err.String()))
disconnect := guacd.NewInstruction("disconnect")
diff --git a/pkg/model/asset-attribute.go b/pkg/model/asset-attribute.go
index 4458de0..cde6091 100644
--- a/pkg/model/asset-attribute.go
+++ b/pkg/model/asset-attribute.go
@@ -92,6 +92,8 @@ func FindAssetAttrMapByAssetId(assetId string) (map[string]interface{}, error) {
parameterNames = RDPParameterNames
case "vnc":
parameterNames = VNCParameterNames
+ case "telnet":
+ parameterNames = TelnetParameterNames
}
propertiesMap := FindAllPropertiesMap()
var attributeMap = make(map[string]interface{})
diff --git a/web/package.json b/web/package.json
index f58ee52..d771c9f 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,6 +1,6 @@
{
"name": "next-terminal",
- "version": "0.1.2",
+ "version": "0.2.0",
"private": true,
"dependencies": {
"@ant-design/icons": "^4.3.0",
diff --git a/web/src/components/access/Access.js b/web/src/components/access/Access.js
index 76115fe..5e063c9 100644
--- a/web/src/components/access/Access.js
+++ b/web/src/components/access/Access.js
@@ -575,23 +575,45 @@ class Access extends Component {
-