diff --git a/base/aaa/user.go b/base/aaa/user.go index 641f4149..cb75e6ad 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -25,7 +25,6 @@ func _user_login(m *ice.Message, name, word string) (ok bool) { if value[PASSWORD] == "" { ok, value[PASSWORD] = true, word } else if value[PASSWORD] == word { - m.Log_AUTH(USERNAME, name, PASSWORD, strings.Repeat("*", len(word))) ok = true } }) @@ -101,7 +100,7 @@ func UserLogin(m *ice.Message, username, password string) bool { if _user_login(m, username, password) { m.Option(ice.MSG_USERNAME, username) m.Option(ice.MSG_USERROLE, UserRole(m, username)) - m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME)) + m.Log_AUTH(USERROLE, m.Option(ice.MSG_USERROLE), USERNAME, m.Option(ice.MSG_USERNAME), PASSWORD, strings.Repeat("*", len(password))) return true } return false diff --git a/base/web/route.go b/base/web/route.go index 1ae46f60..60f35e6b 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -6,60 +6,51 @@ import ( "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" - - "strings" ) -func _route_split(arg ...string) (string, string) { - target, rest := "*", "" - if len(arg) > 0 { - ls := strings.SplitN(arg[0], ".", 2) - if target = ls[0]; len(ls) > 1 { - rest = ls[1] - } - } - return target, rest -} - const ROUTE = "route" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - ROUTE: {Name: "route", Help: "路由", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, + ROUTE: {Name: ROUTE, Help: "路由", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ROUTE)}, }, Commands: map[string]*ice.Command{ - ROUTE: {Name: "route name cmd auto", Help: "路由", Meta: kit.Dict("detail", []string{"分组"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 1 && arg[0] == "action" { - switch arg[1] { - case "group", "分组": - if m.Option("grp") != "" && m.Option("name") != "" { - m.Cmdy(GROUP, m.Option("grp"), "add", m.Option("name")) - } - } - return - } - if len(arg) > 0 && arg[0] == "" { - m.Cmdy(arg[1:]) - return - } - - target, rest := _route_split(arg...) - m.Richs(SPACE, nil, target, func(key string, val map[string]interface{}) { - if len(arg) > 1 { - m.Call(false, func(res *ice.Message) *ice.Message { return res }) - ls := []interface{}{SPACE, val[kit.MDB_NAME]} - // 发送命令 - if rest != "" { - ls = append(ls, SPACE, rest) - } - m.Cmdy(ls, arg[1:]) + ROUTE: {Name: "route route auto 启动 创建 邀请", Help: "路由", Action: map[string]*ice.Action{ + "create": {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("web.code.install", "contexts", kit.Select("base", m.Option("type"))) + }}, + "start": {Name: "start type=server,worker name@key", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + if p := m.Option("route"); p != "" { + m.Option("route", "") + m.Cmdy(SPACE, p, "route", "create", arg) return } + m.Cmdy("dream", "start", m.Option("name")) + m.Sleep("3s") + }}, + "stop": {Name: "stop", Help: "结束", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(SPACE, m.Option("route"), "exit") + }}, + "inputs": {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(SPACE, m.Option("route"), "dream") + }}, + "invite": {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("web.wiki.image", "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER))) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) > 0 { + m.Cmd(SPACE, arg[0], ROUTE).Table(func(index int, value map[string]string, head []string) { + m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE]) + m.Push(kit.MDB_ROUTE, kit.Keys(arg[0], value[kit.MDB_ROUTE])) + }) + return + } + m.Richs(SPACE, nil, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { switch val[kit.MDB_TYPE] { case SERVER: - if val[kit.MDB_NAME] == m.Conf(cli.RUNTIME, "node.name") { + if val[kit.MDB_NAME] == cli.NodeName { // 避免循环 return } @@ -67,20 +58,30 @@ func init() { // 远程查询 m.Cmd(SPACE, val[kit.MDB_NAME], ROUTE).Table(func(index int, value map[string]string, head []string) { m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE]) - m.Push(kit.MDB_NAME, kit.Keys(val[kit.MDB_NAME], value[kit.MDB_NAME])) + m.Push(kit.MDB_ROUTE, kit.Keys(val[kit.MDB_NAME], value[kit.MDB_ROUTE])) }) fallthrough case WORKER: // 本机查询 m.Push(kit.MDB_TYPE, val[kit.MDB_TYPE]) - m.Push(kit.MDB_NAME, val[kit.MDB_NAME]) + m.Push(kit.MDB_ROUTE, val[kit.MDB_NAME]) } }) - if m.W != nil && len(arg) < 2 { - m.Table(func(index int, value map[string]string, field []string) { - m.Push("link", m.Cmdx(mdb.RENDER, RENDER.A, value["name"], kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", value["name"]))) - }) + if m.W == nil { + return } + + m.Table(func(index int, value map[string]string, field []string) { + m.Push(kit.MDB_LINK, m.Cmdx(mdb.RENDER, RENDER.A, value[kit.MDB_ROUTE], + kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", value[kit.MDB_ROUTE]))) + switch value[kit.MDB_TYPE] { + case SERVER: + m.Push("action", m.Cmdx(mdb.RENDER, RENDER.Button, "启动")) + case WORKER: + m.Push("action", m.Cmdx(mdb.RENDER, RENDER.Button, "结束")) + } + }) + m.Sort("route") }}, "/route/": {Name: "/route/", Help: "路由器", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[0] { diff --git a/base/web/space.go b/base/web/space.go index 8c136c31..ddfb8120 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -10,7 +10,6 @@ import ( kit "github.com/shylinux/toolkits" "github.com/shylinux/toolkits/task" - "fmt" "math/rand" "net" "net/url" @@ -18,18 +17,11 @@ import ( "time" ) -func _link(m *ice.Message, pod interface{}) string { - if m.Option(ice.MSG_USERUA) == "" { - return kit.Format(pod) - } - return fmt.Sprintf(`%s`, - kit.Select(m.Conf(SHARE, "meta.domain"), m.Option(ice.MSG_USERWEB)), pod, pod) -} func _space_list(m *ice.Message, space string) { if space == "" { m.Richs(SPACE, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT}) - m.Push(kit.MDB_LINK, _link(m, value[kit.MDB_NAME])) + m.Push(kit.MDB_LINK, m.Cmdx(mdb.RENDER, RENDER.A, value[kit.MDB_NAME], kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", kit.Keys(m.Option("pod"), value[kit.MDB_NAME])))) }) m.Sort(kit.MDB_NAME) return @@ -38,7 +30,7 @@ func _space_list(m *ice.Message, space string) { m.Richs(SPACE, nil, space, func(key string, value map[string]interface{}) { m.Push("detail", value) m.Push(kit.MDB_KEY, kit.MDB_LINK) - m.Push(kit.MDB_VALUE, _link(m, value[kit.MDB_NAME])) + m.Push(kit.MDB_VALUE, kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", kit.Keys(m.Option("pod"), value[kit.MDB_NAME]))) }) } func _space_dial(m *ice.Message, dev, name string, arg ...string) { diff --git a/core/code/install.go b/core/code/install.go index 36059b60..1a6203da 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -24,7 +24,7 @@ func init() { kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, "usr/install", "contexts", kit.Dict( "base", `mkdir contexts; cd contexts -export ctx_dev={{.Option "httphost"}}; curl $ctx_dev/publish/ice.sh | sh +export ctx_dev={{.Option "httphost"}}; (curl $ctx_dev/publish/ice.sh || wget -O - $ctx_dev/publish/ice.sh) | sh bin/ice.sh`, "miss", ` yum install -y git vim make go diff --git a/logs.go b/logs.go index 97a7cdc3..cbd6f3eb 100644 --- a/logs.go +++ b/logs.go @@ -44,7 +44,7 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message { case LOG_CMDS, LOG_INFO, "refer", "form": case "register", "begin": default: - suffix += " " + kit.FileLine(3, 2) + suffix += " " + kit.FileLine(3, 3) } if len(BinPack) > 0 { prefix, suffix = "", "" diff --git a/misc/git/git.go b/misc/git/git.go index d0c74e26..3712b330 100644 --- a/misc/git/git.go +++ b/misc/git/git.go @@ -317,12 +317,7 @@ var Index = &ice.Context{Name: GIT, Help: "代码库", m.Sort("line", "int") }}, - "status": {Name: "status name=auto auto 提交 编译 下载", Help: "文件状态", Meta: kit.Dict( - "提交", kit.List( - "_input", "select", "name", "action", "values", []string{"opt", "add"}, - "_input", "text", "name", "text", "value", "some", - ), - ), Action: map[string]*ice.Action{ + "status": {Name: "status name=auto auto 提交 编译 下载", Help: "代码状态", Action: map[string]*ice.Action{ "pull": {Name: "pull", Help: "下载", Hand: func(m *ice.Message, arg ...string) { if m.Richs("progress", "", m.Option("_progress"), func(key string, value map[string]interface{}) { m.Push("count", value["count"]) @@ -361,7 +356,7 @@ var Index = &ice.Context{Name: GIT, Help: "代码库", } m.Cmdy(cli.SYSTEM, "git", "add", m.Option("file")) }}, - "submit": {Name: "submit", Help: "提交", Hand: func(m *ice.Message, arg ...string) { + "submit": {Name: "submit action=opt,add comment=some", Help: "提交", Hand: func(m *ice.Message, arg ...string) { if m.Option("name") == "" { return } diff --git a/type.go b/type.go index 7ea97dd2..6eee454a 100644 --- a/type.go +++ b/type.go @@ -78,51 +78,37 @@ func (c *Context) Cap(key string, arg ...interface{}) string { } return c.Caches[key].Value } +func (c *Context) _hand(m *Message, cmd *Command, key string, k string, h *Action, arg ...string) *Message { + m.Log(LOG_CMDS, "%s.%s %s %d %v %s", c.Name, key, k, len(arg), arg, kit.FileLine(h.Hand, 3)) + for i := 0; i < len(arg)-1; i += 2 { + m.Option(arg[i], arg[i+1]) + } + h.Hand(m, arg...) + return m +} func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Message { if m.meta[MSG_DETAIL] = kit.Simple(key, arg); cmd == nil { return m } - action, args := m.Option("_action"), arg - if len(arg) > 0 && arg[0] == "action" { - action, args = arg[1], arg[2:] - } - - if m.Hand = true; action != "" && cmd.Action != nil { - if h, ok := cmd.Action[action]; ok { - if action == m.Option("_action") { - m.Option("_action", "") - } - m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(h.Hand, 3)) - for i := 0; i < len(args)-1; i += 2 { - m.Debug("option %v %v", args[i], args[i+1]) - m.Option(args[i], args[i+1]) - } - h.Hand(m, args...) - return m + if m.Hand = true; len(arg) > 1 && arg[0] == "action" && cmd.Action != nil { + if h, ok := cmd.Action[arg[1]]; ok { + return c._hand(m, cmd, key, arg[1], h, arg[2:]...) } - for _, h := range cmd.Action { - if h.Name == action || h.Help == action { - if action == m.Option("_action") { - m.Option("_action", "") - } - m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(h.Hand, 3)) - for i := 0; i < len(args)-1; i += 2 { - m.Option(args[i], args[i+1]) - } - h.Hand(m, args...) - return m + for k, h := range cmd.Action { + if h.Name == arg[1] || h.Help == arg[1] { + return c._hand(m, cmd, key, k, h, arg[2:]...) } } } if len(arg) > 0 && cmd.Action != nil { if h, ok := cmd.Action[arg[0]]; ok { - m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(h.Hand, 3)) - for i := 1; i < len(arg)-1; i += 2 { - m.Option(arg[i], arg[i+1]) + return c._hand(m, cmd, key, arg[0], h, arg[1:]...) + } + for k, h := range cmd.Action { + if h.Name == arg[0] || h.Help == arg[0] { + return c._hand(m, cmd, key, k, h, arg[1:]...) } - h.Hand(m, arg[1:]...) - return m } }