pull/105/head
ApexLiu 2017-11-24 19:53:49 +08:00
parent 40619185a7
commit 461c8d2dad
18 changed files with 251 additions and 146 deletions

View File

@ -15,9 +15,8 @@ class Builder:
self.ver_in = os.path.join(env.root_path, 'version.in') self.ver_in = os.path.join(env.root_path, 'version.in')
self.VER_TP_SERVER = '' self.VER_TP_SERVER = ''
self.VER_TP_SRV_WWW = '' self.VER_TP_TPCORE = ''
self.VER_TP_SRV_TPCORE = '' self.VER_TP_TPWEB = ''
self.VER_TP_SRV_TPWEB = ''
self.VER_TP_ASSIST = '' self.VER_TP_ASSIST = ''
def build(self): def build(self):
@ -31,32 +30,29 @@ class Builder:
if l.startswith('TP_SERVER '): if l.startswith('TP_SERVER '):
x = l.split(' ') x = l.split(' ')
self.VER_TP_SERVER = x[1].strip() self.VER_TP_SERVER = x[1].strip()
elif l.startswith('TP_SRV_WWW '): elif l.startswith('TP_TPCORE '):
x = l.split(' ') x = l.split(' ')
self.VER_TP_SRV_WWW = x[1].strip() self.VER_TP_TPCORE = x[1].strip()
elif l.startswith('TP_SRV_TPCORE '): elif l.startswith('TP_TPWEB '):
x = l.split(' ') x = l.split(' ')
self.VER_TP_SRV_TPCORE = x[1].strip() self.VER_TP_TPWEB = x[1].strip()
elif l.startswith('TP_SRV_TPWEB '):
x = l.split(' ')
self.VER_TP_SRV_TPWEB = x[1].strip()
elif l.startswith('TP_ASSIST '): elif l.startswith('TP_ASSIST '):
x = l.split(' ') x = l.split(' ')
self.VER_TP_ASSIST = x[1].strip() self.VER_TP_ASSIST = x[1].strip()
cc.v('new version:') cc.v('new version:')
cc.v(' Server : ', self.VER_TP_SERVER) cc.v(' Server : ', self.VER_TP_SERVER)
cc.v(' - WWW Server : ', self.VER_TP_SRV_WWW) cc.v(' - tp_core : ', self.VER_TP_TPCORE)
cc.v(' - Core Server : ', self.VER_TP_SRV_TPCORE) cc.v(' - tp_web : ', self.VER_TP_TPWEB)
cc.v(' - Web Server : ', self.VER_TP_SRV_TPWEB)
cc.v(' Assist : ', self.VER_TP_ASSIST) cc.v(' Assist : ', self.VER_TP_ASSIST)
cc.v('') cc.v('')
self.make_builder_ver() self.make_builder_ver()
self.make_srv_www_ver() self.make_server_ver()
self.make_srv_tpcore_ver() self.make_tpcore_ver()
self.make_srv_tpweb_ver() self.make_tpweb_ver()
self.make_assist_ver() self.make_assist_win_ver()
self.make_assist_macos_ver()
def make_builder_ver(self): def make_builder_ver(self):
ver_file = os.path.join(env.root_path, 'build', 'builder', 'core', 'ver.py') ver_file = os.path.join(env.root_path, 'build', 'builder', 'core', 'ver.py')
@ -66,7 +62,6 @@ class Builder:
if not os.path.exists(ver_file): if not os.path.exists(ver_file):
rewrite = True rewrite = True
else: else:
old_content = ''
with open(ver_file, 'r') as f: with open(ver_file, 'r') as f:
old_content = f.read() old_content = f.read()
if old_content != ver_content: if old_content != ver_content:
@ -77,9 +72,9 @@ class Builder:
with open(ver_file, 'w') as f: with open(ver_file, 'w') as f:
f.write(ver_content) f.write(ver_content)
def make_srv_tpcore_ver(self): def make_tpcore_ver(self):
ver_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'ts_ver.h') ver_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'ts_ver.h')
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_SRV_TPCORE) ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_TPCORE)
rewrite = False rewrite = False
if not os.path.exists(ver_file): if not os.path.exists(ver_file):
@ -96,12 +91,12 @@ class Builder:
f.write(ver_content) f.write(ver_content)
rc_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'tp_core.rc') rc_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'tp_core.rc')
self._update_vs_rc(rc_file, self.VER_TP_SRV_TPCORE) self._update_ver_rc(rc_file, self.VER_TP_TPCORE)
def make_srv_www_ver(self): def make_server_ver(self):
ver_file = os.path.join(env.root_path, 'server', 'www', 'teleport', 'webroot', 'app', 'app_ver.py') ver_file = os.path.join(env.root_path, 'server', 'www', 'teleport', 'webroot', 'app', 'app_ver.py')
# ver_content = '# -*- coding: utf8 -*-\n\nTS_VER = "{}"\n'.format(self.VER_TELEPORT_SERVER) # ver_content = '# -*- coding: utf8 -*-\n\nTS_VER = "{}"\n'.format(self.VER_TELEPORT_SERVER)
ver_content = '# -*- coding: utf8 -*-\nTP_SRV_WWW_VER = "{}"\n'.format(self.VER_TP_SRV_WWW) ver_content = '# -*- coding: utf8 -*-\nTP_SERVER_VER = "{}"\n'.format(self.VER_TP_SERVER)
rewrite = False rewrite = False
if not os.path.exists(ver_file): if not os.path.exists(ver_file):
@ -117,7 +112,7 @@ class Builder:
with open(ver_file, 'w') as f: with open(ver_file, 'w') as f:
f.write(ver_content) f.write(ver_content)
def make_assist_ver(self): def make_assist_win_ver(self):
ver_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'ts_ver.h') ver_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'ts_ver.h')
ver_content = '#ifndef __TS_ASSIST_VER_H__\n#define __TS_ASSIST_VER_H__\n\n#define TP_ASSIST_VER\tL"{}"\n\n#endif // __TS_ASSIST_VER_H__\n'.format(self.VER_TP_ASSIST) ver_content = '#ifndef __TS_ASSIST_VER_H__\n#define __TS_ASSIST_VER_H__\n\n#define TP_ASSIST_VER\tL"{}"\n\n#endif // __TS_ASSIST_VER_H__\n'.format(self.VER_TP_ASSIST)
@ -125,7 +120,6 @@ class Builder:
if not os.path.exists(ver_file): if not os.path.exists(ver_file):
rewrite = True rewrite = True
else: else:
old_content = ''
with open(ver_file, 'r') as f: with open(ver_file, 'r') as f:
old_content = f.read() old_content = f.read()
if old_content != ver_content: if old_content != ver_content:
@ -137,14 +131,18 @@ class Builder:
f.write(ver_content) f.write(ver_content)
rc_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'tp_assist.rc') rc_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'tp_assist.rc')
self._update_vs_rc(rc_file, self.VER_TP_ASSIST) self._update_ver_rc(rc_file, self.VER_TP_ASSIST)
nsi_file = os.path.join(env.root_path, 'dist', 'client', 'windows', 'assist', 'installer.nsi') nsi_file = os.path.join(env.root_path, 'dist', 'client', 'windows', 'assist', 'installer.nsi')
self._update_nsi_rc(nsi_file, self.VER_TP_ASSIST) self._update_ver_nsi(nsi_file, self.VER_TP_ASSIST)
def make_srv_tpweb_ver(self): def make_assist_macos_ver(self):
plist_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'tp_assist-Info.plist')
self._update_ver_plist(plist_file, self.VER_TP_ASSIST)
def make_tpweb_ver(self):
ver_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'ts_ver.h') ver_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'ts_ver.h')
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_SRV_TPWEB) ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_TPWEB)
rewrite = False rewrite = False
if not os.path.exists(ver_file): if not os.path.exists(ver_file):
@ -161,14 +159,14 @@ class Builder:
f.write(ver_content) f.write(ver_content)
rc_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'tp_web.rc') rc_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'tp_web.rc')
self._update_vs_rc(rc_file, self.VER_TP_SRV_TPWEB) self._update_ver_rc(rc_file, self.VER_TP_TPWEB)
def _update_vs_rc(self, rcFilePath, ver): def _update_ver_rc(self, rcFilePath, ver):
""" update rc file version info """ """ update rc file version info """
t_ver = ver.split('.') t_ver = ver.split('.')
if len(t_ver) != 4: if len(t_ver) != 4:
raise RuntimeError('Invalid version for assist.') raise RuntimeError('Invalid version for .rc file.')
bOK = False bOK = False
try: try:
@ -272,14 +270,13 @@ class Builder:
wrcFile.close() wrcFile.close()
except IOError: except IOError:
raise RuntimeError('can not open rc file.') raise RuntimeError('can not process rc file.')
def _update_nsi_rc(self, nsiFilePath, ver): def _update_ver_nsi(self, nsiFilePath, ver):
""" update nsis file version info """ """ update nsis file version info """
# nver = ver.split('.')
t_ver = ver.split('.') t_ver = ver.split('.')
if len(t_ver) != 4: if len(t_ver) != 4:
raise RuntimeError('Invalid version for assist.') raise RuntimeError('Invalid version for nsis file.')
bOK = False bOK = False
try: try:
@ -346,7 +343,77 @@ class Builder:
return bOK return bOK
except IOError: except IOError:
raise RuntimeError('can not open nsi file.') raise RuntimeError('can not process nsi file.')
def _update_ver_plist(self, plist_file, ver):
""" update plist file version info for MacOS app."""
t_ver = ver.split('.')
if len(t_ver) != 4:
raise RuntimeError('Invalid version for plist file.')
bOK = False
try:
# open rc file
f = codecs.open(plist_file, 'r', 'utf8')
# read out all lines of rc file
lines = f.readlines()
f.close()
is_ver = False
for x in range(len(lines)):
l = lines[x]
if l.find('<key>CFBundleShortVersionString</key>') != -1:
is_ver = True
continue
if l.find('<key>CFBundleVersion</key>') != -1:
is_ver = True
continue
# pos1 = rcline.find(' FILEVERSION ')
# pos2 = rcline.rfind('\\0"')
# _ver = rcline[pos1 + 13: pos2].strip()
#
# rcSplitList = _ver.split(",")
# if (len(rcSplitList) < 4):
# rcSplitList = _ver.split(".")
# if (len(rcSplitList) < 4):
# raise RuntimeError('Invalid .rc file.')
# if '.'.join(rcSplitList) == ver:
# continue
#
# rcline = '%s%s,%s,%s,%s\n' % (rcline[0:pos1 + 13], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
#
# rcLines[x] = ""
# rcLines[x] = rcline
# # cc.v('[ver] new ver: %s' % rcLines[x])
# bOK = True
if is_ver:
is_ver = False
pos1 = l.find('<string>')
pos2 = l.rfind('</string>')
if pos1 == -1 or pos2 == -2:
continue
_ver = l[pos1 + 8: pos2].strip()
v = _ver.split(".")
if len(v) < 4:
raise RuntimeError('Invalid .plist file.')
old_ver = '.'.join(v)
if old_ver == ver:
continue
lines[x] = '<string>{ver}</string>'.format(ver=ver)
bOK = True
if bOK:
cc.v(' update {}...'.format(plist_file))
wrcFile = codecs.open(plist_file, 'w', 'utf8')
wrcFile.writelines(lines)
wrcFile.close()
except IOError:
raise RuntimeError('can not process plist file.')
def main(): def main():

View File

@ -5,26 +5,26 @@
#include <algorithm> #include <algorithm>
#include <teleport_const.h> #include <teleport_const.h>
TP_SSH_CHANNEL_PAIR::TP_SSH_CHANNEL_PAIR() { TP_SSH_CHANNEL_PAIR::TP_SSH_CHANNEL_PAIR() {
type = TS_SSH_CHANNEL_TYPE_UNKNOWN; type = TS_SSH_CHANNEL_TYPE_UNKNOWN;
cli_channel = NULL; cli_channel = NULL;
srv_channel = NULL; srv_channel = NULL;
retcode = TP_SESS_STAT_RUNNING; retcode = TP_SESS_STAT_RUNNING;
db_id = 0; db_id = 0;
channel_id = 0; channel_id = 0;
win_width = 0; win_width = 0;
is_first_server_data = true; is_first_server_data = true;
server_ready = false; server_ready = false;
maybe_cmd = false; maybe_cmd = false;
process_srv = false; process_srv = false;
client_single_char = false; client_single_char = false;
cmd_char_pos = cmd_char_list.begin(); cmd_char_pos = cmd_char_list.begin();
} }
SshSession::SshSession(SshProxy *proxy, ssh_session sess_client) : SshSession::SshSession(SshProxy *proxy, ssh_session sess_client) :
ExThreadBase("ssh-session-thread"), ExThreadBase("ssh-session-thread"),
@ -89,16 +89,16 @@ void SshSession::_set_stop_flag(void) {
} }
} }
void SshSession::_session_error(int err_code) { void SshSession::_session_error(int err_code) {
int db_id = 0; int db_id = 0;
if (!g_ssh_env.session_begin(m_conn_info, &db_id) || db_id == 0) if (!g_ssh_env.session_begin(m_conn_info, &db_id) || db_id == 0)
{ {
EXLOGE("[ssh] can not write session error to database.\n"); EXLOGE("[ssh] can not write session error to database.\n");
return; return;
} }
g_ssh_env.session_end(m_sid.c_str(), db_id, err_code); g_ssh_env.session_end(m_sid.c_str(), db_id, err_code);
} }
bool SshSession::_record_begin(TP_SSH_CHANNEL_PAIR* cp) bool SshSession::_record_begin(TP_SSH_CHANNEL_PAIR* cp)
{ {
@ -349,7 +349,7 @@ int SshSession::_on_auth_password_request(ssh_session session, const char *user,
// 现在尝试根据session-id获取得到的信息连接并登录真正的SSH服务器 // 现在尝试根据session-id获取得到的信息连接并登录真正的SSH服务器
EXLOGV("[ssh] try to connect to real SSH server %s:%d\n", _this->m_conn_ip.c_str(), _this->m_conn_port); EXLOGV("[ssh] try to connect to real SSH server %s:%d\n", _this->m_conn_ip.c_str(), _this->m_conn_port);
_this->m_srv_session = ssh_new(); _this->m_srv_session = ssh_new();
ssh_set_blocking(_this->m_srv_session, 1); ssh_set_blocking(_this->m_srv_session, 1);
ssh_options_set(_this->m_srv_session, SSH_OPTIONS_HOST, _this->m_conn_ip.c_str()); ssh_options_set(_this->m_srv_session, SSH_OPTIONS_HOST, _this->m_conn_ip.c_str());
int port = (int)_this->m_conn_port; int port = (int)_this->m_conn_port;
ssh_options_set(_this->m_srv_session, SSH_OPTIONS_PORT, &port); ssh_options_set(_this->m_srv_session, SSH_OPTIONS_PORT, &port);
@ -545,7 +545,7 @@ ssh_channel SshSession::_on_new_channel_request(ssh_session session, void *userd
return cli_channel; return cli_channel;
} }
TP_SSH_CHANNEL_PAIR* SshSession::_get_channel_pair(int channel_side, ssh_channel channel) { TP_SSH_CHANNEL_PAIR* SshSession::_get_channel_pair(int channel_side, ssh_channel channel) {
ExThreadSmartLock locker(m_lock); ExThreadSmartLock locker(m_lock);
tp_channels::iterator it = m_channels.begin(); tp_channels::iterator it = m_channels.begin();
@ -561,7 +561,7 @@ TP_SSH_CHANNEL_PAIR* SshSession::_get_channel_pair(int channel_side, ssh_channel
} }
return NULL; return NULL;
} }
int SshSession::_on_client_pty_request(ssh_session session, ssh_channel channel, const char *term, int x, int y, int px, int py, void *userdata) { int SshSession::_on_client_pty_request(ssh_session session, ssh_channel channel, const char *term, int x, int y, int px, int py, void *userdata) {
SshSession *_this = (SshSession *)userdata; SshSession *_this = (SshSession *)userdata;
@ -810,7 +810,7 @@ int SshSession::_on_server_channel_data(ssh_session session, ssh_channel channel
else else
auth_mode = "unknown"; auth_mode = "unknown";
int w = min(cp->win_width, 128); int w = std::min(cp->win_width, 128);
ex_astr line(w, '='); ex_astr line(w, '=');
snprintf(buf, sizeof(buf), snprintf(buf, sizeof(buf),
@ -859,65 +859,65 @@ int SshSession::_on_server_channel_data(ssh_session session, ssh_channel channel
} }
else { else {
if (len > 5 && len < 256) { if (len > 5 && len < 256) {
const ex_u8* _begin = ex_memmem((const ex_u8*)data, len, (const ex_u8*)"\033]0;", 4); const ex_u8* _begin = ex_memmem((const ex_u8*)data, len, (const ex_u8*)"\033]0;", 4);
if (NULL != _begin) { if (NULL != _begin) {
size_t len_before = _begin - (const ex_u8*)data; size_t len_before = _begin - (const ex_u8*)data;
const ex_u8* _end = ex_memmem(_begin + 4, len - len_before, (const ex_u8*)"\007", 1); const ex_u8* _end = ex_memmem(_begin + 4, len - len_before, (const ex_u8*)"\007", 1);
if (NULL != _end) if (NULL != _end)
{ {
_end++; _end++;
// 这个包中含有改变标题的数据,将标题换为我们想要的 // 这个包中含有改变标题的数据,将标题换为我们想要的
EXLOGD("-- found title\n"); EXLOGD("-- found title\n");
size_t len_end = len - (_end - (const ex_u8*)data); size_t len_end = len - (_end - (const ex_u8*)data);
MemBuffer mbuf; MemBuffer mbuf;
if (len_before > 0) if (len_before > 0)
mbuf.append((ex_u8*)data, len_before); mbuf.append((ex_u8*)data, len_before);
mbuf.append((ex_u8*)"\033]0;TP#ssh://", 13); mbuf.append((ex_u8*)"\033]0;TP#ssh://", 13);
mbuf.append((ex_u8*)_this->m_conn_ip.c_str(), _this->m_conn_ip.length()); mbuf.append((ex_u8*)_this->m_conn_ip.c_str(), _this->m_conn_ip.length());
mbuf.append((ex_u8*)"\007", 1); mbuf.append((ex_u8*)"\007", 1);
if (len_end > 0) if (len_end > 0)
mbuf.append((ex_u8*)_end, len_end); mbuf.append((ex_u8*)_end, len_end);
if (mbuf.size() > 0) if (mbuf.size() > 0)
{ {
for(;;){ for(;;){
ret = ssh_channel_write(cp->cli_channel, mbuf.data(), mbuf.size()); ret = ssh_channel_write(cp->cli_channel, mbuf.data(), mbuf.size());
if (ret == SSH_ERROR) if (ret == SSH_ERROR)
break; break;
if (ret == mbuf.size()) { if (ret == mbuf.size()) {
ret = len; // 表示我们已经处理了所有的数据了。 ret = len; // 表示我们已经处理了所有的数据了。
break; break;
} }
else { else {
mbuf.pop(ret); mbuf.pop(ret);
ex_sleep_ms(100); ex_sleep_ms(100);
} }
} }
// if (ret <= 0) // if (ret <= 0)
// EXLOGE("[ssh] send to client failed (1).\n"); // EXLOGE("[ssh] send to client failed (1).\n");
// else // else
// ret = len; // ret = len;
} }
else else
{ {
ret = ssh_channel_write(cp->cli_channel, data, len); ret = ssh_channel_write(cp->cli_channel, data, len);
} }
} }
else else
{ {
ret = ssh_channel_write(cp->cli_channel, data, len); ret = ssh_channel_write(cp->cli_channel, data, len);
} }
} }
else { else {
ret = ssh_channel_write(cp->cli_channel, data, len); ret = ssh_channel_write(cp->cli_channel, data, len);
} }
} }
else { else {
ret = ssh_channel_write(cp->cli_channel, data, len); ret = ssh_channel_write(cp->cli_channel, data, len);
} }
} }
#endif #endif

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@
$app.on_init = function (cb_stack) { $app.on_init = function (cb_stack) {
$app.dom = { $app.dom = {
assist_ver: $('#tp-assist-ver'),
btn_refresh_host: $('#btn-refresh-host'), btn_refresh_host: $('#btn-refresh-host'),
btn_add_host: $('#btn-add-host'), btn_add_host: $('#btn-add-host'),
chkbox_host_select_all: $('#table-host-select-all'), chkbox_host_select_all: $('#table-host-select-all'),
@ -18,6 +19,15 @@ $app.on_init = function (cb_stack) {
upload_file_message: $('#upload-file-message') upload_file_message: $('#upload-file-message')
}; };
$tp.assist_checked = function() {
console.log("---------");
if($tp.assist.running) {
$app.dom.assist_ver.html($tp.assist.version);
} else {
$app.dom.assist_ver.html('<a href="http://teleport.eomsoft.net/download" target="_blank" class="error">未能检测到</a>');
}
};
cb_stack cb_stack
.add($app.create_controls) .add($app.create_controls)
.add($app.load_role_list); .add($app.load_role_list);

View File

@ -59,17 +59,17 @@ var CALLBACK_STACK = {
// Teleport核心JS // Teleport核心JS
var $tp = { var $tp = {
// server_host: window.location.hostname || '', web_server: window.location.protocol+'://'+window.location.host
// server_port: (window.location.port === "") ? 80 : parseInt(window.location.port),
web_server: window.location.protocol+'://'+window.location.host,
// Teleport页面应用对象放置页面自身特有的属性和函数 // Teleport页面应用对象放置页面自身特有的属性和函数
app: { , app: {
options: {}, options: {}
on_init: function (cb_stack) { , on_init: function (cb_stack) {
cb_stack.exec(); cb_stack.exec();
} // should be overwrite. } // should be overwrite.
} }
, assist_checked: null
}; };
$tp.init = function () { $tp.init = function () {
@ -115,12 +115,14 @@ $tp.init = function () {
]; ];
var cs = CALLBACK_STACK.create(); var cs = CALLBACK_STACK.create();
cs.add($tp.app.init);
if(!_.isUndefined($tp.assist)) { if(!_.isUndefined($tp.assist)) {
cs.add($tp.assist.init); cs.add($tp.assist.init);
} }
cs.add($tp.app.init);
cs.exec(); cs.exec();
}; };

View File

@ -1,9 +1,8 @@
"use strict"; "use strict";
$tp.assist = { $tp.assist = {
ver_request: '', running: false,
ver_last: '', version: '',
ver_current: '',
api_url: 'http://localhost:50022/api', api_url: 'http://localhost:50022/api',
teleport_ip: window.location.hostname teleport_ip: window.location.hostname
}; };
@ -25,7 +24,12 @@ $assist.init = function (cb_stack) {
jsonp: 'callback', jsonp: 'callback',
dataType: 'json', dataType: 'json',
success: function (ret) { success: function (ret) {
$assist.ver_current = ret.version; $assist.running = true;
$assist.version = ret.version;
if(_.isFunction($tp.assist_checked)) {
$tp.assist_checked();
}
// if (version_compare()) { // if (version_compare()) {
// error_process(ret, func_success, func_error); // error_process(ret, func_success, func_error);
// } else { // } else {
@ -33,6 +37,10 @@ $assist.init = function (cb_stack) {
// } // }
}, },
error: function () { error: function () {
$assist.running = false;
if(_.isFunction($tp.assist_checked)) {
$tp.assist_checked();
}
// func_error({}, TPE_NO_ASSIST, '无法连接到teleport助手可能尚未启动'); // func_error({}, TPE_NO_ASSIST, '无法连接到teleport助手可能尚未启动');
// $tp.notify_error('无法连接到teleport助手可能尚未启动'); // $tp.notify_error('无法连接到teleport助手可能尚未启动');
// $assist.alert_assist_not_found(); // $assist.alert_assist_not_found();

View File

@ -83,6 +83,10 @@ label {
//font-style: italic; //font-style: italic;
} }
.error {
color: @color-text-danger;
}
.bold { .bold {
font-weight: bold; font-weight: bold;
} }

View File

@ -25,6 +25,7 @@
@color-text-ignore: #999; @color-text-ignore: #999;
@color-text-default: #333; @color-text-default: #333;
@color-text-warning: #f59c1a; @color-text-warning: #f59c1a;
@color-text-danger: #d34242;
@color-text-on-dark-bg: #fff; @color-text-on-dark-bg: #fff;
@color-text-shadow-on-dark-bg: #525252; @color-text-shadow-on-dark-bg: #525252;

View File

@ -77,13 +77,21 @@ body {
//line-height: 20px; //line-height: 20px;
& > li + li:before { & > li + li:before {
//font-size: 24px;
//line-height: 20px;
//padding: 0 5px;
//color: #ccc;
content: "\f105"; content: "\f105";
font-family: 'FontAwesome'; font-family: 'FontAwesome';
} }
&.breadcrumb-list {
& > li {
font-size: @text-size-normal;
}
& > li + li:before {
//content: "\f105";
//font-family: 'FontAwesome';
content: " ";
margin:0 5px;
}
}
} }
} }
@ -1073,7 +1081,7 @@ textarea.cert_pub {
&.tp-editable { &.tp-editable {
cursor: pointer; cursor: pointer;
color: #459dee; color: #459dee;
&:hover { &:hover {
color: #53af43; color: #53af43;
} }

View File

@ -205,7 +205,8 @@
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:0;"/> <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:70px;text-align: right">服务端:</span><span class="mono">v${app_ver.TP_SERVER_VER}</span></div> <div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">服务端:</span><span class="mono">v${app_ver.TP_SERVER_VER}</span></div>
<div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">助手:</span><span class="mono" id="tp-assist-version" data-req-version=${app_ver.TP_ASSIST_REQUIRE}>v${app_ver.TP_ASSIST_LAST_VER}</span></div> ## <div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">助手:</span><span class="mono" id="tp-assist-version" data-req-version=$ { app_ver.TP_ASSIST_REQUIRE}>v$ { app_ver.TP_ASSIST_LAST_VER}</span></div>
## <div style="color:#717171;font-size:90%;margin-top:5px;"><span style="display:inline-block;width:70px;text-align: right">助手:</span><span class="mono" id="tp-assist-version">未连接</span></div>
<hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:20px;margin-top:5px;"/> <hr style="border:none;border-bottom:1px dotted #4a4a4a;margin-bottom:20px;margin-top:5px;"/>
## </div> ## </div>

View File

@ -16,6 +16,13 @@
</style> </style>
</%block> </%block>
<%block name="breadcrumb_extra">
<ol class="breadcrumb breadcrumb-list">
## <li><i class="fa fa-clock-o"></i> 服务器时间:<span id="tp-timer">-</span></li>
<li><i class="fa fa-flash"></i> 助手版本:<span id="tp-assist-ver"></span></li>
</ol>
</%block>
## Begin Main Body. ## Begin Main Body.
<div class="page-content-inner"> <div class="page-content-inner">
@ -29,8 +36,6 @@
</div> </div>
<div class="table-extend-cell table-extend-cell-right group-actions"> <div class="table-extend-cell table-extend-cell-right group-actions">
<button id="btn-add-host" class="btn btn-sm btn-primary"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button> <button id="btn-add-host" class="btn btn-sm btn-primary"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button>
## <button id="btn-add-temp-account" class="btn btn-sm btn-success"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button>
<button id="btn-import-asset" class="btn btn-sm btn-default"><i class="fa fa-plus-square fa-fw"></i> 导入主机和账号</button> <button id="btn-import-asset" class="btn btn-sm btn-default"><i class="fa fa-plus-square fa-fw"></i> 导入主机和账号</button>
</div> </div>
</div> </div>

View File

@ -50,7 +50,7 @@
## Begin Main Body. ## Begin Main Body.
<div class="content-box"> <div class="content-box">
<p class="welcome-message"><i class="fa fa-heart"></i> <span>欢迎安装使用 TELEPORT v${app_ver.TP_SERVER_VER} 社区版!</span></p> <p class="welcome-message"><i class="fa fa-heart"></i> <span>欢迎安装使用 TELEPORT v${app_ver.TP_SRV_WWW_VER} 社区版!</span></p>
<hr/> <hr/>
<h2><i class="fa fa-chevron-right"></i> 确定数据库类型</h2> <h2><i class="fa fa-chevron-right"></i> 确定数据库类型</h2>

View File

@ -50,10 +50,10 @@
</%block> </%block>
</div> </div>
<div class="page-header-extra" style="display:inline-block;float:right;padding-top:12px;"> <div class="page-header-extra" style="display:inline-block;float:right;">
## <ol class="bread-crumb"> <div class="breadcrumb-container">
## <li><i class="fa fa-clock-o fa-fw"></i> <span id="system-timer">111</span></li> <%block name="breadcrumb_extra"/>
## </ol> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,2 +1,2 @@
# -*- coding: utf8 -*- # -*- coding: utf8 -*-
TP_SRV_WWW_VER = "3.0.0.1" TP_SERVER_VER = "3.0.0.1"

View File

@ -13,8 +13,7 @@ Revision 修订号。主版本号和次版本号都相同但修订号不同
Build 构建号。构建号用于表明此版本发布之前进行了多少次构建及测试。某些情况下此版本号可以省略。 Build 构建号。构建号用于表明此版本发布之前进行了多少次构建及测试。某些情况下此版本号可以省略。
TP_SERVER 3.0.0.1 # 整个服务端打包的版本,任意一个 TP_SRV_xxx 升级,此版本也需要升级 TP_SERVER 3.0.0.1 # 整个服务端打包的版本
TP_SRV_WWW 3.0.0.1 # web前后端版本 TP_TPCORE 3.0.0.1 # 核心服务 tp_core 的版本
TP_SRV_TPCORE 3.0.0.1 # 核心服务 tp_core 的版本 TP_TPWEB 3.0.0.1 # web服务 tp_web 的版本一般除非升级Python否则不会变化
TP_SRV_TPWEB 3.0.0.1 # web服务 tp_web 的版本一般除非升级Python否则不会变化
TP_ASSIST 3.0.0.1 # 助手版本 TP_ASSIST 3.0.0.1 # 助手版本