From d8451b0060901666c7d1b6c96198059324448096 Mon Sep 17 00:00:00 2001 From: shylinux Date: Wed, 18 Mar 2020 10:13:26 +0800 Subject: [PATCH] opt mp --- base/aaa/aaa.go | 31 +++++++++++++++++------ base/web/template.go | 9 +++---- base/web/web.go | 44 ++++++++++++++++----------------- core/chat/chat.go | 6 ++--- core/wiki/wiki.go | 2 +- misc/mp/mp.go | 59 +++++++++++++++++++++++++++++++++----------- 6 files changed, 98 insertions(+), 53 deletions(-) diff --git a/base/aaa/aaa.go b/base/aaa/aaa.go index def8667a..01ae6a4b 100644 --- a/base/aaa/aaa.go +++ b/base/aaa/aaa.go @@ -28,6 +28,17 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块", }}, ice.AAA_ROLE: {Name: "role check|black|white|right", Help: "角色", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + kit.Fetch(m.Confv("role", "meta.root"), func(key string, value string) { + m.Push("userrole", "root") + m.Push("username", key) + }) + kit.Fetch(m.Confv("role", "meta.tech"), func(key string, value string) { + m.Push("userrole", "tech") + m.Push("username", key) + }) + return + } switch arg[0] { case "check": // 用户角色 @@ -90,9 +101,17 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块", } }}, ice.AAA_USER: {Name: "user first|login", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + // 用户列表 + m.Richs(ice.AAA_USER, nil, "*", func(key string, value map[string]interface{}) { + m.Push(key, value, []string{"time", "username", "usernode"}) + }) + return + } + switch arg[0] { case "first": - // 初始用户 + // 超级用户 if m.Richs(ice.AAA_USER, nil, "%", nil) == nil { m.Rich(ice.AAA_USER, nil, kit.Dict("username", arg[1], "usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"), @@ -133,18 +152,13 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块", } // 创建会话 - role := m.Cmdx(ice.AAA_ROLE, "check", arg[1]) - sessid := m.Rich(ice.AAA_SESS, nil, kit.Dict( - "username", arg[1], "userrole", role, - )) - m.Info("user: %s role: %s sess: %s", arg[1], role, sessid) - m.Echo(sessid) + m.Echo(m.Cmdx(ice.AAA_SESS, "create", arg[1])) } }}, ice.AAA_SESS: {Name: "sess check|login", Help: "会话", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 会话列表 - m.Richs(ice.AAA_SESS, nil, "", func(key string, value map[string]interface{}) { + m.Richs(ice.AAA_SESS, nil, "*", func(key string, value map[string]interface{}) { m.Push(key, value, []string{"key", "time", "username", "userrole"}) }) return @@ -162,6 +176,7 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块", // 创建会话 h := m.Rich(ice.AAA_SESS, nil, kit.Dict( "username", arg[1], "userrole", m.Cmdx(ice.AAA_ROLE, "check", arg[1]), + "from", m.Option(ice.MSG_SESSID), )) m.Log(ice.LOG_CREATE, "sessid: %s username: %s", h, arg[1]) m.Echo(h) diff --git a/base/web/template.go b/base/web/template.go index 7d5965bd..50445ba0 100644 --- a/base/web/template.go +++ b/base/web/template.go @@ -5,11 +5,10 @@ import ( ) var share_template = kit.Dict( - "value", ``, - "share", ``, - "text", ``, - - "link", `%s`, + "text", ``, + "value", ``, + "share", ``, + "link", `%s`, "simple", ` diff --git a/base/web/web.go b/base/web/web.go index 317a8372..a2dc207d 100644 --- a/base/web/web.go +++ b/base/web/web.go @@ -117,6 +117,7 @@ func (web *Frame) Login(msg *ice.Message, w http.ResponseWriter, r *http.Request msg.Target().Run(msg, s, ice.WEB_LOGIN, kit.Simple(msg.Optionv("cmds"))...) } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/static/") { } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/plugin/") { + } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/login/") { } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/space/") { } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/route/") { } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/share/") { @@ -305,6 +306,7 @@ func (web *Frame) HandleCmd(m *ice.Message, key string, cmd *ice.Command) { case "result": fmt.Fprint(w, msg.Result()) default: + w.Header().Set("Content-Type", "application/json") fmt.Fprint(w, msg.Formats("meta")) } }) @@ -521,7 +523,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", m.Push("detail", value) if kit.Value(value, "client.share") != nil { m.Push("key", "share") - m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.text"), kit.Value(value, "client.share"))) + m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.text"), m.Conf(ice.WEB_SHARE, "meta.domain"), kit.Value(value, "client.share"))) } }) return @@ -769,17 +771,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", // } // m.Cmd(ice.WEB_SPACE, arg[1], "sessid", sessid) // }) - // + case "share": - switch arg[1] { - case "add": - m.Cmdy(ice.WEB_SPIDE, "self", path.Join("/space/share/add", path.Join(arg[2:]...))) - default: - m.Richs(ice.WEB_SPIDE, nil, m.Option("_dev"), func(key string, value map[string]interface{}) { - m.Log(ice.LOG_CREATE, "dev: %s share: %s", m.Option("_dev"), arg[1]) - value["share"] = arg[1] - }) - } + m.Richs(ice.WEB_SPIDE, nil, m.Option("_dev"), func(key string, value map[string]interface{}) { + m.Log(ice.LOG_CREATE, "dev: %s share: %s", m.Option("_dev"), arg[1]) + value["share"] = arg[1] + }) case "connect": // 基本信息 @@ -812,7 +809,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", } // 断线重连 - sleep := time.Duration(rand.Intn(kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.a"))*i)+kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.b"))) * time.Millisecond + sleep := time.Duration(rand.Intn(kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.a"))*i+2)+kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.b"))) * time.Millisecond msg.Info("%d sleep: %s reconnect: %s", i, sleep, u) time.Sleep(sleep) } @@ -1590,11 +1587,11 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", m.Richs(ice.WEB_SHARE, nil, arg[0], func(key string, value map[string]interface{}) { m.Push("detail", value) m.Push("key", "link") - m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.link"), key, key)) + m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.link"), m.Conf(ice.WEB_SHARE, "meta.domain"), key, key)) m.Push("key", "share") - m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.share"), key)) + m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.share"), m.Conf(ice.WEB_SHARE, "meta.domain"), key)) m.Push("key", "value") - m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.value"), key)) + m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.value"), m.Conf(ice.WEB_SHARE, "meta.domain"), key)) }) return } @@ -1602,13 +1599,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", switch arg[0] { case "auth": m.Richs(ice.WEB_SHARE, nil, arg[1], func(key string, value map[string]interface{}) { - if value["type"] == "login" { - m.Richs(ice.AAA_SESS, nil, value["text"], func(key string, value map[string]interface{}) { - value["userrole"] = m.Cmdx(ice.AAA_ROLE, "check", arg[2]) - m.Echo("%s", value["userrole"]) - value["username"] = arg[2] - }) - } + m.Richs(ice.AAA_SESS, nil, value["text"], func(key string, value map[string]interface{}) { + value["username"], value["userrole"] = arg[2], m.Cmdx(ice.AAA_ROLE, "check", arg[2]) + m.Echo("%s", value["userrole"]) + }) }) case "add": @@ -1670,6 +1664,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", }}, "/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + switch arg[0] { + case "local": + Render(m, "download", m.Cmdx(arg[1], path.Join(arg[2:]...))) + return + } + m.Richs(ice.WEB_SHARE, nil, arg[0], func(key string, value map[string]interface{}) { m.Log(ice.LOG_EXPORT, "%s: %v", arg, kit.Format(value)) diff --git a/core/chat/chat.go b/core/chat/chat.go index b6777973..056508ee 100644 --- a/core/chat/chat.go +++ b/core/chat/chat.go @@ -457,9 +457,10 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心", m.Cmdy(ice.WEB_FAVOR, arg[5:]) return - case "location": + case "device": // 记录位置 - m.Cmdy("aaa.location", arg[5:]) + m.Cmd(ice.WEB_FAVOR, kit.Select("device", m.Option("hot")), arg[5], arg[6], + kit.Select("", arg, 7), kit.KeyValue(map[string]interface{}{}, "", kit.UnMarshal(kit.Select("{}", arg, 8)))) return case "upload": @@ -483,7 +484,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心", }) if len(cmds) == 0 { - web.Render(m, "status", 404, "not found") return } diff --git a/core/wiki/wiki.go b/core/wiki/wiki.go index ff3810c5..18799ee3 100644 --- a/core/wiki/wiki.go +++ b/core/wiki/wiki.go @@ -76,7 +76,7 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心", }, )}, "walk": {Name: "walk", Help: "走遍世界", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.csv")}, - "feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.(png|JPG|MOV|m4v)")}, + "feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.(png|jpg|JPG|MOV|m4v)")}, }, Commands: map[string]*ice.Command{ ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/misc/mp/mp.go b/misc/mp/mp.go index f911c8e6..01dd8889 100644 --- a/misc/mp/mp.go +++ b/misc/mp/mp.go @@ -5,6 +5,8 @@ import ( "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/chat" "github.com/shylinux/toolkits" + + "path" ) var Index = &ice.Context{Name: "mp", Help: "小程序", @@ -20,25 +22,45 @@ var Index = &ice.Context{Name: "mp", Help: "小程序", Commands: map[string]*ice.Command{ ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() + m.Cmd(ice.WEB_SPIDE, "add", "weixin", m.Conf("login", "meta.weixin")) m.Confm("login", "meta.userrole", func(key string, value string) { m.Cmd(ice.AAA_ROLE, value, key) }) - m.Cmd(ice.WEB_SPIDE, "add", "weixin", m.Conf("login", "meta.weixin")) }}, ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save("login") }}, + + "scan": {Name: "scan", Help: "扫码", List: kit.List( + kit.MDB_INPUT, "text", "name", "location", "cb", "location", + kit.MDB_INPUT, "text", "name", "battery", "cb", "battery", + kit.MDB_INPUT, "text", "name", "paste", "cb", "paste", + kit.MDB_INPUT, "text", "name", "scan", "cb", "scan", + kit.MDB_INPUT, "text", "name", "wifi", "cb", "wifi", + + kit.MDB_INPUT, "text", "name", "album", "cb", "album", + kit.MDB_INPUT, "text", "name", "finger", "cb", "finger", + kit.MDB_INPUT, "text", "name", "vibrate", "cb", "vibrate", + kit.MDB_INPUT, "text", "name", "wifiList", "cb", "wifiList", + kit.MDB_INPUT, "text", "name", "wifiConn", "cb", "wifiConn", + + kit.MDB_INPUT, "textarea", "name", "scan", "cb", "scan", + kit.MDB_INPUT, "textarea", "name", "location", "cb", "location", + kit.MDB_INPUT, "button", "name", "scan", "cb", "scan", + kit.MDB_INPUT, "button", "name", "location", "cb", "location", + kit.MDB_INPUT, "button", "name", "text", + kit.MDB_INPUT, "button", "name", "share", + ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Echo(arg[0]) + }}, "/login/": {Name: "/login/", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[0] { case "code": - msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"), - "js_code", m.Option("code"), "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm")) + msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"), "js_code", m.Option("code"), + "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm")) // 用户登录 - m.Option(ice.MSG_USERNAME, msg.Append("openid")) - m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", m.Option("FromUserName"))) - m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME)) - m.Echo(m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", m.Option(ice.MSG_USERNAME)))) + m.Echo(m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", msg.Append("openid")))) case "info": // 用户信息 @@ -58,26 +80,35 @@ var Index = &ice.Context{Name: "mp", Help: "小程序", web.Render(m, "qrcode", m.Option("scan")) case "auth": - if !m.Options(ice.MSG_USERNAME) || !m.Options(ice.MSG_SESSID) { + if !m.Options(ice.MSG_USERNAME) { web.Render(m, "status", 401, "not login") break } + switch kit.Select("active", m.Option("type")) { case "active": // 授权登录 - m.Cmd(ice.WEB_SPACE, "auth", m.Option("auth"), m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERROLE)) + m.Cmd(ice.WEB_SPACE, m.Option("auth"), "sessid", m.Cmdx(ice.AAA_SESS, "create", m.Option(ice.MSG_USERNAME))) } + case "upload": + msg := m.Cmd(ice.WEB_CACHE, "upload") + m.Cmdy(ice.WEB_STORY, ice.STORY_WATCH, msg.Append("data"), path.Join("usr/local/mp/", path.Base(msg.Append("name")))) + web.Render(m, msg.Append("data")) + m.Cmdy(ice.WEB_FAVOR, "device", "file", msg.Append("name"), msg.Append("data")) + case "cmds": + if !m.Options(ice.MSG_USERNAME) { + web.Render(m, "status", 401, "not login") + break + } if arg = kit.Split(arg[1]); !m.Right(arg) { - return + web.Render(m, "status", 403, "not auth") + break } // 执行命令 - msg := m.Cmd(arg) - if m.Hand = false; !msg.Hand { - msg = m.Cmd(ice.CLI_SYSTEM, arg) - } + m.Cmdy(arg) } }}, },