diff --git a/base/web/serve.go b/base/web/serve.go
index 732f4d86..3b580581 100644
--- a/base/web/serve.go
+++ b/base/web/serve.go
@@ -203,9 +203,9 @@ func init() {
Configs: map[string]*ice.Config{
SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME,
tcp.LOCALHOST, true, aaa.BLACK, kit.Dict(), aaa.WHITE, kit.Dict(
- "intshell", true, "volcanos", true,
- "publish", true, "require", true,
- SPACE, true, SHARE, true,
+ LOGIN, true, SPACE, true, SHARE, true,
+ "volcanos", true, "intshell", true,
+ "require", true, "publish", true,
), "logheaders", false,
"static", kit.Dict("/", "usr/volcanos/"),
diff --git a/core/chat/files.go b/core/chat/files.go
index 7fe505cd..917311d2 100644
--- a/core/chat/files.go
+++ b/core/chat/files.go
@@ -25,13 +25,17 @@ func init() {
}},
}, 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.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.PushDownload(value[kit.MDB_NAME], "/share/cache/"+value["data"])
+ if len(arg) > 0 {
+ switch kit.Ext(value["name"]) {
+ case "png":
+ m.PushImages("image", "/share/cache/"+value["data"])
+ }
+ }
})
- if len(arg) == 0 {
- m.SortTimeR(kit.MDB_TIME)
- }
m.PushAction(mdb.REMOVE)
}},
},
diff --git a/core/chat/location.go b/core/chat/location.go
index 758f6791..92fbcc60 100644
--- a/core/chat/location.go
+++ b/core/chat/location.go
@@ -22,9 +22,14 @@ func _trans(arg []string, tr map[string]string) {
}
const (
+ ADDRESS = "address"
LATITUDE = "latitude"
LONGITUDE = "longitude"
)
+const (
+ GETLOCATION = "getLocation"
+ OPENLOCATION = "openLocation"
+)
const LOCATION = "location"
@@ -34,9 +39,15 @@ func init() {
LOCATION: {Name: LOCATION, Help: "地理位置", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
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) {
- _trans(arg, map[string]string{"address": "text"})
+ _trans(arg, map[string]string{ADDRESS: "text"})
m.Cmdy(mdb.INSERT, LOCATION, "", mdb.HASH, arg)
}},
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) {
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.PushAction("openLocation", mdb.REMOVE)
+ m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_TEXT, arg)
+ m.PushAction(OPENLOCATION, mdb.REMOVE)
}},
},
})
diff --git a/core/chat/paste.go b/core/chat/paste.go
index 8c0f66ac..2af53eb0 100644
--- a/core/chat/paste.go
+++ b/core/chat/paste.go
@@ -3,7 +3,6 @@ package chat
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
- "github.com/shylinux/icebergs/core/wiki"
kit "github.com/shylinux/toolkits"
)
@@ -15,7 +14,11 @@ func init() {
PASTE: {Name: PASTE, Help: "粘贴板", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
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) {
_trans(arg, map[string]string{"data": "text"})
m.Cmdy(mdb.INSERT, PASTE, "", mdb.HASH, arg)
@@ -36,16 +39,11 @@ func init() {
m.Cmdy(mdb.INPUTS, PASTE, "", mdb.HASH, arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
- if len(arg) > 0 {
- text := m.Cmd(mdb.SELECT, PASTE, "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT)
- m.Cmdy(wiki.IMAGE, "qrcode", text)
- m.Cmdy(wiki.SPARK, "inner", text)
- m.Render("")
- return
+ m.Option(mdb.FIELDS, kit.Select("time,hash,type,name,text", mdb.DETAIL, len(arg) > 0))
+ if m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 {
+ m.PushScript("script", m.Append(kit.MDB_TEXT))
+ m.PushQRCode("qrcode", m.Append(kit.MDB_TEXT))
}
-
- m.Cmdy(mdb.SELECT, PASTE, "", mdb.HASH)
- m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE)
}},
},
diff --git a/core/chat/scan.go b/core/chat/scan.go
index c82d180d..d22a93fb 100644
--- a/core/chat/scan.go
+++ b/core/chat/scan.go
@@ -3,7 +3,6 @@ package chat
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
- "github.com/shylinux/icebergs/core/wiki"
kit "github.com/shylinux/toolkits"
)
@@ -15,10 +14,17 @@ func init() {
SCAN: {Name: SCAN, Help: "扫码", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
Commands: map[string]*ice.Command{
- SCAN: {Name: "scan hash auto create@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) {
+ SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Action: map[string]*ice.Action{
+ "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)
}},
+ 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) {
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)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
- if len(arg) > 0 {
- text := m.Cmd(mdb.SELECT, SCAN, "", mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT)
- m.Cmdy(wiki.IMAGE, "qrcode", text)
- m.Cmdy(wiki.SPARK, "inner", text)
- m.Render("")
- return
+ m.Option(mdb.FIELDS, kit.Select("time,hash,type,name,text", mdb.DETAIL, len(arg) > 0))
+ if m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 {
+ m.PushScript("script", m.Append(kit.MDB_TEXT))
+ m.PushQRCode("qrcode", m.Append(kit.MDB_TEXT))
}
-
- m.Cmdy(mdb.SELECT, SCAN, "", mdb.HASH)
- m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE)
}},
},
diff --git a/misc.go b/misc.go
index a228d10a..3fba2a16 100644
--- a/misc.go
+++ b/misc.go
@@ -6,10 +6,11 @@ import (
"bytes"
"encoding/base64"
"fmt"
- "github.com/skip2/go-qrcode"
"net/url"
"path"
"strings"
+
+ "github.com/skip2/go-qrcode"
)
func (m *Message) Prefix(arg ...string) string {
@@ -160,7 +161,7 @@ func _render(m *Message, cmd string, args ...interface{}) string {
case kit.SSH_SHELL:
list = append(list, "")
default:
- list = append(list, "")
+ list = append(list, "")
}
list = append(list, "", l, "")
list = append(list, "")
diff --git a/misc/wx/wx.go b/misc/wx/wx.go
index 9937690b..c940352e 100644
--- a/misc/wx/wx.go
+++ b/misc/wx/wx.go
@@ -1,14 +1,14 @@
package wx
import (
- "github.com/shylinux/icebergs"
+ ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
"github.com/shylinux/icebergs/core/chat"
"github.com/shylinux/icebergs/core/wiki"
- "github.com/shylinux/toolkits"
+ kit "github.com/shylinux/toolkits"
"crypto/sha1"
"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("signature", _wx_sign(m, m.Option("noncestr", nonce), m.Option("timestamp", kit.Format(time.Now().Unix()))))
}
+
func _wx_parse(m *ice.Message) {
data := struct {
FromUserName string
@@ -54,10 +55,11 @@ func _wx_parse(m *ice.Message) {
m.Option("Event", data.Event)
}
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) {
m.Option(ice.MSG_OUTPUT, ice.RENDER_RESULT)
+ m.Set(ice.MSG_RESULT)
m.Echo(`
@@ -87,14 +89,19 @@ func _wx_action(m *ice.Message) {
}
const (
- LOGIN = "login"
- APPID = "appid"
- APPMM = "appmm"
- TOKEN = "token"
- TICKET = "ticket"
+ LOGIN = "login"
+ APPID = "appid"
+ APPMM = "appmm"
+ TOKEN = "token"
+ EXPIRE = "expire"
+ TICKET = "ticket"
+ EXPIRES = "expires"
+ CONFIG = "config"
+ WEIXIN = "weixin"
+)
+const (
+ MENU = "menu"
ACCESS = "access"
- CONFIG = "config"
- WEIXIN = "weixin"
)
const WX = "wx"
@@ -102,14 +109,7 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
Configs: map[string]*ice.Config{
LOGIN: {Name: LOGIN, Help: "认证", Value: kit.Data(
WEIXIN, "https://api.weixin.qq.com", APPID, "", APPMM, "", TOKEN, "",
- "template", kit.Dict("text", `
-
-
- {{.Option "CreateTime"}}
-
-
- `),
- "menu", []interface{}{
+ kit.MDB_TEMPLATE, kit.Dict(kit.MDB_TEXT, text), 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?river=product"),
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{
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.Load()
}},
- ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
- m.Save()
- }},
+ ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
+
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) {
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))
}},
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")) {
- msg := m.Cmd(web.SPIDE, "weixin", web.SPIDE_GET, "/cgi-bin/token?grant_type=client_credential",
+ 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",
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")) {
+ return
+ }
- m.Conf(LOGIN, "meta.access.token", msg.Append("access_token"))
- m.Conf(LOGIN, "meta.access.expire", now+kit.Int64(msg.Append("expires_in")))
+ 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, "meta.access.token"))
+ m.Echo(m.Conf(LOGIN, kit.Keym(ACCESS, TOKEN)))
}},
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")) {
- msg := m.Cmd(web.SPIDE, "weixin", web.SPIDE_GET, "/cgi-bin/ticket/getticket?type=jsapi",
+ 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",
"access_token", m.Cmdx(ACCESS, TOKEN))
+ if m.Warn(msg.Append("errcode") != "0", msg.Append("errcode"), msg.Append("errmsg")) {
+ return
+ }
- m.Conf(LOGIN, "meta.access.ticket", msg.Append(TICKET))
- m.Conf(LOGIN, "meta.access.expires", now+kit.Int64(msg.Append("expires_in")))
+ 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, "meta.access.ticket"))
+ m.Echo(m.Conf(LOGIN, kit.Keym(ACCESS, TICKET)))
}},
CONFIG: {Name: "config", Help: "配置", Hand: func(m *ice.Message, arg ...string) {
_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) {
- 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) {
- share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, "login")
- kit.Fetch(m.Confv(LOGIN, "meta.menu"), func(index int, value map[string]interface{}) {
+ share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN)
+ 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(wiki.REFER, kit.MergeURL(kit.Format(value[wiki.REFER]), web.SHARE, share))
})
}},
}, 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"))
})
}},
"/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) {
return // 验证失败
}
@@ -191,21 +198,20 @@ var Index = &ice.Context{Name: WX, Help: "公众号",
switch m.Option("MsgType") {
case "event":
switch m.Option("Event") {
- case "subscribe":
- // 应用列表
- _wx_action(m.Cmdy("menu", mdb.CREATE))
- case "unsubscribe":
+ case "subscribe": // 关注事件
+ _wx_action(m.Cmdy(MENU, mdb.CREATE))
+ case "unsubscribe": // 取关事件
}
- case "text":
+ case kit.MDB_TEXT:
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 // 没有权限
} else {
switch cmds[0] {
- case "menu":
+ case MENU:
// 应用列表
- _wx_action(m.Cmdy("menu", mdb.CREATE))
+ _wx_action(m.Cmdy(MENU, mdb.CREATE))
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{}) }
+
+var text = `
+
+
+{{.Option "CreateTime"}}
+
+
+`
diff --git a/misc/wx/wx.shy b/misc/wx/wx.shy
index 45c94ba3..ae2479a2 100644
--- a/misc/wx/wx.shy
+++ b/misc/wx/wx.shy
@@ -6,7 +6,6 @@ refer `
源码 https://github.com/shylinux/icebergs/blob/master/misc/wx/wx.go
`
image qrcode `https://weixin.qq.com`
-spark
chapter "应用"
field scan web.chat.scan