Commit 578cbf0b authored by ibuler's avatar ibuler

[Update] 修改luna

parent 2d6bd826
...@@ -4,802 +4,907 @@ from flask import Flask, send_from_directory, render_template, request, jsonify, ...@@ -4,802 +4,907 @@ from flask import Flask, send_from_directory, render_template, request, jsonify,
from flask_socketio import SocketIO, Namespace, emit, join_room, leave_room from flask_socketio import SocketIO, Namespace, emit, join_room, leave_room
import paramiko import paramiko
import uuid import uuid
import eventlet
from threading import Lock
from flask import Flask, request, current_app, redirect from flask import Flask, request, current_app, redirect
app = Flask(__name__, template_folder='dist') app = Flask(__name__, template_folder='dist')
socketio = None
thread = None
thread_lock = Lock()
class SSHws(Namespace): class SSHws(Namespace):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.clients = dict() """
super().__init__(*args, **kwargs) :param args:
:param kwargs:
def ssh_with_password(self, connection):
ssh = paramiko.SSHClient() self.connections = {
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) "request_sid": {
ssh.connect("127.0.0.1", 22, "liuzheng", "liuzheng") "room_id": {
self.clients[request.sid]["chan"][connection] = ssh.invoke_shell(term='xterm', "id": room_id,
width=self.clients[request.sid]["cols"], "proxy": None,
height=self.clients[request.sid]["rows"]) "client": None,
# self.socketio.start_background_task(self.send_data, self.clients[request.sid]["chan"]) "forwarder": None,
# self.chan.settimeout(0.1) "request": None,
self.socketio.start_background_task(self.sent_data, self, self.clients[request.sid]["chan"][connection], "cols": 80,
self.clients[request.sid]["room"], "rows": 24
connection, request.sid) },
...
def sent_data(self, s, chan, room, connection, sid): },
while True: ...
if connection not in s.clients[sid]["chan"].keys(): }
return """
try: super().__init__(*args, **kwargs)
data = chan.recv(2048).decode('utf-8', 'replace') self.connections = dict()
s.emit(event='data', data={"data": data, "room": connection}, room=room)
except RuntimeError: def ssh_with_password(self, ws, room_id):
print(room, connection) ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
def send_data(self, s): ssh.connect("192.168.244.176", 22, "root", "redhat123")
# Todo: 这里涉及到并发优化 width, height = self.get_win_size()
while True:
for sid in self.clients: chan = ssh.invoke_shell(term='xterm', width=width, height=height)
if self.clients[sid]["chan"]: # self.socketio.start_background_task(self.send_data, self.clients[request.sid]["chan"])
for room, chan in self.clients[sid]["chan"]: # self.chan.settimeout(0.1)
try: return chan
data = chan.recv(2048).decode('utf-8', 'replace')
s.emit(event='data', data={"data": data, "room": room}, room=self.clients[sid]["room"]) def proxy(self, ws, chan, room_id):
except RuntimeError: # eventlet.monkey_patch(thread=True, select=True, socket=True)
print(self.clients) while True:
data = chan.recv(1024)
def on_connect(self): socketio.sleep(1)
self.clients[request.sid] = { if len(data) == 0:
"cols": int(request.cookies.get('cols', 80)), break
"rows": int(request.cookies.get('rows', 24)), ws.emit(event="data", data={"data": data.decode(), "room": room_id}, room=room_id, namespace='/ssh')
"room": str(uuid.uuid4()),
"chan": dict() def new_connection(self):
} self.connections[request.sid] = dict()
print(request.sid)
join_room(self.clients[request.sid]["room"]) def new_room(self):
# self.socketio.start_background_task(self.send_data, self) room_id = str(uuid.uuid4())
room = {
def on_data(self, message): "id": room_id,
self.clients[request.sid]["chan"][message["room"]].send(message["data"]) "proxy": None,
"client": None,
def on_host(self, message): "forwarder": None,
connection = str(uuid.uuid4()) "request": self.ssh_with_password(self, room_id),
self.emit('room', {'room': connection, 'secret': message['secret']}) "cols": 80,
self.ssh_with_password(connection) "rows": 24
}
def on_resize(self, message): self.connections[request.sid][room_id] = room
self.clients[request.sid]["cols"] = message.get('cols', 80) return room
self.clients[request.sid]["rows"] = message.get('rows', 24)
for room in self.clients[request.sid]["chan"]: @staticmethod
self.clients[request.sid]["chan"][room].resize_pty(width=self.clients[request.sid]["cols"], def get_win_size():
height=self.clients[request.sid]["rows"], width_pixels=1, cols_request = request.cookies.get('cols')
height_pixels=1) rows_request = request.cookies.get('rows')
if cols_request and cols_request.isdigit():
def on_room(self, sessionid): cols = int(cols_request)
if sessionid not in self.clients.keys(): else:
self.emit('error', "no such session", room=self.clients[request.sid]["room"]) cols = 80
else:
self.emit('room', self.clients[sessionid]["room"], room=self.clients[request.sid]["room"]) if rows_request and rows_request.isdigit():
rows = int(rows_request)
def on_join(self, room): else:
self.leave_room(room=self.clients[request.sid]["room"]) rows = 24
join_room(room) return cols, rows
def on_token(self, token): def on_connect(self):
self.on_host(token) print("On connect event trigger")
self.new_connection()
def on_disconnect(self): # self.connections[request.sid] = connection
print("disconnect") # self.rooms[connection['room']] = {
for connection in self.clients[request.sid]["chan"]: # "admin": request.sid,
self.clients[request.sid]["chan"][connection].close() # "member": [],
del self.clients[request.sid]["chan"] # "rw": []
pass # }
# join_room(connection['room'])
def on_leave(self):
leave_room(self.room) def on_host(self, message):
# 此处获取主机的信息
def on_logout(self, connection): print("On host event trigger")
print("logout", connection) asset_id = message.get('uuid', None)
if connection: user_id = message.get('userid', None)
self.clients[request.sid]["chan"][connection].close() secret = message.get('secret', None)
del self.clients[request.sid]["chan"][connection] room = self.new_room()
self.emit('room', {'room': room["id"], 'secret': secret})
print("Join room: {}".format(room["id"]))
join_room(room["id"])
if not asset_id or not user_id:
# self.on_connect()
return
global thread
if thread is None:
thread = self.socketio.start_background_task(
self.proxy, self, room["request"], room["id"]
)
def on_data(self, message):
"""
收到浏览器请求
:param message: {"data": "xxx", "room": "xxx"}
:return:
"""
room_id = message.get('room')
room = self.connections.get(request.sid, {}).get(room_id)
if not room:
return
room["request"].send(message['data'])
def on_token(self, message):
# 此处获取token含有的主机的信息
print("On token trigger")
token = message.get('token', None)
secret = message.get('secret', None)
room = self.new_room()
self.emit('room', {'room': room["id"], 'secret': secret})
if not token or not secret:
print("Token or secret is None")
self.emit('data', {'data': "\nOperation not permitted!",
'room': room["id"]})
self.emit('disconnect')
return None
info = self.app.service.get_token_asset(token)
print(info)
if not info:
print("Token info is None")
self.emit('data', {'data': "\nOperation not permitted!",
'room': room["id"]})
self.emit('disconnect')
return None
user_id = info.get('user', None)
self.current_user = self.app.service.get_user_profile(user_id)
room["request"].user = self.current_user
print(self.current_user)
self.on_host({
'secret': secret,
'uuid': info['asset'],
'userid': info['system_user'],
})
def on_resize(self, message):
cols, rows = message.get('cols', None), message.get('rows', None)
print("On resize event trigger: {}*{}".format(cols, rows))
rooms = self.connections.get(request.sid)
if not rooms:
return
room_tmp = list(rooms.values())[0]
if (room_tmp["cols"], room_tmp["rows"]) != (cols, rows):
for room in rooms.values():
room["request"].resize_pty(width=cols, height=rows)
# room["request"].change_size_event.set()
# room.update({"cols": cols, "rows": rows})
# def on_room(self, session_id):
# print("On room event trigger")
# if session_id not in self.connections.keys():
# self.emit(
# 'error', "no such session",
# room=self.connections[request.sid]["room"]
# )
# else:
# self.emit(
# 'room', self.connections[session_id]["room"],
# room=self.connections[request.sid]["room"]
# )
#
# def on_join(self, room):
# print("On join room event trigger")
# self.on_leave(self.connections[request.id]["room"])
# self.connections[request.sid]["room"] = room
# self.rooms[room]["member"].append(request.sid)
# join_room(room=room)
#
# def on_leave(self, room):
# print("On leave room event trigger")
# if self.rooms[room]["admin"] == request.sid:
# self.emit("data", "\nAdmin leave", room=room)
# del self.rooms[room]
# leave_room(room=room)
def on_disconnect(self):
print("On disconnect event trigger")
# self.on_leave(self.clients[request.sid]["room"])
for room in self.connections.get(request.sid, {}):
self.on_logout(room["id"])
del self.connections[request.sid]
def on_logout(self, room_id):
print("On logout event trigger")
room = self.connections.get(request.sid, {}).get(room_id)
if room:
room["proxy"].close()
del self.connections[request.sid][room_id]
del room
@app.route('/luna/<path:path>') @app.route('/luna/<path:path>')
def send_js(path): def send_js(path):
return send_from_directory('dist', path) return send_from_directory('dist', path)
@app.route('/api/perms/v1/user/nodes-assets/') @app.route('/api/perms/v1/user/nodes-assets/')
def asset_groups_assets(): def asset_groups_assets():
assets = [ assets = [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"name": "新节点 12", "name": "新节点 12",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_granted": [ "assets_granted": [
{ {
"id": "1600ed6d-e3b6-434c-a960-c5bb818806b6", "id": "1600ed6d-e3b6-434c-a960-c5bb818806b6",
"hostname": "windows1", "hostname": "windows1",
"ip": "10.1.10.178", "ip": "10.1.10.178",
"port": 3389, "port": 3389,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "8763b81a-bb5e-484a-abca-10514c7bb185", "id": "8763b81a-bb5e-484a-abca-10514c7bb185",
"name": "组织1-部门1-Administrator", "name": "组织1-部门1-Administrator",
"username": "Administrator", "username": "Administrator",
"priority": 10, "priority": 10,
"protocol": "rdp", "protocol": "rdp",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "Administrator", "system_users_join": "Administrator",
"os": "", "os": "",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Windows", "platform": "Windows",
"comment": "" "comment": ""
}, },
{ {
"id": "b952a481-a624-467e-b97f-9435155f0d53", "id": "b952a481-a624-467e-b97f-9435155f0d53",
"hostname": "testserver", "hostname": "testserver",
"ip": "10.1.10.192", "ip": "10.1.10.192",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, }
{
"id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test",
"username": "zbh",
"priority": 10,
"protocol": "ssh",
"comment": ""
}
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "CentOS", "os": "CentOS",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"key": "0", "key": "0",
"value": "Fit2cloud", "value": "Fit2cloud",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "ad594b10-9f64-4913-b7b1-135fe63561d1", "id": "9fcd7a09-a171-4cb7-b2f9-a025754f8635",
"hostname": "ali-windows", "hostname": "ali-windows",
"ip": "47.104.206.228", "ip": "47.104.206.228",
"port": 3389, "port": 3389,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "8763b81a-bb5e-484a-abca-10514c7bb185", "id": "8763b81a-bb5e-484a-abca-10514c7bb185",
"name": "组织1-部门1-Administrator", "name": "组织1-部门1-Administrator",
"username": "Administrator", "username": "Administrator",
"priority": 10, "priority": 10,
"protocol": "rdp", "protocol": "rdp",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "Administrator", "system_users_join": "Administrator",
"os": "", "os": "",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"key": "0", "key": "0",
"value": "Fit2cloud", "value": "Fit2cloud",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Windows", "platform": "Windows",
"comment": "" "comment": ""
}, },
{ {
"id": "b6f16269-d02a-4055-9cd8-460fa10b1540", "id": "b6f16269-d02a-4055-9cd8-460fa10b1540",
"hostname": "test-vm3", "hostname": "test-vm3",
"ip": "172.19.185.8", "ip": "172.19.185.8",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, }
{
"id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test",
"username": "zbh",
"priority": 10,
"protocol": "ssh",
"comment": ""
}
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "", "os": "",
"domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8", "domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "27e50edc-52d9-41ef-8c9e-1bff9d1628b2", "id": "27e50edc-52d9-41ef-8c9e-1bff9d1628b2",
"hostname": "test-vm2", "hostname": "test-vm2",
"ip": "172.19.185.7", "ip": "172.19.185.7",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, },
{
"id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test",
"username": "zbh",
"priority": 10,
"protocol": "ssh",
"comment": ""
}
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "", "os": "",
"domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8", "domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "9ef36bb3-1bed-455f-be09-3770d3f4bf97", "id": "9ef36bb3-1bed-455f-be09-3770d3f4bf97",
"hostname": "test-vm1", "hostname": "test-vm1",
"ip": "172.19.185.6", "ip": "172.19.185.6",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, },
{ {
"id": "17f384f4-683d-4944-a38d-db73608b92a9", "id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test", "name": "zbh-test",
"username": "zbh", "username": "zbh",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "", "os": "",
"domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8", "domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
} }
], ],
"assets_amount": 6 "assets_amount": 6
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"name": "网域测试", "name": "网域测试",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_granted": [ "assets_granted": [
{ {
"id": "1600ed6d-e3b6-434c-a960-c5bb818806b6", "id": "1600ed6d-e3b6-434c-a960-c5bb818806b6",
"hostname": "windows1", "hostname": "windows1",
"ip": "10.1.10.178", "ip": "10.1.10.178",
"port": 3389, "port": 3389,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "8763b81a-bb5e-484a-abca-10514c7bb185", "id": "8763b81a-bb5e-484a-abca-10514c7bb185",
"name": "组织1-部门1-Administrator", "name": "组织1-部门1-Administrator",
"username": "Administrator", "username": "Administrator",
"priority": 10, "priority": 10,
"protocol": "rdp", "protocol": "rdp",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "Administrator", "system_users_join": "Administrator",
"os": "", "os": "",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Windows", "platform": "Windows",
"comment": "" "comment": ""
}, },
{ {
"id": "b952a481-a624-467e-b97f-9435155f0d53", "id": "b952a481-a624-467e-b97f-9435155f0d53",
"hostname": "testserver", "hostname": "testserver",
"ip": "10.1.10.192", "ip": "10.1.10.192",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, }
{
"id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test",
"username": "zbh",
"priority": 10,
"protocol": "ssh",
"comment": ""
}
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "CentOS", "os": "CentOS",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"key": "0", "key": "0",
"value": "Fit2cloud", "value": "Fit2cloud",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "b6f16269-d02a-4055-9cd8-460fa10b1540", "id": "b6f16269-d02a-4055-9cd8-460fa10b1540",
"hostname": "test-vm3", "hostname": "test-vm3",
"ip": "172.19.185.8", "ip": "172.19.185.8",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, },
{ {
"id": "17f384f4-683d-4944-a38d-db73608b92a9", "id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test", "name": "zbh-test",
"username": "zbh", "username": "zbh",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "", "os": "",
"domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8", "domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "27e50edc-52d9-41ef-8c9e-1bff9d1628b2", "id": "27e50edc-52d9-41ef-8c9e-1bff9d1628b2",
"hostname": "test-vm2", "hostname": "test-vm2",
"ip": "172.19.185.7", "ip": "172.19.185.7",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, },
{ {
"id": "17f384f4-683d-4944-a38d-db73608b92a9", "id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test", "name": "zbh-test",
"username": "zbh", "username": "zbh",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "", "os": "",
"domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8", "domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "9ef36bb3-1bed-455f-be09-3770d3f4bf97", "id": "9ef36bb3-1bed-455f-be09-3770d3f4bf97",
"hostname": "test-vm1", "hostname": "test-vm1",
"ip": "172.19.185.6", "ip": "172.19.185.6",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, },
{ {
"id": "17f384f4-683d-4944-a38d-db73608b92a9", "id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test", "name": "zbh-test",
"username": "zbh", "username": "zbh",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "", "os": "",
"domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8", "domain": "8789580f-b5ca-4478-b6d3-d0dafc4c48e8",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
} }
], ],
"assets_amount": 5 "assets_amount": 5
}, },
{ {
"id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"key": "0", "key": "0",
"name": "Fit2cloud", "name": "Fit2cloud",
"value": "Fit2cloud", "value": "Fit2cloud",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_granted": [ "assets_granted": [
{ {
"id": "b952a481-a624-467e-b97f-9435155f0d53", "id": "b952a481-a624-467e-b97f-9435155f0d53",
"hostname": "testserver", "hostname": "testserver",
"ip": "10.1.10.192", "ip": "10.1.10.192",
"port": 22, "port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "7e326f71-aee5-4688-8cc1-717919470a09", "id": "7e326f71-aee5-4688-8cc1-717919470a09",
"name": "root", "name": "root",
"username": "root", "username": "root",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
}, },
{ {
"id": "17f384f4-683d-4944-a38d-db73608b92a9", "id": "17f384f4-683d-4944-a38d-db73608b92a9",
"name": "zbh-test", "name": "zbh-test",
"username": "zbh", "username": "zbh",
"priority": 10, "priority": 10,
"protocol": "ssh", "protocol": "ssh",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "root, zbh", "system_users_join": "root, zbh",
"os": "CentOS", "os": "CentOS",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "id": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"key": "0:11", "key": "0:11",
"value": "网域测试", "value": "网域测试",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"key": "0", "key": "0",
"value": "Fit2cloud", "value": "Fit2cloud",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Linux", "platform": "Linux",
"comment": "" "comment": ""
}, },
{ {
"id": "ad594b10-9f64-4913-b7b1-135fe63561d1", "id": "ad594b10-9f64-4913-b7b1-135fe63561d1",
"hostname": "ali-windows", "hostname": "ali-windows",
"ip": "47.104.206.228", "ip": "47.104.206.228",
"port": 3389, "port": 3389,
"system_users_granted": [ "system_users_granted": [
{ {
"id": "8763b81a-bb5e-484a-abca-10514c7bb185", "id": "8763b81a-bb5e-484a-abca-10514c7bb185",
"name": "组织1-部门1-Administrator", "name": "组织1-部门1-Administrator",
"username": "Administrator", "username": "Administrator",
"priority": 10, "priority": 10,
"protocol": "rdp", "protocol": "rdp",
"comment": "" "comment": ""
} }
], ],
"is_active": True, "is_active": True,
"system_users_join": "Administrator", "system_users_join": "Administrator",
"os": "", "os": "",
"domain": "", "domain": "",
"nodes": [ "nodes": [
{ {
"id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6", "id": "67f92d6c-0f91-4d20-a0e4-ac83b7dd02b6",
"key": "0:11:77", "key": "0:11:77",
"value": "新节点 12", "value": "新节点 12",
"parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d", "parent": "9c83d432-a353-4a4e-9fd9-be27a5851c2d",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
}, },
{ {
"id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "id": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"key": "0", "key": "0",
"value": "Fit2cloud", "value": "Fit2cloud",
"parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c", "parent": "be9d9c3a-68d0-40ec-887c-5815d68e2f2c",
"assets_amount": 6, "assets_amount": 6,
"is_asset": False "is_asset": False
} }
], ],
"platform": "Windows", "platform": "Windows",
"comment": "" "comment": ""
} }
], ],
"assets_amount": 2 "assets_amount": 2
} }
] ]
return jsonify(assets) return jsonify(assets)
@app.route('/api/users/v1/profile/') @app.route('/api/users/v1/profile/')
def user_profile(): def user_profile():
assets = { assets = {
"id": "4fc67feb-9efa-4e7b-94b0-b73356a87b2e", "id": "4fc67feb-9efa-4e7b-94b0-b73356a87b2e",
"username": "admin", "username": "admin",
"name": "Administrator", "name": "Administrator",
"email": "admin@mycomany.com", "email": "admin@mycomany.com",
"is_active": True, "is_active": True,
"is_superuser": True, "is_superuser": True,
"role": "Administrator", "role": "Administrator",
"groups": [ "groups": [
"Default" "Default"
], ],
"wechat": "", "wechat": "",
"phone": 13888888888, "phone": 13888888888,
"comment": "", "comment": "",
"date_expired": "2087-12-16 07:41:35" "date_expired": "2087-12-16 07:41:35"
} }
return jsonify(assets) return jsonify(assets)
@app.route('/api/terminal/v1/sessions/test/replay/') @app.route('/api/terminal/v1/sessions/test/replay/')
def replay(): def replay():
return redirect("http://jps.ilz.me/media/2017-12-24/ec87a486-0344-4f12-b27a-620321944f7f.gz") return redirect("http://jps.ilz.me/media/2017-12-24/ec87a486-0344-4f12-b27a-620321944f7f.gz")
@app.route('/api/terminal/v2/sessions/<pk>/replay/')
def get_session_replay(pk):
# return jsonify({
# 'type': 'guacamole',
# 'src': 'http://localhost/media/2018-05-07/5c205f0a-b5ae-405a-9444-c0d59262ec29.gz',
# 'status': 'DONE'
# })
return jsonify({
'type': 'json',
'src': 'http://localhost/media/2018-05-02/dbd5302d-7861-4810-b555-5fe71e26ccc3.gz',
'status': 'DONE',
})
@app.route('/luna/i18n/<i18n>') @app.route('/luna/i18n/<i18n>')
def i18n(i18n): def i18n(i18n):
return send_file('./i18n/' + i18n) return send_file('./i18n/' + i18n)
def read_file(filename, charset='utf-8'): def read_file(filename, charset='utf-8'):
with open(filename, 'r') as f: with open(filename, 'rb') as f:
return f.read().decode(charset) return f.read().decode(charset)
if __name__ == '__main__': if __name__ == '__main__':
socketio = SocketIO(app) async_mode = 'threading'
socketio.on_namespace(SSHws('/ssh')) socketio = SocketIO(app, async_mode=async_mode)
socketio.run(app) socketio.on_namespace(SSHws('/ssh'))
socketio.run(app, debug=True)
...@@ -6,6 +6,6 @@ npm run-script build ...@@ -6,6 +6,6 @@ npm run-script build
rm -fr luna* rm -fr luna*
mv dist luna mv dist luna
cp -R i18n/ luna/ cp -R i18n luna/
tar czf luna.tar.gz luna tar czf luna.tar.gz luna
md5 luna.tar.gz md5 luna.tar.gz
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