Skip to content

Commit 8d99d22

Browse files
author
cczdev
committed
Add Timeout & LogLevel
1 parent b908739 commit 8d99d22

File tree

11 files changed

+164
-41
lines changed

11 files changed

+164
-41
lines changed

.gitignore

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ bin/apibox
2727

2828
.vscode/tasks.json
2929

30-
bin/apibox
31-
32-
bin/apibox
30+
/bin/apibox
31+
log/
32+
src/github.com/
33+
src/golang.org/
34+
*.swp

bin/compile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
GOPATH=/home/cczdev/workspaces/webconsole
4+
5+
(cd $GOPATH/src/apibox.club/apibox; GOPATH=$GOPATH go build; mv apibox $GOPATH/bin)

conf/conf.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"web": {
33
"addr": ":8080",
44
"tls_addr": ":8443",
5-
"tls_url": "https://webconsole.realclouds.org",
5+
"tls_url": "https://localhost:8443",
66
"static_dir": "static",
77
"template_dir": "template/default",
88
"template_suffix": ".html",
@@ -11,10 +11,12 @@
1111
"jsonp_param": "callback",
1212
"enable_gzip": false,
1313
"enable_tls": false,
14-
"cors_white_list": "127.0.0.1,127.0.0.1:8081,127.0.0.1:8080,127.0.0.1:8443,localhost,localhost:8080,localhost:8081,localhost:8443,pangu.cloud,www.pangu.cloud,webconsole.daoapp.io,webconsole.realclouds.org,webconsole.realclouds.org:8080,ksc-03.realclouds.org:8080,ksc-03.realclouds.org,webconsole.realclouds.org:8443,b.com:8081,a.com:8081",
14+
"cors_white_list": "127.0.0.1:8080,127.0.0.1:8443,localhost:8080,localhost:8443,192.168.62.101:8080",
1515
"enable_fcgi": false,
1616
"tls_cert": "214044428560678.pem",
1717
"tls_key": "214044428560678.key",
18-
"daemon": false
18+
"daemon": false,
19+
"url_timeout": "60s",
20+
"log_level": "Debug"
1921
}
20-
}
22+
}

src/apibox.club/utils/common.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ type (
5959
TlsCert string `json:"tls_cert,omitempty" xml:"tls_cert,omitempty"`
6060
TlsKey string `json:"tls_key,omitempty" xml:"tls_key,omitempty"`
6161
Daemon bool `json:"daemon,omitempty" xml:"daemon,omitempty"`
62+
UrlTimeout string `json:"url_timeout,omitempty" xml:"url_timeout,omitempty"`
63+
LogLevel string `json:"log_level,omitempty" xml:"log_level,omitempty"`
6264
}
6365

6466
DB_Conf struct {

src/apibox.club/website/console.go

Lines changed: 69 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func (s *ssh) Connect() (*ssh, error) {
3030
config.SetDefaults()
3131
config.User = s.user
3232
config.Auth = []gossh.AuthMethod{gossh.Password(s.pwd)}
33+
config.HostKeyCallback = func(hostname string, remote net.Addr, key gossh.PublicKey) error { return nil }
3334
client, err := gossh.Dial("tcp", s.addr, config)
3435
if nil != err {
3536
return nil, err
@@ -119,6 +120,11 @@ type jsonMsg struct {
119120
Data string `json:"data"`
120121
}
121122

123+
// RFC 4254 Section 6.5
124+
type execMsg struct {
125+
Command string
126+
}
127+
122128
func SSHWebSocketHandler(w http.ResponseWriter, r *http.Request) {
123129
ctx := NewContext(w, r)
124130
ws, err := upgrader.Upgrade(w, r, nil)
@@ -140,10 +146,11 @@ func SSHWebSocketHandler(w http.ResponseWriter, r *http.Request) {
140146
return
141147
} else {
142148
de_vm_info_arr := strings.Split(de_vm_info, "\n")
143-
if len(de_vm_info_arr) == 3 {
149+
if len(de_vm_info_arr) == 5 {
144150
user_name := strings.TrimSpace(de_vm_info_arr[0])
145151
user_pwd := strings.TrimSpace(de_vm_info_arr[1])
146152
vm_addr := strings.TrimSpace(de_vm_info_arr[2])
153+
vm_cid := strings.TrimSpace(de_vm_info_arr[4])
147154

148155
apibox.Log_Debug("VM Addr:", vm_addr)
149156

@@ -208,11 +215,24 @@ func SSHWebSocketHandler(w http.ResponseWriter, r *http.Request) {
208215
apibox.Log_Err(err)
209216
return
210217
}
211-
ok, err = channel.SendRequest("shell", true, nil)
212-
if !ok || err != nil {
213-
apibox.Log_Err(err)
214-
return
215-
}
218+
219+
execmd := execMsg{
220+
Command: "docker exec -it " + vm_cid + " /bin/sh -c '/bin/bash || /bin/sh'",
221+
}
222+
if vm_cid == "none" {
223+
ok, err = channel.SendRequest("shell", true, nil)
224+
if !ok || err != nil {
225+
apibox.Log_Err(err)
226+
return
227+
}
228+
} else {
229+
ok, err = channel.SendRequest("exec", true, gossh.Marshal(&execmd))
230+
if !ok || err != nil {
231+
apibox.Log_Err(err)
232+
return
233+
}
234+
235+
}
216236

217237
done := make(chan bool, 2)
218238
go func() {
@@ -316,10 +336,25 @@ func (c *Console) ConsoleMainPage(w http.ResponseWriter, r *http.Request) {
316336
ctx.OutHtml("login", nil)
317337
} else {
318338
de_vm_info_arr := strings.Split(de_vm_info, "\n")
319-
if len(de_vm_info_arr) == 3 {
339+
if len(de_vm_info_arr) == 5 {
320340
user_name := strings.TrimSpace(de_vm_info_arr[0])
321341
user_pwd := strings.TrimSpace(de_vm_info_arr[1])
322342
vm_addr := strings.TrimSpace(de_vm_info_arr[2])
343+
vm_time := strings.TrimSpace(de_vm_info_arr[3])
344+
345+
now := time.Now()
346+
start, _ := time.Parse("2006-01-02 15:04:05", vm_time)
347+
du, _ := time.ParseDuration("-8h")
348+
start = start.Add(du) //("2006-01-02 15:04:05")
349+
url_timeout, err := time.ParseDuration(Conf.Web.UrlTimeout)
350+
if nil != err {
351+
url_timeout, _ = time.ParseDuration("60s")
352+
}
353+
if now.Sub(start) > url_timeout {
354+
ctx.OutHtml("console/console_access", nil)
355+
return
356+
}
357+
323358

324359
cmpd := ConsoleMainPageData{
325360
UserName: user_name,
@@ -342,6 +377,14 @@ func (c *Console) ConsoleLogin(w http.ResponseWriter, r *http.Request) {
342377
user_name := ctx.GetFormValue("user_name")
343378
user_pwd := ctx.GetFormValue("user_pwd")
344379
vm_addr := ctx.GetFormValue("vm_addr")
380+
vm_cid := ctx.GetFormValue("vm_cid")
381+
vm_time := time.Now().Format("2006-01-02 15:04:05")
382+
383+
apibox.Log_Debug(user_name,user_pwd,vm_addr,vm_cid,vm_time)
384+
385+
if vm_cid == "" {
386+
vm_cid = "none"
387+
}
345388

346389
var err error
347390
boo := true
@@ -360,6 +403,7 @@ func (c *Console) ConsoleLogin(w http.ResponseWriter, r *http.Request) {
360403
addr: vm_addr,
361404
}
362405
sh, err = sh.Connect()
406+
apibox.Log_Debug(err)
363407
if nil != err {
364408
result.Ok = false
365409
result.Msg = "无法连接到远端主机,请确认远端主机已开机且保证口令的正确性。"
@@ -373,6 +417,8 @@ func (c *Console) ConsoleLogin(w http.ResponseWriter, r *http.Request) {
373417
ssh_info = append(ssh_info, user_name)
374418
ssh_info = append(ssh_info, user_pwd)
375419
ssh_info = append(ssh_info, vm_addr)
420+
ssh_info = append(ssh_info, vm_time)
421+
ssh_info = append(ssh_info, vm_cid)
376422
b64_ssh_info, err := apibox.AESEncode(strings.Join(ssh_info, "\n"), aesKey)
377423
if nil != err {
378424
apibox.Log_Err("AESEncode:", err)
@@ -430,4 +476,20 @@ func init() {
430476
Add_HandleFunc("get,post", "/console/logout", console.ConsoleLogout)
431477
Add_HandleFunc("get,post", "/console/main/:vm_info", console.ConsoleMainPage)
432478
Add_HandleFunc("get,post", "/console/sshws/:vm_info", SSHWebSocketHandler)
479+
480+
switch Conf.Web.LogLevel {
481+
case "Debug":
482+
apibox.Set_log_level(apibox.LevelDebug)
483+
case "Error":
484+
apibox.Set_log_level(apibox.LevelError)
485+
case "Fatal":
486+
apibox.Set_log_level(apibox.LevelFatal)
487+
case "Warn":
488+
apibox.Set_log_level(apibox.LevelWarn)
489+
case "Info":
490+
apibox.Set_log_level(apibox.LevelInfo)
491+
default:
492+
apibox.Set_log_level(apibox.LevelInfo)
493+
494+
}
433495
}

static/images/favicon.ico

-59.5 KB
Binary file not shown.

static/images/favicon.ico.bak

66.1 KB
Binary file not shown.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<!DOCTYPE html>
2+
<html lang="zh-CN">
3+
4+
<head>
5+
<title>WebConsole</title>
6+
<meta charset="utf-8">
7+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
8+
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no">
9+
<meta name="renderer" content="webkit">
10+
<meta name="Keywords" content="ApiBox.Club">
11+
<meta name="Description" content="ApiBox.Club">
12+
<meta name="copyright" content="2015 ApiBox.Club">
13+
<meta name="author" content="Eric Shi/QQ:155122504">
14+
<link rel="shortcut icon" href="/static/images/favicon.ico" type="image/x-icon">
15+
<!--[if lt IE 9]>
16+
<script src="/static/scripts/libs/html5/json/json2.min.js" type="text/javascript"></script>
17+
<script src="/static/scripts/libs/html5/html5shiv/html5shiv.min.js" type="text/javascript"></script>
18+
<script src="/static/scripts/libs/html5/respond/respond.min.js" type="text/javascript"></script>
19+
<![endif]-->
20+
<link type="text/css" rel="stylesheet" href="/static/scripts/libs/metro-ui/css/metro.min.css">
21+
<link type="text/css" rel="stylesheet" href="/static/scripts/libs/metro-ui/css/metro-icons.min.css">
22+
<link type="text/css" rel="stylesheet" href="/static/scripts/libs/metro-ui/css/metro-responsive.min.css">
23+
<script src="/static/scripts/libs/bowser/bowser.min.js" type="text/javascript"></script>
24+
<script src="/static/scripts/libs/jquery/jquery-2.2.4.min.js" type="text/javascript"></script>
25+
<script src="/static/scripts/libs/metro-ui/js/metro.min.js" type="text/javascript"></script>
26+
</head>
27+
28+
<body class="bg-lightTeal">
29+
<br />
30+
<br />
31+
<br />
32+
<br />
33+
<br />
34+
<br />
35+
<br />
36+
<center><h2>会话已经超时,访问拒绝!<br/><br/>请联系系统管理员!</h2></center>
37+
<script type="text/javascript">
38+
var bowserVerErrMsg = "WebClonsole 工具使用了 HTML5 的核心相关技术,为了更好的体验该工具,请升级您的浏览器到IE9、Chrome 40、Firefox 38、Safari 9或更高版本。";
39+
40+
var bowserVer = Number(bowser.version);
41+
42+
if (bowser.msie && bowserVer < 9) {
43+
alert(bowserVerErrMsg);
44+
}
45+
46+
if (bowser.firefox && bowserVer < 38) {
47+
alert(bowserVerErrMsg);
48+
}
49+
50+
if (bowser.chrome && bowserVer < 40) {
51+
alert(bowserVerErrMsg);
52+
}
53+
54+
if (bowser.safari && bowserVer < 9) {
55+
alert(bowserVerErrMsg);
56+
}
57+
</script>
58+
</body>
59+
</html>
60+

template/default/console/console_login.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ <h4 class="text-light header">SSH to
5757
</div>
5858
<br />
5959
<br />
60+
<div class="input-control text full-size" data-role="input">
61+
<span class="mif-linux prepend-icon"></span>
62+
<input type="text" name="vm_id" id="vm_cid" placeholder="请输入容器ID">
63+
<button class="button helper-button clear"><span class="mif-cross"></span></button>
64+
</div>
65+
<br />
66+
<br />
6067
<div class="form-actions">
6168
<span id="login-box-msg" class="tag alert"></span>
6269
<button type="submit" class="button primary place-right">登&nbsp;&nbsp;陆</button>
@@ -126,4 +133,4 @@ <h4 class="text-light header">SSH to
126133
});
127134
</script>
128135

129-
</html>
136+
</html>

template/default/console/console_main.html

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,6 @@
2424
</head>
2525

2626
<body class="bg-black">
27-
<div id="c-appbar" class="app-bar darcula" data-role="appbar">
28-
<a href="javascript:void(0);" class="app-bar-element branding">WebConsole</a>
29-
<span class="app-bar-divider"></span>
30-
<ul class="app-bar-menu">
31-
<li><a href="javascript:location.replace(location.href);">刷新</a></li>
32-
</ul>
33-
<div class="app-bar-element place-right">
34-
<span class="dropdown-toggle">
35-
<i class="mif-cog"></i>
36-
<abc% .UserName %>
37-
</span>
38-
<div class="app-bar-drop-container padding10 place-right no-margin-top block-shadow fg-dark" data-role="dropdown" data-no-close="true" style="width: 220px">
39-
<h5 class="text-light">我的控制台</h5>
40-
<ul class="unstyled-list fg-dark">
41-
<li><a href="javascript:void(0);" target="_blank">在线帮助</a></li>
42-
<li><a href="http://www.eriloan.com" target="_blank">论坛交流</a></li>
43-
<li class="divider"></li>
44-
<li><a href="javascript:void(0);">关于 WebConsole</a></li>
45-
<li class="divider"></li>
46-
<li><a href="javascript:void(0);" onclick="$.LogOut();" class="fg-white3 fg-hover-yellow">退出</a></li>
47-
</ul>
48-
</div>
49-
</div>
50-
</div>
5127
<div class="page-content">
5228
<div id="console_div">
5329
</div>
@@ -112,4 +88,4 @@ <h5 class="text-light">我的控制台</h5>
11288
});
11389
</script>
11490

115-
</html>
91+
</html>

0 commit comments

Comments
 (0)