From 4a680f0afc19174ad5f1de5afc39633a27d0e417 Mon Sep 17 00:00:00 2001 From: shaoying Date: Sun, 8 Aug 2021 23:16:58 +0800 Subject: [PATCH] opt chat --- base/ctx/config.go | 8 ++- base/web/dream.go | 6 +-- base/web/spide.go | 2 +- conf.go | 18 ++++--- core/chat/action.go | 109 +++++++++++++++++++++-------------------- core/chat/auth.go | 45 ----------------- core/chat/footer.go | 4 +- core/chat/header.go | 113 ++++++++++++++++++++++++------------------- core/chat/node.go | 4 +- core/chat/river.go | 23 ++++++--- core/chat/user.go | 21 +++----- core/code/autogen.go | 19 +++++++- core/code/publish.go | 13 ++++- core/code/vimer.go | 6 +++ core/wiki/field.go | 1 + core/wiki/parse.go | 5 +- misc/git/config.go | 82 +++++++++++++++---------------- type.go | 9 ++-- 18 files changed, 247 insertions(+), 241 deletions(-) delete mode 100644 core/chat/auth.go diff --git a/base/ctx/config.go b/base/ctx/config.go index 3965092a..e34b2a73 100644 --- a/base/ctx/config.go +++ b/base/ctx/config.go @@ -30,7 +30,9 @@ func _config_save(m *ice.Message, name string, arg ...string) { msg := m.Spawn(m.Source()) data := map[string]interface{}{} for _, k := range arg { - data[k] = msg.Confv(k) + if v := msg.Confv(k); v != "" { + data[k] = v + } } // 保存配置 @@ -110,6 +112,10 @@ func init() { GROW: {Name: "grow", Help: "成长", Hand: func(m *ice.Message, arg ...string) { _config_grow(m, arg[0], arg[1], arg[2:]...) }}, + "clear": {Name: "clear", Help: "清空", Hand: func(m *ice.Message, arg ...string) { + m.Conf(arg[0], "", "") + m.Cmd("exit", 1) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { _config_list(m) diff --git a/base/web/dream.go b/base/web/dream.go index 3e35b72d..6750fe7d 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -45,7 +45,7 @@ func _dream_show(m *ice.Message, name string) { // 任务模板 if m.Option(kit.MDB_TEMPLATE) != "" { - for _, file := range []string{ice.ETC_MISS, ice.SRC_MAIN, ice.SRC_MAIN_GO, ice.GO_MOD, ice.MAKEFILE} { + for _, file := range []string{ice.ETC_MISS, ice.SRC_MAIN_SHY, ice.SRC_MAIN_GO, ice.GO_MOD, ice.MAKEFILE} { if _, e := os.Stat(path.Join(p, file)); os.IsNotExist(e) { switch m.Cmdy(nfs.COPY, path.Join(p, file), path.Join(m.Option(kit.MDB_TEMPLATE), file)); file { case ice.GO_MOD: @@ -112,13 +112,13 @@ func init() { m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", mdb.CREATE, arg) m.ProcessInner() }}, - tcp.START: {Name: "start name repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + cli.START: {Name: "start name repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { if m.Option(kit.MDB_NAME) == SPIDE_SELF { m.Option(kit.MDB_NAME, "") } _dream_show(m, m.Option(kit.MDB_NAME, kit.Select(path.Base(m.Option(kit.SSH_REPOS)), m.Option(kit.MDB_NAME)))) }}, - tcp.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { + cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(SPACE, m.Option(kit.MDB_NAME), "exit", "0") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/base/web/spide.go b/base/web/spide.go index 6fa128c8..969b11cf 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -319,7 +319,7 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ SPIDE: {Name: SPIDE, Help: "蜘蛛侠", Value: kit.Data( - kit.MDB_SHORT, CLIENT_NAME, kit.MDB_SHORT, "time,client.name,client.url", + kit.MDB_SHORT, CLIENT_NAME, kit.MDB_FIELD, "time,client.name,client.url", )}, }, Commands: map[string]*ice.Command{ diff --git a/conf.go b/conf.go index 4f17aac5..7cf02dca 100644 --- a/conf.go +++ b/conf.go @@ -1,5 +1,9 @@ package ice +const ( + SP = " " + NL = "\n" +) const ( // MOD MOD_SP = " " MOD_NL = "\n" @@ -69,13 +73,13 @@ const ( // DIR ETC_MISS = "etc/miss.sh" ETC_MISS_SH = "etc/miss.sh" - SRC_MAIN = "src/main.shy" - SRC_MAIN_GO = "src/main.go" - SRC_VERSION = "src/version.go" - SRC_BINPACK = "src/binpack.go" - MAKEFILE = "makefile" - GO_MOD = "go.mod" - GO_SUM = "go.sum" + SRC_MAIN_SHY = "src/main.shy" + SRC_MAIN_GO = "src/main.go" + SRC_VERSION = "src/version.go" + SRC_BINPACK = "src/binpack.go" + MAKEFILE = "makefile" + GO_MOD = "go.mod" + GO_SUM = "go.sum" CTX_DEBUG = "ctx_debug" CTX_DEV = "ctx_dev" diff --git a/core/chat/action.go b/core/chat/action.go index 77cbf1e2..f92b3b62 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -48,7 +48,7 @@ func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) { func _action_right(m *ice.Message, river string, storm string) (ok bool) { if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID { m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) { - if ok = m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), nil) != nil; ok { + if ok = m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USERS), m.Option(ice.MSG_USERNAME), nil) != nil; ok { m.Log_AUTH(RIVER, river, STORM, storm) } }) @@ -148,61 +148,60 @@ const ( const ACTION = "action" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(DOMAIN, kit.Dict())}, - }, - Commands: map[string]*ice.Command{ - ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - for _, cmd := range []string{ - "web.chat.meet.miss", - "web.chat.meet.mate", - "web.chat.location", - "web.chat.paste", - "web.chat.scan", - "web.wiki.feel", - "web.wiki.draw", - "web.wiki.data", - "web.wiki.word", - "web.team.task", - "web.team.plan", - "web.mall.asset", - "web.mall.salary", - } { - m.Conf(ACTION, kit.Keym(DOMAIN, cmd), ice.TRUE) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(DOMAIN, kit.Dict())}, + }, Commands: map[string]*ice.Command{ + ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + for _, cmd := range []string{ + "web.chat.meet.miss", + "web.chat.meet.mate", + "web.chat.location", + "web.chat.paste", + "web.chat.scan", + "web.wiki.feel", + "web.wiki.draw", + "web.wiki.data", + "web.wiki.word", + "web.team.task", + "web.team.plan", + "web.mall.asset", + "web.mall.salary", + } { + m.Conf(ACTION, kit.Keym(DOMAIN, cmd), ice.TRUE) + } + }}, + "/action": {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{ + mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), TOOL, kit.MDB_HASH, m.Option(STORM)), mdb.LIST, + m.OptionSimple(kit.MDB_ID), arg) + }}, + ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + for _, k := range arg { + m.Cmdy(ctx.COMMAND, strings.TrimPrefix(k, ".")) } }}, - "/action": {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{ - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), TOOL, kit.MDB_HASH, m.Option(STORM)), mdb.LIST, - m.OptionSimple(kit.MDB_ID), arg) - }}, - ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - for _, k := range arg { - m.Cmdy(ctx.COMMAND, strings.TrimPrefix(k, ".")) - } - }}, - SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) { - _header_share(m, arg...) - }}, - "_share": {Name: "_share", Help: "共享", Hand: func(m *ice.Message, arg ...string) { - _action_share(m, arg...) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { - return // 没有登录 - } - if m.Warn(!_action_right(m, arg[0], arg[1]), ice.ErrNotRight) { - return // 没有授权 - } - - if len(arg) == 2 { - _action_list(m, arg[0], arg[1]) - return //命令列表 - } - - // 执行命令 - _action_show(m, arg[0], arg[1], arg[2], arg[3:]...) + SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) { + _header_share(m, arg...) }}, - }}) + "_share": {Name: "_share", Help: "共享", Hand: func(m *ice.Message, arg ...string) { + _action_share(m, arg...) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { + return // 没有登录 + } + if m.Warn(!_action_right(m, arg[0], arg[1]), ice.ErrNotRight) { + return // 没有授权 + } + + if len(arg) == 2 { + m.Option(MENUS, m.Conf(ACTION, kit.Keym(MENUS))) + _action_list(m, arg[0], arg[1]) + return //命令列表 + } + + // 执行命令 + _action_show(m, arg[0], arg[1], arg[2], arg[3:]...) + }}, + }}) } diff --git a/core/chat/auth.go b/core/chat/auth.go deleted file mode 100644 index 083e9ce2..00000000 --- a/core/chat/auth.go +++ /dev/null @@ -1,45 +0,0 @@ -package chat - -import ( - 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/ssh" - "github.com/shylinux/icebergs/base/web" - kit "github.com/shylinux/toolkits" -) - -const AUTH = "auth" - -func init() { - Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - 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, _river_key(m, 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) { - switch msg := m.Cmd(AUTH, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) { - case USER: - m.Option(ice.MSG_RIVER, m.Option(RIVER)) - m.Cmdy(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) - } - }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, RIVER, _river_key(m, AUTH), mdb.HASH, m.OptionSimple(kit.MDB_HASH), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, RIVER, _river_key(m, AUTH), mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg), "time,hash,userrole,username,type,name,text") - if m.Cmdy(mdb.SELECT, RIVER, _river_key(m, AUTH), mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 { - m.PushScript(ssh.SCRIPT, _river_url(m, web.SHARE, m.Option(web.SHARE))) - m.PushQRCode(cli.QRCODE, _river_url(m, web.SHARE, m.Option(web.SHARE))) - } - m.PushAction(mdb.REMOVE) - }}, - }}) -} diff --git a/core/chat/footer.go b/core/chat/footer.go index 3f7560b3..11f9067e 100644 --- a/core/chat/footer.go +++ b/core/chat/footer.go @@ -25,9 +25,7 @@ func init() { m.Cmdy(ctx.COMMAND, arg) }}, cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { - if !m.Warn(!m.Right(arg), ice.ErrNotRight) { - m.Cmdy(arg) - } + m.Cmdy(arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { kit.Fetch(m.Confv(FOOTER, LEGAL), func(index int, value string) { m.Echo(value) }) diff --git a/core/chat/header.go b/core/chat/header.go index 4a5e38d0..0e24a424 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -1,10 +1,13 @@ package chat import ( + "path" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" @@ -38,7 +41,7 @@ func _header_share(m *ice.Message, arg ...string) { m.PushQRCode(kit.MDB_TEXT, m.Option(kit.MDB_LINK)) } func _header_grant(m *ice.Message, arg ...string) { - if m.PodCmd(m.Prefix("/header"), ctx.ACTION, GRANT, arg) { + if m.PodCmd(m.PrefixKey(), ctx.ACTION, GRANT, arg) { return // 下发命令 } @@ -48,11 +51,14 @@ func _header_grant(m *ice.Message, arg ...string) { } func _header_users(m *ice.Message, key string, arg ...string) { m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME)) - m.Cmdy("aaa.user", ctx.ACTION, mdb.MODIFY, key, m.Option(key, arg[0])) + m.Cmdy(aaa.USER, ctx.ACTION, mdb.MODIFY, key, m.Option(key, arg[0])) } const ( + TOPIC = "topic" TITLE = "title" + MENUS = "menus" + TRANS = "trans" AGENT = "agent" CHECK = "check" SHARE = "share" @@ -61,54 +67,59 @@ const ( const HEADER = "header" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - HEADER: {Name: HEADER, Help: "标题栏", Value: kit.Data(TITLE, "github.com/shylinux/contexts")}, - }, - Commands: map[string]*ice.Command{ - "/header": {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{ - AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.chat.wx.access", "config") - }}, - CHECK: {Name: "check", Help: "登录检查", Hand: func(m *ice.Message, arg ...string) { - _header_check(m, arg...) - }}, - SHARE: {Name: "share type", Help: "扫码登录", Hand: func(m *ice.Message, arg ...string) { - _header_share(m, arg...) - }}, - GRANT: {Name: "grant space", Help: "扫码授权", Hand: func(m *ice.Message, arg ...string) { - _header_grant(m, arg...) - }}, - - aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) { - if aaa.UserLogin(m, arg[0], arg[1]) { - web.RenderCookie(m, aaa.SessCreate(m, arg[0])) - } - m.Echo(m.Option(ice.MSG_USERNAME)) - }}, - aaa.LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(aaa.SESS, mdb.REMOVE, ice.OptionHash(m.Option(ice.MSG_SESSID))) - }}, - - aaa.AVATAR: {Name: "avatar", Help: "头像图片", Hand: func(m *ice.Message, arg ...string) { - _header_users(m, aaa.AVATAR, arg...) - }}, - aaa.USERNICK: {Name: "usernick", Help: "用户昵称", Hand: func(m *ice.Message, arg ...string) { - _header_users(m, aaa.USERNICK, arg...) - }}, - aaa.BACKGROUND: {Name: "background", Help: "背景图片", Hand: func(m *ice.Message, arg ...string) { - _header_users(m, aaa.BACKGROUND, arg...) - }}, - code.WEBPACK: {Name: "webpack", Help: "网页打包", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME)) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - user := m.Cmd("aaa.user", m.Option(ice.MSG_USERNAME)) - for _, k := range []string{aaa.BACKGROUND, aaa.AVATAR} { - m.Option(k, user.Append(k)) - } - m.Echo(m.Conf(HEADER, kit.Keym(TITLE))) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + HEADER: {Name: HEADER, Help: "标题栏", Value: kit.Data( + TITLE, "github.com/shylinux/contexts", MENUS, `["header", ["setting", "black", "white", "print", "webpack", "devops"]]`, + )}, + }, Commands: map[string]*ice.Command{ + "/header": {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{ + AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("web.chat.wx.access", "config") }}, - }, - }) + CHECK: {Name: "check", Help: "登录检查", Hand: func(m *ice.Message, arg ...string) { + _header_check(m, arg...) + }}, + SHARE: {Name: "share type", Help: "扫码登录", Hand: func(m *ice.Message, arg ...string) { + _header_share(m, arg...) + }}, + GRANT: {Name: "grant space", Help: "扫码授权", Hand: func(m *ice.Message, arg ...string) { + _header_grant(m, arg...) + }}, + + aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) { + if aaa.UserLogin(m, arg[0], arg[1]) { + web.RenderCookie(m, aaa.SessCreate(m, arg[0])) + } + m.Echo(m.Option(ice.MSG_USERNAME)) + }}, + aaa.LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(aaa.SESS, mdb.REMOVE, ice.OptionHash(m.Option(ice.MSG_SESSID))) + }}, + aaa.AVATAR: {Name: "avatar", Help: "用户头像", Hand: func(m *ice.Message, arg ...string) { + _header_users(m, aaa.AVATAR, arg...) + }}, + aaa.USERNICK: {Name: "usernick", Help: "用户昵称", Hand: func(m *ice.Message, arg ...string) { + _header_users(m, aaa.USERNICK, arg...) + }}, + aaa.BACKGROUND: {Name: "background", Help: "用户壁纸", Hand: func(m *ice.Message, arg ...string) { + _header_users(m, aaa.BACKGROUND, arg...) + }}, + + code.WEBPACK: {Name: "webpack", Help: "打包页面", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME)) + }}, + "devops": {Name: "devops", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js")) + m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css")) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(TRANS, kit.Format(kit.Value(c.Commands[cmd].Meta, "_trans"))) + m.Option(MENUS, m.Conf(HEADER, kit.Keym(MENUS))) + msg := m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME)) + for _, k := range []string{aaa.USERNICK, aaa.BACKGROUND, aaa.AVATAR} { + m.Option(k, msg.Append(k)) + } + m.Echo(m.Conf(HEADER, kit.Keym(TITLE))) + }}, + }}) } diff --git a/core/chat/node.go b/core/chat/node.go index 745283fe..3625ebaf 100644 --- a/core/chat/node.go +++ b/core/chat/node.go @@ -23,12 +23,12 @@ func init() { if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" { return } - if msg := m.Cmd(AUTH, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) == NODE { + if msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) == RIVER { m.Cmdy(mdb.INSERT, RIVER, _river_key(m, NODE), mdb.HASH, arg) } }}, aaa.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.Option(web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, RIVER)) m.Cmdy(code.PUBLISH, ice.CONTEXTS, "tool") }}, mdb.INSERT: {Name: "insert type name share", Help: "添加", Hand: func(m *ice.Message, arg ...string) { diff --git a/core/chat/river.go b/core/chat/river.go index f67da959..231fc2cf 100644 --- a/core/chat/river.go +++ b/core/chat/river.go @@ -31,8 +31,8 @@ func _river_list(m *ice.Message) { if m.Conf(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER))) == "" { break } - if msg.Cmd(USER, m.Option(ice.MSG_USERNAME)).Append(aaa.USERNAME) == "" { - msg.Cmd(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) // 加入群组 + if msg.Cmd(USERS, m.Option(ice.MSG_USERNAME)).Append(aaa.USERNAME) == "" { + msg.Cmd(USERS, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) // 加入群组 } case web.STORM: // 共享应用 @@ -49,7 +49,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.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USERS), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) { m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val)) }) }) @@ -60,7 +60,14 @@ const RIVER = "river" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_RIVER)}, + RIVER: {Name: RIVER, Help: "群组", Value: kit.Data( + kit.MDB_PATH, ice.USR_LOCAL_RIVER, + MENUS, `["river", + ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], + ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"], + ["共享", "共享群组", "共享应用", "共享工具", "共享主机"] +]`, + )}, }, Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -68,7 +75,6 @@ func init() { "base", kit.Dict( "info", []interface{}{ "web.chat.info", - "web.chat.auth", "web.chat.user", "web.chat.tool", "web.chat.node", @@ -102,6 +108,7 @@ func init() { return // 没有登录 } if len(arg) == 0 { + m.Option(MENUS, m.Conf(RIVER, kit.Keym(MENUS))) _river_list(m) return // 群组列表 } @@ -115,7 +122,7 @@ func init() { } switch kit.Select("", arg, 1) { - case USER, TOOL, NODE: + case USERS, TOOL, NODE: m.Option(ice.MSG_RIVER, arg[0]) m.Cmdy(arg[1], arg[2:]) @@ -134,8 +141,8 @@ func init() { m.Echo(h) 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(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) + m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, USERS, kit.MDB_META, kit.MDB_SHORT), aaa.USERNAME) + m.Cmd(USERS, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) kit.Fetch(m.Confv(RIVER, kit.Keym(kit.MDB_TEMPLATE, kit.Select("base", m.Option(kit.MDB_TEMPLATE)))), func(storm string, value interface{}) { h := m.Cmdx(TOOL, mdb.CREATE, kit.MDB_TYPE, PUBLIC, kit.MDB_NAME, storm, kit.MDB_TEXT, storm) diff --git a/core/chat/user.go b/core/chat/user.go index fea73adf..b548c006 100644 --- a/core/chat/user.go +++ b/core/chat/user.go @@ -4,35 +4,28 @@ import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" ) -const USER = "user" +const USERS = "users" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - USER: {Name: "user username auto insert invite", Help: "用户", Action: map[string]*ice.Action{ - aaa.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.EchoScript(kit.MergeURL(m.Option(ice.MSG_USERWEB), RIVER, m.Option(ice.MSG_RIVER), web.SHARE, share)) - m.EchoQRCode(kit.MergeURL(m.Option(ice.MSG_USERWEB), RIVER, m.Option(ice.MSG_RIVER), web.SHARE, share)) - m.Render("") - }}, + USERS: {Name: "users username auto insert invite", Help: "用户", Action: map[string]*ice.Action{ mdb.INSERT: {Name: "insert username", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, RIVER, _river_key(m, USER), mdb.HASH, arg) + m.Cmdy(mdb.INSERT, RIVER, _river_key(m, USERS), mdb.HASH, arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, RIVER, _river_key(m, USER), mdb.HASH, m.OptionSimple(aaa.USERNAME)) + m.Cmdy(mdb.DELETE, RIVER, _river_key(m, USERS), mdb.HASH, m.OptionSimple(aaa.USERNAME)) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("aaa.user", ice.OptionFields(aaa.USERNAME, aaa.USERZONE, aaa.USERNICK)) + m.Cmdy(aaa.USER, ice.OptionFields(aaa.USERNAME, aaa.USERZONE, aaa.USERNICK)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg), "time,username") - m.Cmdy(mdb.SELECT, RIVER, _river_key(m, USER), mdb.HASH, aaa.USERNAME, arg) + m.Cmdy(mdb.SELECT, RIVER, _river_key(m, USERS), mdb.HASH, aaa.USERNAME, arg) m.Table(func(index int, value map[string]string, head []string) { - m.Richs(USER, nil, value[aaa.USERNAME], func(key string, val map[string]interface{}) { + m.Richs(USERS, nil, value[aaa.USERNAME], func(key string, val map[string]interface{}) { val = kit.GetMeta(val) m.Push(aaa.USERNICK, val[aaa.USERNICK]) m.PushImages(aaa.AVATAR, kit.Format(val[aaa.AVATAR]), kit.Select("60", "240", m.Option(mdb.FIELDS) == mdb.DETAIL)) diff --git a/core/code/autogen.go b/core/code/autogen.go index 96c79986..1b9a23c1 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -20,9 +20,14 @@ field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} } } func _autogen_source(m *ice.Message, name string) { - m.Cmd(nfs.PUSH, ice.SRC_MAIN, "\n", kit.SSH_SOURCE+` `+path.Join(name, kit.Keys(name, SHY)), "\n") + m.Cmd(nfs.PUSH, ice.SRC_MAIN_SHY, "\n", kit.SSH_SOURCE+` `+path.Join(name, kit.Keys(name, SHY)), "\n") } func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list []string) { + m.Cmd(nfs.DEFS, ice.GO_MOD, kit.Format(`module %s + +go 1.11 +`, path.Base(kit.Path("")))) + name, value := "", "" key := strings.ToUpper(ctx) m.Cmd(nfs.CAT, from, func(line string, index int) { @@ -47,6 +52,18 @@ func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list return } func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) { + m.Cmd(nfs.DEFS, main, `package main + +import ( + ice "github.com/shylinux/icebergs" + _ "github.com/shylinux/icebergs/base" + _ "github.com/shylinux/icebergs/core" + _ "github.com/shylinux/icebergs/misc" +) + +func main() { print(ice.Run()) } +`) + m.Cmd(nfs.CAT, main, func(line string, index int) { if list = append(list, line); strings.HasPrefix(line, "import (") { list = append(list, kit.Format(` _ "%s/src/%s"`, mod, ctx), "") diff --git a/core/code/publish.go b/core/code/publish.go index 39d3f169..38bb6176 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -50,7 +50,7 @@ func init() { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.USR_PUBLISH) m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts) }}, - PUBLISH: {Name: "publish path auto create volcanos icebergs intshell dream", Help: "发布", Action: map[string]*ice.Action{ + PUBLISH: {Name: "publish path auto create volcanos icebergs intshell package dream", Help: "发布", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { _publish_file(m, m.Option(kit.MDB_FILE)) }}, @@ -117,6 +117,17 @@ func init() { } } }}, + "package": {Name: "package", Help: "依赖", Hand: func(m *ice.Message, arg ...string) { + web.PushStream(m) + p := kit.Path(ice.USR_PUBLISH) + m.Option(cli.CMD_DIR, kit.Path(os.Getenv("HOME"))) + // m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "go.tar.gz", "go/pkg") + // m.Cmdy(cli.SYSTEM, "mv", "go.tar.gz", p) + m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "vim.tar.gz", ".vim/plugged") + m.Cmdy(cli.SYSTEM, "mv", "vim.tar.gz", p) + m.Toast("打包成功") + m.ProcessHold() + }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) diff --git a/core/code/vimer.go b/core/code/vimer.go index ec25b2ab..d630b786 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -32,6 +32,12 @@ func init() { nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE))) }}, + AUTOGEN: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(AUTOGEN, mdb.CREATE, arg) + }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(AUTOGEN, mdb.INPUTS, arg) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(INNER, arg) }}, diff --git a/core/wiki/field.go b/core/wiki/field.go index 8c1328f2..15496b70 100644 --- a/core/wiki/field.go +++ b/core/wiki/field.go @@ -19,6 +19,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) { name = strings.ReplaceAll(name, " ", "_") meta[kit.MDB_NAME] = name + meta[kit.MDB_INDEX] = text // 扩展参数 for i := 0; i < len(arg)-1; i += 2 { diff --git a/core/wiki/parse.go b/core/wiki/parse.go index ae1d6a4e..e3a65930 100644 --- a/core/wiki/parse.go +++ b/core/wiki/parse.go @@ -34,12 +34,15 @@ func init() { arg[0] = "list" } - switch m.Option(mdb.FIELDS, mdb.DETAIL); arg[0] { + switch m.OptionFields(mdb.DETAIL); arg[0] { case "json": m.Echo(kit.Formats(kit.UnMarshal(arg[1]))) case "http": u, _ := url.Parse(arg[1]) + m.Push("proto", u.Scheme) + m.Push("host", u.Host) + m.Push("path", u.Path) for k, v := range u.Query() { for _, v := range v { m.Push(k, v) diff --git a/misc/git/config.go b/misc/git/config.go index 4f651f2e..85329500 100644 --- a/misc/git/config.go +++ b/misc/git/config.go @@ -34,48 +34,46 @@ func _config_list(m *ice.Message) { const CONFIG = "config" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - CONFIG: {Name: CONFIG, Help: "配置键", Value: kit.Data( - kit.MDB_SHORT, kit.MDB_NAME, "init", kit.Dict( - "alias", kit.Dict("s", "status", "b", "branch"), - "credential", kit.Dict("helper", "store"), - "core", kit.Dict("quotepath", "false"), - "push", kit.Dict("default", "simple"), - "color", kit.Dict("ui", "always"), - ))}, - }, - Commands: map[string]*ice.Command{ - CONFIG: {Name: "server name auto create import", Help: "配置键", Action: map[string]*ice.Action{ - mdb.IMPORT: {Name: "import", Help: "初始化", Hand: func(m *ice.Message, arg ...string) { - kit.Fetch(m.Confv(CONFIG, kit.Keym("init")), func(conf string, value interface{}) { - kit.Fetch(value, func(key string, value string) { - _config_set(m, kit.Keys(conf, key), value) - }) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + CONFIG: {Name: CONFIG, Help: "配置键", Value: kit.Data( + kit.MDB_SHORT, kit.MDB_NAME, "init", kit.Dict( + "alias", kit.Dict("s", "status", "b", "branch"), + "credential", kit.Dict("helper", "store"), + "core", kit.Dict("quotepath", "false"), + "push", kit.Dict("default", "simple"), + "color", kit.Dict("ui", "always"), + ))}, + }, Commands: map[string]*ice.Command{ + CONFIG: {Name: "server name auto create import", Help: "配置键", Action: map[string]*ice.Action{ + mdb.IMPORT: {Name: "import", Help: "初始化", Hand: func(m *ice.Message, arg ...string) { + kit.Fetch(m.Confv(CONFIG, kit.Keym("init")), func(conf string, value interface{}) { + kit.Fetch(value, func(key string, value string) { + _config_set(m, kit.Keys(conf, key), value) }) - }}, - mdb.CREATE: {Name: "create name value", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(mdb.DELETE, m.Prefix(CONFIG), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME)) - _config_set(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_VALUE)) - m.ProcessRefresh30ms() - }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - if arg[0] == kit.MDB_VALUE { - m.Cmd(mdb.DELETE, m.Prefix(CONFIG), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME)) - _config_set(m, m.Option(kit.MDB_NAME), arg[1]) - m.ProcessRefresh30ms() - } - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(mdb.INSERT, m.Prefix(CONFIG), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME, kit.MDB_VALUE)) - _config_set(m, "--unset", m.Option(kit.MDB_NAME)) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - _config_list(m) - return - } - m.Echo(_config_get(m, arg[0])) + }) }}, - }}) + mdb.CREATE: {Name: "create name value", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(mdb.DELETE, m.Prefix(CONFIG), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME)) + _config_set(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_VALUE)) + m.ProcessRefresh30ms() + }}, + mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + if arg[0] == kit.MDB_VALUE { + m.Cmd(mdb.DELETE, m.Prefix(CONFIG), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME)) + _config_set(m, m.Option(kit.MDB_NAME), arg[1]) + m.ProcessRefresh30ms() + } + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(mdb.INSERT, m.Prefix(CONFIG), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME, kit.MDB_VALUE)) + _config_set(m, "--unset", m.Option(kit.MDB_NAME)) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + _config_list(m) + return + } + m.Echo(_config_get(m, arg[0])) + }}, + }}) } diff --git a/type.go b/type.go index 99d25296..91296c58 100644 --- a/type.go +++ b/type.go @@ -474,15 +474,12 @@ func (m *Message) Confv(arg ...interface{}) (val interface{}) { if len(arg) > 2 { if arg[1] == nil || arg[1] == "" { - // 写配置 - conf.Value = arg[2] + conf.Value = arg[2] // 写配置 } else { - // 写修改项 - kit.Value(conf.Value, arg[1:]...) + kit.Value(conf.Value, arg[1:]...) // 写配置项 } } - // 读配置项 - val = kit.Value(conf.Value, arg[1]) + val = kit.Value(conf.Value, arg[1]) // 读配置项 }) return }