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{
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, TECH, Black, kit.Dict(), White, 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.Load()
m.Cmd(mdb.SEARCH, mdb.CREATE, USER, USER, AAA)
}},

View File

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

View File

@ -14,12 +14,9 @@ const ( // 用户角色
VOID = "void"
)
const ( // 角色操作
White = "white"
Black = "black"
Right = "right"
WHITE = "white"
BLACK = "black"
RIGHT = "right"
)
const ( // 返回结果
OK = "ok"
@ -27,14 +24,14 @@ const ( // 返回结果
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{}) {
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(kit.MDB_ZONE, White)
m.Push(kit.MDB_ZONE, WHITE)
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(kit.MDB_ZONE, Black)
m.Push(kit.MDB_ZONE, BLACK)
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{}) {
ok = true
list := value[Black].(map[string]interface{})
list := value[BLACK].(map[string]interface{})
for i := 0; i < len(keys); i++ {
if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true {
ok = false
@ -70,7 +67,7 @@ func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) {
}
ok = false
list = value[White].(map[string]interface{})
list = value[WHITE].(map[string]interface{})
for i := 0; i < len(keys); i++ {
if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == 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) {
m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) {
m.Log_MODIFY(ROLE, userrole, Black, chain)
list := value[Black].(map[string]interface{})
m.Log_MODIFY(ROLE, userrole, BLACK, chain)
list := value[BLACK].(map[string]interface{})
list[chain] = status
})
}
func _role_white(m *ice.Message, userrole, chain string, status bool) {
m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) {
m.Log_MODIFY(ROLE, userrole, White, chain)
list := value[White].(map[string]interface{})
m.Log_MODIFY(ROLE, userrole, WHITE, chain)
list := value[WHITE].(map[string]interface{})
list[chain] = status
})
}
@ -110,14 +107,14 @@ func init() {
ROLE: {Name: ROLE, Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
},
Commands: map[string]*ice.Command{
ROLE: {Name: "role role auto 添加", Help: "角色", Action: map[string]*ice.Action{
White: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
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) {
_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)
}},
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:]), "/", "."), ".")...) {
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))
}},
}, 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 {
// 密码列表
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) {
per := kit.Int64(value[PERIOD])
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)
}},
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) {
_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"
field "脚本" python
field "守护" daemon
field "命令" system
field "输出" output
field "守护" daemon
field "脚本" python
field "环境" runtime
field "进程" cli.proc

View File

@ -89,7 +89,7 @@ func init() {
DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, "var/daemon")},
},
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) {
m.Cmd(DAEMON, STOP)
m.Sleep("1s")
@ -105,7 +105,6 @@ func init() {
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.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])
})
}},

View File

@ -18,7 +18,7 @@ func init() {
)},
},
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) {
m.Cmdy("web.code.install", "download", m.Conf(PYTHON, "meta.source"))
}},

View File

@ -55,8 +55,8 @@ func init() {
m.Cmdy("tcp.host")
}},
"hostname": {Name: "hostname", Help: "hostname", Hand: func(m *ice.Message, arg ...string) {
m.Conf(RUNTIME, "boot.hostname", arg[1])
ice.Info.HostName = arg[1]
m.Conf(RUNTIME, "boot.hostname", arg[0])
ice.Info.HostName = arg[0]
m.Echo(ice.Info.HostName)
}},
"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) {
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:]
fields := kit.Split(m.Option(mdb.FIELDS))
ice.Pulse.Travel(func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
if strings.HasPrefix(key, "_") || strings.HasPrefix(key, "/") {
return
@ -24,16 +25,28 @@ var Index = &ice.Context{Name: "ctx", Help: "配置模块",
return
}
m.Push("pod", "")
m.Push("ctx", "web.chat")
m.Push("cmd", cc)
m.Push("time", m.Time())
m.Push("size", "")
m.Push("type", COMMAND)
m.Push("name", key)
m.Push("text", s.Cap(ice.CTX_FOLLOW))
for _, k := range fields {
switch k {
case kit.SSH_POD:
m.Push(k, m.Option(ice.MSG_USERPOD))
case kit.SSH_CTX:
m.Push(k, m.Prefix())
case kit.SSH_CMD:
m.Push(k, "_")
case kit.MDB_TIME:
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)},
},
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) {
_event_listen(m, m.Option(EVENT), m.Option(kit.SSH_CMD))
}},

View File

@ -37,7 +37,7 @@ func init() {
)},
},
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) {
_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")},
},
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) {
_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)},
},
Commands: map[string]*ice.Command{
ENGINE: {Name: "engine type name text arg...", Help: "引擎", Action: map[string]*ice.Action{
CREATE: {Name: "create type [cmd [ctx]]", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
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) {
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) {
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 {
arg = append(arg, "")
}

View File

@ -1,8 +1,7 @@
chapter "mdb"
field "搜索" mdb.search
field "引擎" mdb.engine
field "插件" mdb.plugin
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)},
},
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) {
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) {
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.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)},
},
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) {
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) {
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.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))
if m.Warn(e != nil, ice.ErrNotFound, name) {
return // 查找失败
if e != nil {
ls, _ := ioutil.ReadDir(root)
for _, k := range ls {
if k.Name() == name {
fs = append(fs, k)
}
}
}
for _, f := range fs {

View File

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

View File

@ -72,8 +72,8 @@ func init() {
CHANNEL: {Name: "channel", Help: "通道", Value: kit.Data()},
},
Commands: map[string]*ice.Command{
CHANNEL: {Name: "channel hash id auto 清理", Help: "通道", Action: map[string]*ice.Action{
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
CHANNEL: {Name: "channel hash id auto prunes", Help: "通道", Action: map[string]*ice.Action{
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))
}},
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")
if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 {
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

View File

@ -62,7 +62,7 @@ func init() {
CONNECT: {Name: CONNECT, Help: "连接", Value: kit.Data()},
},
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) {
m.Option(tcp.DIAL_CB, func(c net.Conn) {
client, e := _ssh_conn(m, c, kit.Select("shy", m.Option(aaa.USERNAME)),
@ -81,7 +81,7 @@ func init() {
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")
}},
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))
}},
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))
}},
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))
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.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() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
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)),
)},
SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Dict()},
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"},
"PS2", []interface{}{"count", " ", "target", "> "},

View File

@ -159,7 +159,7 @@ func init() {
)},
},
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) {
if m.Richs(SERVICE, "", m.Option(tcp.PORT), func(key string, value map[string]interface{}) {
kit.Value(value, "meta.status", tcp.OPEN)

View File

@ -78,7 +78,7 @@ func init() {
SESSION: {Name: SESSION, Help: "会话", Value: kit.Data()},
},
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) {
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 {
@ -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))
}},
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")
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.PushButton(kit.Select("绑定", "删除", value[kit.MDB_STATUS] == tcp.CLOSE))
m.PushButton(kit.Select("bind", mdb.REMOVE, value[kit.MDB_STATUS] == tcp.CLOSE))
})
}
return

View File

@ -11,6 +11,8 @@ const SSH = "ssh"
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) {
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) {
if _, ok := m.Target().Server().(*Frame); ok {

View File

@ -55,7 +55,7 @@ func init() {
CLIENT: {Name: CLIENT, Help: "客户端", Value: kit.Data()},
},
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) {
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),
@ -85,7 +85,7 @@ func init() {
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))
}},
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))
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.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
}
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 false
@ -70,16 +70,16 @@ func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
HOST: {Name: HOST, Help: "主机", Value: kit.Data(
aaa.Black, kit.Data(kit.MDB_SHORT, kit.MDB_TEXT),
aaa.White, 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),
)},
},
Commands: map[string]*ice.Command{
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]))
}},
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]))
}},
}, 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{
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), ""
for i := 0; i < 10; i++ {
port = _port_right(m, port)

View File

@ -51,7 +51,7 @@ func init() {
SERVER: {Name: SERVER, Help: "服务器", Value: kit.Data()},
},
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) {
l, e := net.Listen(TCP, m.Option(HOST)+":"+m.Option(PORT))
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))
}},
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))
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.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) {
m.Load()
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) {

View File

@ -165,7 +165,7 @@ func init() {
}
}},
}, 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)
}},

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_METHOD, r.Method)
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{
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" {
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))

View File

@ -18,14 +18,10 @@ import (
func _space_list(m *ice.Message, space string) {
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) {
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 == "" {
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)
}
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.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"
# field "安装" web.code.install
# field "生成" web.code.autogen
# field "编译" web.code.compile
# field "发布" web.code.publish
# field "升级" web.code.upgrade
field "后端" web.code.binpack
field "前端" web.code.webpack
field "打包" web.code.binpack
field "打包" web.code.webpack
field "安装" web.code.install
field "生成" web.code.autogen
field "编译" web.code.compile
field "发布" web.code.publish
field "升级" web.code.upgrade
field "编辑" web.code.vimer
field "查看" web.code.inner
field "收藏" web.code.favor
field "测试" web.code.bench
field "优化" web.code.pprof
return
field "系统" web.code.c
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) {
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)
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) {
m.Option(ice.MSG_PROCESS, "_inner")
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.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 `
公积金 https://grwsyw.gjj.beijing.gov.cn/ish/flow/menu/PPLGRZH0102?_r=0.6644871172745264
社保 http://fuwu.rsj.beijing.gov.cn/csibiz/indinfo/index.jsp
个税 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"