Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
K
koko
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
koko
Commits
a5a1229a
Commit
a5a1229a
authored
May 07, 2019
by
Eric
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] socketio相关
parent
ec62b2fa
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
135 additions
and
4 deletions
+135
-4
assets.go
pkg/service/assets.go
+18
-0
urls.go
pkg/service/urls.go
+2
-0
client.go
pkg/webssh/client.go
+14
-0
connection.go
pkg/webssh/connection.go
+60
-0
server.go
pkg/webssh/server.go
+41
-4
No files found.
pkg/service/assets.go
View file @
a5a1229a
...
@@ -75,3 +75,21 @@ func GetSystemUserFilterRules(systemUserID string) (rules []model.SystemUserFilt
...
@@ -75,3 +75,21 @@ func GetSystemUserFilterRules(systemUserID string) (rules []model.SystemUserFilt
}
}
return
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
}
pkg/service/urls.go
View file @
a5a1229a
...
@@ -8,6 +8,8 @@ const (
...
@@ -8,6 +8,8 @@ const (
SystemUserAssetAuthURL
=
"/api/assets/v1/system-user/%s/asset/%s/auth-info/"
// 该系统用户对某资产的授权
SystemUserAssetAuthURL
=
"/api/assets/v1/system-user/%s/asset/%s/auth-info/"
// 该系统用户对某资产的授权
SystemUserAuthInfoURL
=
"/api/assets/v1/system-user/%s/auth-info/"
// 该系统用户的授权
SystemUserAuthInfoURL
=
"/api/assets/v1/system-user/%s/auth-info/"
// 该系统用户的授权
SystemUserCmdFilterRules
=
"/api/assets/v1/system-user/%s/cmd-filter-rules/"
// 过滤规则url
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
TerminalRegisterURL
=
"/api/terminal/v2/terminal-registrations/"
// 注册当前coco
TerminalConfigURL
=
"/api/terminal/v1/terminal/config/"
// 从jumpserver获取coco的配置
TerminalConfigURL
=
"/api/terminal/v1/terminal/config/"
// 从jumpserver获取coco的配置
...
...
pkg/webssh/client.go
0 → 100644
View file @
a5a1229a
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
}
pkg/webssh/connection.go
0 → 100644
View file @
a5a1229a
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
}
pkg/webssh/server.go
View file @
a5a1229a
...
@@ -5,17 +5,23 @@ import (
...
@@ -5,17 +5,23 @@ import (
"strconv"
"strconv"
socketio
"github.com/googollee/go-socket.io"
socketio
"github.com/googollee/go-socket.io"
uuid
"github.com/satori/go.uuid"
"cocogo/pkg/config"
"cocogo/pkg/config"
"cocogo/pkg/logger"
"cocogo/pkg/logger"
"cocogo/pkg/service"
"strings"
"sync"
)
)
var
(
var
(
conf
=
config
.
Conf
conf
=
config
.
Conf
httpServer
*
http
.
Server
httpServer
*
http
.
Server
cons
=
&
connections
{
container
:
make
(
map
[
string
]
*
WebConn
),
mu
:
new
(
sync
.
RWMutex
)}
)
)
func
Start
Websocket
()
{
func
Start
HTTPServer
()
{
server
,
err
:=
socketio
.
NewServer
(
nil
)
server
,
err
:=
socketio
.
NewServer
(
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Fatal
(
err
)
logger
.
Fatal
(
err
)
...
@@ -32,13 +38,35 @@ func StartWebsocket() {
...
@@ -32,13 +38,35 @@ func StartWebsocket() {
defer
server
.
Close
()
defer
server
.
Close
()
http
.
Handle
(
"/socket.io/"
,
server
)
http
.
Handle
(
"/socket.io/"
,
server
)
logger
.
Debug
(
"start
Websocket
Serving"
)
logger
.
Debug
(
"start
HTTP
Serving"
)
httpServer
=
&
http
.
Server
{
Addr
:
conf
.
BindHost
+
":"
+
strconv
.
Itoa
(
conf
.
SSH
Port
),
Handler
:
nil
}
httpServer
=
&
http
.
Server
{
Addr
:
conf
.
BindHost
+
":"
+
strconv
.
Itoa
(
conf
.
HTTP
Port
),
Handler
:
nil
}
logger
.
Fatal
(
httpServer
.
ListenAndServe
())
logger
.
Fatal
(
httpServer
.
ListenAndServe
())
}
}
func
OnConnectHandler
(
s
socketio
.
Conn
)
error
{
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
return
nil
}
}
...
@@ -47,7 +75,16 @@ func OnErrorHandler(e error) {
...
@@ -47,7 +75,16 @@ func OnErrorHandler(e error) {
}
}
func
OnHostHandler
(
s
socketio
.
Conn
,
message
HostMsg
)
{
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
)
{
func
OnTokenHandler
(
s
socketio
.
Conn
,
message
TokenMsg
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment