Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
coco
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
coco
Commits
cb161095
Commit
cb161095
authored
May 14, 2018
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 准备更改http proxy数据结构
parent
50645630
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
81 additions
and
86 deletions
+81
-86
httpd.py
coco/httpd.py
+81
-86
No files found.
coco/httpd.py
View file @
cb161095
...
...
@@ -46,28 +46,28 @@ class BaseNamespace(Namespace):
def
close
(
self
):
try
:
self
.
clients
[
request
.
sid
][
"client"
]
.
close
()
except
:
except
IndexError
:
pass
class
ProxyNamespace
(
BaseNamespace
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
()
.
__init__
(
*
args
,
**
kwargs
)
self
.
c
lient
s
=
dict
()
self
.
c
onnection
s
=
dict
()
self
.
rooms
=
dict
()
def
new_c
lient
(
self
):
room
=
str
(
uuid
.
uuid4
())
c
lient
=
{
def
new_c
onnection
(
self
):
room
_id
=
str
(
uuid
.
uuid4
())
c
onnection
=
{
"cols"
:
int
(
request
.
cookies
.
get
(
'cols'
,
80
)),
"rows"
:
int
(
request
.
cookies
.
get
(
'rows'
,
24
)),
"room"
:
room
,
"room"
:
room
_id
,
"proxy"
:
dict
(),
"client"
:
dict
(),
"forwarder"
:
dict
(),
"request"
:
self
.
make_coco_request
()
}
return
c
lient
return
c
onnection
def
make_coco_request
(
self
):
x_forwarded_for
=
request
.
headers
.
get
(
"X-Forwarded-For"
,
''
)
.
split
(
','
)
...
...
@@ -98,38 +98,24 @@ class ProxyNamespace(BaseNamespace):
def
on_connect
(
self
):
logger
.
debug
(
"On connect event trigger"
)
super
()
.
on_connect
()
c
lient
=
self
.
new_client
()
self
.
c
lients
[
request
.
sid
]
=
client
self
.
rooms
[
c
lient
[
'room'
]]
=
{
c
onnection
=
self
.
new_connection
()
self
.
c
onnections
[
request
.
sid
]
=
connection
self
.
rooms
[
c
onnection
[
'room'
]]
=
{
"admin"
:
request
.
sid
,
"member"
:
[],
"rw"
:
[]
}
join_room
(
client
[
'room'
])
def
on_data
(
self
,
message
):
"""
收到浏览器请求
:param message: {"data": "xxx", "room": "xxx"}
:return:
"""
room
=
message
.
get
(
'room'
)
if
not
room
:
return
room_proxy
=
self
.
clients
[
request
.
sid
][
'proxy'
]
.
get
(
room
)
if
room_proxy
:
room_proxy
.
send
({
"data"
:
message
[
'data'
]})
join_room
(
connection
[
'room'
])
def
on_host
(
self
,
message
):
# 此处获取主机的信息
logger
.
debug
(
"On host event trigger"
)
connection
=
str
(
uuid
.
uuid4
())
room_id
=
str
(
uuid
.
uuid4
())
asset_id
=
message
.
get
(
'uuid'
,
None
)
user_id
=
message
.
get
(
'userid'
,
None
)
secret
=
message
.
get
(
'secret'
,
None
)
self
.
emit
(
'room'
,
{
'room'
:
connection
,
'secret'
:
secret
})
self
.
emit
(
'room'
,
{
'room'
:
room_id
,
'secret'
:
secret
})
if
not
asset_id
or
not
user_id
:
# self.on_connect()
return
...
...
@@ -142,24 +128,36 @@ class ProxyNamespace(BaseNamespace):
return
child
,
parent
=
socket
.
socketpair
()
self
.
c
lients
[
request
.
sid
][
"client"
][
connection
]
=
Client
(
parent
,
self
.
c
lient
s
[
request
.
sid
][
"request"
]
self
.
c
onnections
[
request
.
sid
][
"client"
][
room_id
]
=
Client
(
parent
,
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
)
self
.
c
lients
[
request
.
sid
][
"proxy"
][
connection
]
=
WSProxy
(
self
,
child
,
self
.
c
lients
[
request
.
sid
][
"room"
],
connection
self
.
c
onnections
[
request
.
sid
][
"proxy"
][
room_id
]
=
WSProxy
(
self
,
child
,
self
.
c
onnections
[
request
.
sid
][
"room"
],
room_id
)
self
.
c
lients
[
request
.
sid
][
"forwarder"
][
connection
]
=
ProxyServer
(
self
.
app
,
self
.
c
lients
[
request
.
sid
][
"client"
][
connection
]
self
.
c
onnections
[
request
.
sid
][
"forwarder"
][
room_id
]
=
ProxyServer
(
self
.
app
,
self
.
c
onnections
[
request
.
sid
][
"client"
][
room_id
]
)
self
.
socketio
.
start_background_task
(
self
.
c
lients
[
request
.
sid
][
"forwarder"
][
connection
]
.
proxy
,
self
.
c
onnections
[
request
.
sid
][
"forwarder"
][
room_id
]
.
proxy
,
asset
,
system_user
)
def
on_data
(
self
,
message
):
"""
收到浏览器请求
:param message: {"data": "xxx", "room": "xxx"}
:return:
"""
room
=
message
.
get
(
'room'
)
if
not
room
:
return
room_proxy
=
self
.
connections
[
request
.
sid
][
'proxy'
]
.
get
(
room
)
if
room_proxy
:
room_proxy
.
send
({
"data"
:
message
[
'data'
]})
def
on_token
(
self
,
message
):
# 此处获取token含有的主机的信息
logger
.
debug
(
"On token trigger"
)
logger
.
debug
(
message
)
token
=
message
.
get
(
'token'
,
None
)
secret
=
message
.
get
(
'secret'
,
None
)
connection
=
str
(
uuid
.
uuid4
())
...
...
@@ -170,51 +168,50 @@ class ProxyNamespace(BaseNamespace):
self
.
emit
(
'disconnect'
)
return
None
host
=
self
.
app
.
service
.
get_token_asset
(
token
)
logger
.
debug
(
host
)
if
not
host
:
info
=
self
.
app
.
service
.
get_token_asset
(
token
)
logger
.
debug
(
info
)
if
not
info
:
logger
.
debug
(
"host is None"
)
self
.
emit
(
'data'
,
{
'data'
:
"
\n
Operation not permitted!"
,
'room'
:
connection
})
self
.
emit
(
'disconnect'
)
return
None
user_id
=
host
.
get
(
'user'
,
None
)
user_id
=
info
.
get
(
'user'
,
None
)
logger
.
debug
(
"self.current_user"
)
self
.
current_user
=
self
.
app
.
service
.
get_user_profile
(
user_id
)
self
.
clients
[
request
.
sid
][
"request"
]
.
user
=
self
.
current_user
self
.
connections
[
request
.
sid
][
"request"
]
.
user
=
self
.
current_user
logger
.
debug
(
self
.
current_user
)
self
.
on_host
({
'secret'
:
secret
,
'uuid'
:
host
[
'asset'
],
'userid'
:
host
[
'system_user'
]})
self
.
on_host
({
'secret'
:
secret
,
'uuid'
:
info
[
'asset'
],
'userid'
:
info
[
'system_user'
]})
def
on_resize
(
self
,
message
):
cols
=
message
.
get
(
'cols'
)
rows
=
message
.
get
(
'rows'
)
logger
.
debug
(
"On resize event trigger: {}*{}"
.
format
(
cols
,
rows
))
if
cols
and
rows
and
self
.
c
lient
s
[
request
.
sid
][
"request"
]:
self
.
c
lient
s
[
request
.
sid
][
"request"
]
.
meta
[
'width'
]
=
cols
self
.
c
lient
s
[
request
.
sid
][
"request"
]
.
meta
[
'height'
]
=
rows
self
.
c
lient
s
[
request
.
sid
][
"request"
]
.
change_size_event
.
set
()
def
on_room
(
self
,
session_id
):
logger
.
debug
(
"On room event trigger"
)
if
session_id
not
in
self
.
client
s
.
keys
():
self
.
emit
(
'error'
,
"no such session"
,
room
=
self
.
client
s
[
request
.
sid
][
"room"
]
)
else
:
self
.
emit
(
'room'
,
self
.
client
s
[
session_id
][
"room"
],
room
=
self
.
client
s
[
request
.
sid
][
"room"
]
)
def
on_join
(
self
,
room
):
logger
.
debug
(
"On join room event trigger"
)
self
.
on_leave
(
self
.
client
s
[
request
.
id
][
"room"
])
self
.
client
s
[
request
.
sid
][
"room"
]
=
room
self
.
rooms
[
room
][
"member"
]
.
append
(
request
.
sid
)
join_room
(
room
=
room
)
if
cols
and
rows
and
self
.
c
onnection
s
[
request
.
sid
][
"request"
]:
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
.
meta
[
'width'
]
=
cols
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
.
meta
[
'height'
]
=
rows
self
.
c
onnection
s
[
request
.
sid
][
"request"
]
.
change_size_event
.
set
()
#
def on_room(self, session_id):
#
logger.debug("On room event trigger")
# if session_id not in self.connection
s.keys():
#
self.emit(
#
'error', "no such session",
# room=self.connection
s[request.sid]["room"]
#
)
#
else:
#
self.emit(
# 'room', self.connection
s[session_id]["room"],
# room=self.connection
s[request.sid]["room"]
#
)
#
#
def on_join(self, room):
#
logger.debug("On join room event trigger")
# self.on_leave(self.connection
s[request.id]["room"])
# self.connection
s[request.sid]["room"] = room
#
self.rooms[room]["member"].append(request.sid)
#
join_room(room=room)
#
def
on_leave
(
self
,
room
):
logger
.
debug
(
"On leave room event trigger"
)
if
self
.
rooms
[
room
][
"admin"
]
==
request
.
sid
:
...
...
@@ -224,29 +221,20 @@ class ProxyNamespace(BaseNamespace):
def
on_disconnect
(
self
):
logger
.
debug
(
"On disconnect event trigger"
)
self
.
on_leave
(
self
.
clients
[
request
.
sid
][
"room"
])
# self.on_leave(self.clients[request.sid]["room"])
print
(
self
.
connections
[
request
.
sid
][
"client"
])
try
:
for
connection
in
self
.
c
lient
s
[
request
.
sid
][
"client"
]:
for
connection
in
self
.
c
onnection
s
[
request
.
sid
][
"client"
]:
self
.
on_logout
(
connection
)
del
self
.
c
lient
s
[
request
.
sid
]
except
:
del
self
.
c
onnection
s
[
request
.
sid
]
except
IndexError
:
pass
def
on_logout
(
self
,
connection
):
logger
.
debug
(
"On logout event trigger"
)
if
connection
:
if
connection
in
self
.
clients
[
request
.
sid
][
"proxy"
]
.
keys
():
self
.
clients
[
request
.
sid
][
"proxy"
][
connection
]
.
close
()
del
self
.
clients
[
request
.
sid
][
'proxy'
][
connection
]
def
logout
(
self
,
connection
):
if
connection
and
(
request
.
sid
in
self
.
clients
.
keys
()):
if
connection
in
self
.
clients
[
request
.
sid
][
"proxy"
]
.
keys
():
del
self
.
clients
[
request
.
sid
][
"proxy"
][
connection
]
if
connection
in
self
.
clients
[
request
.
sid
][
"forwarder"
]
.
keys
():
del
self
.
clients
[
request
.
sid
][
"forwarder"
][
connection
]
if
connection
in
self
.
clients
[
request
.
sid
][
"client"
]
.
keys
():
del
self
.
clients
[
request
.
sid
][
"client"
][
connection
]
if
connection
in
self
.
connections
[
request
.
sid
][
"proxy"
]
.
keys
():
self
.
connections
[
request
.
sid
][
"proxy"
][
connection
]
.
close
()
del
self
.
connections
[
request
.
sid
][
'proxy'
][
connection
]
class
HttpServer
:
...
...
@@ -256,7 +244,11 @@ class HttpServer:
'coco'
:
None
,
'LOGIN_URL'
:
'/login'
}
async_mode
=
"threading"
init_kwargs
=
dict
(
async_mode
=
"threading"
,
ping_timeout
=
20
,
ping_interval
=
10
)
def
__init__
(
self
,
coco
):
config
=
coco
.
config
...
...
@@ -273,7 +265,10 @@ class HttpServer:
def
run
(
self
):
host
=
self
.
flask_app
.
config
[
"BIND_HOST"
]
port
=
self
.
flask_app
.
config
[
"HTTPD_PORT"
]
self
.
socket_io
.
init_app
(
self
.
flask_app
,
async_mode
=
self
.
async_mode
)
self
.
socket_io
.
init_app
(
self
.
flask_app
,
**
self
.
init_kwargs
)
self
.
socket_io
.
run
(
self
.
flask_app
,
port
=
port
,
host
=
host
,
debug
=
False
)
def
shutdown
(
self
):
...
...
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