diff --git a/base/ctx/config.go b/base/ctx/config.go index 14a88b30..69120b11 100644 --- a/base/ctx/config.go +++ b/base/ctx/config.go @@ -59,6 +59,9 @@ func _config_load(m *ice.Message, name string, arg ...string) { for k, v := range data { msg.Search(k, func(p *ice.Context, s *ice.Context, key string) { m.Log_IMPORT(CONFIG, kit.Keys(s.Name, key), nfs.FILE, name) + if s.Configs[key] == nil { + s.Configs[key] = &ice.Config{} + } s.Configs[key].Value = v }) } diff --git a/base/mdb/hash.go b/base/mdb/hash.go index ef9da191..309f6c39 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -137,7 +137,7 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) { const HASH = "hash" -func HashAction(fields ...string) map[string]*ice.Action { +func HashAction(args ...interface{}) map[string]*ice.Action { _key := func(m *ice.Message) string { if m.Config(HASH) == "uniq" { return HASH @@ -148,6 +148,11 @@ func HashAction(fields ...string) map[string]*ice.Action { return kit.Select(HASH, m.Config(SHORT)) } return ice.SelectAction(map[string]*ice.Action{ + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { + if cs := m.Target().Configs; cs[m.CommandKey()] == nil { + cs[m.CommandKey()] = &ice.Config{Value: kit.Data(args...)} + } + }}, INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(INPUTS, m.PrefixKey(), "", HASH, arg) }}, @@ -172,10 +177,13 @@ func HashAction(fields ...string) map[string]*ice.Action { PRUNES: &ice.Action{Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) { HashPrunes(m, nil) }}, - }, fields...) + SELECT: &ice.Action{Name: "select hash auto", Help: "列表", Hand: func(m *ice.Message, arg ...string) { + HashSelect(m, arg...) + }}, + }) } -func HashActionStatus(fields ...string) map[string]*ice.Action { - list := HashAction(fields...) +func HashActionStatus(args ...interface{}) map[string]*ice.Action { + list := HashAction(args...) list[PRUNES] = &ice.Action{Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { m.OptionFields(m.Config(FIELD)) m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "error") diff --git a/base/mdb/zone.go b/base/mdb/zone.go index 065931f2..1c52ee03 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -126,10 +126,15 @@ func _zone_import(m *ice.Message, prefix, chain, file string) { const ZONE = "zone" -func ZoneAction(fields ...string) map[string]*ice.Action { +func ZoneAction(args ...interface{}) map[string]*ice.Action { _zone := func(m *ice.Message) string { return kit.Select(ZONE, m.Config(SHORT)) } return ice.SelectAction(map[string]*ice.Action{ + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { + if cs := m.Target().Configs; cs[m.CommandKey()] == nil { + cs[m.CommandKey()] = &ice.Config{Value: kit.Data(args...)} + } + }}, INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { arg[0] = strings.TrimPrefix(arg[0], "extra.") arg[0] = kit.Select(arg[0], m.Config(kit.Keys(kit.MDB_ALIAS, arg[0]))) @@ -164,6 +169,9 @@ func ZoneAction(fields ...string) map[string]*ice.Action { MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(ID), arg) }}, + PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(ID), arg) + }}, EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { m.Option(ice.CACHE_LIMIT, "-1") m.OptionFields(_zone(m), m.Config(FIELD)) @@ -173,16 +181,16 @@ func ZoneAction(fields ...string) map[string]*ice.Action { m.OptionFields(_zone(m)) m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE) }}, - PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(ID), arg) - }}, PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) { PrevPage(m, arg[0], arg[1:]...) }}, NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) { NextPageLimit(m, arg[0], arg[1:]...) }}, - }, fields...) + SELECT: &ice.Action{Name: "select hash auto", Help: "列表", Hand: func(m *ice.Message, arg ...string) { + ZoneSelect(m, arg...) + }}, + }) } func ZoneSelect(m *ice.Message, arg ...string) *ice.Message { m.Fields(len(arg), kit.Fields(TIME, m.Config(SHORT), COUNT), m.Config(FIELD)) diff --git a/conf.go b/conf.go index 1040ab57..c7c380e2 100644 --- a/conf.go +++ b/conf.go @@ -46,7 +46,7 @@ const ( ERR = "err" POD = "pod" - CTX = "ctx" + // CTX = "ctx" CMD = "cmd" ARG = "arg" OPT = "opt" @@ -282,3 +282,22 @@ const ( // CTX CTX_INIT = "_init" CTX_EXIT = "_exit" ) + +const ( + CTX = "ctx" + CLI = "cli" + WEB = "web" + AAA = "aaa" + LEX = "lex" + YAC = "yac" + GDB = "gdb" + LOG = "log" + TCP = "tcp" + NFS = "nfs" + SSH = "ssh" + MDB = "mdb" +) +const ( + COMMAND = "command" + ACTION = "action" +) diff --git a/core/chat/header.go b/core/chat/header.go index 6682f5ad..36b20d05 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -41,6 +41,8 @@ func _header_check(m *ice.Message, arg ...string) { } } func _header_grant(m *ice.Message, arg ...string) { + m.Cmd(GRANT, mdb.INSERT, kit.SimpleKV("space,grant,userrole,username", + m.Option(ice.POD), m.Option(web.SPACE), m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME))) if m.PodCmd(m.PrefixKey(), ctx.ACTION, GRANT, arg) { return // 下发命令 } @@ -71,7 +73,6 @@ const ( TRANS = "trans" AGENT = "agent" CHECK = "check" - GRANT = "grant" SHARE = "share" ) const HEADER = "header" @@ -145,6 +146,15 @@ func init() { m.Option(k, msg.Append(k)) } + if m.Option(GRANT) != "" { + if m.Cmd(GRANT, m.Option(ice.POD), 1).Length() > 0 { + _header_grant(m, web.SPACE, m.Option(GRANT)) + } + m.Debug("what %v", m.FormatMeta()) + m.Option(GRANT, ice.TRUE) + m.Debug("what %v", m.FormatMeta()) + } + m.Option(TRANS, kit.Format(kit.Value(c.Commands[cmd].Meta, "_trans"))) m.Option(MENUS, m.Config(MENUS)) m.Echo(m.Config(TITLE)) diff --git a/go.sum b/go.sum index db3b20c4..9be10318 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,9 @@ +shylinux.com/x/go-qrcode v0.0.1 h1:/eOGqMj1qtgs9Ymd12zTUa1gcJZs9S92kj2lb0QzKsE= shylinux.com/x/go-qrcode v0.0.1/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po= shylinux.com/x/ice v0.4.7/go.mod h1:nQaisRsVHtTZT2FWr97VE984xhfEDpcBpYJUbx8qX94= shylinux.com/x/icebergs v0.7.8/go.mod h1:frbUQPPU+TaMODwp701HIATVaApfQPtA2Q3MtO1El5A= shylinux.com/x/toolkits v0.4.3/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA= shylinux.com/x/toolkits v0.4.4 h1:ThgoO8cqoZL4yRjQdSvsyPG5nQBIBR2dTvZNK/diIro= shylinux.com/x/toolkits v0.4.4/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA= +shylinux.com/x/websocket v0.0.1 h1:OBc21DxqsGlQ2+Pz76xqLyDNo1LV+PUUqfWi+1PZPDE= shylinux.com/x/websocket v0.0.1/go.mod h1:AaSpMToOxbMULKQytzczeHPuqb708vK1vrAzCxLo/XE= diff --git a/misc.go b/misc.go index 9b404e5e..f2bc263a 100644 --- a/misc.go +++ b/misc.go @@ -111,7 +111,7 @@ func (m *Message) SetAppend(arg ...string) *Message { func (m *Message) SetResult(arg ...string) *Message { return m.Set(MSG_RESULT, arg...) } -func (m *Message) RenameAppend(from, to string) { +func (m *Message) RenameAppend(from, to string) *Message { for i, v := range m.meta[MSG_APPEND] { if v == from { m.meta[MSG_APPEND][i] = to @@ -119,6 +119,7 @@ func (m *Message) RenameAppend(from, to string) { delete(m.meta, from) } } + return m } func (m *Message) AppendSimple(key ...string) (res []string) { if len(key) == 0 { @@ -229,21 +230,25 @@ func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Mess } m.meta[MSG_DETAIL] = kit.Simple(key, arg) - if m.Hand = true; len(arg) > 1 && arg[0] == "action" && cmd.Action != nil { + if m.Hand = true; len(arg) > 1 && arg[0] == ACTION && cmd.Action != nil { if h, ok := cmd.Action[arg[1]]; ok { return c._cmd(m, cmd, key, arg[1], h, arg[2:]...) } } - if len(arg) > 0 && arg[0] != "command" && cmd.Action != nil { + if len(arg) > 0 && arg[0] != COMMAND && cmd.Action != nil { if h, ok := cmd.Action[arg[0]]; ok { return c._cmd(m, cmd, key, arg[0], h, arg[1:]...) } } m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, - kit.Select(kit.FileLine(cmd.Hand, 3), kit.FileLine(9, 3), m.target.Name == "mdb")) + kit.Select(kit.FileLine(cmd.Hand, 3), kit.FileLine(9, 3), m.target.Name == MDB)) - cmd.Hand(m, c, key, arg...) + if cmd.Hand != nil { + cmd.Hand(m, c, key, arg...) + } else if cmd.Action != nil && cmd.Action["select"] != nil { + cmd.Action["select"].Hand(m, arg...) + } return m } func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action, arg ...string) *Message {