From 7b31a67335869f563e3c4cd0f267af9ad803077f Mon Sep 17 00:00:00 2001 From: shy Date: Sat, 18 Nov 2023 13:05:50 +0800 Subject: [PATCH] add mp --- base/ctx/display.go | 2 +- base/web/serve.go | 1 + base/web/share.go | 2 +- base/web/stats.go | 26 +++++++++++++------------ base/web/token.go | 7 ++++++- conf.go | 1 + core/chat/header.go | 9 ++++----- misc/mp/login.go | 46 +++------------------------------------------ misc/mp/mp.shy | 12 ------------ misc/wx/login.go | 24 ++++++++++++++++++++++- misc/wx/scan.go | 8 ++++++++ misc/wx/wx.shy | 10 +++++++++- 12 files changed, 71 insertions(+), 77 deletions(-) diff --git a/base/ctx/display.go b/base/ctx/display.go index 98da8574..ce9a9eda 100644 --- a/base/ctx/display.go +++ b/base/ctx/display.go @@ -31,7 +31,7 @@ func DisplayTableCard(m *ice.Message, arg ...ice.Any) *ice.Message { return DisplayTable(m, STYLE, "card") } func DisplayStory(m *ice.Message, file string, arg ...ice.Any) *ice.Message { - kit.If(file == "", func() { file = kit.Keys(kit.FileName(5), nfs.JS) }) + kit.If(file == "", func() { file = kit.Keys(m.CommandKey(), nfs.JS) }) kit.If(isLocalFile(file), func() { file = path.Join(ice.PLUGIN_STORY, file) }) return DisplayBase(m, file, arg...) } diff --git a/base/web/serve.go b/base/web/serve.go index c9a3f11b..02fde109 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -125,6 +125,7 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response kit.For(r.PostForm, func(k string, v []string) { _log(FORM, k, kit.Join(v, lex.SP)).Optionv(k, v) }) } kit.For(r.Cookies(), func(k, v string) { m.Optionv(k, v) }) + m.Options(ice.MSG_REFERER, r.Header.Get(Referer)) m.Options(ice.MSG_METHOD, r.Method, ice.MSG_COUNT, "0") m.Options(ice.MSG_USERWEB, _serve_domain(m), ice.MSG_USERPOD, m.Option(ice.POD)) m.Options(ice.MSG_USERUA, r.Header.Get(UserAgent), ice.MSG_USERIP, r.Header.Get(ice.MSG_USERIP)) diff --git a/base/web/share.go b/base/web/share.go index f007bc0c..7ad8f7cc 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -112,7 +112,7 @@ func init() { RenderMain(m) } }}, - }, aaa.WhiteAction(), mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,usernick,username,userrole", mdb.EXPIRE, mdb.DAYS)), Hand: func(m *ice.Message, arg ...string) { + }, aaa.WhiteAction(), StatsAction(), mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,usernick,username,userrole", mdb.EXPIRE, mdb.DAYS)), Hand: func(m *ice.Message, arg ...string) { if kit.IsIn(m.Option(ice.MSG_USERROLE), aaa.ROOT, aaa.TECH) || len(arg) > 0 && arg[0] != "" { mdb.HashSelect(m, arg...) } diff --git a/base/web/stats.go b/base/web/stats.go index a46a4d7a..157b13cb 100644 --- a/base/web/stats.go +++ b/base/web/stats.go @@ -19,25 +19,27 @@ func init() { Index.MergeCommands(ice.Commands{ STATS: {Name: "stats refresh", Help: "汇总量", Meta: kit.Dict( ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict( - "command.total", "命令总数", - "repos.total", "代码库总数", - "dream.total", "空间总数", - "dream.start", "已启动空间", - "asset.amount", "资产总额", - "asset.count", "资产数量", "goods.amount", "商品总额", "goods.count", "商品数量", + "asset.amount", "资产总额", + "asset.count", "资产数量", + "task.total", "任务总数", + "dream.total", "空间总数", + "dream.start", "已启动空间", + "repos.total", "代码库总数", + "command.total", "命令总数", + "share.total", "共享总数", + "token.total", "令牌总数", "user.total", "用户总数", "sess.total", "会话总数", - "task.total", "任务总数", - "disk.total", "磁盘总量", - "disk.used", "磁盘用量", - "mem.total", "内存总量", - "mem.used", "内存用量", "cpu.total", "处理器核数", + "mem.used", "内存用量", + "mem.total", "内存总量", + "disk.used", "磁盘用量", + "disk.total", "磁盘总量", )), ), Hand: func(m *ice.Message, arg ...string) { - defer ctx.DisplayStory(m, "stats.js") + defer ctx.DisplayStory(m, "") if m.Option(ice.MSG_USERPOD) == "" { PushStats(m, kit.Keys(aaa.SESS, mdb.TOTAL), m.Cmd(aaa.SESS).Length(), "") if ice.Info.Username == ice.Info.Make.Username { diff --git a/base/web/token.go b/base/web/token.go index d514376f..9009f222 100644 --- a/base/web/token.go +++ b/base/web/token.go @@ -43,6 +43,11 @@ func init() { }).Cmd(nfs.SAVE, kit.HomePath(FILE), strings.Join(list, lex.NL)+lex.NL) m.ProcessClose() }}, - }, mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,type,name,text", mdb.EXPIRE, mdb.MONTH))}, + }, StatsAction(), mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,type,name,text", mdb.EXPIRE, mdb.MONTH)), Hand: func(m *ice.Message, arg ...string) { + mdb.HashSelect(m, arg...) + if len(arg) > 0 { + m.EchoScript(kit.Format("ish_miss_serve_log dev %s token %s", UserHost(m), arg[0])) + } + }}, }) } diff --git a/conf.go b/conf.go index 14d85a3d..04072137 100644 --- a/conf.go +++ b/conf.go @@ -228,6 +228,7 @@ const ( // MSG MSG_STORM = "sess.storm" MSG_COUNT = "sess.count" MSG_DAEMON = "sess.daemon" + MSG_REFERER = "sess.referer" MSG_FILES = "file.system" LOG_DISABLE = "log.disable" LOG_TRACEID = "log.id" diff --git a/core/chat/header.go b/core/chat/header.go index 5616c4de..15bb6cfe 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -122,14 +122,13 @@ func init() { m.Option("icon.lib", mdb.Conf(m, ICON, kit.Keym(nfs.PATH))) m.Option(MENUS, mdb.Config(m, MENUS)) m.Echo(mdb.Config(m, TITLE)) - mdb.HashSelect(m, arg...).Sort("order", "int") - if m.Option(ice.MSG_USERROLE) == aaa.TECH { - m.Action(mdb.CREATE, ice.DEMO) - } + mdb.HashSelect(m, arg...).Sort(mdb.ORDER, ice.INT) + m.Table(func(value ice.Maps) { m.Push(mdb.STATUS, kit.Select("enable", "disable", value[mdb.ORDER] == "")) }) + kit.If(m.Option(ice.MSG_USERROLE) == aaa.TECH, func() { m.Action(mdb.CREATE, ice.DEMO) }) kit.If(GetSSO(m), func(p string) { m.Push(mdb.TIME, m.Time()).Push(mdb.NAME, web.SERVE).Push(mdb.ICONS, nfs.USR_ICONS_ICEBERGS).Push(mdb.TYPE, "oauth").Push(web.LINK, p) }) - m.StatusTimeCount(kit.Dict(ice.DEMO, mdb.Config(m, ice.DEMO))) + m.StatusTimeCount(kit.Dict(mdb.ConfigSimple(m, ice.DEMO))) if gdb.Event(m, HEADER_AGENT); !_header_check(m, arg...) { return } diff --git a/misc/mp/login.go b/misc/mp/login.go index b072388b..0a5fd3cd 100644 --- a/misc/mp/login.go +++ b/misc/mp/login.go @@ -1,23 +1,14 @@ package mp import ( - "encoding/base64" - "net/http" - "time" - ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" - "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" - kit "shylinux.com/x/toolkits" ) -const ( - AUTH_CODE = "/sns/jscode2session?grant_type=authorization_code" -) const ( APPID = "appid" SECRET = "secret" @@ -40,41 +31,10 @@ func init() { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(web.SPIDE, mdb.CREATE, MP, mdb.Config(m, tcp.SERVER)) }}, - aaa.SESS: {Name: "sess code", Help: "会话", Hand: func(m *ice.Message, arg ...string) { - m.Option(ice.MSG_USERZONE, MP) - msg := m.Cmd(web.SPIDE, MP, http.MethodGet, AUTH_CODE, "js_code", m.Option(cli.CODE), mdb.ConfigSimple(m, APPID, SECRET)) - m.Echo(aaa.SessCreate(msg, msg.Append(OPENID))) - }}, - aaa.USER: {Help: "用户", Hand: func(m *ice.Message, arg ...string) { - if m.Cmd(aaa.USER, m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))).Length() == 0 { - m.Cmd(aaa.USER, mdb.CREATE, aaa.USERNICK, "", m.OptionSimple(aaa.USERNAME)) - } - m.Cmd(aaa.USER, mdb.MODIFY, m.OptionSimple(aaa.USERNAME), aaa.USERNICK, m.Option("nickName"), aaa.USERZONE, MP, - aaa.AVATAR, m.Option("avatarUrl"), aaa.GENDER, kit.Select("女", "男", m.Option(aaa.GENDER) == "1"), - m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE), - ) - }}, }, aaa.WhiteAction(aaa.SESS, aaa.USER), ctx.ConfAction(tcp.SERVER, "https://api.weixin.qq.com"))}, - LOGIN: {Name: "login appid auto qrcode tokens create", Help: "认证", Actions: ice.Actions{ - mdb.CREATE: {Name: "create appid secret", Hand: func(m *ice.Message, arg ...string) { - ctx.ConfigFromOption(m, APPID, SECRET) - }}, - TOKENS: {Help: "令牌", Hand: func(m *ice.Message, arg ...string) { - if now := time.Now().Unix(); mdb.Config(m, TOKENS) == "" || now > kit.Int64(mdb.Config(m, EXPIRES)) { - msg := m.Cmd(web.SPIDE, MP, http.MethodGet, "/cgi-bin/token?grant_type=client_credential", APPID, mdb.Config(m, APPID), SECRET, mdb.Config(m, SECRET)) - if m.Warn(msg.Append(ERRCODE) != "", msg.Append(ERRCODE), msg.Append(ERRMSG)) { - return - } - mdb.Config(m, EXPIRES, now+kit.Int64(msg.Append("expires_in"))) - mdb.Config(m, TOKENS, msg.Append("access_token")) - } - m.Echo(mdb.Config(m, TOKENS)).Status(EXPIRES, time.Unix(kit.Int64(mdb.Config(m, EXPIRES)), 0).Format(ice.MOD_TIME)) - }}, - QRCODE: {Name: "qrcode path scene", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { - msg := m.Cmd(web.SPIDE, MP, http.MethodPost, "/wxa/getwxacodeunlimit?access_token="+m.Cmdx(LOGIN, TOKENS), m.OptionSimple("path,scene")) - m.Echo(kit.Format(``, base64.StdEncoding.EncodeToString([]byte(msg.Result())), "some")).ProcessInner() - }}, - }, Hand: func(m *ice.Message, arg ...string) { m.Echo(mdb.Config(m, APPID)) }}, + LOGIN: {Name: "login list", Help: "登录", Actions: ice.Actions{ + mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("web.chat.wx.access", mdb.CREATE, arg) }}, + }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.chat.wx.access") }}, }) } diff --git a/misc/mp/mp.shy b/misc/mp/mp.shy index 7b08a0b8..e69de29b 100644 --- a/misc/mp/mp.shy +++ b/misc/mp/mp.shy @@ -1,12 +0,0 @@ -title "微信小程序" -refer ` -官网 https://weixin.qq.com/ -后台 https://mp.weixin.qq.com/ -文档 https://developers.weixin.qq.com/miniprogram/dev/api/ -` -qrcode `https://mp.weixin.qq.com/a/~HkylKD4DZShrgSm5GuXWLQ~~` -return - -chapter "应用" -field "认证" web.chat.mp.login -field "位置" web.chat.location diff --git a/misc/wx/login.go b/misc/wx/login.go index 69405750..14e4b9ab 100644 --- a/misc/wx/login.go +++ b/misc/wx/login.go @@ -4,13 +4,16 @@ import ( "bytes" "encoding/xml" "io/ioutil" + "net/http" "strings" ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/chat" "shylinux.com/x/icebergs/core/chat/location" @@ -68,11 +71,30 @@ func _wx_parse(m *ice.Message) { const LOGIN = "login" func init() { + const ( + AUTH_CODE = "/sns/jscode2session?grant_type=authorization_code" + ) web.Index.MergeCommands(ice.Commands{ "/MP_verify_0xp0zkW3fIzIq2Bo.txt": {Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) { m.RenderResult("0xp0zkW3fIzIq2Bo") }}, }) Index.MergeCommands(ice.Commands{ - web.PP(LOGIN): {Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) { + web.PP(LOGIN): {Actions: ice.MergeActions(ice.Actions{ + aaa.SESS: {Name: "sess code", Help: "会话", Hand: func(m *ice.Message, arg ...string) { + m.Option(ice.MSG_USERZONE, WX) + msg := m.Cmd(ACCESS, kit.Split(kit.ParseURL(m.Option(ice.MSG_REFERER)).Path, nfs.PS)[0]) + msg = m.Cmd(web.SPIDE, WX, http.MethodGet, AUTH_CODE, "js_code", m.Option(cli.CODE), msg.AppendSimple(APPID, SECRET)) + m.Echo(aaa.SessCreate(msg, msg.Append(OPENID))) + }}, + aaa.USER: {Help: "用户", Hand: func(m *ice.Message, arg ...string) { + if m.Cmd(aaa.USER, m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))).Length() == 0 { + m.Cmd(aaa.USER, mdb.CREATE, aaa.USERNICK, "", m.OptionSimple(aaa.USERNAME)) + } + m.Cmd(aaa.USER, mdb.MODIFY, m.OptionSimple(aaa.USERNAME), aaa.USERNICK, m.Option("nickName"), aaa.USERZONE, WX, + aaa.AVATAR, m.Option("avatarUrl"), aaa.GENDER, kit.Select("女", "男", m.Option(aaa.GENDER) == "1"), + m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE), + ) + }}, + }, aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) { if m.Cmdx(ACCESS, aaa.CHECK) == "" { return } else if m.Option("echostr") != "" { diff --git a/misc/wx/scan.go b/misc/wx/scan.go index dbd64442..1846a4f1 100644 --- a/misc/wx/scan.go +++ b/misc/wx/scan.go @@ -1,6 +1,9 @@ package wx import ( + "encoding/base64" + "net/http" + ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/mdb" @@ -25,11 +28,16 @@ func init() { mdb.HashModify(m, mdb.HASH, h, mdb.LINK, kit.Value(res, web.URL), mdb.TIME, m.Time(kit.Format("%ss", kit.Select("60", m.Option(EXPIRE_SECONDS))))) m.EchoQRCode(kit.Format(kit.Value(res, web.URL))) }}, + "unlimit": {Name: "unlimit path scene", Help: "小程序码", Hand: func(m *ice.Message, arg ...string) { + msg := m.Cmd(web.SPIDE, WX, web.SPIDE_RAW, http.MethodPost, "/wxa/getwxacodeunlimit?access_token="+m.Cmdx(ACCESS, TOKENS), m.OptionSimple("path,scene")) + m.Echo(kit.Format(``, base64.StdEncoding.EncodeToString([]byte(msg.Result())), "some")).ProcessInner() + }}, }, mdb.ExportHashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,name,text,icons,space,index,args,type,link")), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { m.Cmdy(ACCESS).PushAction("").Option(ice.MSG_ACTION, "") } else if mdb.HashSelect(m, arg[1:]...); len(arg) == 1 { m.Table(func(value ice.Maps) { m.Push(mdb.STATUS, kit.Select("valid", "expired", value[mdb.TIME] < m.Time())) }) + m.Action("unlimit") } else { kit.If(m.Time() < m.Append(mdb.TIME), func() { m.PushQRCode(cli.QRCODE, m.Append(mdb.LINK)) }) } diff --git a/misc/wx/wx.shy b/misc/wx/wx.shy index d2551afe..3b90191b 100644 --- a/misc/wx/wx.shy +++ b/misc/wx/wx.shy @@ -15,4 +15,12 @@ field web.chat.wx.users chapter "数据" field web.chat.favor -field web.chat.location \ No newline at end of file +field web.chat.location + +title "微信小程序" +refer ` +官网 https://weixin.qq.com/ +后台 https://mp.weixin.qq.com/ +文档 https://developers.weixin.qq.com/miniprogram/dev/api/ +` +qrcode `https://mp.weixin.qq.com/a/~HkylKD4DZShrgSm5GuXWLQ~~`