1
0
forked from x/icebergs
This commit is contained in:
shaoying 2021-08-08 23:16:58 +08:00
parent 2f6860b817
commit 4a680f0afc
18 changed files with 247 additions and 241 deletions

View File

@ -30,7 +30,9 @@ func _config_save(m *ice.Message, name string, arg ...string) {
msg := m.Spawn(m.Source()) msg := m.Spawn(m.Source())
data := map[string]interface{}{} data := map[string]interface{}{}
for _, k := range arg { for _, k := range arg {
data[k] = msg.Confv(k) if v := msg.Confv(k); v != "" {
data[k] = v
}
} }
// 保存配置 // 保存配置
@ -110,6 +112,10 @@ func init() {
GROW: {Name: "grow", Help: "成长", Hand: func(m *ice.Message, arg ...string) { GROW: {Name: "grow", Help: "成长", Hand: func(m *ice.Message, arg ...string) {
_config_grow(m, arg[0], arg[1], arg[2:]...) _config_grow(m, arg[0], arg[1], arg[2:]...)
}}, }},
"clear": {Name: "clear", Help: "清空", Hand: func(m *ice.Message, arg ...string) {
m.Conf(arg[0], "", "")
m.Cmd("exit", 1)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { if len(arg) == 0 {
_config_list(m) _config_list(m)

View File

@ -45,7 +45,7 @@ func _dream_show(m *ice.Message, name string) {
// 任务模板 // 任务模板
if m.Option(kit.MDB_TEMPLATE) != "" { if m.Option(kit.MDB_TEMPLATE) != "" {
for _, file := range []string{ice.ETC_MISS, ice.SRC_MAIN, ice.SRC_MAIN_GO, ice.GO_MOD, ice.MAKEFILE} { for _, file := range []string{ice.ETC_MISS, ice.SRC_MAIN_SHY, ice.SRC_MAIN_GO, ice.GO_MOD, ice.MAKEFILE} {
if _, e := os.Stat(path.Join(p, file)); os.IsNotExist(e) { if _, e := os.Stat(path.Join(p, file)); os.IsNotExist(e) {
switch m.Cmdy(nfs.COPY, path.Join(p, file), path.Join(m.Option(kit.MDB_TEMPLATE), file)); file { switch m.Cmdy(nfs.COPY, path.Join(p, file), path.Join(m.Option(kit.MDB_TEMPLATE), file)); file {
case ice.GO_MOD: case ice.GO_MOD:
@ -112,13 +112,13 @@ func init() {
m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", mdb.CREATE, arg) m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", mdb.CREATE, arg)
m.ProcessInner() m.ProcessInner()
}}, }},
tcp.START: {Name: "start name repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { cli.START: {Name: "start name repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
if m.Option(kit.MDB_NAME) == SPIDE_SELF { if m.Option(kit.MDB_NAME) == SPIDE_SELF {
m.Option(kit.MDB_NAME, "") m.Option(kit.MDB_NAME, "")
} }
_dream_show(m, m.Option(kit.MDB_NAME, kit.Select(path.Base(m.Option(kit.SSH_REPOS)), m.Option(kit.MDB_NAME)))) _dream_show(m, m.Option(kit.MDB_NAME, kit.Select(path.Base(m.Option(kit.SSH_REPOS)), m.Option(kit.MDB_NAME))))
}}, }},
tcp.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(SPACE, m.Option(kit.MDB_NAME), "exit", "0") m.Cmdy(SPACE, m.Option(kit.MDB_NAME), "exit", "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

@ -319,7 +319,7 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SPIDE: {Name: SPIDE, Help: "蜘蛛侠", Value: kit.Data( SPIDE: {Name: SPIDE, Help: "蜘蛛侠", Value: kit.Data(
kit.MDB_SHORT, CLIENT_NAME, kit.MDB_SHORT, "time,client.name,client.url", kit.MDB_SHORT, CLIENT_NAME, kit.MDB_FIELD, "time,client.name,client.url",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{

View File

@ -1,5 +1,9 @@
package ice package ice
const (
SP = " "
NL = "\n"
)
const ( // MOD const ( // MOD
MOD_SP = " " MOD_SP = " "
MOD_NL = "\n" MOD_NL = "\n"
@ -69,7 +73,7 @@ const ( // DIR
ETC_MISS = "etc/miss.sh" ETC_MISS = "etc/miss.sh"
ETC_MISS_SH = "etc/miss.sh" ETC_MISS_SH = "etc/miss.sh"
SRC_MAIN = "src/main.shy" SRC_MAIN_SHY = "src/main.shy"
SRC_MAIN_GO = "src/main.go" SRC_MAIN_GO = "src/main.go"
SRC_VERSION = "src/version.go" SRC_VERSION = "src/version.go"
SRC_BINPACK = "src/binpack.go" SRC_BINPACK = "src/binpack.go"

View File

@ -48,7 +48,7 @@ func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) {
func _action_right(m *ice.Message, river string, storm string) (ok bool) { func _action_right(m *ice.Message, river string, storm string) (ok bool) {
if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID { if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID {
m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) { m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) {
if ok = m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), nil) != nil; ok { if ok = m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USERS), m.Option(ice.MSG_USERNAME), nil) != nil; ok {
m.Log_AUTH(RIVER, river, STORM, storm) m.Log_AUTH(RIVER, river, STORM, storm)
} }
}) })
@ -148,11 +148,9 @@ const (
const ACTION = "action" const ACTION = "action"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
Configs: map[string]*ice.Config{
ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(DOMAIN, kit.Dict())}, ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(DOMAIN, kit.Dict())},
}, }, Commands: map[string]*ice.Command{
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) {
for _, cmd := range []string{ for _, cmd := range []string{
"web.chat.meet.miss", "web.chat.meet.miss",
@ -197,6 +195,7 @@ func init() {
} }
if len(arg) == 2 { if len(arg) == 2 {
m.Option(MENUS, m.Conf(ACTION, kit.Keym(MENUS)))
_action_list(m, arg[0], arg[1]) _action_list(m, arg[0], arg[1])
return //命令列表 return //命令列表
} }

View File

@ -1,45 +0,0 @@
package chat
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/ssh"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
)
const AUTH = "auth"
func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
AUTH: {Name: "auth hash auto create", Help: "授权", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create type=node,user name text", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, AUTH), mdb.HASH,
aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME),
kit.MDB_TIME, m.Time("72h"), arg)
}},
mdb.INSERT: {Name: "insert river share", Help: "加入", Hand: func(m *ice.Message, arg ...string) {
switch msg := m.Cmd(AUTH, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) {
case USER:
m.Option(ice.MSG_RIVER, m.Option(RIVER))
m.Cmdy(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
}
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, RIVER, _river_key(m, AUTH), mdb.HASH, m.OptionSimple(kit.MDB_HASH), arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, RIVER, _river_key(m, AUTH), mdb.HASH, m.OptionSimple(kit.MDB_HASH))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg), "time,hash,userrole,username,type,name,text")
if m.Cmdy(mdb.SELECT, RIVER, _river_key(m, AUTH), mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 {
m.PushScript(ssh.SCRIPT, _river_url(m, web.SHARE, m.Option(web.SHARE)))
m.PushQRCode(cli.QRCODE, _river_url(m, web.SHARE, m.Option(web.SHARE)))
}
m.PushAction(mdb.REMOVE)
}},
}})
}

View File

@ -25,9 +25,7 @@ func init() {
m.Cmdy(ctx.COMMAND, arg) m.Cmdy(ctx.COMMAND, arg)
}}, }},
cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
if !m.Warn(!m.Right(arg), ice.ErrNotRight) {
m.Cmdy(arg) m.Cmdy(arg)
}
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
kit.Fetch(m.Confv(FOOTER, LEGAL), func(index int, value string) { m.Echo(value) }) kit.Fetch(m.Confv(FOOTER, LEGAL), func(index int, value string) { m.Echo(value) })

View File

@ -1,10 +1,13 @@
package chat package chat
import ( import (
"path"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
"github.com/shylinux/icebergs/core/code" "github.com/shylinux/icebergs/core/code"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
@ -38,7 +41,7 @@ func _header_share(m *ice.Message, arg ...string) {
m.PushQRCode(kit.MDB_TEXT, m.Option(kit.MDB_LINK)) m.PushQRCode(kit.MDB_TEXT, m.Option(kit.MDB_LINK))
} }
func _header_grant(m *ice.Message, arg ...string) { func _header_grant(m *ice.Message, arg ...string) {
if m.PodCmd(m.Prefix("/header"), ctx.ACTION, GRANT, arg) { if m.PodCmd(m.PrefixKey(), ctx.ACTION, GRANT, arg) {
return // 下发命令 return // 下发命令
} }
@ -48,11 +51,14 @@ func _header_grant(m *ice.Message, arg ...string) {
} }
func _header_users(m *ice.Message, key string, arg ...string) { func _header_users(m *ice.Message, key string, arg ...string) {
m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME)) m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))
m.Cmdy("aaa.user", ctx.ACTION, mdb.MODIFY, key, m.Option(key, arg[0])) m.Cmdy(aaa.USER, ctx.ACTION, mdb.MODIFY, key, m.Option(key, arg[0]))
} }
const ( const (
TOPIC = "topic"
TITLE = "title" TITLE = "title"
MENUS = "menus"
TRANS = "trans"
AGENT = "agent" AGENT = "agent"
CHECK = "check" CHECK = "check"
SHARE = "share" SHARE = "share"
@ -61,11 +67,11 @@ const (
const HEADER = "header" const HEADER = "header"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
Configs: map[string]*ice.Config{ HEADER: {Name: HEADER, Help: "标题栏", Value: kit.Data(
HEADER: {Name: HEADER, Help: "标题栏", Value: kit.Data(TITLE, "github.com/shylinux/contexts")}, TITLE, "github.com/shylinux/contexts", MENUS, `["header", ["setting", "black", "white", "print", "webpack", "devops"]]`,
}, )},
Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
"/header": {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{ "/header": {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{
AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) { AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.chat.wx.access", "config") m.Cmdy("web.chat.wx.access", "config")
@ -89,26 +95,31 @@ func init() {
aaa.LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) { aaa.LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(aaa.SESS, mdb.REMOVE, ice.OptionHash(m.Option(ice.MSG_SESSID))) m.Cmd(aaa.SESS, mdb.REMOVE, ice.OptionHash(m.Option(ice.MSG_SESSID)))
}}, }},
aaa.AVATAR: {Name: "avatar", Help: "用户头像", Hand: func(m *ice.Message, arg ...string) {
aaa.AVATAR: {Name: "avatar", Help: "头像图片", Hand: func(m *ice.Message, arg ...string) {
_header_users(m, aaa.AVATAR, arg...) _header_users(m, aaa.AVATAR, arg...)
}}, }},
aaa.USERNICK: {Name: "usernick", Help: "用户昵称", Hand: func(m *ice.Message, arg ...string) { aaa.USERNICK: {Name: "usernick", Help: "用户昵称", Hand: func(m *ice.Message, arg ...string) {
_header_users(m, aaa.USERNICK, arg...) _header_users(m, aaa.USERNICK, arg...)
}}, }},
aaa.BACKGROUND: {Name: "background", Help: "背景图片", Hand: func(m *ice.Message, arg ...string) { aaa.BACKGROUND: {Name: "background", Help: "用户壁纸", Hand: func(m *ice.Message, arg ...string) {
_header_users(m, aaa.BACKGROUND, arg...) _header_users(m, aaa.BACKGROUND, arg...)
}}, }},
code.WEBPACK: {Name: "webpack", Help: "网页打包", Hand: func(m *ice.Message, arg ...string) {
code.WEBPACK: {Name: "webpack", Help: "打包页面", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME)) m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME))
}}, }},
"devops": {Name: "devops", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js"))
m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css"))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
user := m.Cmd("aaa.user", m.Option(ice.MSG_USERNAME)) m.Option(TRANS, kit.Format(kit.Value(c.Commands[cmd].Meta, "_trans")))
for _, k := range []string{aaa.BACKGROUND, aaa.AVATAR} { m.Option(MENUS, m.Conf(HEADER, kit.Keym(MENUS)))
m.Option(k, user.Append(k)) msg := m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME))
for _, k := range []string{aaa.USERNICK, aaa.BACKGROUND, aaa.AVATAR} {
m.Option(k, msg.Append(k))
} }
m.Echo(m.Conf(HEADER, kit.Keym(TITLE))) m.Echo(m.Conf(HEADER, kit.Keym(TITLE)))
}}, }},
}, }})
})
} }

View File

@ -23,12 +23,12 @@ func init() {
if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" { if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" {
return return
} }
if msg := m.Cmd(AUTH, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) == NODE { if msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) == RIVER {
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, NODE), mdb.HASH, arg) m.Cmdy(mdb.INSERT, RIVER, _river_key(m, NODE), mdb.HASH, arg)
} }
}}, }},
aaa.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { aaa.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) {
m.Option(web.SHARE, m.Cmdx(AUTH, mdb.CREATE, kit.MDB_TYPE, NODE)) m.Option(web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, RIVER))
m.Cmdy(code.PUBLISH, ice.CONTEXTS, "tool") m.Cmdy(code.PUBLISH, ice.CONTEXTS, "tool")
}}, }},
mdb.INSERT: {Name: "insert type name share", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert type name share", Help: "添加", Hand: func(m *ice.Message, arg ...string) {

View File

@ -31,8 +31,8 @@ func _river_list(m *ice.Message) {
if m.Conf(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER))) == "" { if m.Conf(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER))) == "" {
break break
} }
if msg.Cmd(USER, m.Option(ice.MSG_USERNAME)).Append(aaa.USERNAME) == "" { if msg.Cmd(USERS, m.Option(ice.MSG_USERNAME)).Append(aaa.USERNAME) == "" {
msg.Cmd(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) // 加入群组 msg.Cmd(USERS, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) // 加入群组
} }
case web.STORM: // 共享应用 case web.STORM: // 共享应用
@ -49,7 +49,7 @@ func _river_list(m *ice.Message) {
} }
m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) { m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USERS), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val)) m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val))
}) })
}) })
@ -60,7 +60,14 @@ const RIVER = "river"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_RIVER)}, RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(
kit.MDB_PATH, ice.USR_LOCAL_RIVER,
MENUS, `["river",
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"],
["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"],
["共享", "共享群组", "共享应用", "共享工具", "共享主机"]
]`,
)},
}, },
Commands: map[string]*ice.Command{ 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) {
@ -68,7 +75,6 @@ func init() {
"base", kit.Dict( "base", kit.Dict(
"info", []interface{}{ "info", []interface{}{
"web.chat.info", "web.chat.info",
"web.chat.auth",
"web.chat.user", "web.chat.user",
"web.chat.tool", "web.chat.tool",
"web.chat.node", "web.chat.node",
@ -102,6 +108,7 @@ func init() {
return // 没有登录 return // 没有登录
} }
if len(arg) == 0 { if len(arg) == 0 {
m.Option(MENUS, m.Conf(RIVER, kit.Keym(MENUS)))
_river_list(m) _river_list(m)
return // 群组列表 return // 群组列表
} }
@ -115,7 +122,7 @@ func init() {
} }
switch kit.Select("", arg, 1) { switch kit.Select("", arg, 1) {
case USER, TOOL, NODE: case USERS, TOOL, NODE:
m.Option(ice.MSG_RIVER, arg[0]) m.Option(ice.MSG_RIVER, arg[0])
m.Cmdy(arg[1], arg[2:]) m.Cmdy(arg[1], arg[2:])
@ -134,8 +141,8 @@ func init() {
m.Echo(h) m.Echo(h)
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, NODE, kit.MDB_META, kit.MDB_SHORT), kit.MDB_NAME) m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, NODE, kit.MDB_META, kit.MDB_SHORT), kit.MDB_NAME)
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, USER, kit.MDB_META, kit.MDB_SHORT), aaa.USERNAME) m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, USERS, kit.MDB_META, kit.MDB_SHORT), aaa.USERNAME)
m.Cmd(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) m.Cmd(USERS, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
kit.Fetch(m.Confv(RIVER, kit.Keym(kit.MDB_TEMPLATE, kit.Select("base", m.Option(kit.MDB_TEMPLATE)))), func(storm string, value interface{}) { kit.Fetch(m.Confv(RIVER, kit.Keym(kit.MDB_TEMPLATE, kit.Select("base", m.Option(kit.MDB_TEMPLATE)))), func(storm string, value interface{}) {
h := m.Cmdx(TOOL, mdb.CREATE, kit.MDB_TYPE, PUBLIC, kit.MDB_NAME, storm, kit.MDB_TEXT, storm) h := m.Cmdx(TOOL, mdb.CREATE, kit.MDB_TYPE, PUBLIC, kit.MDB_NAME, storm, kit.MDB_TEXT, storm)

View File

@ -4,35 +4,28 @@ import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
const USER = "user" const USERS = "users"
func init() { func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
USER: {Name: "user username auto insert invite", Help: "用户", Action: map[string]*ice.Action{ USERS: {Name: "users username auto insert invite", Help: "用户", Action: map[string]*ice.Action{
aaa.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) {
share := m.Option(web.SHARE, m.Cmdx(AUTH, mdb.CREATE, kit.MDB_TYPE, USER))
m.EchoScript(kit.MergeURL(m.Option(ice.MSG_USERWEB), RIVER, m.Option(ice.MSG_RIVER), web.SHARE, share))
m.EchoQRCode(kit.MergeURL(m.Option(ice.MSG_USERWEB), RIVER, m.Option(ice.MSG_RIVER), web.SHARE, share))
m.Render("")
}},
mdb.INSERT: {Name: "insert username", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert username", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, USER), mdb.HASH, arg) m.Cmdy(mdb.INSERT, RIVER, _river_key(m, USERS), mdb.HASH, arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, RIVER, _river_key(m, USER), mdb.HASH, m.OptionSimple(aaa.USERNAME)) m.Cmdy(mdb.DELETE, RIVER, _river_key(m, USERS), mdb.HASH, m.OptionSimple(aaa.USERNAME))
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("aaa.user", ice.OptionFields(aaa.USERNAME, aaa.USERZONE, aaa.USERNICK)) m.Cmdy(aaa.USER, ice.OptionFields(aaa.USERNAME, aaa.USERZONE, aaa.USERNICK))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg), "time,username") m.Fields(len(arg), "time,username")
m.Cmdy(mdb.SELECT, RIVER, _river_key(m, USER), mdb.HASH, aaa.USERNAME, arg) m.Cmdy(mdb.SELECT, RIVER, _river_key(m, USERS), mdb.HASH, aaa.USERNAME, arg)
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.Richs(USER, nil, value[aaa.USERNAME], func(key string, val map[string]interface{}) { m.Richs(USERS, nil, value[aaa.USERNAME], func(key string, val map[string]interface{}) {
val = kit.GetMeta(val) val = kit.GetMeta(val)
m.Push(aaa.USERNICK, val[aaa.USERNICK]) m.Push(aaa.USERNICK, val[aaa.USERNICK])
m.PushImages(aaa.AVATAR, kit.Format(val[aaa.AVATAR]), kit.Select("60", "240", m.Option(mdb.FIELDS) == mdb.DETAIL)) m.PushImages(aaa.AVATAR, kit.Format(val[aaa.AVATAR]), kit.Select("60", "240", m.Option(mdb.FIELDS) == mdb.DETAIL))

View File

@ -20,9 +20,14 @@ field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}}
} }
} }
func _autogen_source(m *ice.Message, name string) { func _autogen_source(m *ice.Message, name string) {
m.Cmd(nfs.PUSH, ice.SRC_MAIN, "\n", kit.SSH_SOURCE+` `+path.Join(name, kit.Keys(name, SHY)), "\n") m.Cmd(nfs.PUSH, ice.SRC_MAIN_SHY, "\n", kit.SSH_SOURCE+` `+path.Join(name, kit.Keys(name, SHY)), "\n")
} }
func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list []string) { func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list []string) {
m.Cmd(nfs.DEFS, ice.GO_MOD, kit.Format(`module %s
go 1.11
`, path.Base(kit.Path(""))))
name, value := "", "" name, value := "", ""
key := strings.ToUpper(ctx) key := strings.ToUpper(ctx)
m.Cmd(nfs.CAT, from, func(line string, index int) { m.Cmd(nfs.CAT, from, func(line string, index int) {
@ -47,6 +52,18 @@ func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list
return return
} }
func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) { func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) {
m.Cmd(nfs.DEFS, main, `package main
import (
ice "github.com/shylinux/icebergs"
_ "github.com/shylinux/icebergs/base"
_ "github.com/shylinux/icebergs/core"
_ "github.com/shylinux/icebergs/misc"
)
func main() { print(ice.Run()) }
`)
m.Cmd(nfs.CAT, main, func(line string, index int) { m.Cmd(nfs.CAT, main, func(line string, index int) {
if list = append(list, line); strings.HasPrefix(line, "import (") { if list = append(list, line); strings.HasPrefix(line, "import (") {
list = append(list, kit.Format(` _ "%s/src/%s"`, mod, ctx), "") list = append(list, kit.Format(` _ "%s/src/%s"`, mod, ctx), "")

View File

@ -50,7 +50,7 @@ func init() {
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.USR_PUBLISH) m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.USR_PUBLISH)
m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts) m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts)
}}, }},
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell dream", Help: "发布", Action: map[string]*ice.Action{ PUBLISH: {Name: "publish path auto create volcanos icebergs intshell package dream", Help: "发布", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, m.Option(kit.MDB_FILE)) _publish_file(m, m.Option(kit.MDB_FILE))
}}, }},
@ -117,6 +117,17 @@ func init() {
} }
} }
}}, }},
"package": {Name: "package", Help: "依赖", Hand: func(m *ice.Message, arg ...string) {
web.PushStream(m)
p := kit.Path(ice.USR_PUBLISH)
m.Option(cli.CMD_DIR, kit.Path(os.Getenv("HOME")))
// m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "go.tar.gz", "go/pkg")
// m.Cmdy(cli.SYSTEM, "mv", "go.tar.gz", p)
m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "vim.tar.gz", ".vim/plugged")
m.Cmdy(cli.SYSTEM, "mv", "vim.tar.gz", p)
m.Toast("打包成功")
m.ProcessHold()
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) os.Remove(path.Join(p, m.Option(kit.MDB_PATH)))

View File

@ -32,6 +32,12 @@ func init() {
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE))) m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE)))
}}, }},
AUTOGEN: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(AUTOGEN, mdb.CREATE, arg)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(AUTOGEN, mdb.INPUTS, arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(INNER, arg) m.Cmdy(INNER, arg)
}}, }},

View File

@ -19,6 +19,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
name = strings.ReplaceAll(name, " ", "_") name = strings.ReplaceAll(name, " ", "_")
meta[kit.MDB_NAME] = name meta[kit.MDB_NAME] = name
meta[kit.MDB_INDEX] = text
// 扩展参数 // 扩展参数
for i := 0; i < len(arg)-1; i += 2 { for i := 0; i < len(arg)-1; i += 2 {

View File

@ -34,12 +34,15 @@ func init() {
arg[0] = "list" arg[0] = "list"
} }
switch m.Option(mdb.FIELDS, mdb.DETAIL); arg[0] { switch m.OptionFields(mdb.DETAIL); arg[0] {
case "json": case "json":
m.Echo(kit.Formats(kit.UnMarshal(arg[1]))) m.Echo(kit.Formats(kit.UnMarshal(arg[1])))
case "http": case "http":
u, _ := url.Parse(arg[1]) u, _ := url.Parse(arg[1])
m.Push("proto", u.Scheme)
m.Push("host", u.Host)
m.Push("path", u.Path)
for k, v := range u.Query() { for k, v := range u.Query() {
for _, v := range v { for _, v := range v {
m.Push(k, v) m.Push(k, v)

View File

@ -34,8 +34,7 @@ func _config_list(m *ice.Message) {
const CONFIG = "config" const CONFIG = "config"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
Configs: map[string]*ice.Config{
CONFIG: {Name: CONFIG, Help: "配置键", Value: kit.Data( CONFIG: {Name: CONFIG, Help: "配置键", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, "init", kit.Dict( kit.MDB_SHORT, kit.MDB_NAME, "init", kit.Dict(
"alias", kit.Dict("s", "status", "b", "branch"), "alias", kit.Dict("s", "status", "b", "branch"),
@ -44,8 +43,7 @@ func init() {
"push", kit.Dict("default", "simple"), "push", kit.Dict("default", "simple"),
"color", kit.Dict("ui", "always"), "color", kit.Dict("ui", "always"),
))}, ))},
}, }, Commands: map[string]*ice.Command{
Commands: map[string]*ice.Command{
CONFIG: {Name: "server name auto create import", Help: "配置键", Action: map[string]*ice.Action{ CONFIG: {Name: "server name auto create import", Help: "配置键", Action: map[string]*ice.Action{
mdb.IMPORT: {Name: "import", Help: "初始化", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "初始化", Hand: func(m *ice.Message, arg ...string) {
kit.Fetch(m.Confv(CONFIG, kit.Keym("init")), func(conf string, value interface{}) { kit.Fetch(m.Confv(CONFIG, kit.Keym("init")), func(conf string, value interface{}) {

View File

@ -474,15 +474,12 @@ func (m *Message) Confv(arg ...interface{}) (val interface{}) {
if len(arg) > 2 { if len(arg) > 2 {
if arg[1] == nil || arg[1] == "" { if arg[1] == nil || arg[1] == "" {
// 写配置 conf.Value = arg[2] // 写配置
conf.Value = arg[2]
} else { } else {
// 写修改项 kit.Value(conf.Value, arg[1:]...) // 写配置项
kit.Value(conf.Value, arg[1:]...)
} }
} }
// 读配置项 val = kit.Value(conf.Value, arg[1]) // 读配置项
val = kit.Value(conf.Value, arg[1])
}) })
return return
} }