mirror of https://github.com/tp4a/teleport
temp:改进配置管理界面。
parent
a98df86d19
commit
750df290c8
File diff suppressed because it is too large
Load Diff
|
@ -1,101 +1,18 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ `id -u` -ne 0 ];then
|
if [ `id -u` -ne 0 ];then
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "\e[31mPlease run setup as root.\033[0m"
|
echo -e "\e[31mPlease run setup as root.\033[0m"
|
||||||
echo ""
|
echo ""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
PATH_ROOT=$(cd "$(dirname "$0")"; pwd)
|
PATH_ROOT=$(cd "$(dirname "$0")"; pwd)
|
||||||
PATH_TARGET=/usr/local/eom
|
PATH_TARGET=/usr/local/eom
|
||||||
|
|
||||||
"${PATH_ROOT}/data/bin/tp_web" --py "${PATH_ROOT}/script/main.py"
|
"${PATH_ROOT}/data/bin/tp_web" --py "${PATH_ROOT}/script/main.py"
|
||||||
exit 0
|
|
||||||
|
echo ""
|
||||||
|
echo -e "\e[32mInstallation done.\033[0m"
|
||||||
if [ ! -d "${PATH_TARGET}" ]; then
|
echo ""
|
||||||
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 ""
|
|
||||||
|
|
|
@ -1,133 +1,137 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import configparser
|
import configparser
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from eom_common.eomcore.logger import *
|
from eom_common.eomcore.logger import *
|
||||||
|
|
||||||
__all__ = ['app_cfg']
|
__all__ = ['app_cfg']
|
||||||
|
|
||||||
|
|
||||||
class AttrDict(dict):
|
class AttrDict(dict):
|
||||||
"""
|
"""
|
||||||
可以像属性一样访问字典的 Key,var.key 等同于 var['key']
|
可以像属性一样访问字典的 Key,var.key 等同于 var['key']
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
try:
|
try:
|
||||||
return self[name]
|
return self[name]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def __setattr__(self, name, val):
|
def __setattr__(self, name, val):
|
||||||
self[name] = val
|
self[name] = val
|
||||||
|
|
||||||
|
|
||||||
class ConfigFile(AttrDict):
|
class ConfigFile(AttrDict):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self['core'] = AttrDict()
|
self['core'] = AttrDict()
|
||||||
self['core']['ssh'] = AttrDict()
|
self['core']['ssh'] = AttrDict()
|
||||||
self['core']['ssh']['enable'] = False
|
self['core']['ssh']['enable'] = False
|
||||||
self['core']['ssh']['port'] = 52189
|
self['core']['ssh']['port'] = 0 # 52189
|
||||||
self['core']['rdp'] = AttrDict()
|
self['core']['rdp'] = AttrDict()
|
||||||
self['core']['rdp']['enable'] = False
|
self['core']['rdp']['enable'] = False
|
||||||
self['core']['rdp']['port'] = 52089
|
self['core']['rdp']['port'] = 0 # 52089
|
||||||
self['core']['telnet'] = AttrDict()
|
self['core']['telnet'] = AttrDict()
|
||||||
self['core']['telnet']['enable'] = False
|
self['core']['telnet']['enable'] = False
|
||||||
self['core']['telnet']['port'] = 52389
|
self['core']['telnet']['port'] = 0 # 52389
|
||||||
|
|
||||||
def load(self, cfg_file):
|
def load(self, cfg_file):
|
||||||
if not os.path.exists(cfg_file):
|
if not os.path.exists(cfg_file):
|
||||||
log.e('configuration file does not exists: [{}]\n'.format(cfg_file))
|
log.e('configuration file does not exists: [{}]\n'.format(cfg_file))
|
||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
_cfg = configparser.ConfigParser()
|
_cfg = configparser.ConfigParser()
|
||||||
_cfg.read(cfg_file)
|
_cfg.read(cfg_file)
|
||||||
except:
|
except:
|
||||||
log.e('can not load configuration file: [{}]\n'.format(cfg_file))
|
log.e('can not load configuration file: [{}]\n'.format(cfg_file))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if 'common' not in _cfg:
|
if 'common' not in _cfg:
|
||||||
log.e('invalid configuration file: [{}]\n'.format(cfg_file))
|
log.e('invalid configuration file: [{}]\n'.format(cfg_file))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
_comm = _cfg['common']
|
_comm = _cfg['common']
|
||||||
self['server_port'] = _comm.getint('port', 7190)
|
self['server_port'] = _comm.getint('port', 7190)
|
||||||
self['log_file'] = _comm.get('log-file', None)
|
self['log_file'] = _comm.get('log-file', None)
|
||||||
if self['log_file'] is not None:
|
if self['log_file'] is not None:
|
||||||
self['log_path'] = os.path.dirname(self['log_file'])
|
self['log_path'] = os.path.dirname(self['log_file'])
|
||||||
|
|
||||||
self['log_level'] = LOG_INFO
|
self['log_level'] = LOG_INFO
|
||||||
_level = _comm.getint('log-level', 2)
|
_level = _comm.getint('log-level', 2)
|
||||||
if _level == 0:
|
if _level == 0:
|
||||||
self['log_level'] = LOG_DEBUG
|
self['log_level'] = LOG_DEBUG
|
||||||
elif _level == 1:
|
elif _level == 1:
|
||||||
self['log_level'] = LOG_VERBOSE
|
self['log_level'] = LOG_VERBOSE
|
||||||
elif _level == 2:
|
elif _level == 2:
|
||||||
self['log_level'] = LOG_INFO
|
self['log_level'] = LOG_INFO
|
||||||
elif _level == 3:
|
elif _level == 3:
|
||||||
self['log_level'] = LOG_WARN
|
self['log_level'] = LOG_WARN
|
||||||
elif _level == 4:
|
elif _level == 4:
|
||||||
self['log_level'] = LOG_ERROR
|
self['log_level'] = LOG_ERROR
|
||||||
else:
|
else:
|
||||||
self['log_level'] = LOG_VERBOSE
|
self['log_level'] = LOG_VERBOSE
|
||||||
|
|
||||||
# log.set_attribute(min_level=self['log_level'])
|
# log.set_attribute(min_level=self['log_level'])
|
||||||
|
|
||||||
self['debug'] = False
|
self['debug'] = False
|
||||||
_debug = _comm.getint('debug', 0)
|
_debug = _comm.getint('debug', 0)
|
||||||
if _debug == 1:
|
if _debug == 1:
|
||||||
self['log_level'] = LOG_DEBUG
|
self['log_level'] = LOG_DEBUG
|
||||||
self['debug'] = True
|
self['debug'] = True
|
||||||
|
|
||||||
self['core_server_rpc'] = _comm.get('core-server-rpc', 'http://127.0.0.1:52080/rpc')
|
self['core_server_rpc'] = _comm.get('core-server-rpc', 'http://127.0.0.1:52080/rpc')
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def update_core(self, conf_data):
|
def update_core(self, conf_data):
|
||||||
try:
|
try:
|
||||||
self['core'] = AttrDict()
|
self['core'] = AttrDict()
|
||||||
|
|
||||||
self['core']['ssh'] = AttrDict()
|
self['core']['ssh'] = AttrDict()
|
||||||
self['core']['ssh']['enable'] = False
|
self['core']['ssh']['enable'] = False
|
||||||
self['core']['ssh']['port'] = 52189
|
self['core']['ssh']['port'] = 52189
|
||||||
if 'ssh' in conf_data:
|
if 'ssh' in conf_data:
|
||||||
self['core']['ssh']['enable'] = conf_data['ssh']['enable']
|
self['core']['ssh']['enable'] = conf_data['ssh']['enable']
|
||||||
self['core']['ssh']['port'] = conf_data['ssh']['port']
|
self['core']['ssh']['port'] = conf_data['ssh']['port']
|
||||||
|
|
||||||
self['core']['rdp'] = AttrDict()
|
self['core']['rdp'] = AttrDict()
|
||||||
self['core']['rdp']['enable'] = False
|
self['core']['rdp']['enable'] = False
|
||||||
self['core']['rdp']['port'] = 52089
|
self['core']['rdp']['port'] = 52089
|
||||||
if 'rdp' in conf_data:
|
if 'rdp' in conf_data:
|
||||||
self['core']['rdp']['enable'] = conf_data['rdp']['enable']
|
self['core']['rdp']['enable'] = conf_data['rdp']['enable']
|
||||||
self['core']['rdp']['port'] = conf_data['rdp']['port']
|
self['core']['rdp']['port'] = conf_data['rdp']['port']
|
||||||
|
|
||||||
self['core']['telnet'] = AttrDict()
|
self['core']['telnet'] = AttrDict()
|
||||||
self['core']['telnet']['enable'] = False
|
self['core']['telnet']['enable'] = False
|
||||||
self['core']['telnet']['port'] = 52389
|
self['core']['telnet']['port'] = 52389
|
||||||
if 'telnet' in conf_data:
|
if 'telnet' in conf_data:
|
||||||
self['core']['telnet']['enable'] = conf_data['telnet']['enable']
|
self['core']['telnet']['enable'] = conf_data['telnet']['enable']
|
||||||
self['core']['telnet']['port'] = conf_data['telnet']['port']
|
self['core']['telnet']['port'] = conf_data['telnet']['port']
|
||||||
|
|
||||||
self['core']['replay_path'] = conf_data['replay-path']
|
self['core']['replay_path'] = conf_data['replay-path']
|
||||||
|
|
||||||
except IndexError:
|
# TODO: ...
|
||||||
log.e('invalid core config.\n')
|
if 'web_server_rpc' in conf_data:
|
||||||
return False
|
self['core']['web_server_rpc'] = conf_data['web_server_rpc']
|
||||||
|
|
||||||
return True
|
except IndexError:
|
||||||
|
log.e('invalid core config.\n')
|
||||||
|
return False
|
||||||
_g_cfg = ConfigFile()
|
|
||||||
del ConfigFile
|
return True
|
||||||
|
|
||||||
|
|
||||||
def app_cfg():
|
_g_cfg = ConfigFile()
|
||||||
global _g_cfg
|
del ConfigFile
|
||||||
return _g_cfg
|
|
||||||
|
|
||||||
|
def app_cfg():
|
||||||
if __name__ == '__main__':
|
global _g_cfg
|
||||||
cfg = ConfigFile()
|
return _g_cfg
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
cfg = ConfigFile()
|
||||||
|
|
|
@ -1,118 +1,120 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from . import rpc
|
from . import rpc
|
||||||
from . import auth
|
from . import auth
|
||||||
from . import host
|
from . import host
|
||||||
from . import cert
|
from . import cert
|
||||||
from . import user
|
from . import user
|
||||||
from . import pwd
|
from . import pwd
|
||||||
from . import set
|
from . import set
|
||||||
from . import group
|
from . import group
|
||||||
from . import index
|
from . import index
|
||||||
from . import record
|
from . import record
|
||||||
from . import maintenance
|
from . import maintenance
|
||||||
import tornado.web
|
import tornado.web
|
||||||
|
|
||||||
from eom_app.app.configs import app_cfg
|
from eom_app.app.configs import app_cfg
|
||||||
|
|
||||||
cfg = app_cfg()
|
cfg = app_cfg()
|
||||||
|
|
||||||
__all__ = ['controllers']
|
__all__ = ['controllers']
|
||||||
|
|
||||||
controllers = [
|
controllers = [
|
||||||
(r'/', index.IndexHandler),
|
(r'/', index.IndexHandler),
|
||||||
|
|
||||||
(r'/maintenance/install', maintenance.InstallHandler),
|
(r'/maintenance/install', maintenance.InstallHandler),
|
||||||
(r'/maintenance/upgrade', maintenance.UpgradeHandler),
|
(r'/maintenance/upgrade', maintenance.UpgradeHandler),
|
||||||
(r'/maintenance/rpc', maintenance.RpcHandler),
|
(r'/maintenance/rpc', maintenance.RpcHandler),
|
||||||
(r'/maintenance/', maintenance.IndexHandler),
|
(r'/maintenance/', maintenance.IndexHandler),
|
||||||
(r'/maintenance', maintenance.IndexHandler),
|
(r'/maintenance', maintenance.IndexHandler),
|
||||||
|
|
||||||
(r'/rpc', rpc.RpcHandler),
|
(r'/rpc', rpc.RpcHandler),
|
||||||
|
|
||||||
(r'/auth/login', auth.LoginHandler),
|
(r'/auth/login', auth.LoginHandler),
|
||||||
(r'/auth/verify-user', auth.VerifyUser),
|
(r'/auth/verify-user', auth.VerifyUser),
|
||||||
(r'/auth/logout', auth.LogoutHandler),
|
(r'/auth/logout', auth.LogoutHandler),
|
||||||
(r'/auth/get-captcha', auth.GetCaptchaHandler),
|
(r'/auth/get-captcha', auth.GetCaptchaHandler),
|
||||||
(r'/auth/verify-captcha', auth.VerifyCaptchaHandler),
|
(r'/auth/verify-captcha', auth.VerifyCaptchaHandler),
|
||||||
(r'/auth/modify-pwd', auth.ModifyPwd),
|
(r'/auth/modify-pwd', auth.ModifyPwd),
|
||||||
|
|
||||||
(r'/group/list', group.GetListHandler),
|
(r'/group/list', group.GetListHandler),
|
||||||
(r'/group/', group.IndexHandler),
|
(r'/group/', group.IndexHandler),
|
||||||
(r'/group', group.IndexHandler),
|
(r'/group', group.IndexHandler),
|
||||||
|
|
||||||
(r'/cert/list', cert.GetListHandler),
|
(r'/cert/list', cert.GetListHandler),
|
||||||
(r'/cert/', cert.IndexHandler),
|
(r'/cert/', cert.IndexHandler),
|
||||||
(r'/cert', cert.IndexHandler),
|
(r'/cert', cert.IndexHandler),
|
||||||
|
|
||||||
(r'/pwd', pwd.IndexHandler),
|
(r'/pwd', pwd.IndexHandler),
|
||||||
(r'/user', user.IndexHandler),
|
(r'/user', user.IndexHandler),
|
||||||
(r'/user/list', user.GetListHandler),
|
(r'/user/list', user.GetListHandler),
|
||||||
|
|
||||||
#(r"/log/replay/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(cfg.data_path, 'replay')}),
|
#(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/replay/(.*)", record.ReplayStaticFileHandler, {"path": os.path.join(cfg.data_path, 'replay')}),
|
||||||
|
|
||||||
(r'/log/list', record.LogList),
|
(r'/log/list', record.LogList),
|
||||||
(r'/log/record/(.*)/(.*)', record.RecordHandler),
|
(r'/log/record/(.*)/(.*)', record.RecordHandler),
|
||||||
(r'/log/command-log/(.*)/(.*)', record.ComandLogHandler),
|
(r'/log/command-log/(.*)/(.*)', record.ComandLogHandler),
|
||||||
(r'/log/get-record-header', record.RecordGetHeader),
|
(r'/log/get-record-header', record.RecordGetHeader),
|
||||||
(r'/log/get-record-file-info', record.RecordGetInfo),
|
(r'/log/get-record-file-info', record.RecordGetInfo),
|
||||||
(r'/log/delete-log', record.DeleteLog),
|
(r'/log/delete-log', record.DeleteLog),
|
||||||
# (r'/log/play-rdp/(.*)/(.*)', record.PlayRdpHandler),
|
# (r'/log/play-rdp/(.*)/(.*)', record.PlayRdpHandler),
|
||||||
(r'/log/', record.LogHandler),
|
(r'/log/', record.LogHandler),
|
||||||
(r'/log', record.LogHandler),
|
(r'/log', record.LogHandler),
|
||||||
|
|
||||||
(r'/exit', auth.LogoutHandler),
|
(r'/exit', auth.LogoutHandler),
|
||||||
|
|
||||||
(r'/user/delete-user', user.DeleteUser),
|
(r'/user/delete-user', user.DeleteUser),
|
||||||
(r'/user/modify-user', user.ModifyUser),
|
(r'/user/modify-user', user.ModifyUser),
|
||||||
(r'/user/add-user', user.AddUser),
|
(r'/user/add-user', user.AddUser),
|
||||||
(r'/user/lock-user', user.LockUser),
|
(r'/user/lock-user', user.LockUser),
|
||||||
(r'/user/reset-user', user.ResetUser),
|
(r'/user/reset-user', user.ResetUser),
|
||||||
(r'/user/host-list', user.HostList),
|
(r'/user/host-list', user.HostList),
|
||||||
(r'/user/alloc-host', user.AllocHost),
|
(r'/user/alloc-host', user.AllocHost),
|
||||||
(r'/user/alloc-host-user', user.AllocHostUser),
|
(r'/user/alloc-host-user', user.AllocHostUser),
|
||||||
(r'/user/delete-host', user.DeleteHost),
|
(r'/user/delete-host', user.DeleteHost),
|
||||||
(r'/user/delete-host-user', user.DeleteHostUser),
|
(r'/user/delete-host-user', user.DeleteHostUser),
|
||||||
(r'/user/auth/(.*)', user.AuthHandler),
|
(r'/user/auth/(.*)', user.AuthHandler),
|
||||||
|
|
||||||
(r'/host/list', host.GetListHandler),
|
(r'/host/list', host.GetListHandler),
|
||||||
(r'/host/add-host', host.AddHost),
|
(r'/host/add-host', host.AddHost),
|
||||||
(r'/host/lock-host', host.LockHost),
|
(r'/host/lock-host', host.LockHost),
|
||||||
(r'/host/delete-host', host.DeleteHost),
|
(r'/host/delete-host', host.DeleteHost),
|
||||||
(r'/host/export-host', host.ExportHostHandler),
|
(r'/host/export-host', host.ExportHostHandler),
|
||||||
(r'/host/get-cert-list', host.GetCertList),
|
(r'/host/get-cert-list', host.GetCertList),
|
||||||
(r'/host/add-cert', host.AddCert),
|
(r'/host/add-cert', host.AddCert),
|
||||||
(r'/host/delete-cert', host.DeleteCert),
|
(r'/host/delete-cert', host.DeleteCert),
|
||||||
(r'/host/update-cert', host.UpdateCert),
|
(r'/host/update-cert', host.UpdateCert),
|
||||||
(r'/host/get-group-list', host.GetGrouplist),
|
(r'/host/get-group-list', host.GetGrouplist),
|
||||||
(r'/host/add-group', host.AddGroup),
|
(r'/host/add-group', host.AddGroup),
|
||||||
(r'/host/update-group', host.UpdateGroup),
|
(r'/host/update-group', host.UpdateGroup),
|
||||||
(r'/host/delete-group', host.DeleteGroup),
|
(r'/host/delete-group', host.DeleteGroup),
|
||||||
(r'/host/add-host-to-group', host.AddHostToGroup),
|
(r'/host/add-host-to-group', host.AddHostToGroup),
|
||||||
# (r'/host/get-host-extend-info', host.GetHostExtendInfo),
|
# (r'/host/get-host-extend-info', host.GetHostExtendInfo),
|
||||||
# (r'/host/update-host-extend-info', host.UpdateHostExtendInfo),
|
# (r'/host/update-host-extend-info', host.UpdateHostExtendInfo),
|
||||||
(r'/host/update', host.UpdateHandler),
|
(r'/host/update', host.UpdateHandler),
|
||||||
(r'/host/upload-import', host.UploadAndImportHandler),
|
(r'/host/upload-import', host.UploadAndImportHandler),
|
||||||
(r'/host/', host.IndexHandler),
|
(r'/host/', host.IndexHandler),
|
||||||
(r'/host', host.IndexHandler),
|
(r'/host', host.IndexHandler),
|
||||||
(r'/host/get-session-id', host.GetSessionId),
|
(r'/host/get-session-id', host.GetSessionId),
|
||||||
(r'/host/admin-get-session-id', host.AdminGetSessionId),
|
(r'/host/admin-get-session-id', host.AdminGetSessionId),
|
||||||
(r'/host/admin-fast-get-session-id', host.AdminFastGetSessionId),
|
(r'/host/admin-fast-get-session-id', host.AdminFastGetSessionId),
|
||||||
|
|
||||||
(r'/host/sys-user/list', host.SysUserList),
|
(r'/host/sys-user/list', host.SysUserList),
|
||||||
(r'/host/sys-user/add', host.SysUserAdd),
|
(r'/host/sys-user/add', host.SysUserAdd),
|
||||||
(r'/host/sys-user/update', host.SysUserUpdate),
|
(r'/host/sys-user/update', host.SysUserUpdate),
|
||||||
(r'/host/sys-user/delete', host.SysUserDelete),
|
(r'/host/sys-user/delete', host.SysUserDelete),
|
||||||
|
|
||||||
(r'/set/update-config', set.UpdateConfig),
|
# (r'/set/update-config', set.UpdateConfig),
|
||||||
# (r'/set/os-operator', set.OsOperator),
|
# (r'/set/os-operator', set.OsOperator),
|
||||||
(r'/set/', set.IndexHandler),
|
(r'/set/info', set.InfoHandler),
|
||||||
(r'/set', set.IndexHandler),
|
(r'/set/db', set.DatabaseHandler),
|
||||||
|
# (r'/set/', set.IndexHandler),
|
||||||
(r'/uidesign', index.UIDesignHandler),
|
# (r'/set', set.IndexHandler),
|
||||||
(r'/uidesign/without-sidebar', index.UIDesignWithoutSidebarHandler),
|
|
||||||
(r'/uidesign/table', index.UIDesignTableHandler)
|
(r'/uidesign', index.UIDesignHandler),
|
||||||
|
(r'/uidesign/without-sidebar', index.UIDesignWithoutSidebarHandler),
|
||||||
]
|
(r'/uidesign/table', index.UIDesignTableHandler)
|
||||||
|
|
||||||
|
]
|
||||||
|
|
|
@ -3,161 +3,128 @@
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import re
|
# import re
|
||||||
import socket
|
# import socket
|
||||||
import subprocess
|
# import subprocess
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from eom_app.app.configs import app_cfg
|
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 eom_app.module import set
|
||||||
from .base import TPBaseAdminAuthHandler, TPBaseAdminAuthJsonHandler
|
from .base import TPBaseAdminAuthHandler, TPBaseAdminAuthJsonHandler
|
||||||
|
|
||||||
cfg = app_cfg()
|
cfg = app_cfg()
|
||||||
|
|
||||||
|
|
||||||
def get_local_ip():
|
# def get_local_ip():
|
||||||
iplist = []
|
# iplist = []
|
||||||
PLATFORM = platform.system().lower()
|
# PLATFORM = platform.system().lower()
|
||||||
try:
|
# try:
|
||||||
if PLATFORM == "windows":
|
# if PLATFORM == "windows":
|
||||||
ip_info = socket.gethostbyname_ex(socket.gethostname())
|
# ip_info = socket.gethostbyname_ex(socket.gethostname())
|
||||||
return ip_info[2]
|
# return ip_info[2]
|
||||||
else:
|
# else:
|
||||||
ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
|
# ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
|
||||||
ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
|
# ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
|
||||||
output = ipconfig_process.stdout.read()
|
# output = ipconfig_process.stdout.read()
|
||||||
ip_pattern = re.compile('(inet addr:%s)' % ipstr)
|
# ip_pattern = re.compile('(inet addr:%s)' % ipstr)
|
||||||
pattern = re.compile(ipstr)
|
# pattern = re.compile(ipstr)
|
||||||
|
#
|
||||||
for ipaddr in re.finditer(ip_pattern, str(output)):
|
# for ipaddr in re.finditer(ip_pattern, str(output)):
|
||||||
ip = pattern.search(ipaddr.group())
|
# ip = pattern.search(ipaddr.group())
|
||||||
if ip.group() != "127.0.0.1":
|
# if ip.group() != "127.0.0.1":
|
||||||
iplist.append(ip.group())
|
# iplist.append(ip.group())
|
||||||
return iplist
|
# return iplist
|
||||||
except Exception:
|
# except Exception:
|
||||||
return iplist
|
# return iplist
|
||||||
|
|
||||||
|
|
||||||
class IndexHandler(TPBaseAdminAuthHandler):
|
class InfoHandler(TPBaseAdminAuthHandler):
|
||||||
def get(self):
|
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}
|
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():
|
# def _restart_func():
|
||||||
time.sleep(1)
|
# time.sleep(1)
|
||||||
|
#
|
||||||
PLATFORM = platform.system().lower()
|
# PLATFORM = platform.system().lower()
|
||||||
|
#
|
||||||
if PLATFORM == 'windows':
|
# if PLATFORM == 'windows':
|
||||||
sf = os.path.join(cfg.app_path, 'tools', 'restart.bat')
|
# sf = os.path.join(cfg.app_path, 'tools', 'restart.bat')
|
||||||
os.system('cmd.exe /c "{}"'.format(sf))
|
# os.system('cmd.exe /c "{}"'.format(sf))
|
||||||
else:
|
# else:
|
||||||
# sf = os.path.join(cfg.app_path, 'tools', 'restart.sh')
|
# # sf = os.path.join(cfg.app_path, 'tools', 'restart.sh')
|
||||||
# os.system(sf)
|
# # os.system(sf)
|
||||||
os.system('service eom_ts restart')
|
# os.system('service eom_ts restart')
|
||||||
|
#
|
||||||
# os.system(sf)
|
# # os.system(sf)
|
||||||
|
|
||||||
|
|
||||||
def restart_service():
|
# def restart_service():
|
||||||
# todo: 使用eom_ts.exe运行脚本的方式(新进程)来重启服务,避免正在运行的本服务未退出的影响
|
# # todo: 使用eom_ts.exe运行脚本的方式(新进程)来重启服务,避免正在运行的本服务未退出的影响
|
||||||
|
#
|
||||||
|
# t = threading.Thread(target=_restart_func)
|
||||||
|
# t.start()
|
||||||
|
#
|
||||||
|
|
||||||
t = threading.Thread(target=_restart_func)
|
# class UpdateConfig(TPBaseAdminAuthJsonHandler):
|
||||||
t.start()
|
# def post(self):
|
||||||
|
# args = self.get_argument('args', None)
|
||||||
|
# if args is not None:
|
||||||
class UpdateConfig(TPBaseAdminAuthJsonHandler):
|
# args = json.loads(args)
|
||||||
def post(self):
|
# else:
|
||||||
args = self.get_argument('args', None)
|
# self.write_json(-1)
|
||||||
if args is not None:
|
# return
|
||||||
args = json.loads(args)
|
#
|
||||||
else:
|
# change_list = args['cfg']
|
||||||
self.write_json(-1)
|
# reboot = args['reboot']
|
||||||
return
|
#
|
||||||
|
# try:
|
||||||
change_list = args['cfg']
|
# ret = set.set_config(change_list)
|
||||||
reboot = args['reboot']
|
# if ret:
|
||||||
|
# for i in range(len(change_list)):
|
||||||
try:
|
# if change_list[i]['name'] == 'ts_server_ip':
|
||||||
ret = set.set_config(change_list)
|
# # static_path = cfg.static_path
|
||||||
if ret:
|
# var_js = os.path.join(cfg.static_path, 'js', 'var.js')
|
||||||
for i in range(len(change_list)):
|
# f = None
|
||||||
if change_list[i]['name'] == 'ts_server_ip':
|
# try:
|
||||||
# static_path = cfg.static_path
|
# f = open(var_js, 'w')
|
||||||
var_js = os.path.join(cfg.static_path, 'js', 'var.js')
|
# # config_list = host.get_config_list()
|
||||||
f = None
|
# # ts_server = dict()
|
||||||
try:
|
# # ts_server['ip'] = config_list['ts_server_ip']
|
||||||
f = open(var_js, 'w')
|
# # ts_server['ssh_port'] = config_list['ts_server_ssh_port']
|
||||||
# config_list = host.get_config_list()
|
# # ts_server['rdp_port'] = config_list['ts_server_rdp_port']
|
||||||
# ts_server = dict()
|
# # f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(ts_server['ip']))
|
||||||
# ts_server['ip'] = config_list['ts_server_ip']
|
# f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(change_list[i]['value']))
|
||||||
# ts_server['ssh_port'] = config_list['ts_server_ssh_port']
|
# break
|
||||||
# ts_server['rdp_port'] = config_list['ts_server_rdp_port']
|
# except Exception:
|
||||||
# f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(ts_server['ip']))
|
# return self.write(-1)
|
||||||
f.write("\"use strict\";\nvar teleport_ip = \"{}\";\n".format(change_list[i]['value']))
|
# finally:
|
||||||
break
|
# if f is not None:
|
||||||
except Exception:
|
# f.close()
|
||||||
return self.write(-1)
|
#
|
||||||
finally:
|
# if reboot:
|
||||||
if f is not None:
|
# restart_service()
|
||||||
f.close()
|
#
|
||||||
|
# self.write_json(0)
|
||||||
if reboot:
|
# else:
|
||||||
restart_service()
|
# self.write_json(-1)
|
||||||
|
# except:
|
||||||
self.write_json(0)
|
# self.write_json(-2)
|
||||||
else:
|
|
||||||
self.write_json(-1)
|
|
||||||
except:
|
|
||||||
self.write_json(-2)
|
|
||||||
|
|
||||||
# class OsOperator(TPBaseUserAuthJsonHandler):
|
# class OsOperator(TPBaseUserAuthJsonHandler):
|
||||||
# def post(self):
|
# def post(self):
|
||||||
|
|
|
@ -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>';
|
||||||
|
};
|
|
@ -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);
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,162 +1,176 @@
|
||||||
<%!
|
<%!
|
||||||
import eom_ver
|
import eom_ver
|
||||||
%>
|
%>
|
||||||
<%
|
<%
|
||||||
_sidebar = [
|
_sidebar = [
|
||||||
{
|
{
|
||||||
'require_type': 1,
|
'require_type': 1,
|
||||||
'id': 'host',
|
'id': 'host',
|
||||||
'link': '/host',
|
'link': '/host',
|
||||||
'name': '主机管理',
|
'name': '主机管理',
|
||||||
'icon': 'fa-server',
|
'icon': 'fa-server',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'require_type': 100,
|
'require_type': 100,
|
||||||
'id': 'user',
|
'id': 'user',
|
||||||
'link': '/user',
|
'link': '/user',
|
||||||
'name': '用户管理',
|
'name': '用户管理',
|
||||||
'icon': 'fa-user',
|
'icon': 'fa-user',
|
||||||
},
|
},
|
||||||
## {
|
## {
|
||||||
## 'require_type': 1,
|
## 'require_type': 1,
|
||||||
## 'id': 'auth',
|
## 'id': 'auth',
|
||||||
## 'link': '/auth',
|
## 'link': '/auth',
|
||||||
## 'name': '授权管理',
|
## 'name': '授权管理',
|
||||||
## 'icon': 'fa-user-secret',
|
## 'icon': 'fa-user-secret',
|
||||||
## },
|
## },
|
||||||
{
|
{
|
||||||
'require_type': 100,
|
'require_type': 100,
|
||||||
'id': 'cert',
|
'id': 'cert',
|
||||||
'link': '/cert',
|
'link': '/cert',
|
||||||
'name': '密钥管理',
|
'name': '密钥管理',
|
||||||
'icon': 'fa-key',
|
'icon': 'fa-key',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'require_type': 100,
|
'require_type': 100,
|
||||||
'id': 'group',
|
'id': 'group',
|
||||||
'link': '/group',
|
'link': '/group',
|
||||||
'name': '分组管理',
|
'name': '分组管理',
|
||||||
'icon': 'fa-object-group',
|
'icon': 'fa-object-group',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'require_type': 100,
|
'require_type': 100,
|
||||||
'id': 'set',
|
'id': 'set',
|
||||||
'link': '/set',
|
'link': '',
|
||||||
'name': '配置管理',
|
'name': '配置管理',
|
||||||
'icon': 'fa-cogs',
|
'icon': 'fa-cogs',
|
||||||
},
|
'sub': [
|
||||||
{
|
{
|
||||||
'require_type': 100,
|
'require_type': 100,
|
||||||
'id': 'log',
|
'id': 'info',
|
||||||
'link': '/log',
|
'link': '/set/info',
|
||||||
'name': '日志查询',
|
'name': '配置信息'
|
||||||
'icon': 'fa-database',
|
},
|
||||||
},
|
{
|
||||||
## {
|
'require_type': 100,
|
||||||
## 'require_type': 1,
|
'id': 'database',
|
||||||
## 'id': 'pwd',
|
'link': '/set/db',
|
||||||
## 'link': '/pwd',
|
'name': '数据库管理'
|
||||||
## 'name': '密码修改',
|
}
|
||||||
## 'icon': 'fa-pencil-square-o',
|
]
|
||||||
## },
|
},
|
||||||
## {
|
{
|
||||||
## 'require_type': 1,
|
'require_type': 100,
|
||||||
## 'id': 'exit',
|
'id': 'log',
|
||||||
## 'link': '/exit',
|
'link': '/log',
|
||||||
## 'name': '安全退出',
|
'name': '日志查询',
|
||||||
## 'icon': 'fa-sign-out',
|
'icon': 'fa-database',
|
||||||
## },
|
},
|
||||||
{
|
## {
|
||||||
'separator': true,
|
## 'require_type': 1,
|
||||||
'require_type': 1,
|
## 'id': 'pwd',
|
||||||
'id': 'assist-config',
|
## 'link': '/pwd',
|
||||||
'link': 'http://127.0.0.1:50022/config',
|
## 'name': '密码修改',
|
||||||
'target': '_blank',
|
## 'icon': 'fa-pencil-square-o',
|
||||||
'name': '助手配置',
|
## },
|
||||||
'icon': 'fa-cog',
|
## {
|
||||||
},
|
## 'require_type': 1,
|
||||||
]
|
## 'id': 'exit',
|
||||||
%>
|
## 'link': '/exit',
|
||||||
|
## 'name': '安全退出',
|
||||||
|
## 'icon': 'fa-sign-out',
|
||||||
<!-- begin sidebar scrollbar -->
|
## },
|
||||||
<div class="slimScrollDiv">
|
{
|
||||||
|
'separator': true,
|
||||||
<!-- begin sidebar user -->
|
'require_type': 1,
|
||||||
<div class="nav">
|
'id': 'assist-config',
|
||||||
<ul class="nav nav-profile">
|
'link': 'http://127.0.0.1:50022/config',
|
||||||
<li>
|
'target': '_blank',
|
||||||
<div class="image">
|
'name': '助手配置',
|
||||||
<img src="/static/img/avatar/001.png" width="36"/>
|
'icon': 'fa-cog',
|
||||||
## <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">
|
<!-- begin sidebar scrollbar -->
|
||||||
<span class="name">${ current_user['nick_name'] }</span>
|
<div class="slimScrollDiv">
|
||||||
<span class="role">
|
|
||||||
%if current_user['type'] == 100:
|
<!-- begin sidebar user -->
|
||||||
平台管理员
|
<div class="nav">
|
||||||
%else:
|
<ul class="nav nav-profile">
|
||||||
普通用户
|
<li>
|
||||||
%endif
|
<div class="image">
|
||||||
<i class="fa fa-caret-right"></i></span>
|
<img src="/static/img/avatar/001.png" width="36"/>
|
||||||
</a>
|
## <i class="fa fa-male"></i>
|
||||||
<ul class="dropdown-menu dropdown-menu-right">
|
</div>
|
||||||
<li><a href="/pwd" id="btn-logout">修改密码</a></li>
|
|
||||||
<li><a href="/auth/logout" id="btn-logout">安全退出</a></li>
|
<div class="dropdown">
|
||||||
</ul>
|
<a class="title" href="#" id="user-profile" data-target="#" data-toggle="dropdown" role="button"
|
||||||
</div>
|
aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="name">${ current_user['nick_name'] }</span>
|
||||||
|
<span class="role">
|
||||||
</li>
|
%if current_user['type'] == 100:
|
||||||
</ul>
|
平台管理员
|
||||||
</div>
|
%else:
|
||||||
<!-- end sidebar user -->
|
普通用户
|
||||||
|
%endif
|
||||||
<!-- begin sidebar nav -->
|
<i class="fa fa-caret-right"></i></span>
|
||||||
<div class="nav">
|
</a>
|
||||||
<ul class="nav nav-menu">
|
<ul class="dropdown-menu dropdown-menu-right">
|
||||||
|
<li><a href="/pwd" id="btn-logout">修改密码</a></li>
|
||||||
%for menu in _sidebar:
|
<li><a href="/auth/logout" id="btn-logout">安全退出</a></li>
|
||||||
%if menu['require_type'] <= current_user['type']:
|
</ul>
|
||||||
%if 'separator' in menu:
|
</div>
|
||||||
<hr style="border:none;border-bottom:1px solid #636363;margin-bottom:0;margin-top:5px;"/>
|
|
||||||
%endif
|
|
||||||
|
</li>
|
||||||
%if 'sub' in menu and len(menu['sub']) > 0:
|
</ul>
|
||||||
<li id="sidebar_menu_${menu['id']}"><a href="javascript:;"
|
</div>
|
||||||
onclick="ywl._sidebar_toggle_submenu('${menu['id']}');"><i
|
<!-- end sidebar user -->
|
||||||
class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span>
|
|
||||||
<i class="menu-caret"></i></a>
|
<!-- begin sidebar nav -->
|
||||||
<ul class="sub-menu" id="sidebar_submenu_${menu['id']}" style="display:none;">
|
<div class="nav">
|
||||||
%for sub in menu['sub']:
|
<ul class="nav nav-menu">
|
||||||
%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>
|
%for menu in _sidebar:
|
||||||
%endif
|
%if menu['require_type'] <= current_user['type']:
|
||||||
%endfor
|
%if 'separator' in menu:
|
||||||
</ul>
|
<hr style="border:none;border-bottom:1px solid #636363;margin-bottom:0;margin-top:5px;"/>
|
||||||
</li>
|
%endif
|
||||||
%else:
|
|
||||||
<li id="sidebar_menu_${menu['id']}"><a href="${menu['link']}"
|
%if 'sub' in menu and len(menu['sub']) > 0:
|
||||||
%if 'target' in menu:
|
<li id="sidebar_menu_${menu['id']}"><a href="javascript:;"
|
||||||
target="${menu['target']}"
|
onclick="ywl._sidebar_toggle_submenu('${menu['id']}');"><i
|
||||||
%endif
|
class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span>
|
||||||
><i class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span></a></li>
|
<i class="menu-caret"></i></a>
|
||||||
%endif
|
<ul class="sub-menu" id="sidebar_submenu_${menu['id']}" style="display:none;">
|
||||||
%endif
|
%for sub in menu['sub']:
|
||||||
|
%if menu['require_type'] <= current_user['type']:
|
||||||
%endfor
|
<li id="sidebar_menu_${menu['id']}_${sub['id']}"><a href="${sub['link']}"><span>${sub['name']}</span></a></li>
|
||||||
|
%endif
|
||||||
</ul>
|
%endfor
|
||||||
</div>
|
</ul>
|
||||||
<!-- end sidebar nav -->
|
</li>
|
||||||
|
%else:
|
||||||
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;"/>
|
<li id="sidebar_menu_${menu['id']}"><a href="${menu['link']}"
|
||||||
<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>
|
%if 'target' in menu:
|
||||||
<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>
|
target="${menu['target']}"
|
||||||
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;margin-top:5px;"/>
|
%endif
|
||||||
|
><i class="fa ${menu['icon']} fa-fw icon"></i><span>${menu['name']}</span></a></li>
|
||||||
</div>
|
%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 -->
|
<!-- end sidebar scrollbar -->
|
|
@ -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>
|
|
|
@ -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>
|
Loading…
Reference in New Issue