1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-28 18:22:02 +08:00
This commit is contained in:
shylinux 2021-02-04 22:15:58 +08:00
parent 0b863d1eeb
commit ab79903523
8 changed files with 112 additions and 84 deletions

View File

@ -203,9 +203,9 @@ func init() {
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME, SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME,
tcp.LOCALHOST, true, aaa.BLACK, kit.Dict(), aaa.WHITE, kit.Dict( tcp.LOCALHOST, true, aaa.BLACK, kit.Dict(), aaa.WHITE, kit.Dict(
"intshell", true, "volcanos", true, LOGIN, true, SPACE, true, SHARE, true,
"publish", true, "require", true, "volcanos", true, "intshell", true,
SPACE, true, SHARE, true, "require", true, "publish", true,
), "logheaders", false, ), "logheaders", false,
"static", kit.Dict("/", "usr/volcanos/"), "static", kit.Dict("/", "usr/volcanos/"),

View File

@ -25,13 +25,17 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,hash,name,data", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,hash,name,data", mdb.DETAIL, len(arg) > 0))
m.Cmdy(mdb.SELECT, FILES, "", mdb.HASH, "hash", arg) m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg)
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushDownload(value[kit.MDB_NAME], "/share/cache/"+value["data"]) m.PushDownload(value[kit.MDB_NAME], "/share/cache/"+value["data"])
}) if len(arg) > 0 {
if len(arg) == 0 { switch kit.Ext(value["name"]) {
m.SortTimeR(kit.MDB_TIME) case "png":
m.PushImages("image", "/share/cache/"+value["data"])
} }
}
})
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},
}, },

View File

@ -22,9 +22,14 @@ func _trans(arg []string, tr map[string]string) {
} }
const ( const (
ADDRESS = "address"
LATITUDE = "latitude" LATITUDE = "latitude"
LONGITUDE = "longitude" LONGITUDE = "longitude"
) )
const (
GETLOCATION = "getLocation"
OPENLOCATION = "openLocation"
)
const LOCATION = "location" const LOCATION = "location"
@ -34,9 +39,15 @@ func init() {
LOCATION: {Name: LOCATION, Help: "地理位置", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)}, LOCATION: {Name: LOCATION, Help: "地理位置", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
LOCATION: {Name: "location text auto create@getLocation", Help: "地理位置", Action: map[string]*ice.Action{ LOCATION: {Name: "location text auto getLocation", Help: "地理位置", Action: map[string]*ice.Action{
OPENLOCATION: {Name: "create type=text name address latitude longitude", Help: "地图", Hand: func(m *ice.Message, arg ...string) {
}},
GETLOCATION: {Name: "create type=text name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{ADDRESS: "text"})
m.Cmdy(mdb.INSERT, LOCATION, "", mdb.HASH, arg)
}},
mdb.CREATE: {Name: "create type=text name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=text name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{"address": "text"}) _trans(arg, map[string]string{ADDRESS: "text"})
m.Cmdy(mdb.INSERT, LOCATION, "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, LOCATION, "", mdb.HASH, arg)
}}, }},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
@ -56,8 +67,8 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,type,name,text,longitude,latitude", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,type,name,text,longitude,latitude", mdb.DETAIL, len(arg) > 0))
m.Cmdy(mdb.SELECT, LOCATION, "", mdb.HASH, kit.MDB_TEXT, arg) m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_TEXT, arg)
m.PushAction("openLocation", mdb.REMOVE) m.PushAction(OPENLOCATION, mdb.REMOVE)
}}, }},
}, },
}) })

View File

@ -3,7 +3,6 @@ package chat
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/core/wiki"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
@ -15,7 +14,11 @@ func init() {
PASTE: {Name: PASTE, Help: "粘贴板", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)}, PASTE: {Name: PASTE, Help: "粘贴板", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
PASTE: {Name: "paste hash auto create@paste", Help: "粘贴板", Action: map[string]*ice.Action{ PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴板", Action: map[string]*ice.Action{
"getClipboardData": {Name: "getClipboardData", Help: "粘贴", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{"data": "text"})
m.Cmdy(mdb.INSERT, PASTE, "", mdb.HASH, arg)
}},
mdb.CREATE: {Name: "create type=text name=hi data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=text name=hi data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{"data": "text"}) _trans(arg, map[string]string{"data": "text"})
m.Cmdy(mdb.INSERT, PASTE, "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, PASTE, "", mdb.HASH, arg)
@ -36,16 +39,11 @@ func init() {
m.Cmdy(mdb.INPUTS, PASTE, "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, PASTE, "", mdb.HASH, arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 { m.Option(mdb.FIELDS, kit.Select("time,hash,type,name,text", mdb.DETAIL, len(arg) > 0))
text := m.Cmd(mdb.SELECT, PASTE, "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT) if m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 {
m.Cmdy(wiki.IMAGE, "qrcode", text) m.PushScript("script", m.Append(kit.MDB_TEXT))
m.Cmdy(wiki.SPARK, "inner", text) m.PushQRCode("qrcode", m.Append(kit.MDB_TEXT))
m.Render("")
return
} }
m.Cmdy(mdb.SELECT, PASTE, "", mdb.HASH)
m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},
}, },

View File

@ -3,7 +3,6 @@ package chat
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/core/wiki"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
@ -15,10 +14,17 @@ func init() {
SCAN: {Name: SCAN, Help: "扫码", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)}, SCAN: {Name: SCAN, Help: "扫码", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SCAN: {Name: "scan hash auto create@scanQRCode scanQRCode0=应用扫码", Help: "扫码", Action: map[string]*ice.Action{ SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { "scanQRCode0": {Name: "create", Help: "本机扫码", Hand: func(m *ice.Message, arg ...string) {}},
"scanQRCode": {Name: "create", Help: "扫码", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, SCAN, "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, SCAN, "", mdb.HASH, arg)
}}, }},
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, SCAN, "", mdb.HASH, arg)
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, SCAN, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, SCAN, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, SCAN, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
@ -32,16 +38,11 @@ func init() {
m.Cmdy(mdb.INPUTS, SCAN, "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, SCAN, "", mdb.HASH, arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 { m.Option(mdb.FIELDS, kit.Select("time,hash,type,name,text", mdb.DETAIL, len(arg) > 0))
text := m.Cmd(mdb.SELECT, SCAN, "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT) if m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 {
m.Cmdy(wiki.IMAGE, "qrcode", text) m.PushScript("script", m.Append(kit.MDB_TEXT))
m.Cmdy(wiki.SPARK, "inner", text) m.PushQRCode("qrcode", m.Append(kit.MDB_TEXT))
m.Render("")
return
} }
m.Cmdy(mdb.SELECT, SCAN, "", mdb.HASH)
m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},
}, },

View File

@ -6,10 +6,11 @@ import (
"bytes" "bytes"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"github.com/skip2/go-qrcode"
"net/url" "net/url"
"path" "path"
"strings" "strings"
"github.com/skip2/go-qrcode"
) )
func (m *Message) Prefix(arg ...string) string { func (m *Message) Prefix(arg ...string) string {
@ -160,7 +161,7 @@ func _render(m *Message, cmd string, args ...interface{}) string {
case kit.SSH_SHELL: case kit.SSH_SHELL:
list = append(list, "<label>", "$ ", "</label>") list = append(list, "<label>", "$ ", "</label>")
default: default:
list = append(list, "<label>", "&lt; ", "</label>") list = append(list, "<label>", "&gt; ", "</label>")
} }
list = append(list, "<span>", l, "</span>") list = append(list, "<span>", l, "</span>")
list = append(list, "</div>") list = append(list, "</div>")

View File

@ -1,14 +1,14 @@
package wx package wx
import ( import (
"github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
"github.com/shylinux/icebergs/core/chat" "github.com/shylinux/icebergs/core/chat"
"github.com/shylinux/icebergs/core/wiki" "github.com/shylinux/icebergs/core/wiki"
"github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"crypto/sha1" "crypto/sha1"
"encoding/hex" "encoding/hex"
@ -31,6 +31,7 @@ func _wx_config(m *ice.Message, nonce string) {
m.Option(APPID, m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID))) m.Option(APPID, m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID)))
m.Option("signature", _wx_sign(m, m.Option("noncestr", nonce), m.Option("timestamp", kit.Format(time.Now().Unix())))) m.Option("signature", _wx_sign(m, m.Option("noncestr", nonce), m.Option("timestamp", kit.Format(time.Now().Unix()))))
} }
func _wx_parse(m *ice.Message) { func _wx_parse(m *ice.Message) {
data := struct { data := struct {
FromUserName string FromUserName string
@ -54,10 +55,11 @@ func _wx_parse(m *ice.Message) {
m.Option("Event", data.Event) m.Option("Event", data.Event)
} }
func _wx_reply(m *ice.Message, tmpl string) { func _wx_reply(m *ice.Message, tmpl string) {
m.Render(m.Conf(LOGIN, kit.Keys("meta.template", tmpl))) m.Render(m.Conf(LOGIN, kit.Keym(kit.MDB_TEMPLATE, tmpl)))
} }
func _wx_action(m *ice.Message) { func _wx_action(m *ice.Message) {
m.Option(ice.MSG_OUTPUT, ice.RENDER_RESULT) m.Option(ice.MSG_OUTPUT, ice.RENDER_RESULT)
m.Set(ice.MSG_RESULT)
m.Echo(`<xml> m.Echo(`<xml>
<FromUserName><![CDATA[%s]]></FromUserName> <FromUserName><![CDATA[%s]]></FromUserName>
@ -91,25 +93,23 @@ const (
APPID = "appid" APPID = "appid"
APPMM = "appmm" APPMM = "appmm"
TOKEN = "token" TOKEN = "token"
EXPIRE = "expire"
TICKET = "ticket" TICKET = "ticket"
ACCESS = "access" EXPIRES = "expires"
CONFIG = "config" CONFIG = "config"
WEIXIN = "weixin" WEIXIN = "weixin"
) )
const (
MENU = "menu"
ACCESS = "access"
)
const WX = "wx" const WX = "wx"
var Index = &ice.Context{Name: WX, Help: "公众号", var Index = &ice.Context{Name: WX, Help: "公众号",
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
LOGIN: {Name: LOGIN, Help: "认证", Value: kit.Data( LOGIN: {Name: LOGIN, Help: "认证", Value: kit.Data(
WEIXIN, "https://api.weixin.qq.com", APPID, "", APPMM, "", TOKEN, "", WEIXIN, "https://api.weixin.qq.com", APPID, "", APPMM, "", TOKEN, "",
"template", kit.Dict("text", `<xml> kit.MDB_TEMPLATE, kit.Dict(kit.MDB_TEXT, text), MENU, []interface{}{
<FromUserName><![CDATA[{{.Option "ToUserName"}}]]></FromUserName>
<ToUserName><![CDATA[{{.Option "FromUserName"}}]]></ToUserName>
<CreateTime>{{.Option "CreateTime"}}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{{.Result}}]]></Content>
</xml>`),
"menu", []interface{}{
kit.Dict(wiki.TITLE, "主页", wiki.SPARK, "点击进入", wiki.IMAGE, "https://shylinux.com/static/volcanos/favicon.ico", wiki.REFER, "https://shylinux.com"), kit.Dict(wiki.TITLE, "主页", wiki.SPARK, "点击进入", wiki.IMAGE, "https://shylinux.com/static/volcanos/favicon.ico", wiki.REFER, "https://shylinux.com"),
kit.Dict(wiki.TITLE, "产品", wiki.SPARK, "工具", wiki.IMAGE, "https://shylinux.com/static/volcanos/favicon.ico", wiki.REFER, "https://shylinux.com?river=product"), kit.Dict(wiki.TITLE, "产品", wiki.SPARK, "工具", wiki.IMAGE, "https://shylinux.com/static/volcanos/favicon.ico", wiki.REFER, "https://shylinux.com?river=product"),
kit.Dict(wiki.TITLE, "研发", wiki.SPARK, "工具", wiki.IMAGE, "https://shylinux.com/static/volcanos/favicon.ico", wiki.REFER, "https://shylinux.com?river=project"), kit.Dict(wiki.TITLE, "研发", wiki.SPARK, "工具", wiki.IMAGE, "https://shylinux.com/static/volcanos/favicon.ico", wiki.REFER, "https://shylinux.com?river=project"),
@ -118,12 +118,11 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load()
m.Cmd(web.SPIDE, mdb.CREATE, WEIXIN, m.Conf(LOGIN, kit.Keys(kit.MDB_META, WEIXIN))) m.Cmd(web.SPIDE, mdb.CREATE, WEIXIN, m.Conf(LOGIN, kit.Keys(kit.MDB_META, WEIXIN)))
m.Load()
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
m.Save()
}},
ACCESS: {Name: "access appid auto ticket token login", Help: "认证", Action: map[string]*ice.Action{ ACCESS: {Name: "access appid auto ticket token login", Help: "认证", Action: map[string]*ice.Action{
LOGIN: {Name: "login appid appmm token", Help: "登录", Hand: func(m *ice.Message, arg ...string) { LOGIN: {Name: "login appid appmm token", Help: "登录", Hand: func(m *ice.Message, arg ...string) {
m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID), m.Option(APPID)) m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID), m.Option(APPID))
@ -131,48 +130,56 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
m.Conf(LOGIN, kit.Keys(kit.MDB_META, TOKEN), m.Option(TOKEN)) m.Conf(LOGIN, kit.Keys(kit.MDB_META, TOKEN), m.Option(TOKEN))
}}, }},
TOKEN: {Name: "token", Help: "令牌", Hand: func(m *ice.Message, arg ...string) { TOKEN: {Name: "token", Help: "令牌", Hand: func(m *ice.Message, arg ...string) {
if now := time.Now().Unix(); m.Conf(LOGIN, "meta.access.token") == "" || now > kit.Int64(m.Conf(LOGIN, "meta.access.expire")) { if now := time.Now().Unix(); m.Conf(LOGIN, kit.Keym(ACCESS, TOKEN)) == "" || now > kit.Int64(m.Conf(LOGIN, kit.Keym(ACCESS, EXPIRE))) {
msg := m.Cmd(web.SPIDE, "weixin", web.SPIDE_GET, "/cgi-bin/token?grant_type=client_credential", msg := m.Cmd(web.SPIDE, WEIXIN, web.SPIDE_GET, "/cgi-bin/token?grant_type=client_credential",
APPID, m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID)), "secret", m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPMM))) APPID, m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID)), "secret", m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPMM)))
if m.Warn(msg.Append("errcode") != "", "%v: %v", msg.Append("errcode"), msg.Append("errmsg")) {
m.Conf(LOGIN, "meta.access.token", msg.Append("access_token")) return
m.Conf(LOGIN, "meta.access.expire", now+kit.Int64(msg.Append("expires_in")))
} }
m.Echo(m.Conf(LOGIN, "meta.access.token"))
m.Conf(LOGIN, kit.Keym(ACCESS, EXPIRE), now+kit.Int64(msg.Append("expires_in")))
m.Conf(LOGIN, kit.Keym(ACCESS, TOKEN), msg.Append("access_token"))
}
m.Echo(m.Conf(LOGIN, kit.Keym(ACCESS, TOKEN)))
}}, }},
TICKET: {Name: "ticket", Help: "票据", Hand: func(m *ice.Message, arg ...string) { TICKET: {Name: "ticket", Help: "票据", Hand: func(m *ice.Message, arg ...string) {
if now := time.Now().Unix(); m.Conf(LOGIN, "meta.access.ticket") == "" || now > kit.Int64(m.Conf(LOGIN, "meta.access.expires")) { if now := time.Now().Unix(); m.Conf(LOGIN, kit.Keym(ACCESS, TICKET)) == "" || now > kit.Int64(m.Conf(LOGIN, kit.Keym(ACCESS, EXPIRES))) {
msg := m.Cmd(web.SPIDE, "weixin", web.SPIDE_GET, "/cgi-bin/ticket/getticket?type=jsapi", msg := m.Cmd(web.SPIDE, WEIXIN, web.SPIDE_GET, "/cgi-bin/ticket/getticket?type=jsapi",
"access_token", m.Cmdx(ACCESS, TOKEN)) "access_token", m.Cmdx(ACCESS, TOKEN))
if m.Warn(msg.Append("errcode") != "0", msg.Append("errcode"), msg.Append("errmsg")) {
m.Conf(LOGIN, "meta.access.ticket", msg.Append(TICKET)) return
m.Conf(LOGIN, "meta.access.expires", now+kit.Int64(msg.Append("expires_in")))
} }
m.Echo(m.Conf(LOGIN, "meta.access.ticket"))
m.Conf(LOGIN, kit.Keym(ACCESS, EXPIRES), now+kit.Int64(msg.Append("expires_in")))
m.Conf(LOGIN, kit.Keym(ACCESS, TICKET), msg.Append(TICKET))
}
m.Echo(m.Conf(LOGIN, kit.Keym(ACCESS, TICKET)))
}}, }},
CONFIG: {Name: "config", Help: "配置", Hand: func(m *ice.Message, arg ...string) { CONFIG: {Name: "config", Help: "配置", Hand: func(m *ice.Message, arg ...string) {
_wx_config(m, "some") _wx_config(m, "some")
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Push(APPID, m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID))) m.Echo(m.Conf(LOGIN, kit.Keys(kit.MDB_META, APPID)))
}}, }},
"menu": {Name: "menu name auto", Help: "菜单", Action: map[string]*ice.Action{ MENU: {Name: "menu name auto", Help: "菜单", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, "login") share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN)
kit.Fetch(m.Confv(LOGIN, "meta.menu"), func(index int, value map[string]interface{}) { kit.Fetch(m.Confv(LOGIN, kit.Keym(MENU)), func(index int, value map[string]interface{}) {
m.Push("", value, kit.Split("title,spark,image")) m.Push("", value, kit.Split("title,spark,image"))
m.Push(wiki.REFER, kit.MergeURL(kit.Format(value[wiki.REFER]), web.SHARE, share)) m.Push(wiki.REFER, kit.MergeURL(kit.Format(value[wiki.REFER]), web.SHARE, share))
}) })
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
kit.Fetch(m.Confv(LOGIN, "meta.menu"), func(index int, value map[string]interface{}) { kit.Fetch(m.Confv(LOGIN, kit.Keym(MENU)), func(index int, value map[string]interface{}) {
m.Push("", value, kit.Split("title,spark,image,refer")) m.Push("", value, kit.Split("title,spark,image,refer"))
}) })
}}, }},
"/login/": {Name: "/login/", Help: "认证", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "/login/": {Name: "/login/", Help: "认证", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
check := kit.Sort([]string{m.Conf(LOGIN, "meta.token"), m.Option("timestamp"), m.Option("nonce")}) check := kit.Sort([]string{m.Conf(LOGIN, kit.Keym(TOKEN)), m.Option("timestamp"), m.Option("nonce")})
if b := sha1.Sum([]byte(strings.Join(check, ""))); m.Warn(m.Option("signature") != hex.EncodeToString(b[:]), ice.ErrNotRight) { if b := sha1.Sum([]byte(strings.Join(check, ""))); m.Warn(m.Option("signature") != hex.EncodeToString(b[:]), ice.ErrNotRight) {
return // 验证失败 return // 验证失败
} }
@ -191,21 +198,20 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
switch m.Option("MsgType") { switch m.Option("MsgType") {
case "event": case "event":
switch m.Option("Event") { switch m.Option("Event") {
case "subscribe": case "subscribe": // 关注事件
// 应用列表 _wx_action(m.Cmdy(MENU, mdb.CREATE))
_wx_action(m.Cmdy("menu", mdb.CREATE)) case "unsubscribe": // 取关事件
case "unsubscribe":
} }
case "text": case kit.MDB_TEXT:
if cmds := kit.Split(m.Option("Content")); m.Warn(!m.Right(cmds), ice.ErrNotRight) { if cmds := kit.Split(m.Option("Content")); m.Warn(!m.Right(cmds), ice.ErrNotRight) {
_wx_action(m.Cmdy("menu", mdb.CREATE)) _wx_action(m.Cmdy(MENU, mdb.CREATE))
break // 没有权限 break // 没有权限
} else { } else {
switch cmds[0] { switch cmds[0] {
case "menu": case MENU:
// 应用列表 // 应用列表
_wx_action(m.Cmdy("menu", mdb.CREATE)) _wx_action(m.Cmdy(MENU, mdb.CREATE))
default: default:
// 执行命令 // 执行命令
@ -216,7 +222,7 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
} }
// 返回结果 // 返回结果
_wx_reply(m, "text") _wx_reply(m, kit.MDB_TEXT)
} }
} }
} }
@ -225,3 +231,11 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
} }
func init() { chat.Index.Register(Index, &web.Frame{}) } func init() { chat.Index.Register(Index, &web.Frame{}) }
var text = `<xml>
<FromUserName><![CDATA[{{.Option "ToUserName"}}]]></FromUserName>
<ToUserName><![CDATA[{{.Option "FromUserName"}}]]></ToUserName>
<CreateTime>{{.Option "CreateTime"}}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{{.Result}}]]></Content>
</xml>`

View File

@ -6,7 +6,6 @@ refer `
源码 https://github.com/shylinux/icebergs/blob/master/misc/wx/wx.go 源码 https://github.com/shylinux/icebergs/blob/master/misc/wx/wx.go
` `
image qrcode `https://weixin.qq.com` image qrcode `https://weixin.qq.com`
spark
chapter "应用" chapter "应用"
field scan web.chat.scan field scan web.chat.scan