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
|
||||
|
||||
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 ""
|
||||
|
|
|
@ -1,133 +1,137 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import configparser
|
||||
import os
|
||||
|
||||
from eom_common.eomcore.logger import *
|
||||
|
||||
__all__ = ['app_cfg']
|
||||
|
||||
|
||||
class AttrDict(dict):
|
||||
"""
|
||||
可以像属性一样访问字典的 Key,var.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):
|
||||
"""
|
||||
可以像属性一样访问字典的 Key,var.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()
|
||||
|
|
|
@ -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)
|
||||
|
||||
]
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
%>
|
||||
<%
|
||||
_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 -->
|
|
@ -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