diff --git a/base/aaa/user.go b/base/aaa/user.go index ea9a0699..e646592b 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -88,6 +88,8 @@ func UserLogin(m *ice.Message, username, password string) bool { } const ( + AVATAR = "avatar" + USER_CREATE = "user.create" ) diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 424f628e..5a4bc4a9 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -69,7 +69,7 @@ func _hash_export(m *ice.Message, prefix, chain, file string) { en := json.NewEncoder(f) en.SetIndent("", " ") - en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))) + e = en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))) m.Log_EXPORT(kit.MDB_KEY, path.Join(prefix, chain), kit.MDB_FILE, p) m.Echo(p) diff --git a/base/web/cache.go b/base/web/cache.go index 30352a67..17af44f8 100644 --- a/base/web/cache.go +++ b/base/web/cache.go @@ -39,6 +39,7 @@ func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // fi m.Push(kit.MDB_TEXT, text) m.Push(kit.MDB_SIZE, size) m.Push(kit.MDB_FILE, file) + m.Push(kit.MDB_HASH, h) m.Push(DATA, h) } func _cache_watch(m *ice.Message, key, file string) { diff --git a/conf.go b/conf.go index 25e376b9..30a50e18 100644 --- a/conf.go +++ b/conf.go @@ -21,6 +21,7 @@ const ( // MSG MSG_SOURCE = "_source" MSG_TARGET = "_target" MSG_HANDLE = "_handle" + MSG_UPLOAD = "_upload" MSG_OUTPUT = "_output" MSG_ARGS = "_args" diff --git a/core/chat/action.go b/core/chat/action.go index 2f84e6de..3ba89781 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -8,9 +8,8 @@ import ( kit "github.com/shylinux/toolkits" ) -func _action_upload(m *ice.Message, arg ...string) { - msg := m.Cmd(web.CACHE, web.UPLOAD) - m.Option("_upload", msg.Append("data"), msg.Append("name")) +func _action_domain(m *ice.Message, arg ...string) string { + return m.Option(ice.MSG_DOMAIN, kit.Keys("R"+kit.Select(m.Option(ice.MSG_RIVER), arg, 1), "S"+kit.Select(m.Option(ice.MSG_STORM), arg, 0))) } func _action_right(m *ice.Message, river string, storm string) (ok bool) { if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID { @@ -33,7 +32,7 @@ func _action_show(m *ice.Message, river, storm, index string, arg ...string) { prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm) if m.Grows(RIVER, prefix, kit.MDB_ID, index, func(index int, value map[string]interface{}) { if cmds = kit.Simple(kit.Keys(value[CTX], value[CMD])); kit.Format(value[POD]) != "" { - m.Option(kit.SSH_POD, value[POD]) + m.Option(POD, value[POD]) } }) == nil && m.Warn(!m.Right(cmds), ice.ErrNotAuth) { return @@ -47,12 +46,16 @@ func _action_proxy(m *ice.Message) (proxy []string) { } return proxy } +func _action_upload(m *ice.Message, arg ...string) { + msg := m.Cmd(web.CACHE, web.UPLOAD) + m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME)) +} const ACTION = "action" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - "/action": {Name: "/action", Help: "工作台", Action: map[string]*ice.Action{ + "/action": {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{ ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { for _, k := range arg { m.Cmdy(ctx.COMMAND, k) @@ -71,8 +74,9 @@ func init() { return //命令列表 } - if m.Option("_upload") != "" { - _action_upload(m) + _action_domain(m) + if m.Option(ice.MSG_UPLOAD) != "" { + _action_upload(m) // 上传文件 } _action_show(m, arg[0], arg[1], arg[2], arg[3:]...) }}, diff --git a/core/chat/header.go b/core/chat/header.go index bcb6e471..a26438fc 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -35,7 +35,7 @@ func init() { m.Echo(m.Option(ice.MSG_USERNAME)) }}, - "userrole": {Name: "userrole", Help: "登录检查", Hand: func(m *ice.Message, arg ...string) { + aaa.USERROLE: {Name: "userrole", Help: "用户角色", Hand: func(m *ice.Message, arg ...string) { m.Echo(aaa.UserRole(m, m.Option("who"))) }}, diff --git a/core/chat/location.go b/core/chat/location.go index 34e6f0ea..e1ff3c9e 100644 --- a/core/chat/location.go +++ b/core/chat/location.go @@ -35,8 +35,8 @@ 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 添加@location", Help: "地理位置", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "insert type name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + LOCATION: {Name: "location text auto create@location", Help: "地理位置", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "insert type=text name address latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) { _trans(arg, map[string]string{"address": "text"}) m.Conf(LOCATION, kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Cmdy(mdb.INSERT, LOCATION, m.Option(ice.MSG_DOMAIN), mdb.HASH, arg) @@ -68,11 +68,10 @@ func init() { m.Table(func(index int, value map[string]string, head []string) { m.PushRender(kit.MDB_LINK, "a", "百度地图", kit.Format( "https://map.baidu.com/search/%s/@12958750.085,4825785.55,16z?querytype=s&da_src=shareurl&wd=%s", - url.QueryEscape(kit.Format(value[kit.MDB_TEXT])), - url.QueryEscape(kit.Format(value[kit.MDB_TEXT])), + url.QueryEscape(kit.Format(value[kit.MDB_TEXT])), url.QueryEscape(kit.Format(value[kit.MDB_TEXT])), )) }) - m.PushAction("删除") + m.PushAction(mdb.REMOVE) }}, }, }, nil) diff --git a/core/chat/paste.go b/core/chat/paste.go index f7260cc3..44d10535 100644 --- a/core/chat/paste.go +++ b/core/chat/paste.go @@ -15,13 +15,13 @@ 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 添加@paste", Help: "粘贴板", Action: map[string]*ice.Action{ - mdb.INSERT: {Name: "insert data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + PASTE: {Name: "paste hash auto create@paste", Help: "粘贴板", Action: map[string]*ice.Action{ + 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.Conf(PASTE, kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Cmdy(mdb.INSERT, m.Prefix(PASTE), m.Option(ice.MSG_DOMAIN), mdb.HASH, arg) }}, - mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.DELETE, m.Prefix(PASTE), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) }}, mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { @@ -30,6 +30,9 @@ func init() { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, m.Prefix(PASTE), m.Option(ice.MSG_DOMAIN), mdb.HASH) }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INPUTS, m.Prefix(PASTE), m.Option(ice.MSG_DOMAIN), mdb.HASH, arg) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 { text := m.Cmd(mdb.SELECT, m.Prefix(PASTE), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT) @@ -41,7 +44,7 @@ func init() { m.Cmdy(mdb.SELECT, m.Prefix(PASTE), m.Option(ice.MSG_DOMAIN), mdb.HASH) m.Sort(kit.MDB_TIME, "time_r") - m.PushAction("删除") + m.PushAction(mdb.REMOVE) }}, }, }, nil) diff --git a/core/chat/river.go b/core/chat/river.go index 292c4bb6..8fd4526b 100644 --- a/core/chat/river.go +++ b/core/chat/river.go @@ -12,9 +12,9 @@ import ( ) func _river_list(m *ice.Message) { - if m.Option("share") != "" && m.Option("share") != "" { - m.Option(ice.MSG_RIVER, m.Option("river")) - if m.Cmd(AUTH, m.Option("share")).Append(kit.MDB_TYPE) == USER { + if m.Option(web.SHARE) != "" && m.Option(web.SHARE) != "" { + m.Option(ice.MSG_RIVER, m.Option(RIVER)) + if m.Cmd(m.Prefix(AUTH), m.Option(web.SHARE)).Append(kit.MDB_TYPE) == USER { if m.Cmd(m.Prefix(USER), m.Option(ice.MSG_USERNAME)).Append(ice.MSG_USERNAME) == "" { m.Cmd(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) // 加入群组 @@ -22,7 +22,7 @@ func _river_list(m *ice.Message) { } } - m.Set(ice.MSG_OPTION, kit.MDB_KEY) + m.Set(ice.MSG_OPTION, kit.MDB_HASH) m.Set(ice.MSG_OPTION, kit.MDB_NAME) if p := m.Option(POD); p != "" { @@ -33,7 +33,7 @@ func _river_list(m *ice.Message) { m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) { - m.Push(key, value[kit.MDB_META], []string{kit.MDB_HASH, kit.MDB_NAME}, val[kit.MDB_META]) + m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val)) }) }) } @@ -74,12 +74,22 @@ func init() { m.Option(mdb.FIELDS, mdb.DETAIL) m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, m.Option(ice.MSG_RIVER)) }}, - AUTH: {Name: "auth hash auto 添加", Help: "授权", Action: map[string]*ice.Action{ + AUTH: {Name: "auth hash auto create", Help: "授权", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create type=node,user name text", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), AUTH), mdb.HASH, aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME), kit.MDB_TIME, m.Time("72h"), arg) }}, + mdb.INSERT: {Name: "insert river share", Help: "加入", Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,userrole,username,type,name,text") + msg := m.Cmd(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), AUTH), mdb.HASH, kit.MDB_HASH, m.Option(web.SHARE)) + switch msg.Append(kit.MDB_TYPE) { + case USER: + m.Option(ice.MSG_RIVER, m.Option(RIVER)) + m.Cmdy(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) + case NODE: + } + }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), AUTH), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg) @@ -89,23 +99,23 @@ func init() { kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, "time,hash,userrole,username,type,name,text") + m.Option(mdb.FIELDS, kit.Select("time,hash,userrole,username,type,name,text", mdb.DETAIL, len(arg) > 0)) m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), AUTH), mdb.HASH, kit.MDB_HASH, arg) - m.PushAction("删除") + m.PushAction(mdb.REMOVE) }}, - NODE: {Name: "node name ctx cmd auto 添加 邀请", Help: "设备", Action: map[string]*ice.Action{ - mdb.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { - m.Option(web.SHARE, m.Cmdx(AUTH, mdb.CREATE, kit.MDB_TYPE, NODE)) - m.Cmdy(code.PUBLISH, "contexts", "tool") - }}, + NODE: {Name: "node name ctx cmd auto insert invite", Help: "设备", Action: map[string]*ice.Action{ mdb.INSERT: {Name: "insert type name share", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), NODE), mdb.HASH, arg) }}, + mdb.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { + m.Option(web.SHARE, m.Cmdx(m.Prefix(AUTH), mdb.CREATE, kit.MDB_TYPE, NODE)) + m.Cmdy(code.PUBLISH, "contexts", "tool") + }}, web.SPACE_START: {Name: "start type name share river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" { return } - if msg := m.Cmd(AUTH, m.Option("share")); msg.Append(kit.MDB_TYPE) == NODE { + if msg := m.Cmd(m.Prefix(AUTH), m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) == NODE { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), NODE), mdb.HASH, arg) } }}, @@ -124,12 +134,12 @@ func init() { m.PushRender(kit.MDB_LINK, "a", value[kit.MDB_NAME], kit.MergeURL(m.Option(ice.MSG_USERWEB), kit.SSH_POD, kit.Keys(m.Option(kit.SSH_POD), value[kit.MDB_NAME]))) }) - m.PushAction("删除") + m.PushAction(mdb.REMOVE) return } m.Cmdy(web.ROUTE, arg) }}, - TOOL: {Name: "tool hash id auto 添加 创建", Help: "工具", Action: map[string]*ice.Action{ + TOOL: {Name: "tool hash id auto insert create", Help: "工具", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create type=public,protected,private name=hi text=hello", Help: "创建", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH, arg) }}, @@ -149,6 +159,22 @@ func init() { m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, + mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + if m.Option(kit.MDB_ID) != "" { + _action_domain(m, m.Option(kit.MDB_HASH)) + m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,arg") + msg := m.Cmd(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID)) + m.Cmdy(_river_proxy(msg, msg.Append(POD)), kit.Keys(msg.Append(CTX), msg.Append(CMD)), mdb.EXPORT) + } + }}, + mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { + if m.Option(kit.MDB_ID) != "" { + _action_domain(m, m.Option(kit.MDB_HASH)) + m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,arg") + msg := m.Cmd(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID)) + m.Cmdy(_river_proxy(msg, msg.Append(POD)), kit.Keys(msg.Append(CTX), msg.Append(CMD)), mdb.IMPORT) + } + }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case kit.MDB_HASH: @@ -163,7 +189,7 @@ func init() { m.Push(CTX, kit.Keys(kit.Select("", value["ups"], value["ups"] != "shy"), value[kit.MDB_NAME])) m.Push(kit.MDB_HELP, value[kit.MDB_HELP]) }) - case CMD, "help": + case CMD, kit.MDB_HELP: m.Cmd(ctx.CONTEXT, m.Option(CTX), ctx.COMMAND).Table(func(index int, value map[string]string, head []string) { m.Push(CMD, value[kit.MDB_KEY]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) @@ -175,8 +201,8 @@ func init() { if len(arg) == 0 { m.Option(mdb.FIELDS, "time,hash,name,count") m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH) - m.PushAction("删除") - return + m.PushAction(mdb.REMOVE) + return // 应用列表 } m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,arg") @@ -187,26 +213,28 @@ func init() { if len(arg) > 2 && arg[2] == "run" { m.Cmdy(_river_proxy(m, msg.Append(POD)), kit.Keys(msg.Append(CTX), msg.Append(CMD)), arg[3:]) - return + return // 执行命令 } if m.Copy(msg); len(arg) < 2 { - return + m.PushAction(mdb.EXPORT, mdb.IMPORT) + return // 命令列表 } - m.Option("_process", "_field") + // 命令插件 + m.Option(ice.MSG_PROCESS, "_field") m.Option("_prefix", arg[0], arg[1], "run") m.Table(func(index int, value map[string]string, head []string) { m.Cmdy(web.SPACE, value[POD], ctx.CONTEXT, value[CTX], ctx.COMMAND, value[CMD]) }) }}, - USER: {Name: "user username auto 添加 邀请", Help: "用户", Action: map[string]*ice.Action{ + USER: {Name: "user username auto insert invite", Help: "用户", Action: map[string]*ice.Action{ mdb.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { - share := m.Option(web.SHARE, m.Cmdx(AUTH, mdb.CREATE, kit.MDB_TYPE, USER)) - m.Cmdy(wiki.SPARK, "inner", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER), "share", share)) - m.Cmdy(wiki.IMAGE, "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER), "share", share)) + share := m.Option(web.SHARE, m.Cmdx(m.Prefix(AUTH), mdb.CREATE, kit.MDB_TYPE, USER)) + m.Cmdy(wiki.SPARK, "inner", kit.MergeURL(m.Option(ice.MSG_USERWEB), RIVER, m.Option(ice.MSG_RIVER), web.SHARE, share)) + m.Cmdy(wiki.IMAGE, "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), RIVER, m.Option(ice.MSG_RIVER), web.SHARE, share)) m.Render("") }}, - mdb.INSERT: {Name: "insert username userzone usernick", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + mdb.INSERT: {Name: "insert username", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { @@ -214,6 +242,7 @@ func init() { }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(aaa.USER) + m.Appendv(ice.MSG_APPEND, aaa.USERNAME, aaa.USERNICK) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(mdb.FIELDS, "time,username") @@ -221,25 +250,26 @@ func init() { m.Table(func(index int, value map[string]string, head []string) { m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME])) m.Push(aaa.USERZONE, aaa.UserZone(m, value[aaa.USERNAME])) + m.PushRender(aaa.AVATAR, "img", value["avatar_url"]) }) - m.PushAction("删除") + m.PushAction(mdb.REMOVE) }}, - RIVER: {Name: "river hash auto 添加", Help: "群组", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create type=public,protected,private name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + RIVER: {Name: "river hash auto create", Help: "群组", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create type=public,protected,private name=hi text=hello template=base", Help: "添加", Hand: func(m *ice.Message, arg ...string) { h := m.Cmdx(mdb.INSERT, RIVER, "", mdb.HASH, arg) m.Option(ice.MSG_RIVER, h) m.Echo(h) - m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, USER, kit.MDB_META, kit.MDB_SHORT), aaa.USERNAME) m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, NODE, kit.MDB_META, kit.MDB_SHORT), kit.MDB_NAME) + m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, USER, kit.MDB_META, kit.MDB_SHORT), aaa.USERNAME) m.Cmd(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) - kit.Fetch(m.Confv(RIVER, kit.Keys("meta.template", "base")), func(storm string, value interface{}) { + kit.Fetch(m.Confv(RIVER, kit.Keys("meta.template", kit.Select("base", m.Option("template")))), func(storm string, value interface{}) { h := m.Cmdx(TOOL, mdb.CREATE, kit.MDB_TYPE, "public", kit.MDB_NAME, storm, kit.MDB_TEXT, storm) kit.Fetch(value, func(index int, value string) { m.Search(value, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { - m.Cmd(TOOL, mdb.INSERT, kit.MDB_HASH, h, CTX, s.Cap(ice.CTX_FOLLOW), CMD, key, kit.MDB_HELP, kit.Simple(cmd.Help)[0]) + m.Cmd(TOOL, mdb.INSERT, kit.MDB_HASH, h, CTX, s.Cap(ice.CTX_FOLLOW), CMD, key, kit.MDB_HELP, cmd.Help) }) }) }) @@ -265,6 +295,8 @@ func init() { m.Push(aaa.USERROLE, aaa.VOID) m.Push(aaa.USERROLE, aaa.TECH) m.Push(aaa.USERROLE, aaa.ROOT) + case "template": + m.Push("template", "base") default: m.Cmdy(mdb.INPUTS, RIVER, "", mdb.HASH, arg) } @@ -274,7 +306,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, arg) - m.PushAction("删除") + m.PushAction(mdb.REMOVE) }}, "/river": {Name: "/river", Help: "小河流", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/core/chat/scan.go b/core/chat/scan.go index b8087f0d..40d1c828 100644 --- a/core/chat/scan.go +++ b/core/chat/scan.go @@ -15,12 +15,12 @@ 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 添加@scan", Help: "扫码", Action: map[string]*ice.Action{ - mdb.INSERT: {Name: "insert text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + SCAN: {Name: "scan hash auto create@scan", 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) { m.Conf(SCAN, kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Cmdy(mdb.INSERT, m.Prefix(SCAN), m.Option(ice.MSG_DOMAIN), mdb.HASH, arg) }}, - mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.DELETE, m.Prefix(SCAN), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) }}, mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { @@ -29,6 +29,9 @@ func init() { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, m.Prefix(SCAN), m.Option(ice.MSG_DOMAIN), mdb.HASH) }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INPUTS, m.Prefix(SCAN), m.Option(ice.MSG_DOMAIN), mdb.HASH, arg) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 { text := m.Cmd(mdb.SELECT, m.Prefix(SCAN), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_HASH, arg[0]).Append(kit.MDB_TEXT) @@ -40,7 +43,7 @@ func init() { m.Cmdy(mdb.SELECT, m.Prefix(SCAN), m.Option(ice.MSG_DOMAIN), mdb.HASH) m.Sort(kit.MDB_TIME, "time_r") - m.PushAction("删除") + m.PushAction(mdb.REMOVE) }}, }, }, nil) diff --git a/core/code/publish.go b/core/code/publish.go index 5a3408bb..c2783868 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -95,8 +95,8 @@ mkdir contexts; cd contexts export ctx_dev={{.Option "httphost"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp dev `, "tool", ` -# 生产环境 +# 群组环境 mkdir contexts; cd contexts -export ctx_dev={{.Option "httphost"}} ctx_river={{.Option "sess.river"}} ctx_share={{.Option "share"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp ice +export ctx_log=/dev/stdout ctx_dev={{.Option "httphost"}} ctx_river={{.Option "sess.river"}} ctx_share={{.Option "share"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp ice `, ) diff --git a/meta.go b/meta.go index 68a2a939..a7739f9c 100644 --- a/meta.go +++ b/meta.go @@ -492,6 +492,16 @@ func (m *Message) Appendv(key string, arg ...interface{}) []string { } return index } + + if len(m.meta[MSG_APPEND]) == 2 && m.meta[MSG_APPEND][0] == kit.MDB_KEY { + for i, k := range m.meta[kit.MDB_KEY] { + if k == key { + return []string{kit.Select("", m.meta[kit.MDB_VALUE], i)} + } + } + return nil + } + if len(arg) > 0 { m.meta[key] = kit.Simple(arg...) } diff --git a/misc/mp/mp.go b/misc/mp/mp.go index 09139476..f054a650 100644 --- a/misc/mp/mp.go +++ b/misc/mp/mp.go @@ -7,16 +7,16 @@ import ( "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/chat" kit "github.com/shylinux/toolkits" - - "net/http" - "path" ) +const ( + LOGIN = "login" +) const MP = "mp" -var Index = &ice.Context{Name: "mp", Help: "小程序", +var Index = &ice.Context{Name: MP, Help: "小程序", Configs: map[string]*ice.Config{ - "login": {Name: "login", Help: "认证", Value: kit.Data( + LOGIN: {Name: LOGIN, Help: "认证", Value: kit.Data( "auth", "/sns/jscode2session?grant_type=authorization_code", "weixin", "https://api.weixin.qq.com", "appid", "", "appmm", "", "token", "", @@ -25,27 +25,22 @@ var Index = &ice.Context{Name: "mp", 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", "meta.weixin")) - m.Confm("login", "meta.userrole", func(key string, value string) { - m.Cmd(aaa.ROLE, value, key) - }) + m.Cmd(web.SPIDE, mdb.CREATE, "weixin", m.Conf(LOGIN, "meta.weixin")) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Save("login") + m.Save() }}, - "/login/": {Name: "/login/", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - switch arg[0] { - case "code": - msg := m.Cmd(web.SPIDE, "weixin", http.MethodGet, m.Conf("login", "meta.auth"), "js_code", m.Option("code"), - "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm")) + "/login/": {Name: "/login/", Help: "登录", Action: map[string]*ice.Action{ + "code": {Name: "code", Help: "登录", Hand: func(m *ice.Message, arg ...string) { + msg := m.Cmd(web.SPIDE, "weixin", web.SPIDE_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_USERZONE, MP) m.Echo(aaa.SessCreate(msg, msg.Append("openid"), aaa.UserRole(msg, msg.Append("openid")))) - - case "info": - // 用户信息 + }}, + "info": {Name: "info", Help: "信息", Hand: func(m *ice.Message, arg ...string) { m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME)) m.Cmd(aaa.USER, mdb.MODIFY, aaa.USERZONE, MP, aaa.USERNICK, m.Option("nickName"), "avatar_url", m.Option("avatarUrl"), @@ -54,91 +49,15 @@ var Index = &ice.Context{Name: "mp", Help: "小程序", "language", m.Option("language"), "province", m.Option("province"), ) - - case "scan": - if p := m.Option("pod"); p != "" { - m.Option("pod", "") - // 代理列表 - m.Cmdy(web.SPACE, p, "web.chat.qrcode.qrcode", mdb.INSERT, "qrcode", m.Option("name"), m.Option("text")) - return + }}, + "scan": {Name: "scan", Help: "scan", Hand: func(m *ice.Message, arg ...string) { + if m.Option(web.SHARE) != "" { + if m.Option(chat.RIVER) != "" { + m.Cmdy(chat.AUTH, mdb.INSERT) + } } - m.Cmdy("web.chat.qrcode.qrcode", mdb.INSERT, "qrcode", m.Option("name"), m.Option("text")) - - case "auth": - if !m.Options(ice.MSG_USERNAME) { - m.Render("status", 401, "not login") - break - } - - switch kit.Select("active", m.Option("type")) { - case "share": - m.Richs(web.SHARE, nil, m.Option("text"), func(key string, value map[string]interface{}) { - switch value["type"] { - case "invite": - if m.Option(ice.MSG_USERROLE) != value["name"] { - m.Cmd(aaa.ROLE, value["name"], m.Option(ice.MSG_USERNAME)) - m.Cmd("web.chat.auto", m.Option(ice.MSG_USERNAME), value["name"]) - } - break - default: - m.Option("type", value["type"]) - m.Option("name", value["name"]) - m.Option("text", value["text"]) - } - }) - } - - switch kit.Select("active", m.Option("type")) { - case "active": - // 网页登录 - m.Cmdy(web.SPACE, m.Option("name"), "sessid", m.Cmdx(aaa.SESS, "create", m.Option(ice.MSG_USERNAME))) - case "login": - // 终端登录 - m.Cmdy(aaa.SESS, "auth", m.Option("text"), m.Option(ice.MSG_USERNAME)) - } - - case "upload": - msg := m.Cmd(web.CACHE, "upload") - m.Cmd(web.STORY, web.WATCH, msg.Append("data"), path.Join("usr/local/mp/", path.Base(msg.Append("name")))) - // m.Cmd(web.FAVOR, "device", "file", msg.Append("name"), msg.Append("data")) - m.Render(msg.Append("data")) - - case "cmds": - if !m.Options(ice.MSG_USERNAME) { - m.Render("status", 401, "not login") - break - } - if arg = kit.Split(arg[1]); !m.Right(arg) { - m.Render("status", 403, "not auth") - break - } - - // 执行命令 - m.Cmdy(arg) - } - }}, - - "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]) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }}, }, } diff --git a/type.go b/type.go index 70061476..bbdab1bd 100644 --- a/type.go +++ b/type.go @@ -233,7 +233,11 @@ func (c *Context) _split(name string) []interface{} { } case "@": if len(ls) > i+1 { - kit.Value(item, kit.MDB_VALUE, "@"+ls[i+1]+"="+value) + if kit.Value(item, kit.MDB_INPUT) == "button" { + kit.Value(item, kit.MDB_ACTION, ls[i+1]) + } else { + kit.Value(item, kit.MDB_VALUE, "@"+ls[i+1]+"="+value) + } } } }