forked from x/icebergs
opt code
This commit is contained in:
parent
ee6adfdbf9
commit
09e1dac68c
@ -216,6 +216,7 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
if m.Option(ice.MSG_PROMPT, m.Confv("prompt", "meta.PS1")); f.out == os.Stdout {
|
if m.Option(ice.MSG_PROMPT, m.Confv("prompt", "meta.PS1")); f.out == os.Stdout {
|
||||||
f.printf(m, "\033[0m")
|
f.printf(m, "\033[0m")
|
||||||
}
|
}
|
||||||
|
m.Cmd(ice.WEB_FAVOR, "cmd.history", "cmd", kit.Select("stdio", arg, 0), line)
|
||||||
|
|
||||||
// 解析命令
|
// 解析命令
|
||||||
f.parse(m, line)
|
f.parse(m, line)
|
||||||
|
@ -682,13 +682,14 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
|||||||
var data map[string][]string
|
var data map[string][]string
|
||||||
m.Assert(json.NewDecoder(res.Body).Decode(&data))
|
m.Assert(json.NewDecoder(res.Body).Decode(&data))
|
||||||
m.Info("res: %s", kit.Formats(data))
|
m.Info("res: %s", kit.Formats(data))
|
||||||
if len(data["append"]) > 0 {
|
if len(data[ice.MSG_APPEND]) > 0 {
|
||||||
for i := range data[data["append"][0]] {
|
for i := range data[data[ice.MSG_APPEND][0]] {
|
||||||
for _, k := range data["append"] {
|
for _, k := range data[ice.MSG_APPEND] {
|
||||||
m.Push(k, data[k][i])
|
m.Push(k, data[k][i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m.Resultv(data[ice.MSG_RESULT])
|
||||||
|
|
||||||
case "raw":
|
case "raw":
|
||||||
if b, e := ioutil.ReadAll(res.Body); m.Assert(e) {
|
if b, e := ioutil.ReadAll(res.Body); m.Assert(e) {
|
||||||
@ -790,31 +791,32 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
|||||||
name := m.Conf(ice.CLI_RUNTIME, "node.name")
|
name := m.Conf(ice.CLI_RUNTIME, "node.name")
|
||||||
user := m.Conf(ice.CLI_RUNTIME, "boot.username")
|
user := m.Conf(ice.CLI_RUNTIME, "boot.username")
|
||||||
|
|
||||||
m.Hold(1).Gos(m, func(m *ice.Message) {
|
m.Hold(1).Gos(m, func(msg *ice.Message) {
|
||||||
m.Richs(ice.WEB_SPIDE, nil, dev, func(key string, value map[string]interface{}) {
|
msg.Richs(ice.WEB_SPIDE, nil, dev, func(key string, value map[string]interface{}) {
|
||||||
proto := kit.Select("ws", "wss", kit.Format(kit.Value(value, "client.protocol")) == "https")
|
proto := kit.Select("ws", "wss", kit.Format(kit.Value(value, "client.protocol")) == "https")
|
||||||
host := kit.Format(kit.Value(value, "client.hostname"))
|
host := kit.Format(kit.Value(value, "client.hostname"))
|
||||||
|
|
||||||
for i := 0; i < m.Confi(ice.WEB_SPACE, "meta.redial.c"); i++ {
|
for i := 0; i < msg.Confi(ice.WEB_SPACE, "meta.redial.c"); i++ {
|
||||||
if u, e := url.Parse(kit.MergeURL(proto+"://"+host+"/space/", "node", node, "name", name, "user", user, "share", value["share"])); m.Assert(e) {
|
if u, e := url.Parse(kit.MergeURL(proto+"://"+host+"/space/", "node", node, "name", name, "user", user, "share", value["share"])); msg.Assert(e) {
|
||||||
if s, e := net.Dial("tcp", host); !m.Warn(e != nil, "%s", e) {
|
if s, e := net.Dial("tcp", host); !msg.Warn(e != nil, "%s", e) {
|
||||||
if s, _, e := websocket.NewClient(s, u, nil, m.Confi(ice.WEB_SPACE, "meta.buffer.r"), m.Confi(ice.WEB_SPACE, "meta.buffer.w")); !m.Warn(e != nil, "%s", e) {
|
if s, _, e := websocket.NewClient(s, u, nil, msg.Confi(ice.WEB_SPACE, "meta.buffer.r"), msg.Confi(ice.WEB_SPACE, "meta.buffer.w")); !msg.Warn(e != nil, "%s", e) {
|
||||||
|
msg = m.Spawn()
|
||||||
|
|
||||||
// 连接成功
|
// 连接成功
|
||||||
m.Rich(ice.WEB_SPACE, nil, kit.Dict(
|
msg.Rich(ice.WEB_SPACE, nil, kit.Dict(
|
||||||
kit.MDB_TYPE, ice.WEB_MASTER, kit.MDB_NAME, dev, "user", kit.Value(value, "client.hostname"),
|
kit.MDB_TYPE, ice.WEB_MASTER, kit.MDB_NAME, dev, "user", kit.Value(value, "client.hostname"),
|
||||||
"socket", s,
|
"socket", s,
|
||||||
))
|
))
|
||||||
m.Log(ice.LOG_CMDS, "%d conn %s success %s", i, dev, u)
|
msg.Log(ice.LOG_CMDS, "%d conn %s success %s", i, dev, u)
|
||||||
if i = 0; web.HandleWSS(m, true, s, dev) {
|
if i = 0; web.HandleWSS(msg, true, s, dev) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 断线重连
|
// 断线重连
|
||||||
sleep := time.Duration(rand.Intn(m.Confi(ice.WEB_SPACE, "meta.redial.a"))*i+i*m.Confi(ice.WEB_SPACE, "meta.redial.b")) * time.Millisecond
|
sleep := time.Duration(rand.Intn(msg.Confi(ice.WEB_SPACE, "meta.redial.a"))*i+i*msg.Confi(ice.WEB_SPACE, "meta.redial.b")) * time.Millisecond
|
||||||
m.Info("%d sleep: %s reconnect: %s", i, sleep, u)
|
msg.Info("%d sleep: %s reconnect: %s", i, sleep, u)
|
||||||
time.Sleep(sleep)
|
time.Sleep(sleep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1053,6 +1055,9 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
|||||||
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
||||||
"extra", kit.Dict(arg[4:]),
|
"extra", kit.Dict(arg[4:]),
|
||||||
))
|
))
|
||||||
|
m.Richs(ice.WEB_FAVOR, nil, favor, func(key string, value map[string]interface{}) {
|
||||||
|
kit.Value(value, "meta.time", m.Time())
|
||||||
|
})
|
||||||
m.Log(ice.LOG_INSERT, "favor: %s index: %d name: %s text: %s", favor, index, arg[2], arg[3])
|
m.Log(ice.LOG_INSERT, "favor: %s index: %d name: %s text: %s", favor, index, arg[2], arg[3])
|
||||||
m.Echo("%d", index)
|
m.Echo("%d", index)
|
||||||
}},
|
}},
|
||||||
@ -1531,7 +1536,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
|||||||
// 共享列表
|
// 共享列表
|
||||||
m.Grows(ice.WEB_SHARE, nil, "", "", func(key int, value map[string]interface{}) {
|
m.Grows(ice.WEB_SHARE, nil, "", "", func(key int, value map[string]interface{}) {
|
||||||
m.Push(kit.Format(key), value, []string{kit.MDB_TIME, "share", kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
|
m.Push(kit.Format(key), value, []string{kit.MDB_TIME, "share", kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
|
||||||
m.Push("link", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.share"), value["share"], value["share"]))
|
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.link"), value["share"], value["share"]))
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
1
conf.go
1
conf.go
@ -166,6 +166,7 @@ const ( // CHAT
|
|||||||
CHAT_RIVER = "river"
|
CHAT_RIVER = "river"
|
||||||
)
|
)
|
||||||
const ( // TYPE
|
const ( // TYPE
|
||||||
|
TYPE_SPIDE = "spide"
|
||||||
TYPE_SPACE = "space"
|
TYPE_SPACE = "space"
|
||||||
TYPE_STORY = "story"
|
TYPE_STORY = "story"
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
_ "github.com/shylinux/icebergs/base"
|
_ "github.com/shylinux/icebergs/base"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
|
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
||||||
@ -484,6 +486,7 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.Cmd(ice.WEB_FAVOR, "cmd.history", "cmd", m.Option(ice.MSG_SESSID)[:6], strings.Join(cmds, " "))
|
||||||
// 执行命令
|
// 执行命令
|
||||||
m.Cmdy(cmds).Option("cmds", cmds)
|
m.Cmdy(cmds).Option("cmds", cmds)
|
||||||
}},
|
}},
|
||||||
|
@ -99,7 +99,7 @@ var Index = &ice.Context{Name: "code", Help: "编程中心",
|
|||||||
case "prune":
|
case "prune":
|
||||||
list := []string{}
|
list := []string{}
|
||||||
m.Richs("login", nil, "*", func(key string, value map[string]interface{}) {
|
m.Richs("login", nil, "*", func(key string, value map[string]interface{}) {
|
||||||
if value["status"] == "logout" {
|
if len(arg) > 1 && arg[1] == "all" || value["status"] == "logout" {
|
||||||
list = append(list, key)
|
list = append(list, key)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -108,6 +108,7 @@ var Index = &ice.Context{Name: "code", Help: "编程中心",
|
|||||||
m.Log(ice.LOG_DELETE, "%s: %s", value, m.Conf("login", kit.Keys("hash", value)))
|
m.Log(ice.LOG_DELETE, "%s: %s", value, m.Conf("login", kit.Keys("hash", value)))
|
||||||
m.Conf("login", kit.Keys("hash", value), "")
|
m.Conf("login", kit.Keys("hash", value), "")
|
||||||
})
|
})
|
||||||
|
m.Echo("%d", len(list))
|
||||||
|
|
||||||
case "exit":
|
case "exit":
|
||||||
// 退出会话
|
// 退出会话
|
||||||
|
@ -62,9 +62,9 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
|
|||||||
"stack": {Name: "stack", Help: "结构", Value: kit.Data("template", stack)},
|
"stack": {Name: "stack", Help: "结构", Value: kit.Data("template", stack)},
|
||||||
"chart": {Name: "chart", Help: "绘图", Value: kit.Data("template", prefix, "suffix", `</svg>`)},
|
"chart": {Name: "chart", Help: "绘图", Value: kit.Data("template", prefix, "suffix", `</svg>`)},
|
||||||
|
|
||||||
"draw": {Name: "draw", Help: "思维导图", Value: kit.Data(kit.MDB_SHORT, "name", "path", "usr/local", "regs", ".*\\.svg", "prefix", `<svg vertion="1.1" xmlns="http://www.w3.org/2000/svg" width="%v" height="%v">`, "suffix", `</svg>`)},
|
"draw": {Name: "draw", Help: "思维导图", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.svg", "prefix", `<svg vertion="1.1" xmlns="http://www.w3.org/2000/svg" width="%v" height="%v">`, "suffix", `</svg>`)},
|
||||||
"data": {Name: "data", Help: "数据表格", Value: kit.Data(kit.MDB_SHORT, "name", "path", "usr/local", "regs", ".*\\.csv")},
|
"data": {Name: "data", Help: "数据表格", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.csv")},
|
||||||
"word": {Name: "word", Help: "语言文字", Value: kit.Data(kit.MDB_SHORT, "name", "path", "usr/local", "regs", ".*\\.shy",
|
"word": {Name: "word", Help: "语言文字", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.shy",
|
||||||
"alias", map[string]interface{}{
|
"alias", map[string]interface{}{
|
||||||
"label": []interface{}{"chart", "label"},
|
"label": []interface{}{"chart", "label"},
|
||||||
"chain": []interface{}{"chart", "chain"},
|
"chain": []interface{}{"chart", "chain"},
|
||||||
@ -75,8 +75,8 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
|
|||||||
"premenu": []interface{}{"title", "premenu"},
|
"premenu": []interface{}{"title", "premenu"},
|
||||||
},
|
},
|
||||||
)},
|
)},
|
||||||
"walk": {Name: "walk", Help: "走遍世界", Value: kit.Data(kit.MDB_SHORT, "name", "path", "usr/local", "regs", ".*\\.csv")},
|
"walk": {Name: "walk", Help: "走遍世界", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.csv")},
|
||||||
"feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "usr/local", "regs", ".*\\.(png|JPG|MOV|m4v)")},
|
"feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.(png|JPG|MOV|m4v)")},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
package auth
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/shylinux/icebergs"
|
|
||||||
"github.com/shylinux/icebergs/base/aaa"
|
|
||||||
"github.com/shylinux/toolkits"
|
|
||||||
|
|
||||||
"bytes"
|
|
||||||
"crypto/hmac"
|
|
||||||
"crypto/sha1"
|
|
||||||
"encoding/base32"
|
|
||||||
"encoding/binary"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func gen() string {
|
|
||||||
buf := bytes.NewBuffer([]byte{})
|
|
||||||
binary.Write(buf, binary.BigEndian, time.Now().Unix()/30)
|
|
||||||
b := hmac.New(sha1.New, buf.Bytes()).Sum(nil)
|
|
||||||
return strings.ToUpper(base32.StdEncoding.EncodeToString(b[:]))
|
|
||||||
}
|
|
||||||
|
|
||||||
func get(key string) string {
|
|
||||||
buf := []byte{}
|
|
||||||
now := kit.Int64(time.Now().Unix() / 30)
|
|
||||||
for i := 0; i < 8; i++ {
|
|
||||||
buf = append(buf, byte((now >> ((7 - i) * 8))))
|
|
||||||
}
|
|
||||||
|
|
||||||
s, _ := base32.StdEncoding.DecodeString(strings.ToUpper(key))
|
|
||||||
|
|
||||||
hm := hmac.New(sha1.New, s)
|
|
||||||
hm.Write(buf)
|
|
||||||
b := hm.Sum(nil)
|
|
||||||
|
|
||||||
o := b[len(b)-1] & 0x0F
|
|
||||||
p := b[o : o+4]
|
|
||||||
p[0] = p[0] & 0x7f
|
|
||||||
res := int64(p[0])<<24 + int64(p[1])<<16 + int64(p[2])<<8 + int64(p[3])
|
|
||||||
return kit.Format("%06d", res%1000000)
|
|
||||||
}
|
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "auth", Help: "auth",
|
|
||||||
Caches: map[string]*ice.Cache{},
|
|
||||||
Configs: map[string]*ice.Config{
|
|
||||||
"auth": {Name: "auth", Help: "auth", Value: kit.Data(kit.MDB_SHORT, "name")},
|
|
||||||
},
|
|
||||||
Commands: map[string]*ice.Command{
|
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
m.Load()
|
|
||||||
}},
|
|
||||||
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
m.Save("auth")
|
|
||||||
}},
|
|
||||||
|
|
||||||
"new": {Name: "new user [secrete]", Help: "创建动态码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
if len(arg) == 0 {
|
|
||||||
m.Richs("auth", nil, "*", func(key string, value map[string]interface{}) {
|
|
||||||
m.Push(key, value, []string{"name", "username", "website"})
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
m.Append("_output", "qrcode")
|
|
||||||
if len(arg) == 1 {
|
|
||||||
if m.Richs("auth", nil, arg[0], func(key string, value map[string]interface{}) {
|
|
||||||
m.Echo("otpauth://totp/%s?secret=%s", value["name"], value["secrete"])
|
|
||||||
}) != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
arg = append(arg, gen())
|
|
||||||
}
|
|
||||||
|
|
||||||
data := kit.Dict("name", arg[0], "secrete", arg[1])
|
|
||||||
for i := 2; i < len(arg)-1; i += 2 {
|
|
||||||
kit.Value(data, arg[i], arg[i+1])
|
|
||||||
}
|
|
||||||
|
|
||||||
n := m.Rich("auth", nil, data)
|
|
||||||
m.Log(ice.LOG_CREATE, "%s", n)
|
|
||||||
|
|
||||||
m.Cmdy(ice.WEB_SHARE, "optauth", arg[0], kit.Format("otpauth://totp/%s?secret=%s", arg[0], arg[1]))
|
|
||||||
}},
|
|
||||||
"get": {Name: "get user [secrete]", Help: "获取动态码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
if len(arg) == 0 {
|
|
||||||
m.Richs("auth", nil, "*", func(key string, value map[string]interface{}) {
|
|
||||||
m.Push("name", value["name"])
|
|
||||||
m.Push("code", m.Cmdx("get", value["name"], value["secrete"]))
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(arg) == 1 {
|
|
||||||
m.Richs("auth", nil, arg[0], func(key string, value map[string]interface{}) {
|
|
||||||
arg = append(arg, kit.Format(value["secrete"]))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if len(arg) == 1 {
|
|
||||||
arg = append(arg, m.Cmdx("new", arg[0]))
|
|
||||||
}
|
|
||||||
|
|
||||||
m.Echo(get(arg[1]))
|
|
||||||
}},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { aaa.Index.Register(Index, nil) }
|
|
@ -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: []})
|
|
@ -1 +0,0 @@
|
|||||||
title "auth"
|
|
@ -3,7 +3,7 @@ package crx
|
|||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
"github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
"github.com/shylinux/icebergs/core/chat"
|
"github.com/shylinux/icebergs/core/code"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -13,12 +13,7 @@ var Index = &ice.Context{Name: "chrome", Help: "浏览器",
|
|||||||
"chrome": {Name: "chrome", Help: "chrome", Value: kit.Data(kit.MDB_SHORT, "name", "history", "url.history")},
|
"chrome": {Name: "chrome", Help: "chrome", Value: kit.Data(kit.MDB_SHORT, "name", "history", "url.history")},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
"/crx": {Name: "/crx", Help: "/crx", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
switch arg[0] {
|
|
||||||
case "history":
|
|
||||||
m.Cmdy(ice.WEB_FAVOR, m.Conf("chrome", "meta.history"), "spide", arg[3], arg[2])
|
|
||||||
}
|
|
||||||
}},
|
|
||||||
"chrome": {Name: "chrome", Help: "浏览器", List: kit.List(
|
"chrome": {Name: "chrome", Help: "浏览器", List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "name", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "name", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "wid", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "wid", "action", "auto",
|
||||||
@ -81,7 +76,53 @@ var Index = &ice.Context{Name: "chrome", Help: "浏览器",
|
|||||||
// 下发命令
|
// 下发命令
|
||||||
m.Cmdy(ice.WEB_SPACE, arg[0], "bookmark", arg[1:])
|
m.Cmdy(ice.WEB_SPACE, arg[0], "bookmark", arg[1:])
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
ice.WEB_LOGIN: {Name: "_login", Help: "_login", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Option("you", "")
|
||||||
|
m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) {
|
||||||
|
// 查找空间
|
||||||
|
m.Option("you", value["you"])
|
||||||
|
})
|
||||||
|
|
||||||
|
m.Info("%s %s cmd: %v sub: %v", m.Option("you"), m.Option(ice.MSG_USERURL), m.Optionv("cmds"), m.Optionv("sub"))
|
||||||
|
}},
|
||||||
|
"/help": {Name: "/help", Help: "帮助", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Cmdy("help")
|
||||||
|
}},
|
||||||
|
"/login": {Name: "/login", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Cmdy("login", "init", c.Name)
|
||||||
|
}},
|
||||||
|
"/logout": {Name: "/logout", Help: "登出", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Cmdy("login", "exit")
|
||||||
|
}},
|
||||||
|
|
||||||
|
"/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
if len(arg) > 0 {
|
||||||
|
// 添加收藏
|
||||||
|
cmds := []string{ice.WEB_FAVOR, m.Option("tab"), ice.TYPE_SPIDE, m.Option("note"), arg[0]}
|
||||||
|
if m.Cmdy(cmds); m.Option("you") != "" {
|
||||||
|
m.Cmdy(ice.WEB_SPACE, m.Option("you"), cmds)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}},
|
||||||
|
|
||||||
|
"/crx": {Name: "/crx", Help: "/crx", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Info("what %v", m.Option("sid"))
|
||||||
|
switch arg[0] {
|
||||||
|
case "login":
|
||||||
|
m.Cmdy(ice.WEB_SPIDE, "dev", "msg", "/code/chrome/login", "sid", m.Option("sid"))
|
||||||
|
|
||||||
|
case "bookmark":
|
||||||
|
m.Cmdy(ice.WEB_SPIDE, "dev", "/code/chrome/favor", "cmds", arg[2], "note", arg[3],
|
||||||
|
"tab", kit.Select(m.Conf("chrome", "meta.history"), arg, 4), "sid", m.Option("sid"), "type", "spide")
|
||||||
|
|
||||||
|
case "history":
|
||||||
|
m.Cmdy(ice.WEB_SPIDE, "dev", "/code/chrome/favor", "cmds", arg[2], "note", arg[3],
|
||||||
|
"tab", m.Conf("chrome", "meta.history"), "sid", m.Option("sid"))
|
||||||
|
}
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { chat.Index.Register(Index, &web.Frame{}) }
|
func init() { code.Index.Register(Index, &web.Frame{}) }
|
||||||
|
@ -25,9 +25,16 @@ var Index = &ice.Context{Name: "docker", Help: "虚拟机",
|
|||||||
}},
|
}},
|
||||||
"auto": {Name: "auto", Help: "自动化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"auto": {Name: "auto", Help: "自动化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
prefix := []string{ice.CLI_SYSTEM, "docker"}
|
prefix := []string{ice.CLI_SYSTEM, "docker"}
|
||||||
|
|
||||||
|
if m.Cmd(prefix, "container", "start", arg[0]).Append("code") != "1" {
|
||||||
|
// 启动容器
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 创建容器
|
// 创建容器
|
||||||
pid := m.Cmdx(prefix, "run", "-dt", "-w", "/root", "--name", arg[0], "--mount", kit.Format("type=bind,source=%s,target=/root",
|
pid := m.Cmdx(prefix, "run", "-dt", "-w", "/root", "--name", arg[0],
|
||||||
kit.Path(m.Conf(ice.WEB_DREAM, "meta.path"), arg[0])), "alpine")
|
// "--mount", kit.Format("type=bind,source=%s,target=/root", kit.Path(m.Conf(ice.WEB_DREAM, "meta.path"), arg[0])),
|
||||||
|
"alpine")
|
||||||
m.Log(ice.LOG_CREATE, "%s: %s", arg[0], pid)
|
m.Log(ice.LOG_CREATE, "%s: %s", arg[0], pid)
|
||||||
|
|
||||||
m.Cmd(ice.WEB_FAVOR, kit.Select("alpine.auto", arg, 1)).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(ice.WEB_FAVOR, kit.Select("alpine.auto", arg, 1)).Table(func(index int, value map[string]string, head []string) {
|
||||||
|
@ -33,8 +33,8 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
|
|||||||
"format", "#{pane_id},#{pane_active},#{pane_index},#{pane_tty},#{pane_height},#{pane_width}",
|
"format", "#{pane_id},#{pane_active},#{pane_index},#{pane_tty},#{pane_height},#{pane_width}",
|
||||||
"fields", "id,tag,pane,tty,height,width",
|
"fields", "id,tag,pane,tty,height,width",
|
||||||
)},
|
)},
|
||||||
"relay": {Name: "relay", Help: "跳板", Value: kit.Data(
|
"relay": {Name: "relay", Help: "跳板", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME,
|
||||||
"tail", kit.Dict(
|
"count", 100, "sleep", "100ms", "tail", kit.Dict(
|
||||||
"verify", "Verification code:",
|
"verify", "Verification code:",
|
||||||
"password", "Password:",
|
"password", "Password:",
|
||||||
"login", "[relay ~]$",
|
"login", "[relay ~]$",
|
||||||
@ -48,10 +48,10 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
|
|||||||
if m.Richs(ice.WEB_FAVOR, nil, "tmux.auto", nil) == nil {
|
if m.Richs(ice.WEB_FAVOR, nil, "tmux.auto", nil) == nil {
|
||||||
m.Cmd(ice.WEB_FAVOR, "tmux.auto", ice.TYPE_SHELL, "脚本", `curl $ctx_dev/publish/auto.sh > auto.sh`)
|
m.Cmd(ice.WEB_FAVOR, "tmux.auto", ice.TYPE_SHELL, "脚本", `curl $ctx_dev/publish/auto.sh > auto.sh`)
|
||||||
m.Cmd(ice.WEB_FAVOR, "tmux.auto", ice.TYPE_SHELL, "脚本", `source auto.sh`)
|
m.Cmd(ice.WEB_FAVOR, "tmux.auto", ice.TYPE_SHELL, "脚本", `source auto.sh`)
|
||||||
m.Cmd(ice.WEB_FAVOR, "tmux.auto", ice.TYPE_SHELL, "脚本", `ShyLogin`)
|
m.Cmd(ice.WEB_FAVOR, "tmux.auto", ice.TYPE_SHELL, "脚本", `ShyInit && ShyLogin && trap ShyLogout EXIT`)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range []string{"auto.sh", "auto.vim"} {
|
for _, v := range []string{"auto.sh", "auto.vim", "auto.tmux"} {
|
||||||
p := path.Join(m.Conf("web.code.publish", "meta.path"), v)
|
p := path.Join(m.Conf("web.code.publish", "meta.path"), v)
|
||||||
if _, e := os.Stat(p); e != nil && os.IsNotExist(e) {
|
if _, e := os.Stat(p); e != nil && os.IsNotExist(e) {
|
||||||
// 下载脚本
|
// 下载脚本
|
||||||
@ -61,7 +61,7 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
"auto": {Name: "auto", Help: "自动化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"auto": {Name: "auto dream", Help: "自动化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
prefix := kit.Simple(m.Confv("prefix", "meta.cmd"))
|
prefix := kit.Simple(m.Confv("prefix", "meta.cmd"))
|
||||||
|
|
||||||
// 共享空间
|
// 共享空间
|
||||||
@ -79,9 +79,18 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
|
|||||||
m.Cmd(prefix, "new-session", "-ds", arg[0])
|
m.Cmd(prefix, "new-session", "-ds", arg[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if m.Option("local") != "" {
|
||||||
|
// 自动虚拟
|
||||||
|
m.Cmd("local", m.Option("local"), arg[0])
|
||||||
|
}
|
||||||
if m.Option("relay") != "" {
|
if m.Option("relay") != "" {
|
||||||
// 自动认证
|
// 自动认证
|
||||||
m.Cmd("relay", arg[0], m.Option("relay"))
|
m.Cmd("relay", m.Option("relay"), arg[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range kit.Simple(m.Optionv("before")) {
|
||||||
|
// 前置命令
|
||||||
|
m.Cmdy(prefix, "send-keys", "-t", arg[0], v, "Enter")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 连接参数
|
// 连接参数
|
||||||
@ -93,9 +102,12 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
|
|||||||
case "shell":
|
case "shell":
|
||||||
// 发送命令
|
// 发送命令
|
||||||
m.Cmdy(prefix, "send-keys", "-t", arg[0], value["text"], "Enter")
|
m.Cmdy(prefix, "send-keys", "-t", arg[0], value["text"], "Enter")
|
||||||
|
time.Sleep(10 * time.Millisecond)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, v := range kit.Simple(m.Optionv("after")) {
|
for _, v := range kit.Simple(m.Optionv("after")) {
|
||||||
|
// 后置命令
|
||||||
m.Cmdy(prefix, "send-keys", "-t", arg[0], v, "Enter")
|
m.Cmdy(prefix, "send-keys", "-t", arg[0], v, "Enter")
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
@ -269,51 +281,70 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
|
|||||||
m.Cmdy(prefix, "capture-pane", "-pt", kit.Select("", arg, 0)).Set("append")
|
m.Cmdy(prefix, "capture-pane", "-pt", kit.Select("", arg, 0)).Set("append")
|
||||||
}},
|
}},
|
||||||
|
|
||||||
"relay": {Name: "relay", Help: "跳板", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"local": {Name: "local which target", Help: "虚拟机", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
prefix := kit.Simple(m.Confv("prefix", "meta.cmd"))
|
prefix := kit.Simple(m.Confv("prefix", "meta.cmd"))
|
||||||
|
m.Cmdy(prefix, "send-keys", "-t", arg[1], "docker exec -it ", arg[1], " bash", "Enter")
|
||||||
|
}},
|
||||||
|
"relay": {Name: "relay which target", Help: "跳板机", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
prefix := kit.Simple(m.Confv("prefix", "meta.cmd"))
|
||||||
|
if len(arg) == 0 {
|
||||||
|
// 认证列表
|
||||||
|
m.Richs(cmd, nil, "*", func(key string, value map[string]interface{}) {
|
||||||
|
m.Push(key, value, []string{"name", "username", "website"})
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(arg) == 1 {
|
||||||
|
// 认证详情
|
||||||
|
m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
|
m.Push("detail", value)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(arg) > 4 {
|
||||||
|
// 添加认证
|
||||||
|
m.Rich(cmd, nil, kit.Dict(
|
||||||
|
kit.MDB_NAME, arg[0], kit.MDB_TEXT, arg[1],
|
||||||
|
"username", arg[2], "website", arg[3], "password", arg[4],
|
||||||
|
))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
m.Richs("aaa.auth.auth", nil, kit.Select("relay", arg, 1), func(key string, value map[string]interface{}) {
|
m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
m.Cmdy(prefix, "send-keys", "-t", arg[0], kit.Format("ssh %s@%s", value["username"], value["website"]), "Enter")
|
// 登录命令
|
||||||
|
m.Cmdy(prefix, "send-keys", "-t", arg[1], kit.Format("ssh %s@%s", value["username"], value["website"]), "Enter")
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
sleep := kit.Duration(m.Conf(cmd, "meta.sleep"))
|
||||||
time.Sleep(100 * time.Millisecond)
|
for i := 0; i < kit.Int(m.Conf(cmd, "meta.count")); i++ {
|
||||||
tail := m.Cmdx(prefix, "capture-pane", "-p")
|
time.Sleep(sleep)
|
||||||
if strings.HasSuffix(strings.TrimSpace(tail), m.Conf("relay", "meta.tail.login")) {
|
list := strings.Split(strings.TrimSpace(m.Cmdx(prefix, "capture-pane", "-p")), "\n")
|
||||||
for _, v := range kit.Simple(value["init"]) {
|
|
||||||
if v != "" {
|
if tail := list[len(list)-1]; tail == m.Conf(cmd, "meta.tail.login") {
|
||||||
m.Cmdy(prefix, "send-keys", "-t", arg[0], v, "Enter")
|
// 登录成功
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
break
|
||||||
}
|
} else if tail == m.Conf(cmd, "meta.tail.password") {
|
||||||
|
// 输入密码
|
||||||
if strings.HasSuffix(strings.TrimSpace(tail), m.Conf("relay", "meta.tail.verify")) {
|
m.Cmdy(prefix, "send-keys", "-t", arg[1], value["password"], "Enter")
|
||||||
m.Cmdy(prefix, "send-keys", "-t", arg[0], m.Cmdx("aaa.auth.get", "relay"), "Enter")
|
} else if tail == m.Conf(cmd, "meta.tail.verify") {
|
||||||
continue
|
// 输入密码
|
||||||
}
|
m.Cmdy(prefix, "send-keys", "-t", arg[1], m.Cmdx("aaa.totp.get", value["text"]), "Enter")
|
||||||
|
|
||||||
if strings.HasSuffix(strings.TrimSpace(tail), m.Conf("relay", "meta.tail.password")) {
|
|
||||||
m.Cmdy(prefix, "send-keys", "-t", arg[0], value["password"], "Enter")
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
"/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
// prefix := kit.Simple(m.Confv("prefix", "meta.cmd"))
|
|
||||||
|
|
||||||
// 当前会话
|
|
||||||
current := ""
|
current := ""
|
||||||
m.Cmd("session").Table(func(index int, value map[string]string, head []string) {
|
m.Cmd("session").Table(func(index int, value map[string]string, head []string) {
|
||||||
if value["tag"] == "1" {
|
if value["tag"] == "1" {
|
||||||
|
// 当前会话
|
||||||
current = value["session"]
|
current = value["session"]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
switch arg = kit.Split(kit.Select("tmux.auto", arg, 0)); arg[0] {
|
switch arg = kit.Split(kit.Select("tmux.auto", arg, 0)); arg[0] {
|
||||||
default:
|
default:
|
||||||
m.Cmd("auto", current, arg)
|
|
||||||
m.Append("_output", "void")
|
m.Append("_output", "void")
|
||||||
|
m.Cmd("auto", current, arg)
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
@ -190,8 +190,11 @@ autocmd! VimLeave * call ShyLogout()
|
|||||||
autocmd! BufReadPost * call ShySync("bufs")
|
autocmd! BufReadPost * call ShySync("bufs")
|
||||||
autocmd! BufReadPost * call ShySync("read")
|
autocmd! BufReadPost * call ShySync("read")
|
||||||
autocmd! BufWritePre * call ShySync("write")
|
autocmd! BufWritePre * call ShySync("write")
|
||||||
" autocmd! CmdlineLeave * call ShySync("exec")
|
if exists("CmdlineLeave")
|
||||||
autocmd! CmdWinLeave * call ShySync("exec")
|
autocmd! CmdlineLeave * call ShySync("exec")
|
||||||
|
else
|
||||||
|
autocmd! CmdWinLeave * call ShySync("exec")
|
||||||
|
endif
|
||||||
" autocmd! QuickFixCmdPost * call ShyCheck("fixs")
|
" autocmd! QuickFixCmdPost * call ShyCheck("fixs")
|
||||||
autocmd! InsertLeave * call ShySync("insert")
|
autocmd! InsertLeave * call ShySync("insert")
|
||||||
|
|
||||||
|
@ -35,6 +35,9 @@ ShyLog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# 发送数据
|
# 发送数据
|
||||||
|
ShyWord() {
|
||||||
|
echo "$*"|sed "s/\ /%20/g"|sed "s/|/%7C/g"|sed "s/\;/%3B/g"|sed "s/\[/%5B/g"|sed "s/\]/%5D/g"
|
||||||
|
}
|
||||||
ShyLine() {
|
ShyLine() {
|
||||||
echo "$*"|sed -e 's/\"/\\\"/g' -e 's/\n/\\n/g'
|
echo "$*"|sed -e 's/\"/\\\"/g' -e 's/\n/\\n/g'
|
||||||
}
|
}
|
||||||
@ -68,11 +71,13 @@ ShyHelp() {
|
|||||||
ShyLogin() {
|
ShyLogin() {
|
||||||
HOST=`hostname` ctx_sid=`ShyPost login "" share "${ctx_share}" pid "$$" pane "${TMUX_PANE}" hostname "${HOST}" username "${USER}"`
|
HOST=`hostname` ctx_sid=`ShyPost login "" share "${ctx_share}" pid "$$" pane "${TMUX_PANE}" hostname "${HOST}" username "${USER}"`
|
||||||
echo "${ctx_welcome}"
|
echo "${ctx_welcome}"
|
||||||
echo "${ctx_dev}"
|
echo "${ctx_dev} "
|
||||||
echo "sid: ${ctx_sid}"
|
echo -n "sid: ${ctx_sid} "
|
||||||
echo "begin: ${ctx_begin}"
|
echo "begin: ${ctx_begin} "
|
||||||
|
export ctx_sid
|
||||||
}
|
}
|
||||||
ShyLogout() {
|
ShyLogout() {
|
||||||
|
ShySync history
|
||||||
echo ${ctx_goodbye} && [ "$ctx_sid" != "" ] && ShyPost logout
|
echo ${ctx_goodbye} && [ "$ctx_sid" != "" ] && ShyPost logout
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,12 +97,23 @@ ShySend() {
|
|||||||
-F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}"
|
-F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}"
|
||||||
}
|
}
|
||||||
|
|
||||||
ShyRelay() {
|
ShyLocal() {
|
||||||
which=docker && [ "$1" != "" ] && which=$1 && shift
|
which=alpine && [ "$1" != "" ] && which=$1 && shift
|
||||||
arg="" && for cmd in "$@"; do
|
favor=tmux.auto && [ "$1" != "" ] && favor=$1 && shift
|
||||||
arg="$arg&after="`echo $cmd|sed s/\;/%3B/g|sed s/\ /%20/g`
|
step=before arg="" && for cmd in "$@"; do
|
||||||
|
[ "$cmd" = after ] && step=after && continue
|
||||||
|
arg="$arg&$step="`ShyWord $cmd`
|
||||||
done
|
done
|
||||||
${ctx_curl} -s "$ctx_dev/code/tmux/favor?relay=$which&cmds=tmux.auto&$arg" &
|
${ctx_curl} -s "$ctx_dev/code/tmux/favor?local=$which&cmds=$favor&$arg" &
|
||||||
|
}
|
||||||
|
ShyRelay() {
|
||||||
|
which=relay && [ "$1" != "" ] && which=$1 && shift
|
||||||
|
favor=tmux.auto && [ "$1" != "" ] && favor=$1 && shift
|
||||||
|
step=before arg="" && for cmd in "$@"; do
|
||||||
|
[ "$cmd" = after ] && step=after && continue
|
||||||
|
arg="$arg&$step="`ShyWord $cmd`
|
||||||
|
done
|
||||||
|
${ctx_curl} -s "$ctx_dev/code/tmux/favor?relay=$which&cmds=$favor&$arg" &
|
||||||
}
|
}
|
||||||
|
|
||||||
# 同步数据
|
# 同步数据
|
||||||
@ -115,7 +131,7 @@ ShySync() {
|
|||||||
ctx_begin=${ctx_begin:=$ctx_end}
|
ctx_begin=${ctx_begin:=$ctx_end}
|
||||||
ctx_count=`expr $ctx_end - $ctx_begin`
|
ctx_count=`expr $ctx_end - $ctx_begin`
|
||||||
ShyEcho "sync $ctx_begin-$ctx_end count $ctx_count to $ctx_dev"
|
ShyEcho "sync $ctx_begin-$ctx_end count $ctx_count to $ctx_dev"
|
||||||
history|tail -n $ctx_count |while read line; do
|
HISTTIMEFORMAT="%F %T " history|tail -n $ctx_count |while read line; do
|
||||||
ShyPost sync history arg "$line" >/dev/null
|
ShyPost sync history arg "$line" >/dev/null
|
||||||
done
|
done
|
||||||
ctx_begin=$ctx_end
|
ctx_begin=$ctx_end
|
||||||
@ -178,9 +194,8 @@ ShyInit() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "url: ${ctx_url}"
|
echo "url: ${ctx_url}"
|
||||||
echo "pid: $$"
|
echo -n "pid: $$ "
|
||||||
echo "begin: ${ctx_begin}"
|
echo -n "begin: ${ctx_begin} "
|
||||||
echo "share: ${ctx_share}"
|
echo -n "share: ${ctx_share} "
|
||||||
echo "pane: $TMUX_PANE"
|
echo "pane: $TMUX_PANE "
|
||||||
}
|
}
|
||||||
ShyInit && trap ShyLogout EXIT
|
|
||||||
|
@ -48,9 +48,9 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行",
|
|||||||
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "history":
|
case "history":
|
||||||
vs := strings.SplitN(strings.TrimSpace(m.Option("arg")), " ", 2)
|
vs := strings.SplitN(strings.TrimSpace(m.Option("arg")), " ", 4)
|
||||||
cmds := []string{ice.WEB_FAVOR, m.Conf("zsh", "meta.history"), ice.TYPE_SHELL, vs[0], kit.Select("", vs, 1),
|
cmds := []string{ice.WEB_FAVOR, m.Conf("zsh", "meta.history"), ice.TYPE_SHELL, vs[0], kit.Select("", vs, 3),
|
||||||
"sid", m.Option("sid"), "pwd", m.Option("pwd")}
|
"sid", m.Option("sid"), "pwd", m.Option("pwd"), "time", vs[1] + " " + vs[2]}
|
||||||
|
|
||||||
if m.Cmd(cmds); m.Option("you") != "" {
|
if m.Cmd(cmds); m.Option("you") != "" {
|
||||||
m.Cmd(ice.WEB_SPACE, m.Option("you"), cmds)
|
m.Cmd(ice.WEB_SPACE, m.Option("you"), cmds)
|
||||||
@ -154,15 +154,22 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行",
|
|||||||
"/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) > 0 && arg[0] != "sh" {
|
if len(arg) > 0 && arg[0] != "sh" {
|
||||||
// 添加收藏
|
// 添加收藏
|
||||||
cmds := []string{ice.WEB_FAVOR, kit.Select("zsh.history", m.Option("tab")), ice.TYPE_SHELL, m.Option("note"), arg[0]}
|
cmds := []string{ice.WEB_FAVOR, kit.Select("zsh.history", m.Option("tab")), kit.Select(ice.TYPE_SHELL, m.Option("type")), m.Option("note"), arg[0]}
|
||||||
if m.Cmdy(cmds); m.Option("you") != "" {
|
if m.Cmdy(cmds); m.Option("you") != "" {
|
||||||
m.Cmdy(ice.WEB_SPACE, m.Option("you"), cmds)
|
m.Cmdy(ice.WEB_SPACE, m.Option("you"), cmds)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if m.Option("tab") == "" {
|
||||||
|
// 收藏列表
|
||||||
|
m.Cmdy(ice.WEB_SPACE, m.Option("you"), ice.WEB_FAVOR)
|
||||||
|
m.Table()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
m.Echo("#/bin/sh\n\n")
|
m.Echo("#/bin/sh\n\n")
|
||||||
m.Cmd(ice.WEB_SPACE, m.Option("you"), ice.WEB_FAVOR, kit.Select("zsh.history", m.Option("tab"))).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(ice.WEB_SPACE, m.Option("you"), ice.WEB_FAVOR, m.Option("tab")).Table(func(index int, value map[string]string, head []string) {
|
||||||
switch value["type"] {
|
switch value["type"] {
|
||||||
case ice.TYPE_SHELL:
|
case ice.TYPE_SHELL:
|
||||||
// 查看收藏
|
// 查看收藏
|
||||||
|
5
type.go
5
type.go
@ -758,6 +758,9 @@ func (m *Message) Appendv(key string, arg ...interface{}) []string {
|
|||||||
return m.meta[key]
|
return m.meta[key]
|
||||||
}
|
}
|
||||||
func (m *Message) Resultv(arg ...interface{}) []string {
|
func (m *Message) Resultv(arg ...interface{}) []string {
|
||||||
|
if len(arg) > 0 {
|
||||||
|
m.meta[MSG_RESULT] = kit.Simple(arg...)
|
||||||
|
}
|
||||||
return m.meta[MSG_RESULT]
|
return m.meta[MSG_RESULT]
|
||||||
}
|
}
|
||||||
func (m *Message) Result(arg ...interface{}) string {
|
func (m *Message) Result(arg ...interface{}) string {
|
||||||
@ -767,7 +770,7 @@ func (m *Message) Result(arg ...interface{}) string {
|
|||||||
return kit.Select("", m.meta[MSG_RESULT], v)
|
return kit.Select("", m.meta[MSG_RESULT], v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return strings.Join(m.Resultv(), "")
|
return strings.Join(m.Resultv(arg...), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Message) Log(level string, str string, arg ...interface{}) *Message {
|
func (m *Message) Log(level string, str string, arg ...interface{}) *Message {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user