1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-25 17:18:05 +08:00

opt grant

This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-01-03 11:32:24 +08:00
parent 3fc85d2178
commit a15365fbb0
7 changed files with 71 additions and 16 deletions

View File

@ -59,6 +59,9 @@ func _config_load(m *ice.Message, name string, arg ...string) {
for k, v := range data { for k, v := range data {
msg.Search(k, func(p *ice.Context, s *ice.Context, key string) { msg.Search(k, func(p *ice.Context, s *ice.Context, key string) {
m.Log_IMPORT(CONFIG, kit.Keys(s.Name, key), nfs.FILE, name) 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 s.Configs[key].Value = v
}) })
} }

View File

@ -137,7 +137,7 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
const HASH = "hash" 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 { _key := func(m *ice.Message) string {
if m.Config(HASH) == "uniq" { if m.Config(HASH) == "uniq" {
return HASH return HASH
@ -148,6 +148,11 @@ func HashAction(fields ...string) map[string]*ice.Action {
return kit.Select(HASH, m.Config(SHORT)) return kit.Select(HASH, m.Config(SHORT))
} }
return ice.SelectAction(map[string]*ice.Action{ 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) { INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INPUTS, m.PrefixKey(), "", HASH, arg) 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) { PRUNES: &ice.Action{Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
HashPrunes(m, nil) 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 { func HashActionStatus(args ...interface{}) map[string]*ice.Action {
list := HashAction(fields...) list := HashAction(args...)
list[PRUNES] = &ice.Action{Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { list[PRUNES] = &ice.Action{Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(m.Config(FIELD)) m.OptionFields(m.Config(FIELD))
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "error") m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "error")

View File

@ -126,10 +126,15 @@ func _zone_import(m *ice.Message, prefix, chain, file string) {
const ZONE = "zone" 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)) } _zone := func(m *ice.Message) string { return kit.Select(ZONE, m.Config(SHORT)) }
return ice.SelectAction(map[string]*ice.Action{ 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) { INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
arg[0] = strings.TrimPrefix(arg[0], "extra.") arg[0] = strings.TrimPrefix(arg[0], "extra.")
arg[0] = kit.Select(arg[0], m.Config(kit.Keys(kit.MDB_ALIAS, arg[0]))) 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) { 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) 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) { EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Option(ice.CACHE_LIMIT, "-1") m.Option(ice.CACHE_LIMIT, "-1")
m.OptionFields(_zone(m), m.Config(FIELD)) m.OptionFields(_zone(m), m.Config(FIELD))
@ -173,16 +181,16 @@ func ZoneAction(fields ...string) map[string]*ice.Action {
m.OptionFields(_zone(m)) m.OptionFields(_zone(m))
m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE) 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) { PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
PrevPage(m, arg[0], arg[1:]...) PrevPage(m, arg[0], arg[1:]...)
}}, }},
NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) { NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) {
NextPageLimit(m, arg[0], arg[1:]...) 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 { func ZoneSelect(m *ice.Message, arg ...string) *ice.Message {
m.Fields(len(arg), kit.Fields(TIME, m.Config(SHORT), COUNT), m.Config(FIELD)) m.Fields(len(arg), kit.Fields(TIME, m.Config(SHORT), COUNT), m.Config(FIELD))

21
conf.go
View File

@ -46,7 +46,7 @@ const (
ERR = "err" ERR = "err"
POD = "pod" POD = "pod"
CTX = "ctx" // CTX = "ctx"
CMD = "cmd" CMD = "cmd"
ARG = "arg" ARG = "arg"
OPT = "opt" OPT = "opt"
@ -282,3 +282,22 @@ const ( // CTX
CTX_INIT = "_init" CTX_INIT = "_init"
CTX_EXIT = "_exit" 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"
)

View File

@ -41,6 +41,8 @@ func _header_check(m *ice.Message, arg ...string) {
} }
} }
func _header_grant(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) { if m.PodCmd(m.PrefixKey(), ctx.ACTION, GRANT, arg) {
return // 下发命令 return // 下发命令
} }
@ -71,7 +73,6 @@ const (
TRANS = "trans" TRANS = "trans"
AGENT = "agent" AGENT = "agent"
CHECK = "check" CHECK = "check"
GRANT = "grant"
SHARE = "share" SHARE = "share"
) )
const HEADER = "header" const HEADER = "header"
@ -145,6 +146,15 @@ func init() {
m.Option(k, msg.Append(k)) 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(TRANS, kit.Format(kit.Value(c.Commands[cmd].Meta, "_trans")))
m.Option(MENUS, m.Config(MENUS)) m.Option(MENUS, m.Config(MENUS))
m.Echo(m.Config(TITLE)) m.Echo(m.Config(TITLE))

2
go.sum
View File

@ -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/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/ice v0.4.7/go.mod h1:nQaisRsVHtTZT2FWr97VE984xhfEDpcBpYJUbx8qX94=
shylinux.com/x/icebergs v0.7.8/go.mod h1:frbUQPPU+TaMODwp701HIATVaApfQPtA2Q3MtO1El5A= 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.3/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
shylinux.com/x/toolkits v0.4.4 h1:ThgoO8cqoZL4yRjQdSvsyPG5nQBIBR2dTvZNK/diIro= 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/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= shylinux.com/x/websocket v0.0.1/go.mod h1:AaSpMToOxbMULKQytzczeHPuqb708vK1vrAzCxLo/XE=

15
misc.go
View File

@ -111,7 +111,7 @@ func (m *Message) SetAppend(arg ...string) *Message {
func (m *Message) SetResult(arg ...string) *Message { func (m *Message) SetResult(arg ...string) *Message {
return m.Set(MSG_RESULT, arg...) 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] { for i, v := range m.meta[MSG_APPEND] {
if v == from { if v == from {
m.meta[MSG_APPEND][i] = to m.meta[MSG_APPEND][i] = to
@ -119,6 +119,7 @@ func (m *Message) RenameAppend(from, to string) {
delete(m.meta, from) delete(m.meta, from)
} }
} }
return m
} }
func (m *Message) AppendSimple(key ...string) (res []string) { func (m *Message) AppendSimple(key ...string) (res []string) {
if len(key) == 0 { 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) 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 { if h, ok := cmd.Action[arg[1]]; ok {
return c._cmd(m, cmd, key, arg[1], h, arg[2:]...) 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 { if h, ok := cmd.Action[arg[0]]; ok {
return c._cmd(m, cmd, key, arg[0], h, arg[1:]...) 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, 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 return m
} }
func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action, arg ...string) *Message { func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action, arg ...string) *Message {