temp:改进配置管理界面。

pull/32/head
Apex Liu 2017-05-11 02:45:20 +08:00
parent a98df86d19
commit 750df290c8
10 changed files with 1402 additions and 1677 deletions

File diff suppressed because it is too large Load Diff

119
dist/server/setup.sh vendored
View File

@ -1,101 +1,18 @@
#!/bin/bash
if [ `id -u` -ne 0 ];then
echo ""
echo -e "\e[31mPlease run setup as root.\033[0m"
echo ""
exit 1
fi
PATH_ROOT=$(cd "$(dirname "$0")"; pwd)
PATH_TARGET=/usr/local/eom
"${PATH_ROOT}/data/bin/tp_web" --py "${PATH_ROOT}/script/main.py"
exit 0
if [ ! -d "${PATH_TARGET}" ]; then
mkdir -p "${PATH_TARGET}"
fi
if [ -f /etc/init.d/eom_ts ]; then
service eom_ts stop
rm -rf /etc/init.d/eom_ts
fi
rm -rf /etc/rc2.d/S50eom_ts
rm -rf /etc/rc3.d/S50eom_ts
rm -rf /etc/rc4.d/S50eom_ts
rm -rf /etc/rc5.d/S50eom_ts
if [ -f /etc/init.d/teleport ]; then
service teleport stop
rm -rf /etc/init.d/teleport
fi
rm -rf /etc/rc2.d/S50teleport
rm -rf /etc/rc3.d/S50teleport
rm -rf /etc/rc4.d/S50teleport
rm -rf /etc/rc5.d/S50teleport
sleep 1
echo ""
echo "Installing EOM Teleport Server..."
cd "${PATH_TARGET}"
tar -zxvf "${PATH_ROOT}/data/teleport.tar.gz" >/dev/null
cd "${PATH_ROOT}"
if [ ! -d "${PATH_TARGET}/teleport/etc" ]; then
cp -r "${PATH_TARGET}/teleport/tmp/etc" "${PATH_TARGET}/teleport/etc"
else
if [ ! -f "${PATH_TARGET}/teleport/etc/web.ini" ]; then
cp "${PATH_TARGET}/teleport/tmp/etc/web.ini" "${PATH_TARGET}/teleport/etc/web.ini"
fi
if [ ! -f "${PATH_TARGET}/teleport/etc/core.ini" ]; then
cp "${PATH_TARGET}/teleport/tmp/etc/core.ini" "${PATH_TARGET}/teleport/etc/core.ini"
fi
fi
if [ ! -d "${PATH_TARGET}/teleport/data" ]; then
cp -r "${PATH_TARGET}/teleport/tmp/data" "${PATH_TARGET}/teleport/data"
fi
chmod +x "${PATH_TARGET}/teleport/bin/tp_core"
chmod +x "${PATH_TARGET}/teleport/bin/tp_web"
echo "Generate daemon startup script..."
cp "${PATH_ROOT}/data/start.sh" "${PATH_TARGET}/teleport/."
chmod +x "${PATH_TARGET}/teleport/start.sh"
cp "${PATH_ROOT}/data/stop.sh" "${PATH_TARGET}/teleport/."
chmod +x "${PATH_TARGET}/teleport/stop.sh"
cp "${PATH_ROOT}/data/status.sh" "${PATH_TARGET}/teleport/."
chmod +x "${PATH_TARGET}/teleport/status.sh"
cp "${PATH_ROOT}/data/daemon" /etc/init.d/teleport
chmod +x /etc/init.d/teleport
ln -s /etc/init.d/teleport /etc/rc2.d/S50teleport
ln -s /etc/init.d/teleport /etc/rc3.d/S50teleport
ln -s /etc/init.d/teleport /etc/rc4.d/S50teleport
ln -s /etc/init.d/teleport /etc/rc5.d/S50teleport
# Upgrade database...
"${PATH_TARGET}/teleport/bin/tp_web" --py "${PATH_TARGET}/teleport/www/teleport/app/eom_upgrade.py"
echo ""
echo "Start teleport server..."
echo ""
service teleport start
echo ""
sleep 1
echo "Check teleport server status..."
echo ""
service teleport status
echo ""
echo ""
echo -e "\e[32mInstallation done.\033[0m"
echo ""
#!/bin/bash
if [ `id -u` -ne 0 ];then
echo ""
echo -e "\e[31mPlease run setup as root.\033[0m"
echo ""
exit 1
fi
PATH_ROOT=$(cd "$(dirname "$0")"; pwd)
PATH_TARGET=/usr/local/eom
"${PATH_ROOT}/data/bin/tp_web" --py "${PATH_ROOT}/script/main.py"
echo ""
echo -e "\e[32mInstallation done.\033[0m"
echo ""

View File

@ -1,133 +1,137 @@
# -*- coding: utf-8 -*-
import configparser
import os
from eom_common.eomcore.logger import *
__all__ = ['app_cfg']
class AttrDict(dict):
"""
可以像属性一样访问字典的 Keyvar.key 等同于 var['key']
"""
def __getattr__(self, name):
try:
return self[name]
except KeyError:
return None
def __setattr__(self, name, val):
self[name] = val
class ConfigFile(AttrDict):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self['core'] = AttrDict()
self['core']['ssh'] = AttrDict()
self['core']['ssh']['enable'] = False
self['core']['ssh']['port'] = 52189
self['core']['rdp'] = AttrDict()
self['core']['rdp']['enable'] = False
self['core']['rdp']['port'] = 52089
self['core']['telnet'] = AttrDict()
self['core']['telnet']['enable'] = False
self['core']['telnet']['port'] = 52389
def load(self, cfg_file):
if not os.path.exists(cfg_file):
log.e('configuration file does not exists: [{}]\n'.format(cfg_file))
return False
try:
_cfg = configparser.ConfigParser()
_cfg.read(cfg_file)
except:
log.e('can not load configuration file: [{}]\n'.format(cfg_file))
return False
if 'common' not in _cfg:
log.e('invalid configuration file: [{}]\n'.format(cfg_file))
return False
_comm = _cfg['common']
self['server_port'] = _comm.getint('port', 7190)
self['log_file'] = _comm.get('log-file', None)
if self['log_file'] is not None:
self['log_path'] = os.path.dirname(self['log_file'])
self['log_level'] = LOG_INFO
_level = _comm.getint('log-level', 2)
if _level == 0:
self['log_level'] = LOG_DEBUG
elif _level == 1:
self['log_level'] = LOG_VERBOSE
elif _level == 2:
self['log_level'] = LOG_INFO
elif _level == 3:
self['log_level'] = LOG_WARN
elif _level == 4:
self['log_level'] = LOG_ERROR
else:
self['log_level'] = LOG_VERBOSE
# log.set_attribute(min_level=self['log_level'])
self['debug'] = False
_debug = _comm.getint('debug', 0)
if _debug == 1:
self['log_level'] = LOG_DEBUG
self['debug'] = True
self['core_server_rpc'] = _comm.get('core-server-rpc', 'http://127.0.0.1:52080/rpc')
return True
def update_core(self, conf_data):
try:
self['core'] = AttrDict()
self['core']['ssh'] = AttrDict()
self['core']['ssh']['enable'] = False
self['core']['ssh']['port'] = 52189
if 'ssh' in conf_data:
self['core']['ssh']['enable'] = conf_data['ssh']['enable']
self['core']['ssh']['port'] = conf_data['ssh']['port']
self['core']['rdp'] = AttrDict()
self['core']['rdp']['enable'] = False
self['core']['rdp']['port'] = 52089
if 'rdp' in conf_data:
self['core']['rdp']['enable'] = conf_data['rdp']['enable']
self['core']['rdp']['port'] = conf_data['rdp']['port']
self['core']['telnet'] = AttrDict()
self['core']['telnet']['enable'] = False
self['core']['telnet']['port'] = 52389
if 'telnet' in conf_data:
self['core']['telnet']['enable'] = conf_data['telnet']['enable']
self['core']['telnet']['port'] = conf_data['telnet']['port']
self['core']['replay_path'] = conf_data['replay-path']
except IndexError:
log.e('invalid core config.\n')
return False
return True
_g_cfg = ConfigFile()
del ConfigFile
def app_cfg():
global _g_cfg
return _g_cfg
if __name__ == '__main__':
cfg = ConfigFile()
# -*- coding: utf-8 -*-
import configparser
import os
from eom_common.eomcore.logger import *
__all__ = ['app_cfg']
class AttrDict(dict):
"""
可以像属性一样访问字典的 Keyvar.key 等同于 var['key']
"""
def __getattr__(self, name):
try:
return self[name]
except KeyError:
return None
def __setattr__(self, name, val):
self[name] = val
class ConfigFile(AttrDict):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self['core'] = AttrDict()
self['core']['ssh'] = AttrDict()
self['core']['ssh']['enable'] = False
self['core']['ssh']['port'] = 0 # 52189
self['core']['rdp'] = AttrDict()
self['core']['rdp']['enable'] = False
self['core']['rdp']['port'] = 0 # 52089
self['core']['telnet'] = AttrDict()
self['core']['telnet']['enable'] = False
self['core']['telnet']['port'] = 0 # 52389
def load(self, cfg_file):
if not os.path.exists(cfg_file):
log.e('configuration file does not exists: [{}]\n'.format(cfg_file))
return False
try:
_cfg = configparser.ConfigParser()
_cfg.read(cfg_file)
except:
log.e('can not load configuration file: [{}]\n'.format(cfg_file))
return False
if 'common' not in _cfg:
log.e('invalid configuration file: [{}]\n'.format(cfg_file))
return False
_comm = _cfg['common']
self['server_port'] = _comm.getint('port', 7190)
self['log_file'] = _comm.get('log-file', None)
if self['log_file'] is not None:
self['log_path'] = os.path.dirname(self['log_file'])
self['log_level'] = LOG_INFO
_level = _comm.getint('log-level', 2)
if _level == 0:
self['log_level'] = LOG_DEBUG
elif _level == 1:
self['log_level'] = LOG_VERBOSE
elif _level == 2:
self['log_level'] = LOG_INFO
elif _level == 3:
self['log_level'] = LOG_WARN
elif _level == 4:
self['log_level'] = LOG_ERROR
else:
self['log_level'] = LOG_VERBOSE
# log.set_attribute(min_level=self['log_level'])
self['debug'] = False
_debug = _comm.getint('debug', 0)
if _debug == 1:
self['log_level'] = LOG_DEBUG
self['debug'] = True
self['core_server_rpc'] = _comm.get('core-server-rpc', 'http://127.0.0.1:52080/rpc')
return True
def update_core(self, conf_data):
try:
self['core'] = AttrDict()
self['core']['ssh'] = AttrDict()
self['core']['ssh']['enable'] = False
self['core']['ssh']['port'] = 52189
if 'ssh' in conf_data:
self['core']['ssh']['enable'] = conf_data['ssh']['enable']
self['core']['ssh']['port'] = conf_data['ssh']['port']
self['core']['rdp'] = AttrDict()
self['core']['rdp']['enable'] = False
self['core']['rdp']['port'] = 52089
if 'rdp' in conf_data:
self['core']['rdp']['enable'] = conf_data['rdp']['enable']
self['core']['rdp']['port'] = conf_data['rdp']['port']
self['core']['telnet'] = AttrDict()
self['core']['telnet']['enable'] = False
self['core']['telnet']['port'] = 52389
if 'telnet' in conf_data:
self['core']['telnet']['enable'] = conf_data['telnet']['enable']
self['core']['telnet']['port'] = conf_data['telnet']['port']
self['core']['replay_path'] = conf_data['replay-path']
# TODO: ...
if 'web_server_rpc' in conf_data:
self['core']['web_server_rpc'] = conf_data['web_server_rpc']
except IndexError:
log.e('invalid core config.\n')
return False
return True
_g_cfg = ConfigFile()
del ConfigFile
def app_cfg():
global _g_cfg
return _g_cfg
if __name__ == '__main__':
cfg = ConfigFile()

View File

@ -1,118 +1,120 @@
# -*- coding: utf-8 -*-
import os
from . import rpc
from . import auth
from . import host
from . import cert
from . import user
from . import pwd
from . import set
from . import group
from . import index
from . import record
from . import maintenance
import tornado.web
from eom_app.app.configs import app_cfg
cfg = app_cfg()
__all__ = ['controllers']
controllers = [
(r'/', index.IndexHandler),
(r'/maintenance/install', maintenance.InstallHandler),
(r'/maintenance/upgrade', maintenance.UpgradeHandler),
(r'/maintenance/rpc', maintenance.RpcHandler),
(r'/maintenance/', maintenance.IndexHandler),
(r'/maintenance', maintenance.IndexHandler),
(r'/rpc', rpc.RpcHandler),
(r'/auth/login', auth.LoginHandler),
(r'/auth/verify-user', auth.VerifyUser),
(r'/auth/logout', auth.LogoutHandler),
(r'/auth/get-captcha', auth.GetCaptchaHandler),
(r'/auth/verify-captcha', auth.VerifyCaptchaHandler),
(r'/auth/modify-pwd', auth.ModifyPwd),
(r'/group/list', group.GetListHandler),
(r'/group/', group.IndexHandler),
(r'/group', group.IndexHandler),
(r'/cert/list', cert.GetListHandler),
(r'/cert/', cert.IndexHandler),
(r'/cert', cert.IndexHandler),
(r'/pwd', pwd.IndexHandler),
(r'/user', user.IndexHandler),
(r'/user/list', user.GetListHandler),
#(r"/log/replay/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(cfg.data_path, 'replay')}),
(r"/log/replay/(.*)", record.ReplayStaticFileHandler, {"path": os.path.join(cfg.data_path, 'replay')}),
(r'/log/list', record.LogList),
(r'/log/record/(.*)/(.*)', record.RecordHandler),
(r'/log/command-log/(.*)/(.*)', record.ComandLogHandler),
(r'/log/get-record-header', record.RecordGetHeader),
(r'/log/get-record-file-info', record.RecordGetInfo),
(r'/log/delete-log', record.DeleteLog),
# (r'/log/play-rdp/(.*)/(.*)', record.PlayRdpHandler),
(r'/log/', record.LogHandler),
(r'/log', record.LogHandler),
(r'/exit', auth.LogoutHandler),
(r'/user/delete-user', user.DeleteUser),
(r'/user/modify-user', user.ModifyUser),
(r'/user/add-user', user.AddUser),
(r'/user/lock-user', user.LockUser),
(r'/user/reset-user', user.ResetUser),
(r'/user/host-list', user.HostList),
(r'/user/alloc-host', user.AllocHost),
(r'/user/alloc-host-user', user.AllocHostUser),
(r'/user/delete-host', user.DeleteHost),
(r'/user/delete-host-user', user.DeleteHostUser),
(r'/user/auth/(.*)', user.AuthHandler),
(r'/host/list', host.GetListHandler),
(r'/host/add-host', host.AddHost),
(r'/host/lock-host', host.LockHost),
(r'/host/delete-host', host.DeleteHost),
(r'/host/export-host', host.ExportHostHandler),
(r'/host/get-cert-list', host.GetCertList),
(r'/host/add-cert', host.AddCert),
(r'/host/delete-cert', host.DeleteCert),
(r'/host/update-cert', host.UpdateCert),
(r'/host/get-group-list', host.GetGrouplist),
(r'/host/add-group', host.AddGroup),
(r'/host/update-group', host.UpdateGroup),
(r'/host/delete-group', host.DeleteGroup),
(r'/host/add-host-to-group', host.AddHostToGroup),
# (r'/host/get-host-extend-info', host.GetHostExtendInfo),
# (r'/host/update-host-extend-info', host.UpdateHostExtendInfo),
(r'/host/update', host.UpdateHandler),
(r'/host/upload-import', host.UploadAndImportHandler),
(r'/host/', host.IndexHandler),
(r'/host', host.IndexHandler),
(r'/host/get-session-id', host.GetSessionId),
(r'/host/admin-get-session-id', host.AdminGetSessionId),
(r'/host/admin-fast-get-session-id', host.AdminFastGetSessionId),
(r'/host/sys-user/list', host.SysUserList),
(r'/host/sys-user/add', host.SysUserAdd),
(r'/host/sys-user/update', host.SysUserUpdate),
(r'/host/sys-user/delete', host.SysUserDelete),
(r'/set/update-config', set.UpdateConfig),
# (r'/set/os-operator', set.OsOperator),
(r'/set/', set.IndexHandler),
(r'/set', set.IndexHandler),
(r'/uidesign', index.UIDesignHandler),
(r'/uidesign/without-sidebar', index.UIDesignWithoutSidebarHandler),
(r'/uidesign/table', index.UIDesignTableHandler)
]
# -*- coding: utf-8 -*-
import os
from . import rpc
from . import auth
from . import host
from . import cert
from . import user
from . import pwd
from . import set
from . import group
from . import index
from . import record
from . import maintenance
import tornado.web
from eom_app.app.configs import app_cfg
cfg = app_cfg()
__all__ = ['controllers']
controllers = [
(r'/', index.IndexHandler),
(r'/maintenance/install', maintenance.InstallHandler),
(r'/maintenance/upgrade', maintenance.UpgradeHandler),
(r'/maintenance/rpc', maintenance.RpcHandler),
(r'/maintenance/', maintenance.IndexHandler),
(r'/maintenance', maintenance.IndexHandler),
(r'/rpc', rpc.RpcHandler),
(r'/auth/login', auth.LoginHandler),
(r'/auth/verify-user', auth.VerifyUser),
(r'/auth/logout', auth.LogoutHandler),
(r'/auth/get-captcha', auth.GetCaptchaHandler),
(r'/auth/verify-captcha', auth.VerifyCaptchaHandler),
(r'/auth/modify-pwd', auth.ModifyPwd),
(r'/group/list', group.GetListHandler),
(r'/group/', group.IndexHandler),
(r'/group', group.IndexHandler),
(r'/cert/list', cert.GetListHandler),
(r'/cert/', cert.IndexHandler),
(r'/cert', cert.IndexHandler),
(r'/pwd', pwd.IndexHandler),
(r'/user', user.IndexHandler),
(r'/user/list', user.GetListHandler),
#(r"/log/replay/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(cfg.data_path, 'replay')}),
(r"/log/replay/(.*)", record.ReplayStaticFileHandler, {"path": os.path.join(cfg.data_path, 'replay')}),
(r'/log/list', record.LogList),
(r'/log/record/(.*)/(.*)', record.RecordHandler),
(r'/log/command-log/(.*)/(.*)', record.ComandLogHandler),
(r'/log/get-record-header', record.RecordGetHeader),
(r'/log/get-record-file-info', record.RecordGetInfo),
(r'/log/delete-log', record.DeleteLog),
# (r'/log/play-rdp/(.*)/(.*)', record.PlayRdpHandler),
(r'/log/', record.LogHandler),
(r'/log', record.LogHandler),
(r'/exit', auth.LogoutHandler),
(r'/user/delete-user', user.DeleteUser),
(r'/user/modify-user', user.ModifyUser),
(r'/user/add-user', user.AddUser),
(r'/user/lock-user', user.LockUser),
(r'/user/reset-user', user.ResetUser),
(r'/user/host-list', user.HostList),
(r'/user/alloc-host', user.AllocHost),
(r'/user/alloc-host-user', user.AllocHostUser),
(r'/user/delete-host', user.DeleteHost),
(r'/user/delete-host-user', user.DeleteHostUser),
(r'/user/auth/(.*)', user.AuthHandler),
(r'/host/list', host.GetListHandler),
(r'/host/add-host', host.AddHost),
(r'/host/lock-host', host.LockHost),
(r'/host/delete-host', host.DeleteHost),
(r'/host/export-host', host.ExportHostHandler),
(r'/host/get-cert-list', host.GetCertList),
(r'/host/add-cert', host.AddCert),
(r'/host/delete-cert', host.DeleteCert),
(r'/host/update-cert', host.UpdateCert),
(r'/host/get-group-list', host.GetGrouplist),
(r'/host/add-group', host.AddGroup),
(r'/host/update-group', host.UpdateGroup),
(r'/host/delete-group', host.DeleteGroup),
(r'/host/add-host-to-group', host.AddHostToGroup),
# (r'/host/get-host-extend-info', host.GetHostExtendInfo),
# (r'/host/update-host-extend-info', host.UpdateHostExtendInfo),
(r'/host/update', host.UpdateHandler),
(r'/host/upload-import', host.UploadAndImportHandler),
(r'/host/', host.IndexHandler),
(r'/host', host.IndexHandler),
(r'/host/get-session-id', host.GetSessionId),
(r'/host/admin-get-session-id', host.AdminGetSessionId),
(r'/host/admin-fast-get-session-id', host.AdminFastGetSessionId),
(r'/host/sys-user/list', host.SysUserList),
(r'/host/sys-user/add', host.SysUserAdd),
(r'/host/sys-user/update', host.SysUserUpdate),
(r'/host/sys-user/delete', host.SysUserDelete),
# (r'/set/update-config', set.UpdateConfig),
# (r'/set/os-operator', set.OsOperator),
(r'/set/info', set.InfoHandler),
(r'/set/db', set.DatabaseHandler),
# (r'/set/', set.IndexHandler),
# (r'/set', set.IndexHandler),
(r'/uidesign', index.UIDesignHandler),
(r'/uidesign/without-sidebar', index.UIDesignWithoutSidebarHandler),
(r'/uidesign/table', index.UIDesignTableHandler)
]

View File

@ -3,161 +3,128 @@
import json
import os
import platform
import re
import socket
import subprocess
# import re
# import socket
# import subprocess
import threading
import time
from eom_app.app.configs import app_cfg
from eom_app.module import host
# from eom_app.module import host
from eom_app.module import set
from .base import TPBaseAdminAuthHandler, TPBaseAdminAuthJsonHandler
cfg = app_cfg()
def get_local_ip():
iplist = []
PLATFORM = platform.system().lower()
try:
if PLATFORM == "windows":
ip_info = socket.gethostbyname_ex(socket.gethostname())
return ip_info[2]
else:
ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
output = ipconfig_process.stdout.read()
ip_pattern = re.compile('(inet addr:%s)' % ipstr)
pattern = re.compile(ipstr)
for ipaddr in re.finditer(ip_pattern, str(output)):
ip = pattern.search(ipaddr.group())
if ip.group() != "127.0.0.1":
iplist.append(ip.group())
return iplist
except Exception:
return iplist
# def get_local_ip():
# iplist = []
# PLATFORM = platform.system().lower()
# try:
# if PLATFORM == "windows":
# ip_info = socket.gethostbyname_ex(socket.gethostname())
# return ip_info[2]
# else:
# ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
# ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
# output = ipconfig_process.stdout.read()
# ip_pattern = re.compile('(inet addr:%s)' % ipstr)
# pattern = re.compile(ipstr)
#
# for ipaddr in re.finditer(ip_pattern, str(output)):
# ip = pattern.search(ipaddr.group())
# if ip.group() != "127.0.0.1":
# iplist.append(ip.group())
# return iplist
# except Exception:
# return iplist
class IndexHandler(TPBaseAdminAuthHandler):
class InfoHandler(TPBaseAdminAuthHandler):
def get(self):
# static_path = cfg.static_path
# var_js = os.path.join(static_path, 'js', 'var.js')
# f = None
param = {
'core': cfg.core,
'web': {
'core_server_rpc': cfg['core_server_rpc']
}
}
self.render('set/info.mako', page_param=json.dumps(param))
# try:
# config_list = host.get_config_list()
# ts_server = dict()
# ts_server['ip'] = config_list['ts_server_ip']
# ts_server['ssh_port'] = config_list['ts_server_ssh_port']
# ts_server['rdp_port'] = config_list['ts_server_rdp_port']
# ts_server['telnet_port'] = config_list['ts_server_telnet_port']
# # f = open(var_js, 'w')
# # f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(ts_server['ip']))
# except Exception:
# return self.write(-1)
# finally:
# # if f is not None:
# # f.close()
# pass
# config_list = set.get_config_list()
# if 'ts_server_ip' in config_list:
# ip_list = get_local_ip()
# if not isinstance(ip_list, list):
# ip_list = [ip_list, ]
#
# # ip_list.append(config_list['ts_server_ip'])
# if config_list['ts_server_ip'] not in ip_list:
# ip_list.append(config_list['ts_server_ip'])
#
# # if isinstance(temp, list):
# # ip_list.extend(temp)
#
# config_list['_ip_list'] = ip_list
# cfg_list = dict()
# cfg_list['ts_server_ssh_port'] = cfg.core.ssh.port
# cfg_list['ts_server_ssh_enabled'] = 1 if cfg.core.ssh.enabled else 0
# cfg_list['ts_server_rdp_port'] = cfg.core.rdp.port
# cfg_list['ts_server_rdp_enabled'] = 1 if cfg.core.rdp.enabled else 0
# cfg_list['ts_server_telnet_port'] = cfg.core.telnet.port
# cfg_list['ts_server_telnet_enabled'] = 1 if cfg.core.telnet.enabled else 0
# self.render('set/index.mako', config_list=cfg_list)
class DatabaseHandler(TPBaseAdminAuthHandler):
def get(self):
param = {'core_server': cfg.core}
self.render('set/index.mako', page_param=json.dumps(param))
self.render('set/database.mako', page_param=json.dumps(param))
def _restart_func():
time.sleep(1)
PLATFORM = platform.system().lower()
if PLATFORM == 'windows':
sf = os.path.join(cfg.app_path, 'tools', 'restart.bat')
os.system('cmd.exe /c "{}"'.format(sf))
else:
# sf = os.path.join(cfg.app_path, 'tools', 'restart.sh')
# os.system(sf)
os.system('service eom_ts restart')
# os.system(sf)
# def _restart_func():
# time.sleep(1)
#
# PLATFORM = platform.system().lower()
#
# if PLATFORM == 'windows':
# sf = os.path.join(cfg.app_path, 'tools', 'restart.bat')
# os.system('cmd.exe /c "{}"'.format(sf))
# else:
# # sf = os.path.join(cfg.app_path, 'tools', 'restart.sh')
# # os.system(sf)
# os.system('service eom_ts restart')
#
# # os.system(sf)
def restart_service():
# todo: 使用eom_ts.exe运行脚本的方式新进程来重启服务避免正在运行的本服务未退出的影响
# def restart_service():
# # todo: 使用eom_ts.exe运行脚本的方式新进程来重启服务避免正在运行的本服务未退出的影响
#
# t = threading.Thread(target=_restart_func)
# t.start()
#
t = threading.Thread(target=_restart_func)
t.start()
class UpdateConfig(TPBaseAdminAuthJsonHandler):
def post(self):
args = self.get_argument('args', None)
if args is not None:
args = json.loads(args)
else:
self.write_json(-1)
return
change_list = args['cfg']
reboot = args['reboot']
try:
ret = set.set_config(change_list)
if ret:
for i in range(len(change_list)):
if change_list[i]['name'] == 'ts_server_ip':
# static_path = cfg.static_path
var_js = os.path.join(cfg.static_path, 'js', 'var.js')
f = None
try:
f = open(var_js, 'w')
# config_list = host.get_config_list()
# ts_server = dict()
# ts_server['ip'] = config_list['ts_server_ip']
# ts_server['ssh_port'] = config_list['ts_server_ssh_port']
# ts_server['rdp_port'] = config_list['ts_server_rdp_port']
# f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(ts_server['ip']))
f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(change_list[i]['value']))
break
except Exception:
return self.write(-1)
finally:
if f is not None:
f.close()
if reboot:
restart_service()
self.write_json(0)
else:
self.write_json(-1)
except:
self.write_json(-2)
# class UpdateConfig(TPBaseAdminAuthJsonHandler):
# def post(self):
# args = self.get_argument('args', None)
# if args is not None:
# args = json.loads(args)
# else:
# self.write_json(-1)
# return
#
# change_list = args['cfg']
# reboot = args['reboot']
#
# try:
# ret = set.set_config(change_list)
# if ret:
# for i in range(len(change_list)):
# if change_list[i]['name'] == 'ts_server_ip':
# # static_path = cfg.static_path
# var_js = os.path.join(cfg.static_path, 'js', 'var.js')
# f = None
# try:
# f = open(var_js, 'w')
# # config_list = host.get_config_list()
# # ts_server = dict()
# # ts_server['ip'] = config_list['ts_server_ip']
# # ts_server['ssh_port'] = config_list['ts_server_ssh_port']
# # ts_server['rdp_port'] = config_list['ts_server_rdp_port']
# # f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(ts_server['ip']))
# f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(change_list[i]['value']))
# break
# except Exception:
# return self.write(-1)
# finally:
# if f is not None:
# f.close()
#
# if reboot:
# restart_service()
#
# self.write_json(0)
# else:
# self.write_json(-1)
# except:
# self.write_json(-2)
# class OsOperator(TPBaseUserAuthJsonHandler):
# def post(self):

View File

@ -0,0 +1,43 @@
"use strict";
ywl.on_init = function (cb_stack, cb_args) {
console.log(ywl.page_options);
var dom = {
info: $('#info-kv')
};
var html = [];
html.push(ywl._make_info('核心服务通讯', ywl.page_options.web.core_server_rpc));
html.push(ywl._make_info('WEB服务通讯', ywl.page_options.core.web_server_rpc));
html.push(ywl._make_protocol_info('RDP 端口', ywl.page_options.core.rdp));
html.push(ywl._make_protocol_info('SSH 端口', ywl.page_options.core.ssh));
html.push(ywl._make_protocol_info('TELNET 端口', ywl.page_options.core.telnet));
html.push(ywl._make_info('录像文件路径', ywl.page_options.core.replay_path));
dom.info.append(html.join(''));
// $("#current-rdp-port").val(core.rdp.port);
// $("#current-ssh-port").val(core.ssh.port);
// $("#current-telnet-port").val(core.telnet.port);
cb_stack.exec();
};
ywl._make_protocol_info = function (name, p) {
if(_.isUndefined(p))
return ywl._make_info(name, '未能检测到');
// <tr><td class="key">RDP 端口:</td><td class="value">52089</td></tr>
var key = name;
if (!p.enable) {
key += '(未启用)';
}
return ywl._make_info(key, p.port);
};
ywl._make_info = function (key, value) {
if(_.isUndefined(value))
value = '未能检测到';
return '<tr><td class="key">' + key + '</td><td class="value">' + value + '</td></tr>';
};

View File

@ -1,219 +0,0 @@
/**
* Created by mi on 2016/7/4.
*/
var REFRESH_TIMEOUT = 10;
var g_assist = null;
ywl.on_init = function (cb_stack, cb_args) {
ywl.refresh_timeout = REFRESH_TIMEOUT;
g_assist = ywl.create_assist();
var core_server = ywl.page_options.core_server;
console.log(ywl.page_options, core_server);
$("#current-rdp-port").val(core_server.rdp.port);
$("#current-ssh-port").val(core_server.ssh.port);
$("#current-telnet-port").val(core_server.telnet.port);
// $('#select-ip li a').click(function () {
// $("#current-ts-server-ip").val($(this).text());
// });
$("#btn-check").click(function () {
var ts_server_ip = $("#current-ts-server-ip").val();
var ts_server_rdp_port = $("#current-rdp-port").val();
var ts_server_ssh_port = $("#current-ssh-port").val();
var ts_server_telnet_port = $("#current-telnet-port").val();
var list = [];
var item_1 = {name: 'ts_server_ip', value: ts_server_ip};
list.push(item_1);
// var item_2 = {name: 'ts_server_rpc_ip', value: ts_server_rpc_ip};
// list.push(item_2);
//
// var item_3 = {name: 'ts_server_rpc_port', value: ts_server_rpc_port};
// list.push(item_3);
var item_4 = {name: 'ts_server_rdp_port', value: ts_server_rdp_port};
list.push(item_4);
var item_5 = {name: 'ts_server_ssh_port', value: ts_server_ssh_port};
list.push(item_5);
var rdp_port = parseInt(ts_server_rdp_port);
var ssh_port = parseInt(ts_server_ssh_port);
var args_ = encodeURIComponent(JSON.stringify({server_ip: ts_server_ip, rdp_port: rdp_port, ssh_port: ssh_port}));
$.ajax({
type: 'GET',
timeout: 60000,
url: 'http://127.0.0.1:50022/ts_check/' + args_,
jsonp: 'callback',
dataType: 'json',
success: function (ret) {
if (ret.code === 0) {
ywl.notify_success("测试通过,可以正常使用 teleport 堡垒机!");
} else if (ret.code === 7) {
ywl.notify_error("PING测试通过TCP端口测试未通过请检查防火墙设置");
} else {
console.log('ret', ret);
ywl.notify_error("测试失败,请检查 teleport 堡垒机地址是否正确,并检查防火墙设置!");
}
},
error: function () {
g_assist.alert_assist_not_found();
}
});
});
$("#btn-save-config").click(function () {
var ts_server_ip = $("#current-ts-server-ip").val();
// var ts_server_rpc_ip = $("#current-rpc-ip").val();
// var ts_server_rpc_port = $("#current-rpc-port").val();
var ts_server_rdp_port = $("#current-rdp-port").val();
var ts_server_ssh_port = $("#current-ssh-port").val();
var ts_server_telnet_port = $("#current-telnet-port").val();
var reboot = false;
var new_config = [];
var old_config = ywl.page_options.config_list;
if (ts_server_ip != old_config['ts_server_ip']) {
new_config.push({name: 'ts_server_ip', value: ts_server_ip});
}
if (ts_server_rdp_port != old_config['ts_server_rdp_port']) {
new_config.push({name: 'ts_server_rdp_port', value: ts_server_rdp_port});
reboot = true;
}
if (ts_server_ssh_port != old_config['ts_server_ssh_port']) {
new_config.push({name: 'ts_server_ssh_port', value: ts_server_ssh_port});
reboot = true;
}
if (ts_server_telnet_port != old_config['ts_server_telnet_port']) {
new_config.push({name: 'ts_server_telnet_port', value: ts_server_telnet_port});
reboot = true;
}
if (new_config.length == 0) {
// nothing changed.
ywl.notify_error('配置未改变,无需保存!');
return;
}
if (!reboot) {
ywl.ajax_post_json('/set/update-config', {cfg: new_config, reboot: false},
function (ret) {
if (ret.code == 0) {
ywl.notify_success('配置保存成功!');
ywl.page_options.config_list['ts_server_ip'] = ts_server_ip;
}
else {
ywl.notify_error('配置保存失败!');
}
},
function () {
ywl.notify_error('配置保存失败!');
}
);
return;
}
// if need reboot, let user confirm.
var _fn_sure = function (cb_stack, cb_args) {
ywl.ajax_post_json('/set/update-config', {cfg: new_config, reboot: true},
function (ret) {
if (ret.code == 0) {
$('#dlg_restart_service').modal({backdrop: 'static', keyboard: false});
ywl.refresh_timeout = REFRESH_TIMEOUT;
setInterval(ywl.refresh, 1000);
// 5 秒之后刷新页面,导致重定向到登录页面
// setTimeout(function () {
// location.reload(true);
// }, 5000);
}
else {
ywl.notify_error('配置信息保存失败!');
}
},
function () {
ywl.notify_error('配置信息保存失败!');
}
);
};
var cb_stack = CALLBACK_STACK.create();
ywl.dlg_confirm(cb_stack, {
msg: '<p><strong>为使设置生效需要重启teleport服务服务重启过程中WEB后台和跳板连接均会中断</strong></p><p>您确定要保存设置并重启teleport服务吗</p>',
fn_yes: _fn_sure
});
});
// $("#btn-os-reboot").click(function () {
// var _fn_sure = function (cb_stack, cb_args) {
// ywl.ajax_post_json('/set/os-operator', {OP: 1},
// function (ret) {
// if (ret.code == 0) {
// ywl.notify_success('正在重新启动系统');
// }
// else {
// ywl.notify_error('重启系统失败');
// }
// },
// function () {
// ywl.notify_error('重启系统失败');
// }
// );
// };
// var cb_stack = CALLBACK_STACK.create();
//
// ywl.dlg_confirm(cb_stack, {
// msg: '<p>您确定要重启系统吗?!!</p>',
// fn_yes: _fn_sure
// });
//
// });
// $("#btn-os-shut").click(function () {
// var _fn_sure = function (cb_stack, cb_args) {
// ywl.ajax_post_json('/set/os-operator', {OP: 2},
// function (ret) {
// if (ret.code == 0) {
// ywl.notify_success('正在关闭系统');
// }
// else {
// ywl.notify_error('关闭系统失败');
// }
// },
// function () {
// ywl.notify_error('关闭系统失败');
// }
// );
// };
// var cb_stack = CALLBACK_STACK.create();
//
// ywl.dlg_confirm(cb_stack, {
// msg: '<p>您确定要关闭系统吗?!!</p>',
// fn_yes: _fn_sure
// });
// });
cb_stack.exec();
};
ywl.refresh = function () {
ywl.refresh_timeout -= 1;
if (0 == ywl.refresh_timeout) {
location.reload(true);
} else {
$('#reboot_time').html(ywl.refresh_timeout);
}
};

View File

@ -1,162 +1,176 @@
<%!
import eom_ver
%>
<%
_sidebar = [
{
'require_type': 1,
'id': 'host',
'link': '/host',
'name': '主机管理',
'icon': 'fa-server',
},
{
'require_type': 100,
'id': 'user',
'link': '/user',
'name': '用户管理',
'icon': 'fa-user',
},
## {
## 'require_type': 1,
## 'id': 'auth',
## 'link': '/auth',
## 'name': '授权管理',
## 'icon': 'fa-user-secret',
## },
{
'require_type': 100,
'id': 'cert',
'link': '/cert',
'name': '密钥管理',
'icon': 'fa-key',
},
{
'require_type': 100,
'id': 'group',
'link': '/group',
'name': '分组管理',
'icon': 'fa-object-group',
},
{
'require_type': 100,
'id': 'set',
'link': '/set',
'name': '配置管理',
'icon': 'fa-cogs',
},
{
'require_type': 100,
'id': 'log',
'link': '/log',
'name': '日志查询',
'icon': 'fa-database',
},
## {
## 'require_type': 1,
## 'id': 'pwd',
## 'link': '/pwd',
## 'name': '密码修改',
## 'icon': 'fa-pencil-square-o',
## },
## {
## 'require_type': 1,
## 'id': 'exit',
## 'link': '/exit',
## 'name': '安全退出',
## 'icon': 'fa-sign-out',
## },
{
'separator': true,
'require_type': 1,
'id': 'assist-config',
'link': 'http://127.0.0.1:50022/config',
'target': '_blank',
'name': '助手配置',
'icon': 'fa-cog',
},
]
%>
<!-- begin sidebar scrollbar -->
<div class="slimScrollDiv">
<!-- begin sidebar user -->
<div class="nav">
<ul class="nav nav-profile">
<li>
<div class="image">
<img src="/static/img/avatar/001.png" width="36"/>
## <i class="fa fa-male"></i>
</div>
<div class="dropdown">
<a class="title" href="#" id="user-profile" data-target="#" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">
<span class="name">${ current_user['nick_name'] }</span>
<span class="role">
%if current_user['type'] == 100:
平台管理员
%else:
普通用户
%endif
<i class="fa fa-caret-right"></i></span>
</a>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="/pwd" id="btn-logout">修改密码</a></li>
<li><a href="/auth/logout" id="btn-logout">安全退出</a></li>
</ul>
</div>
</li>
</ul>
</div>
<!-- end sidebar user -->
<!-- begin sidebar nav -->
<div class="nav">
<ul class="nav nav-menu">
%for menu in _sidebar:
%if menu['require_type'] <= current_user['type']:
%if 'separator' in menu:
<hr style="border:none;border-bottom:1px solid #636363;margin-bottom:0;margin-top:5px;"/>
%endif
%if 'sub' in menu and len(menu['sub']) > 0:
<li id="sidebar_menu_${menu['id']}"><a href="javascript:;"
onclick="ywl._sidebar_toggle_submenu('${menu['id']}');"><i
class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span>
<i class="menu-caret"></i></a>
<ul class="sub-menu" id="sidebar_submenu_${menu['id']}" style="display:none;">
%for sub in menu['sub']:
%if menu['require_type'] <= current_user['type']:
<li id="sidebar_menu_${menu['id']}_${sub['id']}"><a href="${sub['link']}"><span>${sub['name']}</span></a></li>
%endif
%endfor
</ul>
</li>
%else:
<li id="sidebar_menu_${menu['id']}"><a href="${menu['link']}"
%if 'target' in menu:
target="${menu['target']}"
%endif
><i class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span></a></li>
%endif
%endif
%endfor
</ul>
</div>
<!-- end sidebar nav -->
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;"/>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:100px;text-align: right">服务端:</span><span class="mono">v${eom_ver.TS_VER}</span></div>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:100px;text-align: right">助手:</span><span class="mono" id="tp-assist-version" req-version=${eom_ver.TP_ASSIST_REQUIRE}>v${eom_ver.TP_ASSIST_LAST_VER}</span></div>
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;margin-top:5px;"/>
</div>
<%!
import eom_ver
%>
<%
_sidebar = [
{
'require_type': 1,
'id': 'host',
'link': '/host',
'name': '主机管理',
'icon': 'fa-server',
},
{
'require_type': 100,
'id': 'user',
'link': '/user',
'name': '用户管理',
'icon': 'fa-user',
},
## {
## 'require_type': 1,
## 'id': 'auth',
## 'link': '/auth',
## 'name': '授权管理',
## 'icon': 'fa-user-secret',
## },
{
'require_type': 100,
'id': 'cert',
'link': '/cert',
'name': '密钥管理',
'icon': 'fa-key',
},
{
'require_type': 100,
'id': 'group',
'link': '/group',
'name': '分组管理',
'icon': 'fa-object-group',
},
{
'require_type': 100,
'id': 'set',
'link': '',
'name': '配置管理',
'icon': 'fa-cogs',
'sub': [
{
'require_type': 100,
'id': 'info',
'link': '/set/info',
'name': '配置信息'
},
{
'require_type': 100,
'id': 'database',
'link': '/set/db',
'name': '数据库管理'
}
]
},
{
'require_type': 100,
'id': 'log',
'link': '/log',
'name': '日志查询',
'icon': 'fa-database',
},
## {
## 'require_type': 1,
## 'id': 'pwd',
## 'link': '/pwd',
## 'name': '密码修改',
## 'icon': 'fa-pencil-square-o',
## },
## {
## 'require_type': 1,
## 'id': 'exit',
## 'link': '/exit',
## 'name': '安全退出',
## 'icon': 'fa-sign-out',
## },
{
'separator': true,
'require_type': 1,
'id': 'assist-config',
'link': 'http://127.0.0.1:50022/config',
'target': '_blank',
'name': '助手配置',
'icon': 'fa-cog',
},
]
%>
<!-- begin sidebar scrollbar -->
<div class="slimScrollDiv">
<!-- begin sidebar user -->
<div class="nav">
<ul class="nav nav-profile">
<li>
<div class="image">
<img src="/static/img/avatar/001.png" width="36"/>
## <i class="fa fa-male"></i>
</div>
<div class="dropdown">
<a class="title" href="#" id="user-profile" data-target="#" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">
<span class="name">${ current_user['nick_name'] }</span>
<span class="role">
%if current_user['type'] == 100:
平台管理员
%else:
普通用户
%endif
<i class="fa fa-caret-right"></i></span>
</a>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="/pwd" id="btn-logout">修改密码</a></li>
<li><a href="/auth/logout" id="btn-logout">安全退出</a></li>
</ul>
</div>
</li>
</ul>
</div>
<!-- end sidebar user -->
<!-- begin sidebar nav -->
<div class="nav">
<ul class="nav nav-menu">
%for menu in _sidebar:
%if menu['require_type'] <= current_user['type']:
%if 'separator' in menu:
<hr style="border:none;border-bottom:1px solid #636363;margin-bottom:0;margin-top:5px;"/>
%endif
%if 'sub' in menu and len(menu['sub']) > 0:
<li id="sidebar_menu_${menu['id']}"><a href="javascript:;"
onclick="ywl._sidebar_toggle_submenu('${menu['id']}');"><i
class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span>
<i class="menu-caret"></i></a>
<ul class="sub-menu" id="sidebar_submenu_${menu['id']}" style="display:none;">
%for sub in menu['sub']:
%if menu['require_type'] <= current_user['type']:
<li id="sidebar_menu_${menu['id']}_${sub['id']}"><a href="${sub['link']}"><span>${sub['name']}</span></a></li>
%endif
%endfor
</ul>
</li>
%else:
<li id="sidebar_menu_${menu['id']}"><a href="${menu['link']}"
%if 'target' in menu:
target="${menu['target']}"
%endif
><i class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span></a></li>
%endif
%endif
%endfor
</ul>
</div>
<!-- end sidebar nav -->
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;"/>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:100px;text-align: right">服务端:</span><span class="mono">v${eom_ver.TS_VER}</span></div>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:100px;text-align: right">助手:</span><span class="mono" id="tp-assist-version" req-version=${eom_ver.TP_ASSIST_REQUIRE}>v${eom_ver.TP_ASSIST_LAST_VER}</span></div>
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;margin-top:5px;"/>
</div>
<!-- end sidebar scrollbar -->

View File

@ -1,161 +0,0 @@
<%!
page_title_ = '服务器配置'
page_menu_ = ['set']
page_id_ = 'set'
%>
<%inherit file="../page_base.mako"/>
<%block name="extend_js">
<script type="text/javascript" src="${ static_url('js/ui/teleport.js') }"></script>
<script type="text/javascript" src="${ static_url('js/ui/set.js') }"></script>
</%block>
<%block name="breadcrumb">
<ol class="breadcrumb">
<li><i class="fa fa-cogs fa-fw"></i> ${self.attr.page_title_}</li>
</ol>
</%block>
## Begin Main Body.
<div class="page-content">
## <script language="javascript">
## function changeF() {
## document.getElementById('txt').value = document.getElementById('sel').options[document.getElementById('sel').selectedIndex].value;
## }
## </script>
<!-- begin box -->
<div class="box">
<div style="width:640px">
<div class="form-horizontal">
<h4><strong>Teleport服务器配置信息</strong></h4>
## <p>设置teleport服务器的访问地址和服务的端口。</p>
## <p style="font-weight:bold;color:#ff3333;">请正确设置服务器地址IP或域名否则将无法进行跳板连接</p>
## <p>设置teleport服务器的服务端口。</p>
## <div class="form-group form-group-sm" style="display:none;">
## <label for="current-ts-server-ip" class="col-sm-2 control-label"><strong>堡垒机地址:</strong></label>
##
## <div class="col-sm-6">
## <div class="input-group">
## <input type="text" class="form-control" id="current-ts-server-ip">
## <div class="input-group-btn">
## <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 选择IP <span class="caret"></span></button>
## <ul id='select-ip' class="dropdown-menu dropdown-menu-right">
## </ul>
## </div>
## </div>
## </div>
## <label for="current-ts-server-ip" class="col-sm-4 control-label" style="text-align:left;color:red;"><strong>首次安装必须修改</strong></label>
## </div>
<div class="form-group form-group-sm">
<label for="current-rdp-port" class="col-sm-2 control-label"><strong>RDP 端口:</strong></label>
<div class="col-sm-6">
<input id="current-rdp-port" type="text" class="form-control" placeholder="默认值 52089" disabled/>
</div>
## <div class="col-sm-4 control-label" style="text-align: left;">可以用默认值</div>
</div>
<div class="form-group form-group-sm">
<label for="current-ssh-port" class="col-sm-2 control-label"><strong>SSH 端口:</strong></label>
<div class="col-sm-6">
<input id="current-ssh-port" type="text" class="form-control" placeholder="默认值 52189" disabled/>
</div>
## <div class="col-sm-4 control-label" style="text-align: left;">可以用默认值</div>
</div>
<div class="form-group form-group-sm">
<label for="current-telnet-port" class="col-sm-2 control-label"><strong>TELENT 端口:</strong></label>
<div class="col-sm-6">
<input id="current-telnet-port" type="text" class="form-control" placeholder="默认值 52389" disabled/>
</div>
## <div class="col-sm-4 control-label" style="text-align: left;">可以用默认值</div>
</div>
<div class="form-group form-group-sm">
<div class="col-sm-2"></div>
<div class="col-sm-6">
注意:要修改端口号,请直接修改配置文件。修改后需要重启服务方能生效!
</div>
</div>
## <hr/>
##
## <p><strong>Teleport核心服务设置</strong></p>
## <p>用于与teleport核心服务进行通讯需要将WEB后台与核心服务部署在同一台主机上。</p>
## <p>如果您需要将核心服务部署在单独的主机上建议您为RPC访问端口设置防火墙规则仅允许WEB后台主机访问此RPC端口以增强安全性。</p>
##
## <div class="form-group form-group-sm">
## <label for="current-rpc-ip" class="col-sm-2 control-label"><strong>IP地址</strong></label>
## <div class="col-sm-6">
## <input id="current-rpc-ip" type="text" class="form-control" readonly="readonly" placeholder="默认值 127.0.0.1"/>
## </div>
## </div>
##
## <div class="form-group form-group-sm">
## <label for="current-rpc-port" class="col-sm-2 control-label"><strong>端口:</strong></label>
## <div class="col-sm-6">
## <input id="current-rpc-port" type="text" class="form-control" readonly="readonly" placeholder="默认值 52080"/>
## </div>
## </div>
<hr/>
## <div class="form-group form-group-sm">
## <div class="col-sm-2"></div>
## <div class="col-sm-2">
## <a href="javascript:" id="btn-check" class="btn btn-success"><i class="fa fa-cog fa-fw"></i> 一键测试</a>
## </div>
## <div class="col-sm-4" style="text-align: right;">
## <a href="javascript:" id="btn-save-config" class="btn btn-primary"><i class="fa fa-check fa-fw"></i> 保存配置</a>
## </div>
## </div>
</div>
</div>
<!-- end of box -->
</div>
</div>
<%block name="extend_content">
## <div class="modal fade" id="dlg_restart_service" tabindex="-1" role="dialog">
## <div class="modal-dialog" role="document">
## <div class="modal-content">
## <div class="modal-header">
## <h3 class="modal-title" style="text-align: center;">服务重启中...</h3>
## </div>
## <div class="modal-body">
## <p style="text-align: center; font-size:36px;"><i class="fa fa-cog fa-spin"></i></p>
## <p style="text-align: center;">配置已保存正在重启teleport服务请稍候...</p>
## <p style="text-align: center;"><span id="reboot_time"></span></p>
## </div>
##
## <div class="modal-footer">
## </div>
## </div>
## </div>
## </div>
</%block>
<%block name="embed_js">
<script type="text/javascript">
## ywl.add_page_options({
## config_list: ${config_list}
## });
ywl.add_page_options(${ page_param });
</script>
</%block>

View File

@ -0,0 +1,158 @@
<%!
page_title_ = '配置管理'
page_menu_ = ['set', 'info']
page_id_ = 'set'
%>
<%inherit file="../page_base.mako"/>
<%block name="extend_js">
## <script type="text/javascript" src="${ static_url('js/ui/teleport.js') }"></script>
<script type="text/javascript" src="${ static_url('js/ui/config/info.js') }"></script>
</%block>
<%block name="breadcrumb">
<ol class="breadcrumb">
<li><i class="fa fa-cogs fa-fw"></i> ${self.attr.page_title_}</li>
<li>配置信息</li>
</ol>
</%block>
<%block name="extend_css">
<style type="text/css">
.table .key {
text-align: right;
}
.table .value {
text-align: left;
font-weight:bold;
}
</style>
</%block>
## Begin Main Body.
<div class="page-content">
<!-- begin box -->
<div class="box">
<div style="width:640px">
<div class="form-horizontal">
<h4><strong>服务器配置信息</strong></h4>
<table id="info-kv" class="table">
## <tr><td class="key">RDP 端口:</td><td class="value">52089</td></tr>
## <tr><td class="key">SSH 端口:</td><td class="value">52189</td></tr>
## <tr><td class="key">TELNET 端口:</td><td class="value">52389</td></tr>
## <tr><td class="key">录像文件路径:</td><td class="value">C:\teleport-server\data\replay</td></tr>
</table>
##
## <div class="form-group form-group-sm">
## <label for="current-rdp-port" class="col-sm-2 control-label"><strong>RDP 端口:</strong></label>
## <div class="col-sm-6">
## <input id="current-rdp-port" type="text" class="form-control" placeholder="默认值 52089" disabled/>
## </div>
## ## <div class="col-sm-4 control-label" style="text-align: left;">可以用默认值</div>
## </div>
##
## <div class="form-group form-group-sm">
## <label for="current-ssh-port" class="col-sm-2 control-label"><strong>SSH 端口:</strong></label>
## <div class="col-sm-6">
## <input id="current-ssh-port" type="text" class="form-control" placeholder="默认值 52189" disabled/>
## </div>
## ## <div class="col-sm-4 control-label" style="text-align: left;">可以用默认值</div>
## </div>
##
##
## <div class="form-group form-group-sm">
## <label for="current-telnet-port" class="col-sm-2 control-label"><strong>TELENT 端口:</strong></label>
## <div class="col-sm-6">
## <input id="current-telnet-port" type="text" class="form-control" placeholder="默认值 52389" disabled/>
## </div>
## ## <div class="col-sm-4 control-label" style="text-align: left;">可以用默认值</div>
## </div>
##
##
## <div class="form-group form-group-sm">
## <div class="col-sm-2"></div>
## <div class="col-sm-6">
## 注意:要修改端口号,请直接修改配置文件。修改后需要重启服务方能生效!
## </div>
## </div>
## <hr/>
##
## <p><strong>Teleport核心服务设置</strong></p>
## <p>用于与teleport核心服务进行通讯需要将WEB后台与核心服务部署在同一台主机上。</p>
## <p>如果您需要将核心服务部署在单独的主机上建议您为RPC访问端口设置防火墙规则仅允许WEB后台主机访问此RPC端口以增强安全性。</p>
##
## <div class="form-group form-group-sm">
## <label for="current-rpc-ip" class="col-sm-2 control-label"><strong>IP地址</strong></label>
## <div class="col-sm-6">
## <input id="current-rpc-ip" type="text" class="form-control" readonly="readonly" placeholder="默认值 127.0.0.1"/>
## </div>
## </div>
##
## <div class="form-group form-group-sm">
## <label for="current-rpc-port" class="col-sm-2 control-label"><strong>端口:</strong></label>
## <div class="col-sm-6">
## <input id="current-rpc-port" type="text" class="form-control" readonly="readonly" placeholder="默认值 52080"/>
## </div>
## </div>
## <hr/>
## <div class="form-group form-group-sm">
## <div class="col-sm-2"></div>
## <div class="col-sm-2">
## <a href="javascript:" id="btn-check" class="btn btn-success"><i class="fa fa-cog fa-fw"></i> 一键测试</a>
## </div>
## <div class="col-sm-4" style="text-align: right;">
## <a href="javascript:" id="btn-save-config" class="btn btn-primary"><i class="fa fa-check fa-fw"></i> 保存配置</a>
## </div>
## </div>
</div>
</div>
<!-- end of box -->
</div>
</div>
<%block name="extend_content">
## <div class="modal fade" id="dlg_restart_service" tabindex="-1" role="dialog">
## <div class="modal-dialog" role="document">
## <div class="modal-content">
## <div class="modal-header">
## <h3 class="modal-title" style="text-align: center;">服务重启中...</h3>
## </div>
## <div class="modal-body">
## <p style="text-align: center; font-size:36px;"><i class="fa fa-cog fa-spin"></i></p>
## <p style="text-align: center;">配置已保存正在重启teleport服务请稍候...</p>
## <p style="text-align: center;"><span id="reboot_time"></span></p>
## </div>
##
## <div class="modal-footer">
## </div>
## </div>
## </div>
## </div>
</%block>
<%block name="embed_js">
<script type="text/javascript">
## ywl.add_page_options({
## config_list: ${config_list}
## });
ywl.add_page_options(${ page_param });
</script>
</%block>