diff --git a/base/aaa/sess.go b/base/aaa/sess.go index 84f47899..beb91aec 100644 --- a/base/aaa/sess.go +++ b/base/aaa/sess.go @@ -38,7 +38,7 @@ func init() { _sess_create(m, m.Option(USERNAME), UA, m.Option(ice.MSG_USERUA), IP, m.Option(ice.MSG_USERIP)) }}, CHECK: {Name: "check sessid*", Hand: func(m *ice.Message, arg ...string) { _sess_check(m, m.Option(ice.MSG_SESSID)) }}, - }, mdb.ImportantHashAction(mdb.EXPIRE, mdb.MONTH, mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,usernick,username,userrole,ua,ip"))}, + }, mdb.ImportantHashAction(mdb.EXPIRE, mdb.MONTH, mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,usernick,username,userrole,ip,ua"))}, }) } diff --git a/base/web/render.go b/base/web/render.go index 4639c4db..7a9a1a8c 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -178,6 +178,7 @@ const ( CHAT_HEADER = "web.chat.header" CHAT_IFRAME = "web.chat.iframe" CHAT_FAVOR = "web.chat.favor" + CHAT_GRANT = "web.chat.grant" CHAT_FLOWS = "web.chat.flows" TEAM_PLAN = "web.team.plan" ) diff --git a/base/web/serve.go b/base/web/serve.go index 4f022269..73c2a9f5 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -197,6 +197,7 @@ const ( ORIGIN = "origin" FORM = "form" BODY = "body" + HOME = "home" SERVE_START = "serve.start" ) diff --git a/base/web/space.go b/base/web/space.go index 674a693f..26162ef4 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -173,6 +173,7 @@ const ( ) const ( SPACE_LOGIN = "space.login" + SPACE_GRANT = "space.grant" ) const SPACE = "space" @@ -255,7 +256,8 @@ func init() { }}, DOMAIN: {Hand: func(m *ice.Message, arg ...string) { m.Echo(_space_domain(m)) }}, LOGIN: {Help: "授权", Hand: func(m *ice.Message, arg ...string) { - m.Option(ice.MSG_USERUA, m.Cmdv("", kit.Select(m.Option(mdb.NAME), arg, 0), ice.MSG_USERUA)) + msg := m.Cmd("", kit.Select(m.Option(mdb.NAME), arg, 0)) + m.Options(ice.MSG_USERIP, msg.Append(aaa.IP), ice.MSG_USERUA, msg.Append(aaa.UA)) m.Cmd("", kit.Select(m.Option(mdb.NAME), arg, 0), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) }}, OPEN: {Hand: func(m *ice.Message, arg ...string) { diff --git a/core/chat/grant.go b/core/chat/grant.go index b1bfb17b..d5be16ec 100644 --- a/core/chat/grant.go +++ b/core/chat/grant.go @@ -25,9 +25,7 @@ func init() { m.Sleep30ms(web.SPACE, m.Option(mdb.NAME), cli.PWD, m.Option(mdb.NAME), link, m.Cmdx(cli.QRCODE, link)) }) }}, - "home": {Help: "首页", Hand: func(m *ice.Message, arg ...string) { - m.ProcessOpen(web.MergeLink(m, "/chat/portal/")) - }}, + web.HOME: {Help: "首页", Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(web.MergeLink(m, web.CHAT_PORTAL)) }}, aaa.CONFIRM: {Help: "授权", Hand: func(m *ice.Message, arg ...string) { if m.Warn(m.R.Method == http.MethodGet, ice.ErrNotAllow) { return @@ -37,7 +35,7 @@ func init() { return } else { if m.IsWeixinUA() { - m.Option(ice.MSG_USERUA, msg.Append(ice.MSG_USERUA)) + m.Options(ice.MSG_USERIP, msg.Append(aaa.IP), ice.MSG_USERUA, msg.Append(aaa.UA)) m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) m.Echo(ice.SUCCESS) } else { @@ -46,6 +44,7 @@ func init() { m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) m.ProcessLocation(web.MergeURL2(m, msg.Append(mdb.TEXT))) } + gdb.Event(m, web.SPACE_GRANT, m.OptionSimple(web.SPACE)) } }}, }, aaa.RoleAction(aaa.CONFIRM), gdb.EventsAction(web.SPACE_LOGIN)), Hand: func(m *ice.Message, arg ...string) { diff --git a/misc/wx/access.go b/misc/wx/access.go index 5a751883..f46a95a0 100644 --- a/misc/wx/access.go +++ b/misc/wx/access.go @@ -9,6 +9,8 @@ import ( "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/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" @@ -52,8 +54,8 @@ func init() { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(web.SPIDE, mdb.CREATE, WX, mdb.Config(m, tcp.SERVER)) }}, - mdb.CREATE: {Name: "create usernick access* appid* secret* token* icons qrcode", Hand: func(m *ice.Message, arg ...string) { - mdb.HashCreate(m, m.OptionSimple(aaa.USERNICK, ACCESS, APPID, SECRET, TOKEN, mdb.ICONS, cli.QRCODE)) + mdb.CREATE: {Name: "create type=web,app usernick access* appid* secret* token* icons qrcode", Hand: func(m *ice.Message, arg ...string) { + mdb.HashCreate(m, m.OptionSimple(mdb.TYPE, aaa.USERNICK, ACCESS, APPID, SECRET, TOKEN, mdb.ICONS, cli.QRCODE)) ctx.ConfigFromOption(m, ACCESS, APPID, TOKEN) }}, aaa.CHECK: {Hand: func(m *ice.Message, arg ...string) { @@ -88,10 +90,22 @@ func init() { ctx.INDEX, m.PrefixKey(), ctx.ARGS, kit.Join(kit.Simple(aaa.LOGIN, m.Option(ACCESS)))) }}, aaa.LOGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Options(ACCESS, arg[0]).Cmdy(SCAN, mdb.CREATE, mdb.TYPE, "QR_STR_SCENE", - mdb.NAME, "授权登录", mdb.TEXT, m.Option(web.SPACE), ctx.INDEX, "web.chat.grant", ctx.ARGS, m.Option(web.SPACE)) + if m.Cmd("", m.Option(ACCESS, arg[0])).Append(mdb.TYPE) == ice.WEB { + m.Cmdy(SCAN, mdb.CREATE, mdb.TYPE, QR_STR_SCENE, mdb.NAME, "授权登录", mdb.TEXT, m.Option(web.SPACE), + ctx.INDEX, web.CHAT_GRANT, ctx.ARGS, m.Option(web.SPACE)) + } else { + h := m.Cmdx(IDE, mdb.CREATE, mdb.NAME, m.Option(web.SPACE), PAGES, "pages/action/action", + ctx.INDEX, web.CHAT_GRANT, ctx.ARGS, kit.JoinQuery(m.OptionSimple(web.SPACE, log.DEBUG)...)) + m.Echo(m.Cmdx(SCAN, UNLIMIT, SCENE, h, ENV, "release", mdb.NAME, m.Option(web.SPACE))) + } }}, - }, aaa.RoleAction(aaa.LOGIN), mdb.ImportantHashAction(mdb.SHORT, ACCESS, mdb.FIELD, "time,access,icons,usernick,appid", tcp.SERVER, CGI_BIN)), Hand: func(m *ice.Message, arg ...string) { + web.SPACE_GRANT: {Hand: func(m *ice.Message, arg ...string) { + if strings.HasPrefix(m.Option(ice.MSG_REFERER), "https://servicewechat.com/") { + m.Cmd(mdb.PRUNES, m.Prefix(SCAN), "", mdb.HASH, mdb.NAME, m.Option(web.SPACE)) + m.Cmd(mdb.PRUNES, m.Prefix(IDE), "", mdb.HASH, mdb.NAME, m.Option(web.SPACE)) + } + }}, + }, aaa.RoleAction(aaa.LOGIN), gdb.EventsAction(web.SPACE_GRANT), mdb.ImportantHashAction(mdb.SHORT, ACCESS, mdb.FIELD, "time,type,access,icons,usernick,appid", tcp.SERVER, CGI_BIN)), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).PushAction(web.SSO, mdb.REMOVE).StatusTimeCount(mdb.ConfigSimple(m, ACCESS, APPID), web.SERVE, web.MergeLink(m, "/chat/wx/login/")) m.RewriteAppend(func(value, key string, index int) string { kit.If(key == cli.QRCODE, func() { value = ice.Render(m, ice.RENDER_QRCODE, value) }) diff --git a/misc/wx/ide.go b/misc/wx/ide.go index d8fd6c31..6226af3b 100644 --- a/misc/wx/ide.go +++ b/misc/wx/ide.go @@ -114,7 +114,7 @@ func init() { } if mdb.HashSelect(m, arg...).PushAction(AUTO_PREVIEW, PREVIEW, PUSH, mdb.REMOVE).Action(mdb.CREATE, ice.APP, aaa.LOGIN, web.ADMIN, DOC); len(arg) > 0 { m.Options(m.AppendSimple(web.SPACE, ctx.INDEX, ctx.ARGS, tcp.WIFI)) - p := kit.MergeURL2(web.UserHost(m), path.Join(nfs.PS+m.Append(PAGES)), _ide_args(m)) + p := kit.MergeURL2(kit.Select(web.UserHost(m), m.Option(web.SERVE)), path.Join(nfs.PS+m.Append(PAGES)), _ide_args(m)) m.PushQRCode(cli.QRCODE, p).Push(web.LINK, p).Echo(p) } p := mdb.Config(m, CURRENT) diff --git a/misc/wx/scan.go b/misc/wx/scan.go index 9d63f379..c773c2e9 100644 --- a/misc/wx/scan.go +++ b/misc/wx/scan.go @@ -16,16 +16,16 @@ import ( ) const ( - EXPIRE_SECONDS = "expire_seconds" + UNLIMIT = "unlimit" + EXPIRE_SECONDS = "expire_seconds" + QR_STR_SCENE = "QR_STR_SCENE" + QR_LIMIT_STR_SCENE = "QR_LIMIT_STR_SCENE" ) const SCAN = "scan" func init() { const ( - UNLIMIT = "unlimit" - IS_HYALINE = "is_hyaline" - QR_STR_SCENE = "QR_STR_SCENE" - QR_LIMIT_STR_SCENE = "QR_LIMIT_STR_SCENE" + IS_HYALINE = "is_hyaline" ) Index.MergeCommands(ice.Commands{ SCAN: {Name: "scan access hash auto", Help: "桌牌", Meta: kit.Merge(Meta(), kit.Dict(ice.CTX_TRANS, kit.Dict(html.VALUE, kit.Dict( @@ -44,7 +44,7 @@ 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 scene* env*=develop,release,trial,develop is_hyaline=true,false", Help: "小程序码", Hand: func(m *ice.Message, arg ...string) { + UNLIMIT: {Name: "unlimit scene* env*=develop,release,trial,develop is_hyaline=true,false name", Help: "小程序码", Hand: func(m *ice.Message, arg ...string) { defer m.ProcessInner() scene := m.Option(SCENE) meta, info := "", m.Cmd(IDE, scene) @@ -60,12 +60,13 @@ func init() { meta = path.Join("s", u.Host, scene) } msg := spidePost(m, WXACODE_UNLIMIT, web.SPIDE_DATA, kit.Format(kit.Dict( - "env_version", m.Option(ENV), "page", info.Append(PAGES), SCENE, meta, IS_HYALINE, m.Option(IS_HYALINE) == ice.TRUE, html.WIDTH, 370, + "env_version", m.Option(ENV), "page", info.Append(PAGES), SCENE, meta, IS_HYALINE, m.Option(IS_HYALINE) == ice.TRUE, html.WIDTH, 360, ))) switch kit.Select("", kit.Split(msg.Option(web.ContentType), "; "), 0) { case web.IMAGE_JPEG: image := m.Cmd(web.CACHE, web.WRITE, mdb.TYPE, web.IMAGE_JPEG, mdb.NAME, scene, kit.Dict(mdb.TEXT, msg.Result())).Append(mdb.HASH) - mdb.HashSelects(m, mdb.HashCreate(m.Spawn(), mdb.TEXT, meta, nfs.IMAGE, image, ctx.INDEX, m.Prefix(IDE), ctx.ARGS, scene, mdb.TYPE, m.Option(ENV))) + mdb.HashSelects(m, mdb.HashCreate(m.Spawn(), m.OptionSimple(mdb.NAME), mdb.TEXT, meta, nfs.IMAGE, image, ctx.INDEX, m.Prefix(IDE), ctx.ARGS, scene, mdb.TYPE, m.Option(ENV))) + m.EchoImages(web.SHARE_CACHE + m.Append(nfs.IMAGE)) default: m.Echo(msg.Result()) }