From fe7c0209a0a82facd2fbc4783c32c22cf751a932 Mon Sep 17 00:00:00 2001 From: shaoying Date: Thu, 8 Oct 2020 10:15:13 +0800 Subject: [PATCH] opt share --- base/aaa/sess.go | 1 + base/aaa/user.go | 2 +- base/web/route.go | 29 ++++++++++++++++++----------- base/web/serve.go | 12 +++++++++++- base/web/share.go | 26 ++++++++++++++++++++++---- base/web/web.shy | 2 +- core/chat/river.go | 18 +++++++++++++++++- 7 files changed, 71 insertions(+), 19 deletions(-) diff --git a/base/aaa/sess.go b/base/aaa/sess.go index 43762758..1c1f1ce5 100644 --- a/base/aaa/sess.go +++ b/base/aaa/sess.go @@ -59,6 +59,7 @@ func SessCheck(m *ice.Message, sessid string) *ice.Message { return m } func SessCreate(m *ice.Message, username, userrole string) string { + m.Set(ice.MSG_RESULT) _sess_auth(m, _sess_create(m, username), username, userrole) return m.Result() } diff --git a/base/aaa/user.go b/base/aaa/user.go index ee09d0b6..ea9a0699 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -110,7 +110,7 @@ func init() { _user_search(m, arg[0], arg[1], kit.Select("", arg, 2)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select("time,userzone,usernick,username", mdb.DETAIL, len(arg) > 0)) + m.Option(mdb.FIELDS, kit.Select(kit.Select("time,userzone,usernick,username", mdb.DETAIL, len(arg) > 0), m.Option(mdb.FIELDS))) m.Cmdy(mdb.SELECT, USER, "", mdb.HASH, USERNAME, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/base/web/route.go b/base/web/route.go index 846e02a1..1022be52 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -47,11 +47,17 @@ func init() { ROUTE: {Name: ROUTE, Help: "路由器", Value: kit.Data(kit.MDB_SHORT, kit.SSH_ROUTE)}, }, Commands: map[string]*ice.Command{ - ROUTE: {Name: "route route ctx cmd auto invite", Help: "路由", Action: map[string]*ice.Action{ + ROUTE: {Name: "route route ctx cmd auto invite share", Help: "路由", Action: map[string]*ice.Action{ + SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) { + h := m.Cmdx(SHARE, mdb.CREATE, kit.MDB_TYPE, "login") + m.Cmdy("web.wiki.image", "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), SHARE, h)) + }}, mdb.INVITE: {Name: "invite", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.publish", "contexts", "tmux") m.Cmdy("web.code.publish", "contexts", "base") m.Cmdy("web.code.publish", "contexts", "miss") + + m.Cmdy("web.wiki.image", "qrcode", m.Option(ice.MSG_USERWEB)) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { @@ -83,22 +89,14 @@ func init() { return } - m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) { - m.Push(kit.MDB_TYPE, MYSELF) - m.Push(ROUTE, value["ip"]) - }) - m.Table(func(index int, value map[string]string, field []string) { - switch value[kit.MDB_TYPE] { - case MYSELF: - m.PushRender(kit.MDB_LINK, "a", value[kit.SSH_ROUTE], m.Option(ice.MSG_USERWEB)) - default: + if value[kit.MDB_TYPE] != MYSELF { m.PushRender(kit.MDB_LINK, "a", value[kit.SSH_ROUTE], kit.MergeURL(m.Option(ice.MSG_USERWEB), kit.SSH_POD, kit.Keys(m.Option(kit.SSH_POD, value[kit.SSH_ROUTE])))) } switch value[kit.MDB_TYPE] { - case MYSELF, SERVER: + case SERVER: m.PushButton(gdb.START) case WORKER: m.PushButton(gdb.STOP) @@ -106,6 +104,15 @@ func init() { m.PushButton("") } }) + + m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) { + m.Push(kit.MDB_TYPE, MYSELF) + m.Push(kit.SSH_ROUTE, ice.Info.NodeName) + u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) + m.PushRender(kit.MDB_LINK, "a", value["ip"], kit.Format("%s://%s:%s", u.Scheme, value["ip"], u.Port())) + m.PushButton(gdb.START) + }) + m.Sort(kit.SSH_ROUTE) return // 设备列表 } diff --git a/base/web/serve.go b/base/web/serve.go index a53bb576..639fec00 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -53,9 +53,19 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool { }() } + if r.URL.Path == "/" && r.FormValue(SHARE) != "" { + m.W = w + s := m.Cmd(SHARE, mdb.SELECT, kit.MDB_HASH, r.FormValue(SHARE)) + Render(m, COOKIE, aaa.SessCreate(m, + s.Append(aaa.USERNAME), s.Append(aaa.USERROLE), + )) + m.W = nil + http.Redirect(w, r, kit.MergeURL(r.URL.String(), SHARE, ""), http.StatusTemporaryRedirect) + return false + } + // 单点登录 if r.URL.Path == "/" && m.Conf(SERVE, "meta.sso") != "" { - r.ParseForm() sessid := r.FormValue(ice.MSG_SESSID) if sessid == "" { if c, e := r.Cookie(ice.MSG_SESSID); e == nil { diff --git a/base/web/share.go b/base/web/share.go index 690a4720..e7be2d0a 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -77,9 +77,7 @@ const SHARE = "share" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - SHARE: {Name: SHARE, Help: "共享链", Value: kit.Data( - "expire", "72h", - )}, + SHARE: {Name: SHARE, Help: "共享链", Value: kit.Data("expire", "72h")}, }, Commands: map[string]*ice.Command{ SHARE: {Name: "share hash auto", Help: "共享链", Action: map[string]*ice.Action{ @@ -89,14 +87,34 @@ func init() { "river", m.Option(ice.MSG_RIVER), "storm", m.Option(ice.MSG_STORM), kit.MDB_TIME, m.Time(m.Conf(SHARE, "meta.expire")), arg) }}, + mdb.SELECT: {Name: "select hash", Help: "查询", Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,userrole,username,river,storm,type,name,text") + m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) + }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.DELETE, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, "time,hash,userrole,username,river,storm,type,name,text") + m.Option(mdb.FIELDS, kit.Select("time,hash,userrole,username,river,storm,type,name,text", mdb.DETAIL, len(arg) > 0)) m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction("删除") }}, + "/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(mdb.FIELDS, kit.Select("time,hash,userrole,username,river,storm,type,name,text")) + switch msg := m.Cmd(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg[0]); msg.Append(kit.MDB_TYPE) { + case "login": + switch kit.Select("", arg, 1) { + case "share": + list := []string{} + for _, k := range []string{"river", "storm"} { + if msg.Append(k) != "" { + list = append(list, k, msg.Append(k)) + } + } + m.Render(ice.RENDER_QRCODE, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/", SHARE, arg[0], list)) + } + } + }}, "/share/local/": {Name: "/share/local/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { _share_local(m, arg...) diff --git a/base/web/web.shy b/base/web/web.shy index 2a085e50..a1017653 100644 --- a/base/web/web.shy +++ b/base/web/web.shy @@ -6,8 +6,8 @@ field "空间站" web.space field "梦想家" web.dream field "路由器" web.route +field "共享链" web.share field "缓存池" web.cache return -field "共享链" web.share field "故事会" web.story diff --git a/core/chat/river.go b/core/chat/river.go index 1236a6eb..292c4bb6 100644 --- a/core/chat/river.go +++ b/core/chat/river.go @@ -257,7 +257,20 @@ func init() { m.Cmdy(mdb.IMPORT, RIVER, "", mdb.HASH) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INPUTS, RIVER, "", mdb.HASH, arg) + switch arg[0] { + case aaa.USERNAME: + m.Cmdy(aaa.USER) + m.Appendv(ice.MSG_APPEND, "username", "usernick", "userzone") + case aaa.USERROLE: + m.Push(aaa.USERROLE, aaa.VOID) + m.Push(aaa.USERROLE, aaa.TECH) + m.Push(aaa.USERROLE, aaa.ROOT) + default: + m.Cmdy(mdb.INPUTS, RIVER, "", mdb.HASH, arg) + } + }}, + web.SHARE: {Name: "share name", Help: "共享", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(web.SHARE, mdb.CREATE, kit.MDB_TYPE, "login", arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, arg) @@ -285,6 +298,9 @@ func init() { case USER, TOOL, NODE: m.Option(ice.MSG_RIVER, arg[0]) m.Cmdy(m.Prefix(arg[1]), arg[2:]) + case "action": + m.Option(ice.MSG_RIVER, arg[0]) + m.Cmdy(RIVER, arg[1:]) default: m.Cmdy(RIVER, arg) }