1
0
mirror of https://shylinux.com/x/icebergs synced 2025-05-06 21:26:54 +08:00
This commit is contained in:
shaoying 2020-10-21 15:38:49 +08:00
parent b8bc1e211b
commit 44505582bc
50 changed files with 194 additions and 110 deletions

View File

@ -25,8 +25,8 @@ const AAA = "aaa"
var Index = &ice.Context{Name: AAA, Help: "认证模块", Commands: map[string]*ice.Command{ var Index = &ice.Context{Name: AAA, Help: "认证模块", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, VOID, White, kit.Dict(), Black, kit.Dict())) m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, VOID, WHITE, kit.Dict(), BLACK, kit.Dict()))
m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, TECH, Black, kit.Dict(), White, kit.Dict())) m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, TECH, BLACK, kit.Dict(), WHITE, kit.Dict()))
m.Load() m.Load()
m.Cmd(mdb.SEARCH, mdb.CREATE, USER, USER, AAA) m.Cmd(mdb.SEARCH, mdb.CREATE, USER, USER, AAA)
}}, }},

View File

@ -3,3 +3,4 @@ chapter "aaa"
field "用户" user field "用户" user
field "会话" sess field "会话" sess
field "角色" role field "角色" role
field "令牌" totp

View File

@ -14,12 +14,9 @@ const ( // 用户角色
VOID = "void" VOID = "void"
) )
const ( // 角色操作 const ( // 角色操作
White = "white"
Black = "black"
Right = "right"
WHITE = "white" WHITE = "white"
BLACK = "black" BLACK = "black"
RIGHT = "right"
) )
const ( // 返回结果 const ( // 返回结果
OK = "ok" OK = "ok"
@ -27,14 +24,14 @@ const ( // 返回结果
func _role_list(m *ice.Message, userrole string) { func _role_list(m *ice.Message, userrole string) {
m.Richs(ROLE, nil, kit.Select(kit.MDB_FOREACH, userrole), func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, kit.Select(kit.MDB_FOREACH, userrole), func(key string, value map[string]interface{}) {
for k := range value[White].(map[string]interface{}) { for k := range value[WHITE].(map[string]interface{}) {
m.Push(ROLE, kit.Value(value, kit.MDB_NAME)) m.Push(ROLE, kit.Value(value, kit.MDB_NAME))
m.Push(kit.MDB_ZONE, White) m.Push(kit.MDB_ZONE, WHITE)
m.Push(kit.MDB_KEY, k) m.Push(kit.MDB_KEY, k)
} }
for k := range value[Black].(map[string]interface{}) { for k := range value[BLACK].(map[string]interface{}) {
m.Push(ROLE, kit.Value(value, kit.MDB_NAME)) m.Push(ROLE, kit.Value(value, kit.MDB_NAME))
m.Push(kit.MDB_ZONE, Black) m.Push(kit.MDB_ZONE, BLACK)
m.Push(kit.MDB_KEY, k) m.Push(kit.MDB_KEY, k)
} }
}) })
@ -54,7 +51,7 @@ func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) {
m.Richs(ROLE, nil, kit.Select(VOID, userrole), func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, kit.Select(VOID, userrole), func(key string, value map[string]interface{}) {
ok = true ok = true
list := value[Black].(map[string]interface{}) list := value[BLACK].(map[string]interface{})
for i := 0; i < len(keys); i++ { for i := 0; i < len(keys); i++ {
if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true { if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true {
ok = false ok = false
@ -70,7 +67,7 @@ func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) {
} }
ok = false ok = false
list = value[White].(map[string]interface{}) list = value[WHITE].(map[string]interface{})
for i := 0; i < len(keys); i++ { for i := 0; i < len(keys); i++ {
if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true { if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true {
ok = true ok = true
@ -85,15 +82,15 @@ func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) {
} }
func _role_black(m *ice.Message, userrole, chain string, status bool) { func _role_black(m *ice.Message, userrole, chain string, status bool) {
m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) {
m.Log_MODIFY(ROLE, userrole, Black, chain) m.Log_MODIFY(ROLE, userrole, BLACK, chain)
list := value[Black].(map[string]interface{}) list := value[BLACK].(map[string]interface{})
list[chain] = status list[chain] = status
}) })
} }
func _role_white(m *ice.Message, userrole, chain string, status bool) { func _role_white(m *ice.Message, userrole, chain string, status bool) {
m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) {
m.Log_MODIFY(ROLE, userrole, White, chain) m.Log_MODIFY(ROLE, userrole, WHITE, chain)
list := value[White].(map[string]interface{}) list := value[WHITE].(map[string]interface{})
list[chain] = status list[chain] = status
}) })
} }
@ -110,14 +107,14 @@ func init() {
ROLE: {Name: ROLE, Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, ROLE: {Name: ROLE, Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ROLE: {Name: "role role auto 添加", Help: "角色", Action: map[string]*ice.Action{ ROLE: {Name: "role role auto create", Help: "角色", Action: map[string]*ice.Action{
White: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) { WHITE: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
_role_white(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true) _role_white(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true)
}}, }},
Black: {Name: "black role chain...", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) { BLACK: {Name: "black role chain...", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) {
_role_black(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true) _role_black(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true)
}}, }},
Right: {Name: "right role chain...", Help: "查看权限", Hand: func(m *ice.Message, arg ...string) { RIGHT: {Name: "right role chain...", Help: "查看权限", Hand: func(m *ice.Message, arg ...string) {
if _role_right(m, arg[0], kit.Split(strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), ".")...) { if _role_right(m, arg[0], kit.Split(strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), ".")...) {
m.Echo(OK) m.Echo(OK)
} }

View File

@ -76,10 +76,16 @@ func init() {
m.Cmdy(mdb.DELETE, TOTP, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) m.Cmdy(mdb.DELETE, TOTP, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if m.Option("_count") == "" {
m.Option("_count", "20")
}
if kit.Int(m.Option("_count")) > 0 {
m.Option(ice.MSG_PROCESS, "_refresh")
}
m.Option(mdb.FIELDS, kit.Select("time,name,secret,period,number", mdb.DETAIL, len(arg) > 0))
if len(arg) == 0 { if len(arg) == 0 {
// 密码列表 // 密码列表
m.Option(ice.MSG_PROCESS, "_refresh")
m.Option(mdb.FIELDS, "time,name,secret,period,number")
m.Cmd(mdb.SELECT, TOTP, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { m.Cmd(mdb.SELECT, TOTP, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
per := kit.Int64(value[PERIOD]) per := kit.Int64(value[PERIOD])
m.Push("time", m.Time()) m.Push("time", m.Time())

View File

@ -106,7 +106,7 @@ func init() {
m.Cmdy(mdb.MODIFY, USER, "", mdb.HASH, USERNAME, m.Option(USERNAME), arg) m.Cmdy(mdb.MODIFY, USER, "", mdb.HASH, USERNAME, m.Option(USERNAME), arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.REMOVE, USER, "", mdb.HASH, USERNAME, m.Option(USERNAME)) m.Cmdy(mdb.DELETE, USER, "", mdb.HASH, USERNAME, m.Option(USERNAME))
}}, }},
mdb.SEARCH: {Name: "search type name text arg...", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Name: "search type name text arg...", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
_user_search(m, arg[0], arg[1], kit.Select("", arg, 2)) _user_search(m, arg[0], arg[1], kit.Select("", arg, 2))

15
base/base.shy Normal file
View File

@ -0,0 +1,15 @@
source ctx/ctx.shy
source cli/cli.shy
source aaa/aaa.shy
source web/web.shy
source lex/lex.shy
source yac/yac.shy
source log/log.shy
source gdb/gdb.shy
source nfs/nfs.shy
source tcp/tcp.shy
source ssh/ssh.shy
source mdb/mdb.shy

View File

@ -1,9 +1,8 @@
chapter "cli" chapter "cli"
field "脚本" python
field "守护" daemon
field "命令" system field "命令" system
field "输出" output field "输出" output
field "守护" daemon
field "脚本" python
field "环境" runtime field "环境" runtime
field "进程" cli.proc field "进程" cli.proc

View File

@ -89,7 +89,7 @@ func init() {
DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, "var/daemon")}, DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, "var/daemon")},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
DAEMON: {Name: "daemon hash auto 添加 清理", Help: "守护进程", Action: map[string]*ice.Action{ DAEMON: {Name: "daemon hash auto start prunes", Help: "守护进程", Action: map[string]*ice.Action{
RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) { RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(DAEMON, STOP) m.Cmd(DAEMON, STOP)
m.Sleep("1s") m.Sleep("1s")
@ -105,7 +105,6 @@ func init() {
m.Option(mdb.FIELDS, "time,hash,status,pid,cmd,dir,env") m.Option(mdb.FIELDS, "time,hash,status,pid,cmd,dir,env")
m.Cmd(mdb.SELECT, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)).Table(func(index int, value map[string]string, head []string) { m.Cmd(mdb.SELECT, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)).Table(func(index int, value map[string]string, head []string) {
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), kit.MDB_STATUS, Status.Stop) m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), kit.MDB_STATUS, Status.Stop)
m.Debug("what %v", value)
m.Cmdy(SYSTEM, "kill", "-9", value[kit.SSH_PID]) m.Cmdy(SYSTEM, "kill", "-9", value[kit.SSH_PID])
}) })
}}, }},

View File

@ -18,7 +18,7 @@ func init() {
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
PYTHON: {Name: "python port path auto 启动:button 构建 下载", Help: "脚本命令", Action: map[string]*ice.Action{ PYTHON: {Name: "python port path auto start build download", Help: "脚本命令", Action: map[string]*ice.Action{
"download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.install", "download", m.Conf(PYTHON, "meta.source")) m.Cmdy("web.code.install", "download", m.Conf(PYTHON, "meta.source"))
}}, }},

View File

@ -55,8 +55,8 @@ func init() {
m.Cmdy("tcp.host") m.Cmdy("tcp.host")
}}, }},
"hostname": {Name: "hostname", Help: "hostname", Hand: func(m *ice.Message, arg ...string) { "hostname": {Name: "hostname", Help: "hostname", Hand: func(m *ice.Message, arg ...string) {
m.Conf(RUNTIME, "boot.hostname", arg[1]) m.Conf(RUNTIME, "boot.hostname", arg[0])
ice.Info.HostName = arg[1] ice.Info.HostName = arg[0]
m.Echo(ice.Info.HostName) m.Echo(ice.Info.HostName)
}}, }},
"userinfo": {Name: "userinfo", Help: "userinfo", Hand: func(m *ice.Message, arg ...string) { "userinfo": {Name: "userinfo", Help: "userinfo", Hand: func(m *ice.Message, arg ...string) {

View File

@ -13,6 +13,7 @@ var Index = &ice.Context{Name: "ctx", Help: "配置模块",
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.SEARCH, mdb.CREATE, COMMAND, m.AddCmd(&ice.Command{Hand: func(m *ice.Message, c *ice.Context, cc string, arg ...string) { m.Cmd(mdb.SEARCH, mdb.CREATE, COMMAND, m.AddCmd(&ice.Command{Hand: func(m *ice.Message, c *ice.Context, cc string, arg ...string) {
arg = arg[1:] arg = arg[1:]
fields := kit.Split(m.Option(mdb.FIELDS))
ice.Pulse.Travel(func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { ice.Pulse.Travel(func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
if strings.HasPrefix(key, "_") || strings.HasPrefix(key, "/") { if strings.HasPrefix(key, "_") || strings.HasPrefix(key, "/") {
return return
@ -24,16 +25,28 @@ var Index = &ice.Context{Name: "ctx", Help: "配置模块",
return return
} }
m.Push("pod", "") for _, k := range fields {
m.Push("ctx", "web.chat") switch k {
m.Push("cmd", cc) case kit.SSH_POD:
m.Push(k, m.Option(ice.MSG_USERPOD))
m.Push("time", m.Time()) case kit.SSH_CTX:
m.Push("size", "") m.Push(k, m.Prefix())
case kit.SSH_CMD:
m.Push("type", COMMAND) m.Push(k, "_")
m.Push("name", key) case kit.MDB_TIME:
m.Push("text", s.Cap(ice.CTX_FOLLOW)) m.Push(k, m.Time())
case kit.MDB_SIZE:
m.Push(k, len(cmd.List))
case kit.MDB_TYPE:
m.Push(k, COMMAND)
case kit.MDB_NAME:
m.Push(k, key)
case kit.MDB_TEXT:
m.Push(k, m.Prefix())
default:
m.Push(k, "")
}
}
}) })
}})) }}))
}}, }},

View File

@ -25,7 +25,7 @@ func init() {
EVENT: {Name: EVENT, Help: "事件流", Value: kit.Data(kit.MDB_SHORT, EVENT)}, EVENT: {Name: EVENT, Help: "事件流", Value: kit.Data(kit.MDB_SHORT, EVENT)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
EVENT: {Name: "event event id auto 监听", Help: "事件流", Action: map[string]*ice.Action{ EVENT: {Name: "event event id auto listen", Help: "事件流", Action: map[string]*ice.Action{
LISTEN: {Name: "listen event cmd", Help: "监听", Hand: func(m *ice.Message, arg ...string) { LISTEN: {Name: "listen event cmd", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
_event_listen(m, m.Option(EVENT), m.Option(kit.SSH_CMD)) _event_listen(m, m.Option(EVENT), m.Option(kit.SSH_CMD))
}}, }},

View File

@ -37,7 +37,7 @@ func init() {
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SIGNAL: {Name: "signal auto 监听", Help: "信号器", Action: map[string]*ice.Action{ SIGNAL: {Name: "signal auto listen", Help: "信号器", Action: map[string]*ice.Action{
LISTEN: {Name: "listen signal name cmd", Help: "监听", Hand: func(m *ice.Message, arg ...string) { LISTEN: {Name: "listen signal name cmd", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
_signal_listen(m, kit.Int(m.Option(SIGNAL)), arg...) _signal_listen(m, kit.Int(m.Option(SIGNAL)), arg...)
}}, }},

View File

@ -41,7 +41,7 @@ func init() {
TIMER: {Name: TIMER, Help: "定时器", Value: kit.Data("tick", "100ms")}, TIMER: {Name: TIMER, Help: "定时器", Value: kit.Data("tick", "100ms")},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
TIMER: {Name: "timer hash id auto 添加 清理", Help: "定时器", Action: map[string]*ice.Action{ TIMER: {Name: "timer hash id auto create prunes", Help: "定时器", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create delay=10ms interval=10s order=3 cmd=runtime", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create delay=10ms interval=10s order=3 cmd=runtime", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_timer_create(m, arg...) _timer_create(m, arg...)
}}, }},

2
base/lex/lex.shy Normal file
View File

@ -0,0 +1,2 @@
chapter "lex"

1
base/log/log.shy Normal file
View File

@ -0,0 +1 @@
chapter "log"

View File

@ -13,11 +13,18 @@ func init() {
ENGINE: {Name: "engine", Help: "引擎", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)}, ENGINE: {Name: "engine", Help: "引擎", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ENGINE: {Name: "engine type name text arg...", Help: "引擎", Action: map[string]*ice.Action{ ENGINE: {Name: "engine type name text auto", Help: "引擎", Action: map[string]*ice.Action{
CREATE: {Name: "create type [cmd [ctx]]", Help: "创建", Hand: func(m *ice.Message, arg ...string) { CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Rich(ENGINE, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2))) m.Rich(ENGINE, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2)))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 || arg[0] == "" {
m.Richs(ENGINE, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Push(key, value, []string{kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
})
return
}
if len(arg) == 2 { if len(arg) == 2 {
arg = append(arg, "") arg = append(arg, "")
} }

View File

@ -1,8 +1,7 @@
chapter "mdb" chapter "mdb"
field "搜索" mdb.search
field "引擎" mdb.engine
field "插件" mdb.plugin field "插件" mdb.plugin
field "渲染" mdb.render field "渲染" mdb.render
field "引擎" mdb.engine
field "搜索" mdb.search

View File

@ -13,11 +13,18 @@ func init() {
PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)}, PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
PLUGIN: {Name: "plugin type name text", Help: "插件", Action: map[string]*ice.Action{ PLUGIN: {Name: "plugin type name text auto", Help: "插件", Action: map[string]*ice.Action{
CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) { CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Rich(PLUGIN, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2))) m.Rich(PLUGIN, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2)))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 || arg[0] == "" {
m.Richs(PLUGIN, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Push(key, value, []string{kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
})
return
}
m.Richs(PLUGIN, nil, arg[0], func(key string, value map[string]interface{}) { m.Richs(PLUGIN, nil, arg[0], func(key string, value map[string]interface{}) {
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), PLUGIN, arg[0], arg[1], kit.Select("", arg, 2)) m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), PLUGIN, arg[0], arg[1], kit.Select("", arg, 2))
}) })

View File

@ -13,11 +13,18 @@ func init() {
RENDER: {Name: "render", Help: "渲染", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)}, RENDER: {Name: "render", Help: "渲染", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
RENDER: {Name: "render type name text", Help: "渲染", Action: map[string]*ice.Action{ RENDER: {Name: "render type name text auto", Help: "渲染", Action: map[string]*ice.Action{
CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) { CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Rich(RENDER, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2))) m.Rich(RENDER, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2)))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 || arg[0] == "" {
m.Richs(RENDER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Push(key, value, []string{kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
})
return
}
m.Richs(RENDER, nil, arg[0], func(key string, value map[string]interface{}) { m.Richs(RENDER, nil, arg[0], func(key string, value map[string]interface{}) {
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), RENDER, arg[0], arg[1], kit.Select("", arg, 2)) m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), RENDER, arg[0], arg[1], kit.Select("", arg, 2))
}) })

View File

@ -33,8 +33,13 @@ func _file_list(m *ice.Message, root string, name string, level int, deep bool,
} }
fs, e := ioutil.ReadDir(path.Join(root, name)) fs, e := ioutil.ReadDir(path.Join(root, name))
if m.Warn(e != nil, ice.ErrNotFound, name) { if e != nil {
return // 查找失败 ls, _ := ioutil.ReadDir(root)
for _, k := range ls {
if k.Name() == name {
fs = append(fs, k)
}
}
} }
for _, f := range fs { for _, f := range fs {

View File

@ -2,4 +2,5 @@ chapter "nfs"
field "目录" nfs.dir field "目录" nfs.dir
field "文件" nfs.file field "文件" nfs.file
field "日志" nfs.tail

View File

@ -72,8 +72,8 @@ func init() {
CHANNEL: {Name: "channel", Help: "通道", Value: kit.Data()}, CHANNEL: {Name: "channel", Help: "通道", Value: kit.Data()},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
CHANNEL: {Name: "channel hash id auto 清理", Help: "通道", Action: map[string]*ice.Action{ CHANNEL: {Name: "channel hash id auto prunes", Help: "通道", Action: map[string]*ice.Action{
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, CHANNEL, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, CHANNEL, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
@ -84,7 +84,7 @@ func init() {
m.Option(mdb.FIELDS, "time,hash,status,username,hostname,hostport,tty,count") m.Option(mdb.FIELDS, "time,hash,status,username,hostname,hostport,tty,count")
if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 { if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == tcp.CLOSE)) m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == tcp.CLOSE))
}) })
} }
return return

View File

@ -62,7 +62,7 @@ func init() {
CONNECT: {Name: CONNECT, Help: "连接", Value: kit.Data()}, CONNECT: {Name: CONNECT, Help: "连接", Value: kit.Data()},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
CONNECT: {Name: "connect hash auto 添加 清理", Help: "连接", Action: map[string]*ice.Action{ CONNECT: {Name: "connect hash auto dial prunes", Help: "连接", Action: map[string]*ice.Action{
tcp.DIAL: {Name: "dial username=shy host=shylinux.com port=22 private=.ssh/id_rsa", Help: "添加", Hand: func(m *ice.Message, arg ...string) { tcp.DIAL: {Name: "dial username=shy host=shylinux.com port=22 private=.ssh/id_rsa", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Option(tcp.DIAL_CB, func(c net.Conn) { m.Option(tcp.DIAL_CB, func(c net.Conn) {
client, e := _ssh_conn(m, c, kit.Select("shy", m.Option(aaa.USERNAME)), client, e := _ssh_conn(m, c, kit.Select("shy", m.Option(aaa.USERNAME)),
@ -81,7 +81,7 @@ func init() {
m.Echo(h) m.Echo(h)
}) })
m.Cmds(tcp.CLIENT, tcp.DIAL, arg) m.Cmds(tcp.CLIENT, tcp.DIAL, kit.MDB_TYPE, SSH, kit.MDB_NAME, m.Option(aaa.USERNAME), tcp.PORT, m.Option(tcp.PORT), tcp.HOST, m.Option(tcp.HOST))
m.Sleep("100ms") m.Sleep("100ms")
}}, }},
SESSION: {Name: "session hash", Help: "会话", Hand: func(m *ice.Message, arg ...string) { SESSION: {Name: "session hash", Help: "会话", Hand: func(m *ice.Message, arg ...string) {
@ -152,7 +152,7 @@ func init() {
m.Echo("exit %s\n", m.Option(tcp.HOST)) m.Echo("exit %s\n", m.Option(tcp.HOST))
}}, }},
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, CONNECT, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, CONNECT, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
@ -162,7 +162,7 @@ func init() {
m.Option(mdb.FIELDS, kit.Select("time,hash,status,username,host,port", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,hash,status,username,host,port", mdb.DETAIL, len(arg) > 0))
if m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { if m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == tcp.CLOSE)) m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == tcp.CLOSE))
}) })
} }
}}, }},

View File

@ -334,9 +334,7 @@ const (
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Dict( SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Dict()},
kit.MDB_HASH, kit.Dict(STDIO, kit.Data(kit.MDB_TIME, "2020-10-01 15:04:05", kit.MDB_NAME, STDIO)),
)},
PROMPT: {Name: PROMPT, Help: "命令提示", Value: kit.Data( PROMPT: {Name: PROMPT, Help: "命令提示", Value: kit.Data(
"PS1", []interface{}{"\033[33;44m", "count", "[", "time", "]", "\033[5m", "target", "\033[0m", "\033[44m", ">", "\033[0m ", "\033[?25h", "\033[32m"}, "PS1", []interface{}{"\033[33;44m", "count", "[", "time", "]", "\033[5m", "target", "\033[0m", "\033[44m", ">", "\033[0m ", "\033[?25h", "\033[32m"},
"PS2", []interface{}{"count", " ", "target", "> "}, "PS2", []interface{}{"count", " ", "target", "> "},

View File

@ -159,7 +159,7 @@ func init() {
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SERVICE: {Name: "service port id auto 监听 清理", Help: "服务", Action: map[string]*ice.Action{ SERVICE: {Name: "service port id auto listen prunes", Help: "服务", Action: map[string]*ice.Action{
tcp.LISTEN: {Name: "listen port=9030 private=.ssh/id_rsa auth=.ssh/authorized_keys", Help: "监听", Hand: func(m *ice.Message, arg ...string) { tcp.LISTEN: {Name: "listen port=9030 private=.ssh/id_rsa auth=.ssh/authorized_keys", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
if m.Richs(SERVICE, "", m.Option(tcp.PORT), func(key string, value map[string]interface{}) { if m.Richs(SERVICE, "", m.Option(tcp.PORT), func(key string, value map[string]interface{}) {
kit.Value(value, "meta.status", tcp.OPEN) kit.Value(value, "meta.status", tcp.OPEN)

View File

@ -78,7 +78,7 @@ func init() {
SESSION: {Name: SESSION, Help: "会话", Value: kit.Data()}, SESSION: {Name: SESSION, Help: "会话", Value: kit.Data()},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SESSION: {Name: "session hash id auto 命令 清理", Help: "会话", Action: map[string]*ice.Action{ SESSION: {Name: "session hash id auto command prunes", Help: "会话", Action: map[string]*ice.Action{
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Richs(SESSION, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) { m.Richs(SESSION, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) {
if w, ok := kit.Value(value, "meta.input").(io.Writer); ok { if w, ok := kit.Value(value, "meta.input").(io.Writer); ok {
@ -106,7 +106,7 @@ func init() {
}) })
}}, }},
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, SESSION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, SESSION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
@ -117,7 +117,7 @@ func init() {
m.Option(mdb.FIELDS, "time,hash,status,count,connect") m.Option(mdb.FIELDS, "time,hash,status,count,connect")
if m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { if m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("绑定", "删除", value[kit.MDB_STATUS] == tcp.CLOSE)) m.PushButton(kit.Select("bind", mdb.REMOVE, value[kit.MDB_STATUS] == tcp.CLOSE))
}) })
} }
return return

View File

@ -11,6 +11,8 @@ const SSH = "ssh"
var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*ice.Command{ var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load() m.Load()
m.Conf(SOURCE, kit.Keys(kit.MDB_HASH, STDIO, kit.MDB_META, kit.MDB_NAME), STDIO)
m.Conf(SOURCE, kit.Keys(kit.MDB_HASH, STDIO, kit.MDB_META, kit.MDB_TIME), m.Time())
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if _, ok := m.Target().Server().(*Frame); ok { if _, ok := m.Target().Server().(*Frame); ok {

View File

@ -55,7 +55,7 @@ func init() {
CLIENT: {Name: CLIENT, Help: "客户端", Value: kit.Data()}, CLIENT: {Name: CLIENT, Help: "客户端", Value: kit.Data()},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
CLIENT: {Name: "client hash auto 清理", Help: "客户端", Action: map[string]*ice.Action{ CLIENT: {Name: "client hash auto prunes", Help: "客户端", Action: map[string]*ice.Action{
DIAL: {Name: "dial type name port=9010 host=", Help: "连接", Hand: func(m *ice.Message, arg ...string) { DIAL: {Name: "dial type name port=9010 host=", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
c, e := net.Dial(TCP, m.Option(HOST)+":"+m.Option(PORT)) c, e := net.Dial(TCP, m.Option(HOST)+":"+m.Option(PORT))
h := m.Cmdx(mdb.INSERT, CLIENT, "", mdb.HASH, PORT, m.Option(PORT), HOST, m.Option(HOST), h := m.Cmdx(mdb.INSERT, CLIENT, "", mdb.HASH, PORT, m.Option(PORT), HOST, m.Option(HOST),
@ -85,7 +85,7 @@ func init() {
c.Write([]byte("hello world\n")) c.Write([]byte("hello world\n"))
} }
}}, }},
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, CLIENT, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, CLIENT, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
@ -96,7 +96,7 @@ func init() {
m.Option(mdb.FIELDS, kit.Select("time,hash,status,type,name,host,port,error,nread,nwrite", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,hash,status,type,name,host,port,error,nread,nwrite", mdb.DETAIL, len(arg) > 0))
if m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { if m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == OPEN)) m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == OPEN))
}) })
} }
}}, }},

View File

@ -53,7 +53,7 @@ func _islocalhost(m *ice.Message, ip string) (ok bool) {
return false return false
} }
if m.Richs(HOST, kit.Keys("meta.white"), ip, nil) != nil { if m.Richs(HOST, kit.Keys("meta.white"), ip, nil) != nil {
m.Log_AUTH(aaa.White, ip) m.Log_AUTH(aaa.WHITE, ip)
return true return true
} }
return false return false
@ -70,16 +70,16 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
HOST: {Name: HOST, Help: "主机", Value: kit.Data( HOST: {Name: HOST, Help: "主机", Value: kit.Data(
aaa.Black, kit.Data(kit.MDB_SHORT, kit.MDB_TEXT), aaa.BLACK, kit.Data(kit.MDB_SHORT, kit.MDB_TEXT),
aaa.White, kit.Data(kit.MDB_SHORT, kit.MDB_TEXT), aaa.WHITE, kit.Data(kit.MDB_SHORT, kit.MDB_TEXT),
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
HOST: {Name: "host name auto", Help: "主机", Action: map[string]*ice.Action{ HOST: {Name: "host name auto", Help: "主机", Action: map[string]*ice.Action{
aaa.Black: {Name: "black", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) { aaa.BLACK: {Name: "black", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) {
m.Rich(HOST, kit.Keys("meta.black"), kit.Dict(kit.MDB_TEXT, arg[0])) m.Rich(HOST, kit.Keys("meta.black"), kit.Dict(kit.MDB_TEXT, arg[0]))
}}, }},
aaa.White: {Name: "white", Help: "白名单", Hand: func(m *ice.Message, arg ...string) { aaa.WHITE: {Name: "white", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
m.Rich(HOST, kit.Keys("meta.white"), kit.Dict(kit.MDB_TEXT, arg[0])) m.Rich(HOST, kit.Keys("meta.white"), kit.Dict(kit.MDB_TEXT, arg[0]))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {

View File

@ -56,7 +56,7 @@ func init() {
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
PORT: {Name: "port port path auto", Help: "端口", Action: map[string]*ice.Action{ PORT: {Name: "port port path auto", Help: "端口", Action: map[string]*ice.Action{
aaa.Right: {Name: "right [begin]", Help: "分配", Hand: func(m *ice.Message, arg ...string) { aaa.RIGHT: {Name: "right [begin]", Help: "分配", Hand: func(m *ice.Message, arg ...string) {
port, p := kit.Select("", arg, 0), "" port, p := kit.Select("", arg, 0), ""
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
port = _port_right(m, port) port = _port_right(m, port)

View File

@ -51,7 +51,7 @@ func init() {
SERVER: {Name: SERVER, Help: "服务器", Value: kit.Data()}, SERVER: {Name: SERVER, Help: "服务器", Value: kit.Data()},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SERVER: {Name: "server hash auto 清理", Help: "服务器", Action: map[string]*ice.Action{ SERVER: {Name: "server hash auto prunes", Help: "服务器", Action: map[string]*ice.Action{
LISTEN: {Name: "LISTEN type name port=9010 host=", Help: "监听", Hand: func(m *ice.Message, arg ...string) { LISTEN: {Name: "LISTEN type name port=9010 host=", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
l, e := net.Listen(TCP, m.Option(HOST)+":"+m.Option(PORT)) l, e := net.Listen(TCP, m.Option(HOST)+":"+m.Option(PORT))
h := m.Cmdx(mdb.INSERT, SERVER, "", mdb.HASH, arg, h := m.Cmdx(mdb.INSERT, SERVER, "", mdb.HASH, arg,
@ -99,7 +99,7 @@ func init() {
} }
} }
}}, }},
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, SERVER, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, SERVER, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
@ -110,7 +110,7 @@ func init() {
m.Option(mdb.FIELDS, kit.Select("time,hash,status,type,name,host,port,error,nconn", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,hash,status,type,name,host,port,error,nconn", mdb.DETAIL, len(arg) > 0))
if m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { if m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == CLOSE)) m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == CLOSE))
}) })
} }
}}, }},

View File

@ -13,7 +13,7 @@ var Index = &ice.Context{Name: TCP, Help: "通信模块",
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load() m.Load()
m.Cmd(HOST).Table(func(index int, value map[string]string, head []string) { m.Cmd(HOST).Table(func(index int, value map[string]string, head []string) {
m.Cmd(HOST, aaa.White, value["ip"]) m.Cmd(HOST, aaa.WHITE, value["ip"])
}) })
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {

View File

@ -165,7 +165,7 @@ func init() {
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, "time,hash,size,type,name,text,file") m.Option(mdb.FIELDS, kit.Select("time,hash,size,type,name,text,file", mdb.DETAIL, len(arg) > 0))
m.Cmdy(mdb.SELECT, CACHE, "", mdb.HASH, kit.MDB_HASH, arg) m.Cmdy(mdb.SELECT, CACHE, "", mdb.HASH, kit.MDB_HASH, arg)
}}, }},

View File

@ -126,6 +126,7 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
} }
// 用户请求 // 用户请求
msg.Option("cache.limit", "10")
msg.Option(ice.MSG_OUTPUT, "") msg.Option(ice.MSG_OUTPUT, "")
msg.Option(ice.MSG_METHOD, r.Method) msg.Option(ice.MSG_METHOD, r.Method)
msg.Option(ice.MSG_USERWEB, kit.Select(msg.Conf(SHARE, "meta.domain"), r.Header.Get("Referer"))) msg.Option(ice.MSG_USERWEB, kit.Select(msg.Conf(SHARE, "meta.domain"), r.Header.Get("Referer")))
@ -267,7 +268,7 @@ func init() {
SERVE: {Name: "serve name auto start", Help: "服务器", Action: map[string]*ice.Action{ SERVE: {Name: "serve name auto start", Help: "服务器", Action: map[string]*ice.Action{
gdb.START: {Name: "start dev= name=self proto=http host= port=9020", Help: "启动", Hand: func(m *ice.Message, arg ...string) { gdb.START: {Name: "start dev= name=self proto=http host= port=9020", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
if cli.NodeInfo(m, SERVER, ice.Info.HostName); m.Option(tcp.PORT) == "random" { if cli.NodeInfo(m, SERVER, ice.Info.HostName); m.Option(tcp.PORT) == "random" {
m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.Right)) m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT))
} }
m.Target().Start(m, kit.MDB_NAME, m.Option(kit.MDB_NAME), tcp.HOST, m.Option(tcp.HOST), tcp.PORT, m.Option(tcp.PORT)) m.Target().Start(m, kit.MDB_NAME, m.Option(kit.MDB_NAME), tcp.HOST, m.Option(tcp.HOST), tcp.PORT, m.Option(tcp.PORT))

View File

@ -18,14 +18,10 @@ import (
func _space_list(m *ice.Message, space string) { func _space_list(m *ice.Message, space string) {
m.Option(mdb.FIELDS, kit.Select("time,type,name,text", mdb.DETAIL, space != "")) m.Option(mdb.FIELDS, kit.Select("time,type,name,text", mdb.DETAIL, space != ""))
m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_HASH, space) m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_NAME, space)
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
if p := kit.MergeURL(m.Option(ice.MSG_USERWEB), kit.SSH_POD, kit.Keys(m.Option(kit.SSH_POD), kit.Select(value[kit.MDB_VALUE], value[kit.MDB_NAME]))); space == "" { p := kit.MergeURL(m.Option(ice.MSG_USERWEB), kit.SSH_POD, kit.Keys(m.Option(kit.SSH_POD), kit.Select(value[kit.MDB_VALUE], value[kit.MDB_NAME])))
m.PushRender(kit.MDB_LINK, "a", value[kit.MDB_NAME], p) m.PushRender(kit.MDB_LINK, "a", value[kit.MDB_NAME], p)
} else if value[kit.MDB_KEY] == kit.MDB_NAME {
m.Push(kit.MDB_KEY, kit.MDB_LINK)
m.PushRender(kit.MDB_VALUE, "a", value[kit.MDB_VALUE], p)
}
}) })
m.Sort(kit.MDB_NAME) m.Sort(kit.MDB_NAME)
} }

1
base/yac/yac.shy Normal file
View File

@ -0,0 +1 @@
chapter "yac"

2
core/chat/chat.shy Normal file
View File

@ -0,0 +1,2 @@
chapter "chat"

View File

@ -1,20 +1,19 @@
chapter "code" chapter "code"
# field "安装" web.code.install field "后端" web.code.binpack
# field "生成" web.code.autogen field "前端" web.code.webpack
# field "编译" web.code.compile
# field "发布" web.code.publish
# field "升级" web.code.upgrade
field "打包" web.code.binpack field "安装" web.code.install
field "打包" web.code.webpack field "生成" web.code.autogen
field "编译" web.code.compile
field "发布" web.code.publish
field "升级" web.code.upgrade
field "编辑" web.code.vimer field "编辑" web.code.vimer
field "查看" web.code.inner field "查看" web.code.inner
field "收藏" web.code.favor field "收藏" web.code.favor
field "测试" web.code.bench field "测试" web.code.bench
field "优化" web.code.pprof field "优化" web.code.pprof
return
field "系统" web.code.c field "系统" web.code.c
field "命令" web.code.sh field "命令" web.code.sh

View File

@ -110,7 +110,7 @@ func init() {
}) })
}}, }},
gdb.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) { gdb.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) {
port := m.Cmdx(tcp.PORT, aaa.Right) port := m.Cmdx(tcp.PORT, aaa.RIGHT)
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port) target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port)
source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))) source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))

View File

@ -64,7 +64,7 @@ func init() {
web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) { web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) {
m.Option(ice.MSG_PROCESS, "_inner") m.Option(ice.MSG_PROCESS, "_inner")
u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.Right) p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.RIGHT)
m.Cmd(cli.DAEMON, m.Confv(PPROF, "meta.pprof"), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE)) m.Cmd(cli.DAEMON, m.Confv(PPROF, "meta.pprof"), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE))
m.Echo("http://%s/ui/top", p) m.Echo("http://%s/ui/top", p)

6
core/core.shy Normal file
View File

@ -0,0 +1,6 @@
source code/code.shy
source wiki/wiki.shy
source chat/chat.shy
source team/team.shy
source mall/mall.shy

View File

@ -1,6 +1,10 @@
title "asset" chapter "mall"
section "asset"
refer ` refer `
公积金 https://grwsyw.gjj.beijing.gov.cn/ish/flow/menu/PPLGRZH0102?_r=0.6644871172745264 公积金 https://grwsyw.gjj.beijing.gov.cn/ish/flow/menu/PPLGRZH0102?_r=0.6644871172745264
社保 http://fuwu.rsj.beijing.gov.cn/csibiz/indinfo/index.jsp 社保 http://fuwu.rsj.beijing.gov.cn/csibiz/indinfo/index.jsp
个税 https://its.beijing.chinatax.gov.cn:8443/zmsqjl.html 个税 https://its.beijing.chinatax.gov.cn:8443/zmsqjl.html
` `
field "资产" web.mall.asset
field "工资" web.mall.salary

5
core/team/team.shy Normal file
View File

@ -0,0 +1,5 @@
chapter "team"
field "任务" web.team.task
field "计划" web.team.plan

1
core/wiki/wiki.shy Normal file
View File

@ -0,0 +1 @@
chapter "wiki"

3
misc/alpha/alpha.shy Normal file
View File

@ -0,0 +1,3 @@
chapter "alpha"
field "英汉" web.wiki.input.input

4
misc/input/input.shy Normal file
View File

@ -0,0 +1,4 @@
chapter "input"
field "五笔" web.wiki.alpha.alpha

13
misc/misc.shy Normal file
View File

@ -0,0 +1,13 @@
source alpha/alpha.shy
source input/input.shy
source chrome/chrome.shy
source zsh/zsh.shy
source tmux/tmux.shy
source git/git.shy
source vim/vim.shy
source lark/lark.shy
source wx/wx.shy
source mp/mp.shy

View File

@ -1,9 +0,0 @@
Volcanos("onimport", {help: "导入数据", list: [],
"init": function(can, msg, cb, output, action, option) {},
})
Volcanos("onaction", {help: "控件菜单", list: []})
Volcanos("onchoice", {help: "控件交互", list: ["刷新"]
"刷新": function(event, can, value, cmd, target) {},
})
Volcanos("ondetail", {help: "控件详情", list: []})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -1 +0,0 @@
title "auth"