forked from x/icebergs
opt route
This commit is contained in:
parent
dfa411f65d
commit
30a2c5be81
@ -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
|
||||
|
@ -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"))
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
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:])
|
||||
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 {
|
||||
if m.W == nil {
|
||||
return
|
||||
}
|
||||
|
||||
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"])))
|
||||
})
|
||||
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] {
|
||||
|
@ -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(`<a target="_blank" href="%s?pod=%s">%s</a>`,
|
||||
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) {
|
||||
|
@ -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
|
||||
|
2
logs.go
2
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 = "", ""
|
||||
|
@ -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
|
||||
}
|
||||
|
52
type.go
52
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; 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:]...)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user