Commit a5a1229a authored by Eric's avatar Eric

[update] socketio相关

parent ec62b2fa
......@@ -75,3 +75,21 @@ func GetSystemUserFilterRules(systemUserID string) (rules []model.SystemUserFilt
}
return
}
func GetSystemUser(systemUserID string) (info model.SystemUser) {
Url := authClient.ParseUrlQuery(fmt.Sprintf(SystemUser, systemUserID), nil)
err := authClient.Get(Url, &info)
if err != nil {
logger.Errorf("Get system user %s failed", systemUserID)
}
return
}
func GetAsset(assetID string) (asset model.Asset) {
Url := authClient.ParseUrlQuery(fmt.Sprintf(Asset, assetID), nil)
err := authClient.Get(Url, &asset)
if err != nil {
logger.Errorf("Get Asset %s failed", assetID)
}
return
}
......@@ -8,6 +8,8 @@ const (
SystemUserAssetAuthURL = "/api/assets/v1/system-user/%s/asset/%s/auth-info/" // 该系统用户对某资产的授权
SystemUserAuthInfoURL = "/api/assets/v1/system-user/%s/auth-info/" // 该系统用户的授权
SystemUserCmdFilterRules = "/api/assets/v1/system-user/%s/cmd-filter-rules/" // 过滤规则url
SystemUser = "/api/assets/v1/system-user/%s" // 某个系统用户的信息
Asset = "/api/assets/v1/assets/%s/" // 某一个资产信息
TerminalRegisterURL = "/api/terminal/v2/terminal-registrations/" // 注册当前coco
TerminalConfigURL = "/api/terminal/v1/terminal/config/" // 从jumpserver获取coco的配置
......
package webssh
import (
socketio "github.com/googollee/go-socket.io"
"github.com/ibuler/ssh"
)
type Client struct {
Uuid string
Cid string
WinCh chan ssh.Window
Conn socketio.Conn
}
package webssh
import (
"sync"
"cocogo/pkg/model"
socketio "github.com/googollee/go-socket.io"
)
type connections struct {
container map[string]*WebConn
mu *sync.RWMutex
}
func (c *connections) GetWebConn(conID string) (conn *WebConn) {
c.mu.RLock()
defer c.mu.RUnlock()
conn = c.container[conID]
return
}
func (c *connections) DeleteWebConn(conID string) {
c.mu.Lock()
defer c.mu.Unlock()
delete(c.container, conID)
}
func (c *connections) AddWebConn(conID string, conn *WebConn) {
c.mu.Lock()
defer c.mu.Unlock()
c.container[conID] = conn
}
type WebConn struct {
Cid string
Sock socketio.Conn
Addr string
User *model.User
Clients map[string]*Client
mu *sync.RWMutex
}
func (w *WebConn) GetClient(clientID string) (conn *Client) {
w.mu.RLock()
defer w.mu.RUnlock()
return w.Clients[clientID]
}
func (w *WebConn) DeleteClient(clientID string) {
w.mu.Lock()
defer w.mu.Unlock()
delete(w.Clients, clientID)
}
func (w *WebConn) AddClient(clientID string, conn *Client) {
w.mu.Lock()
defer w.mu.Unlock()
w.Clients[clientID] = conn
}
......@@ -5,17 +5,23 @@ import (
"strconv"
socketio "github.com/googollee/go-socket.io"
uuid "github.com/satori/go.uuid"
"cocogo/pkg/config"
"cocogo/pkg/logger"
"cocogo/pkg/service"
"strings"
"sync"
)
var (
conf = config.Conf
httpServer *http.Server
cons = &connections{container: make(map[string]*WebConn), mu: new(sync.RWMutex)}
)
func StartWebsocket() {
func StartHTTPServer() {
server, err := socketio.NewServer(nil)
if err != nil {
logger.Fatal(err)
......@@ -32,13 +38,35 @@ func StartWebsocket() {
defer server.Close()
http.Handle("/socket.io/", server)
logger.Debug("start Websocket Serving")
httpServer = &http.Server{Addr: conf.BindHost + ":" + strconv.Itoa(conf.SSHPort), Handler: nil}
logger.Debug("start HTTP Serving")
httpServer = &http.Server{Addr: conf.BindHost + ":" + strconv.Itoa(conf.HTTPPort), Handler: nil}
logger.Fatal(httpServer.ListenAndServe())
}
func OnConnectHandler(s socketio.Conn) error {
// 首次连接 1.获取当前用户的信息
cookies := strings.Split(s.RemoteHeader().Get("Cookie"), ";")
var csrfToken string
var sessionid string
var remoteIP string
for _, line := range cookies {
if strings.Contains(line, "csrftoken") {
csrfToken = strings.Split(line, "=")[1]
}
if strings.Contains(line, "sessionid") {
sessionid = strings.Split(line, "=")[1]
}
}
user := service.CheckUserCookie(sessionid, csrfToken)
remoteAddrs := s.RemoteHeader().Get("X-Forwarded-For")
if remoteAddrs == "" {
remoteIP = s.RemoteAddr().String()
} else {
remoteIP = strings.Split(remoteAddrs, ",")[0]
}
conn := &WebConn{Cid: s.ID(), Sock: s, Addr: remoteIP, User: user}
cons.AddWebConn(s.ID(), conn)
return nil
}
......@@ -47,7 +75,16 @@ func OnErrorHandler(e error) {
}
func OnHostHandler(s socketio.Conn, message HostMsg) {
// secret uuid string
//assetID := message.Uuid
//systemUserId := message.UserID
secret := message.Secret
//width, height := message.Size[0], message.Size[1]
clientID := uuid.NewV4().String()
//asset := service.GetAsset(assetID)
//systemUser := service.GetSystemUser(systemUserId)
s.Emit("room", map[string]string{"room": clientID, "secret": secret})
}
func OnTokenHandler(s socketio.Conn, message TokenMsg) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment