Wide Session
This commit is contained in:
parent
470d0f9169
commit
5e01f1e394
|
@ -9,7 +9,6 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"github.com/b3log/wide/event"
|
"github.com/b3log/wide/event"
|
||||||
"github.com/b3log/wide/i18n"
|
"github.com/b3log/wide/i18n"
|
||||||
"github.com/b3log/wide/user"
|
|
||||||
"github.com/b3log/wide/util"
|
"github.com/b3log/wide/util"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
@ -67,8 +66,8 @@ func event2Notification(e *event.Event) {
|
||||||
|
|
||||||
// 建立通知通道.
|
// 建立通知通道.
|
||||||
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
// TODO: 会话校验
|
||||||
sid := session.Values["id"].(string)
|
sid := r.URL.Query()["sid"][0]
|
||||||
|
|
||||||
conn, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
|
conn, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
|
|
@ -26,8 +26,8 @@ var outputWS = map[string]*util.WSChannel{}
|
||||||
|
|
||||||
// 建立输出通道.
|
// 建立输出通道.
|
||||||
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
// TODO: 会话校验
|
||||||
sid := session.Values["id"].(string)
|
sid := r.URL.Query()["sid"][0]
|
||||||
|
|
||||||
conn, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
|
conn, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
@ -45,9 +45,6 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
data := map[string]interface{}{"succ": true}
|
data := map[string]interface{}{"succ": true}
|
||||||
defer util.RetJSON(w, r, data)
|
defer util.RetJSON(w, r, data)
|
||||||
|
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
|
||||||
sid := session.Values["id"].(string)
|
|
||||||
|
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
|
||||||
var args map[string]interface{}
|
var args map[string]interface{}
|
||||||
|
@ -59,6 +56,9 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 会话校验
|
||||||
|
sid := args["sid"].(string)
|
||||||
|
|
||||||
filePath := args["executable"].(string)
|
filePath := args["executable"].(string)
|
||||||
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
||||||
|
|
||||||
|
@ -150,9 +150,8 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
data := map[string]interface{}{"succ": true}
|
data := map[string]interface{}{"succ": true}
|
||||||
defer util.RetJSON(w, r, data)
|
defer util.RetJSON(w, r, data)
|
||||||
|
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
httpSession, _ := user.HTTPSession.Get(r, "wide-session")
|
||||||
sid := session.Values["id"].(string)
|
username := httpSession.Values["username"].(string)
|
||||||
username := session.Values["username"].(string)
|
|
||||||
|
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
|
||||||
|
@ -165,6 +164,9 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 会话校验
|
||||||
|
sid := args["sid"].(string)
|
||||||
|
|
||||||
filePath := args["file"].(string)
|
filePath := args["file"].(string)
|
||||||
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
||||||
|
|
||||||
|
@ -314,9 +316,8 @@ func GoInstallHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
data := map[string]interface{}{"succ": true}
|
data := map[string]interface{}{"succ": true}
|
||||||
defer util.RetJSON(w, r, data)
|
defer util.RetJSON(w, r, data)
|
||||||
|
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
httpSession, _ := user.HTTPSession.Get(r, "wide-session")
|
||||||
sid := session.Values["id"].(string)
|
username := httpSession.Values["username"].(string)
|
||||||
username := session.Values["username"].(string)
|
|
||||||
|
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
|
||||||
|
@ -329,6 +330,9 @@ func GoInstallHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 会话校验
|
||||||
|
sid := args["sid"].(string)
|
||||||
|
|
||||||
filePath := args["file"].(string)
|
filePath := args["file"].(string)
|
||||||
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
||||||
|
|
||||||
|
@ -439,9 +443,8 @@ func GoGetHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
data := map[string]interface{}{"succ": true}
|
data := map[string]interface{}{"succ": true}
|
||||||
defer util.RetJSON(w, r, data)
|
defer util.RetJSON(w, r, data)
|
||||||
|
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
httpSession, _ := user.HTTPSession.Get(r, "wide-session")
|
||||||
sid := session.Values["id"].(string)
|
username := httpSession.Values["username"].(string)
|
||||||
username := session.Values["username"].(string)
|
|
||||||
|
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
|
||||||
|
@ -454,6 +457,9 @@ func GoGetHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 会话校验
|
||||||
|
sid := args["sid"].(string)
|
||||||
|
|
||||||
filePath := args["file"].(string)
|
filePath := args["file"].(string)
|
||||||
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
||||||
|
|
||||||
|
|
|
@ -26,25 +26,32 @@ var shellWS = map[string]*util.WSChannel{}
|
||||||
|
|
||||||
// Shell 首页.
|
// Shell 首页.
|
||||||
func IndexHandler(w http.ResponseWriter, r *http.Request) {
|
func IndexHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// 创建一个 Wide 会话
|
||||||
|
wideSession := user.WideSessions.New()
|
||||||
|
|
||||||
i18n.Load()
|
i18n.Load()
|
||||||
|
|
||||||
model := map[string]interface{}{"conf": conf.Wide, "i18n": i18n.GetAll(r), "locale": i18n.GetLocale(r)}
|
model := map[string]interface{}{"conf": conf.Wide, "i18n": i18n.GetAll(r), "locale": i18n.GetLocale(r),
|
||||||
|
"session": wideSession}
|
||||||
|
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
httpSession, _ := user.HTTPSession.Get(r, "wide-session")
|
||||||
|
|
||||||
if session.IsNew {
|
if httpSession.IsNew {
|
||||||
// TODO: 写死以 admin 作为用户登录
|
// TODO: 写死以 admin 作为用户登录
|
||||||
name := conf.Wide.Users[0].Name
|
name := conf.Wide.Users[0].Name
|
||||||
|
|
||||||
session.Values["username"] = name
|
httpSession.Values["username"] = name
|
||||||
session.Values["id"] = strconv.Itoa(rand.Int())
|
httpSession.Values["id"] = strconv.Itoa(rand.Int())
|
||||||
// 一天过期
|
// 一天过期
|
||||||
session.Options.MaxAge = 60 * 60 * 24
|
httpSession.Options.MaxAge = 60 * 60 * 24
|
||||||
|
|
||||||
glog.Infof("Created a session [%s] for user [%s]", session.Values["id"].(string), name)
|
glog.Infof("Created a HTTP session [%s] for user [%s]", session.Values["id"].(string), name)
|
||||||
}
|
}
|
||||||
|
|
||||||
session.Save(r, w)
|
httpSession.Save(r, w)
|
||||||
|
|
||||||
|
// Wide 会话关联 HTTP 会话
|
||||||
|
wideSession.HTTPSessionId = httpSession.Values["id"].(string)
|
||||||
|
|
||||||
t, err := template.ParseFiles("view/shell.html")
|
t, err := template.ParseFiles("view/shell.html")
|
||||||
|
|
||||||
|
@ -60,9 +67,11 @@ func IndexHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// 建立 Shell 通道.
|
// 建立 Shell 通道.
|
||||||
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
session, _ := user.HTTPSession.Get(r, "wide-session")
|
httpSession, _ := user.HTTPSession.Get(r, "wide-session")
|
||||||
username := session.Values["username"].(string)
|
username := httpSession.Values["username"].(string)
|
||||||
sid := session.Values["id"].(string)
|
|
||||||
|
// TODO: 会话校验
|
||||||
|
sid := r.URL.Query()["sid"][0]
|
||||||
|
|
||||||
conn, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
|
conn, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
@ -72,7 +81,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
ret := map[string]interface{}{"output": "Shell initialized", "cmd": "init-shell"}
|
ret := map[string]interface{}{"output": "Shell initialized", "cmd": "init-shell"}
|
||||||
wsChan.Conn.WriteJSON(&ret)
|
wsChan.Conn.WriteJSON(&ret)
|
||||||
|
|
||||||
glog.Infof("Open a new [Shell] with session [%s], %d", sid, len(shellWS))
|
glog.V(4).Infof("Open a new [Shell] with session [%s], %d", sid, len(shellWS))
|
||||||
|
|
||||||
input := map[string]interface{}{}
|
input := map[string]interface{}{}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var notificationWS = new WebSocket(config.channel.shell + '/notification/ws');
|
var notificationWS = new WebSocket(config.channel.shell + '/notification/ws?sid=' + config.wideSessionId);
|
||||||
notificationWS.onopen = function() {
|
notificationWS.onopen = function() {
|
||||||
console.log('[notification onopen] connected');
|
console.log('[notification onopen] connected');
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var shellWS = new WebSocket(config.channel.shell + '/shell/ws');
|
var shellWS = new WebSocket(config.channel.shell + '/shell/ws?sid=' + config.wideSessionId);
|
||||||
shellWS.onopen = function() {
|
shellWS.onopen = function() {
|
||||||
console.log('[shell onopen] connected');
|
console.log('[shell onopen] connected');
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var outputWS = new WebSocket(config.channel.output + '/output/ws');
|
var outputWS = new WebSocket(config.channel.output + '/output/ws?sid=' + config.wideSessionId);
|
||||||
outputWS.onopen = function() {
|
outputWS.onopen = function() {
|
||||||
console.log('[output onopen] connected');
|
console.log('[output onopen] connected');
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
var config = {
|
var config = {
|
||||||
channel: {
|
channel: {
|
||||||
shell: '{{.conf.ShellChannel}}'
|
shell: '{{.conf.ShellChannel}}'
|
||||||
}
|
},
|
||||||
|
wideSessionId: {{.session.Id}}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="{{.conf.StaticServer}}/static/js/lib/jquery-2.1.1.min.js"></script>
|
<script type="text/javascript" src="{{.conf.StaticServer}}/static/js/lib/jquery-2.1.1.min.js"></script>
|
||||||
|
|
Loading…
Reference in New Issue