mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 09:34:05 +08:00
opt bash
This commit is contained in:
parent
0ad239fbcb
commit
b346bd01d0
@ -57,6 +57,10 @@ const (
|
||||
IP = "ip"
|
||||
UA = "ua"
|
||||
)
|
||||
const (
|
||||
LOGIN = "login"
|
||||
LOGOUT = "logout"
|
||||
)
|
||||
const (
|
||||
SESS_CREATE = "sess.create"
|
||||
)
|
||||
|
@ -68,6 +68,7 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) {
|
||||
|
||||
const (
|
||||
PID = "pid"
|
||||
PWD = "pwd"
|
||||
DIR = "dir"
|
||||
ENV = "env"
|
||||
CMD = "cmd"
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/ctx"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
@ -48,6 +49,16 @@ func _system_show(m *ice.Message, cmd *exec.Cmd) {
|
||||
m.Push(kit.MDB_TIME, m.Time())
|
||||
m.Push(CMD_CODE, int(cmd.ProcessState.ExitCode()))
|
||||
}
|
||||
func SystemProcess(m *ice.Message, text string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == RUN {
|
||||
m.Cmdy(SYSTEM, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.Cmdy(ctx.COMMAND, SYSTEM)
|
||||
m.ProcessField(SYSTEM, RUN)
|
||||
m.Push(ARG, kit.Split(text))
|
||||
}
|
||||
|
||||
const (
|
||||
CMD_DIR = "cmd_dir"
|
||||
|
@ -201,23 +201,21 @@ func _list_export(m *ice.Message, prefix, chain, file string) {
|
||||
count := 0
|
||||
head := kit.Split(m.Option(FIELDS))
|
||||
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
|
||||
val = kit.GetMeta(val)
|
||||
|
||||
if index == 0 && len(head) == 0 {
|
||||
// 输出表头
|
||||
if val = kit.GetMeta(val); index == 0 {
|
||||
if len(head) == 0 { // 默认表头
|
||||
for k := range val {
|
||||
head = append(head, k)
|
||||
}
|
||||
sort.Strings(head)
|
||||
w.Write(head)
|
||||
}
|
||||
w.Write(head) // 输出表头
|
||||
}
|
||||
|
||||
// 输出数据
|
||||
data := []string{}
|
||||
for _, k := range head {
|
||||
data = append(data, kit.Format(val[k]))
|
||||
}
|
||||
w.Write(data)
|
||||
w.Write(data) // 输出数据
|
||||
count++
|
||||
})
|
||||
|
||||
@ -416,6 +414,9 @@ const (
|
||||
REVERT = "revert"
|
||||
REPEAT = "repeat"
|
||||
UPLOAD = "upload"
|
||||
|
||||
NEXT = "next"
|
||||
PREV = "prev"
|
||||
)
|
||||
const (
|
||||
CACHE_LIMIT = "cache.limit"
|
||||
@ -462,6 +463,8 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
||||
}},
|
||||
DELETE: {Name: "delete key sub type field value", Help: "删除", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[2] {
|
||||
case ZONE:
|
||||
_hash_delete(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4])
|
||||
case HASH:
|
||||
_hash_delete(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4])
|
||||
case LIST:
|
||||
@ -470,6 +473,8 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
||||
}},
|
||||
MODIFY: {Name: "modify key sub type field value arg...", Help: "编辑", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[2] {
|
||||
case ZONE:
|
||||
_list_modify(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.SubKey(arg[3]))), kit.MDB_ID, arg[4], arg[5:]...)
|
||||
case HASH:
|
||||
_hash_modify(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4], arg[5:]...)
|
||||
case LIST:
|
||||
|
@ -31,7 +31,7 @@ func (c *Conn) Write(b []byte) (int, error) {
|
||||
return n, e
|
||||
}
|
||||
func (c *Conn) Close() error {
|
||||
c.m.Cmd(mdb.MODIFY, CLIENT, "", mdb.HASH, kit.MDB_HASH, c.h, kit.MDB_STATUS, CLOSE, "nread", c.s.nr, "nwrite", c.s.nw)
|
||||
// c.m.Cmd(mdb.MODIFY, CLIENT, "", mdb.HASH, kit.MDB_HASH, c.h, kit.MDB_STATUS, CLOSE, "nread", c.s.nr, "nwrite", c.s.nw)
|
||||
return c.Conn.Close()
|
||||
}
|
||||
|
||||
|
@ -124,9 +124,11 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
|
||||
// 请求参数
|
||||
for k, v := range r.Form {
|
||||
if r.Header.Get(ContentType) != ContentJSON {
|
||||
// for i, p := range v {
|
||||
// // v[i], _ = url.QueryUnescape(p)
|
||||
// }
|
||||
if msg.IsCliUA() {
|
||||
for i, p := range v {
|
||||
v[i], _ = url.QueryUnescape(p)
|
||||
}
|
||||
}
|
||||
}
|
||||
if msg.Optionv(k, v); k == ice.MSG_SESSID {
|
||||
RenderCookie(msg, v[0])
|
||||
@ -168,7 +170,7 @@ func _serve_login(msg *ice.Message, cmds []string, w http.ResponseWriter, r *htt
|
||||
if _, ok := msg.Target().Commands[WEB_LOGIN]; ok {
|
||||
// 权限检查
|
||||
msg.Target().Cmd(msg, WEB_LOGIN, r.URL.Path, cmds...)
|
||||
return cmds, msg.Result() != "false"
|
||||
return cmds, msg.Result(0) != ice.ErrWarn && msg.Result() != ice.FALSE
|
||||
}
|
||||
|
||||
if ls := strings.Split(r.URL.Path, "/"); msg.Conf(SERVE, kit.Keym(aaa.BLACK, ls[1])) == "true" {
|
||||
|
1
conf.go
1
conf.go
@ -25,6 +25,7 @@ const ( // REPOS
|
||||
|
||||
SUCCESS = "success"
|
||||
FAILURE = "failure"
|
||||
FALSE = "false"
|
||||
TRUE = "true"
|
||||
OK = "ok"
|
||||
)
|
||||
|
@ -18,20 +18,20 @@ func init() {
|
||||
FILES: {Name: "files hash auto upload", Help: "文件夹", Action: map[string]*ice.Action{
|
||||
web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
|
||||
up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
|
||||
m.Cmdy(mdb.INSERT, FILES, "", mdb.HASH, kit.MDB_NAME, up[1], kit.MDB_TYPE, kit.Ext(up[1]), kit.MDB_DATA, up[0], kit.MDB_SIZE, up[2])
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_NAME, up[1], kit.MDB_TYPE, kit.Ext(up[1]), kit.MDB_DATA, up[0], kit.MDB_SIZE, up[2])
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, FILES, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select("time,size,type,name,data", mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmd(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push("", value, kit.Split(kit.Select("time,size,type,name", "time,size,type,name", len(arg) > 0)))
|
||||
|
||||
if m.PushDownload(kit.MDB_LINK, value[kit.MDB_NAME], "/share/cache/"+value[kit.MDB_DATA]); len(arg) > 0 {
|
||||
m.Fields(len(arg) == 0, "time,size,type,name,hash")
|
||||
m.Cmd(mdb.SELECT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) {
|
||||
link := kit.MergeURL("/share/cache/"+value[kit.MDB_DATA], "pod", m.Option(ice.MSG_USERPOD))
|
||||
m.Push("", value, kit.Split(m.Option(ice.MSG_FIELDS)))
|
||||
if m.PushDownload(kit.MDB_LINK, value[kit.MDB_NAME], link); len(arg) > 0 {
|
||||
switch {
|
||||
case kit.ExtIsImage(value[kit.MDB_NAME]):
|
||||
m.PushImages(kit.MDB_IMAGE, "/share/cache/"+value[kit.MDB_DATA])
|
||||
m.PushImages(kit.MDB_IMAGE, link)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -309,7 +309,7 @@ func init() {
|
||||
m.Cmdy(mdb.IMPORT, RIVER, "", mdb.HASH)
|
||||
}},
|
||||
aaa.INVITE: {Name: "invite", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
|
||||
for _, k := range []string{"tmux", "base", "miss", "binary", "source"} {
|
||||
for _, k := range []string{"tmux", "base", "miss", "binary", "source", "module"} {
|
||||
m.Cmdy("web.code.publish", "contexts", k)
|
||||
}
|
||||
}},
|
||||
|
@ -148,6 +148,9 @@ echo "hello world"
|
||||
}
|
||||
|
||||
var _contexts = kit.Dict(
|
||||
"module", `# 创建模块
|
||||
export ctx_dev={{.Option "httphost"}} ctx_temp=$(mktemp); curl -fsSL $ctx_dev -o $ctx_temp; source $ctx_temp module
|
||||
`,
|
||||
"source", `# 源码安装
|
||||
export ctx_dev={{.Option "httphost"}} ctx_temp=$(mktemp); curl -fsSL $ctx_dev -o $ctx_temp; source $ctx_temp source
|
||||
`,
|
||||
|
13
logs.go
13
logs.go
@ -88,14 +88,13 @@ func (m *Message) Cost(arg ...interface{}) *Message {
|
||||
return m.log(LOG_COST, strings.Join(list, " "))
|
||||
}
|
||||
func (m *Message) Warn(err bool, arg ...interface{}) bool {
|
||||
if err {
|
||||
list := kit.Simple(arg...)
|
||||
if len(list) > 1 || len(m.meta[MSG_RESULT]) > 0 && m.meta[MSG_RESULT][0] != ErrWarn {
|
||||
m.meta[MSG_RESULT] = append([]string{ErrWarn}, list...)
|
||||
if !err || len(m.meta[MSG_RESULT]) > 0 && m.meta[MSG_RESULT][0] == ErrWarn {
|
||||
return err
|
||||
}
|
||||
return m.log(LOG_WARN, fmt.Sprint(arg...)) != nil
|
||||
}
|
||||
return false
|
||||
|
||||
m.meta[MSG_RESULT] = kit.Simple(ErrWarn, arg)
|
||||
m.log(LOG_WARN, fmt.Sprint(arg...))
|
||||
return err
|
||||
}
|
||||
func (m *Message) Error(err bool, str string, arg ...interface{}) bool {
|
||||
if err {
|
||||
|
39
misc.go
39
misc.go
@ -189,20 +189,20 @@ func (m *Message) PushRender(key, view, name string, arg ...string) *Message {
|
||||
return m.Push(key, Render(m, view, name, arg))
|
||||
}
|
||||
func (m *Message) PushDownload(key string, arg ...interface{}) { // [name] file
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_DOWNLOAD, arg...))
|
||||
}
|
||||
func (m *Message) PushAnchor(arg ...interface{}) { // [name] link
|
||||
if m.IsCliUA() {
|
||||
return
|
||||
}
|
||||
func (m *Message) PushAnchor(arg ...interface{}) { // [name] link
|
||||
if !m.IsCliUA() {
|
||||
m.Push(kit.MDB_LINK, Render(m, RENDER_ANCHOR, arg...))
|
||||
}
|
||||
func (m *Message) PushButton(arg ...string) {
|
||||
if m.IsCliUA() {
|
||||
return
|
||||
}
|
||||
func (m *Message) PushButton(arg ...string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(kit.MDB_ACTION, Render(m, RENDER_BUTTON, strings.Join(arg, ",")))
|
||||
}
|
||||
}
|
||||
func (m *Message) PushScript(arg ...string) *Message { // [type] text...
|
||||
return m.Push(kit.MDB_SCRIPT, Render(m, RENDER_SCRIPT, arg))
|
||||
}
|
||||
@ -257,9 +257,19 @@ type Option struct {
|
||||
Value interface{}
|
||||
}
|
||||
|
||||
func OptionFields(str string) Option { return Option{MSG_FIELDS, str} }
|
||||
func (m *Message) OptionSimple(key ...string) (res []string) {
|
||||
for _, k := range strings.Split(strings.Join(key, ","), ",") {
|
||||
res = append(res, k, m.Option(k))
|
||||
}
|
||||
return
|
||||
}
|
||||
func OptionFields(str ...string) Option { return Option{MSG_FIELDS, strings.Join(str, ",")} }
|
||||
func OptionHash(str string) Option { return Option{kit.MDB_HASH, str} }
|
||||
func (m *Message) OptionFields(str string) { m.Option(MSG_FIELDS, str) }
|
||||
func (m *Message) OptionFields(str ...string) { m.Option(MSG_FIELDS, strings.Join(str, ",")) }
|
||||
func (m *Message) OptionPage(arg ...string) {
|
||||
m.Option("cache.offend", kit.Select("0", arg, 1))
|
||||
m.Option("cache.limit", kit.Select("10", arg, 0))
|
||||
}
|
||||
func (m *Message) OptionLoad(file string) *Message {
|
||||
if f, e := os.Open(file); e == nil {
|
||||
defer f.Close()
|
||||
@ -350,6 +360,19 @@ func (m *Message) ProcessRefresh(delay string) {
|
||||
func (m *Message) ProcessRefresh30ms() { m.ProcessRefresh("30ms") }
|
||||
func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") }
|
||||
func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") }
|
||||
func (m *Message) ProcessCommand(cmd, val string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == "run" {
|
||||
m.Cmdy(cmd, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.Cmdy("command", cmd)
|
||||
m.ProcessField(cmd, "run")
|
||||
m.Push("arg", kit.Format(kit.Split(val)))
|
||||
}
|
||||
func (m *Message) ProcessCommandOpt(arg ...string) {
|
||||
m.Push("opt", kit.Format(m.OptionSimple(arg...)))
|
||||
}
|
||||
func (m *Message) ProcessField(arg ...interface{}) {
|
||||
m.Process(PROCESS_FIELD)
|
||||
m.Option("_prefix", arg...)
|
||||
|
@ -15,7 +15,7 @@ const BASH = "bash"
|
||||
var Index = &ice.Context{Name: BASH, Help: "命令行",
|
||||
Configs: map[string]*ice.Config{
|
||||
BASH: {Name: BASH, Help: "命令行", Value: kit.Data(
|
||||
kit.SSH_SOURCE, "http://mirrors.aliyun.com/gnu/bash/bash-4.2.53.tar.gz",
|
||||
cli.SOURCE, "http://mirrors.aliyun.com/gnu/bash/bash-4.4.18.tar.gz",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
@ -24,16 +24,16 @@ var Index = &ice.Context{Name: BASH, Help: "命令行",
|
||||
|
||||
BASH: {Name: "bash port path auto start build download", Help: "命令行", Action: map[string]*ice.Action{
|
||||
web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(BASH, kit.META_SOURCE))
|
||||
m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(BASH, kit.Keym(cli.SOURCE)))
|
||||
}},
|
||||
cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, cli.BUILD, m.Conf(BASH, kit.META_SOURCE))
|
||||
m.Cmdy(code.INSTALL, cli.BUILD, m.Conf(BASH, kit.Keym(cli.SOURCE)))
|
||||
}},
|
||||
cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, cli.START, m.Conf(BASH, kit.META_SOURCE), "bin/bash")
|
||||
m.Cmdy(code.INSTALL, cli.START, m.Conf(BASH, kit.Keym(cli.SOURCE)), "bin/bash")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, path.Base(m.Conf(BASH, kit.META_SOURCE)), arg)
|
||||
m.Cmdy(code.INSTALL, path.Base(m.Conf(BASH, kit.Keym(cli.SOURCE))), arg)
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
@ -7,15 +7,15 @@ refer `
|
||||
|
||||
chapter "源码"
|
||||
field "bash" web.code.bash.bash
|
||||
field "bash" web.code.inner args `usr/install/bash-4.2.53/ input.c 625`
|
||||
field "bash" web.code.inner args `usr/install/bash-4.4.18/ input.c 636`
|
||||
|
||||
section "构建"
|
||||
spark shell `
|
||||
yum install -y wget make gcc
|
||||
yum install -y byacc.x86_64
|
||||
|
||||
wget http://mirrors.aliyun.com/gnu/bash/bash-4.2.53.tar.gz
|
||||
tar xvf bash-4.2.53.tar.gz && cd bash-4.2.53
|
||||
wget https://mirrors.aliyun.com/gnu/bash/bash-4.4.18.tar.gz
|
||||
tar xvf bash-4.4.18.tar.gz && cd bash-4.4.18
|
||||
|
||||
./configure --prefix=$PWD/_install
|
||||
make -j8 && make install
|
||||
@ -32,4 +32,5 @@ field "会话流" web.code.bash.sess
|
||||
field "同步流" web.code.bash.sync
|
||||
field "收藏夹" web.code.bash.favor
|
||||
field "回收站" web.code.bash.trash
|
||||
field "文件夹" web.chat.files
|
||||
|
||||
|
@ -20,7 +20,7 @@ func init() {
|
||||
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(kit.MDB_FILE) == ""), m.Append(kit.MDB_TEXT))
|
||||
}},
|
||||
"/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
// 缓存文件
|
||||
// 上传文件
|
||||
msg := m.Cmd(web.CACHE, web.UPLOAD)
|
||||
m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME), msg.Append(kit.MDB_SIZE))
|
||||
m.Cmd(chat.FILES, web.UPLOAD)
|
||||
|
@ -13,72 +13,65 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_TOPIC, kit.MDB_FIELD, "time,id,type,name,text",
|
||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
FAVOR: {Name: "favor topic id auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert topic=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
}},
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
}},
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
default:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
|
||||
}
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == cli.RUN {
|
||||
m.Cmdy(cli.SYSTEM, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.ShowPlugin("", cli.SYSTEM, cli.RUN)
|
||||
m.Push(kit.SSH_ARG, kit.Split(m.Option(kit.MDB_TEXT)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Option(mdb.FIELDS, "time,count,topic")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction(cli.SYSTEM)
|
||||
}},
|
||||
|
||||
"/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export tab note", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.EXPORT: {Name: "export zone name", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo("#!/bin/sh\n\n")
|
||||
m.Cmdy(m.Prefix(FAVOR), m.Option("tab")).Table(func(index int, value map[string]string, head []string) {
|
||||
// 查看收藏
|
||||
if m.Option("note") == "" || m.Option("note") == value[kit.MDB_NAME] {
|
||||
m.Cmdy(FAVOR, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) {
|
||||
if m.Option(kit.MDB_NAME) == "" || m.Option(kit.MDB_NAME) == value[kit.MDB_NAME] {
|
||||
m.Echo("# %v\n%v\n\n", value[kit.MDB_NAME], value[kit.MDB_TEXT])
|
||||
}
|
||||
})
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR)).Table()
|
||||
m.Cmdy(FAVOR).Table()
|
||||
}},
|
||||
FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert zone=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD))
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE)
|
||||
m.Conf(FAVOR, kit.MDB_HASH, "")
|
||||
}},
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_ZONE:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
default:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.LIST, arg)
|
||||
}
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(cli.CMD_DIR, m.Option(cli.PWD))
|
||||
m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...)
|
||||
m.ProcessCommandOpt(cli.PWD)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
|
||||
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
} else {
|
||||
m.PushAction(cli.SYSTEM)
|
||||
}
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -2,7 +2,6 @@ package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
@ -12,9 +11,6 @@ import (
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Commands: map[string]*ice.Command{
|
||||
"/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(cli.QRCODE, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
"/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
list := kit.Split(m.Option("line"), m.Option("break"))
|
||||
word := list[kit.Int(m.Option("index"))]
|
||||
|
@ -1,27 +1,22 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
|
||||
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/tcp"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
SID = "sid"
|
||||
ARG = "arg"
|
||||
SUB = "sub"
|
||||
PWD = "pwd"
|
||||
PID = "pid"
|
||||
)
|
||||
const (
|
||||
LOGIN = "login"
|
||||
LOGOUT = "logout"
|
||||
)
|
||||
const SESS = "sess"
|
||||
|
||||
@ -33,50 +28,59 @@ func init() {
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, LOGOUT)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
}},
|
||||
|
||||
web.WEB_LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if f, _, e := m.R.FormFile(SUB); e == nil {
|
||||
defer f.Close()
|
||||
// 文件参数
|
||||
if b, e := ioutil.ReadAll(f); e == nil {
|
||||
m.Option(SUB, string(b))
|
||||
m.Option(SUB, string(b)) // 文件参数
|
||||
}
|
||||
}
|
||||
|
||||
if strings.TrimSpace(m.Option(SID)) != "" {
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option(SID)))
|
||||
switch m.Render(ice.RENDER_RESULT); m.R.URL.String() {
|
||||
case "/qrcode", "/sess": // 登录入口
|
||||
return
|
||||
}
|
||||
|
||||
// 用户信息
|
||||
if m.Option(SID, msg.Append(kit.MDB_HASH)) != "" {
|
||||
if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin) {
|
||||
return
|
||||
}
|
||||
|
||||
msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID),
|
||||
ice.OptionFields(m.Conf(SESS, kit.META_FIELD)))
|
||||
m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME))
|
||||
m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME))
|
||||
}
|
||||
}
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
m.Warn(m.Option(aaa.USERNAME) == "", ice.ErrNotLogin)
|
||||
}},
|
||||
"/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(cli.QRCODE, m.Option(kit.MDB_TEXT), m.Option(cli.FG), m.Option(cli.BG))
|
||||
}},
|
||||
"/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{
|
||||
LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, LOGOUT)
|
||||
aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, aaa.LOGOUT)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if strings.TrimSpace(m.Option(SID)) == "" {
|
||||
m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, LOGIN,
|
||||
aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD)))
|
||||
if m.Option(SID) == "" {
|
||||
m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGIN,
|
||||
m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD)))
|
||||
} else {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, LOGIN)
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, aaa.LOGIN)
|
||||
}
|
||||
m.Echo(m.Option(SID))
|
||||
}},
|
||||
SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Conf(SESS, kit.META_FIELD))
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Conf(SESS, kit.META_FIELD))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(SESS), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -1,16 +1,22 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
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/tcp"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
)
|
||||
|
||||
const _sync_index = 1
|
||||
|
||||
func _sync_count(m *ice.Message) string {
|
||||
return m.Conf(SYNC, kit.Keym(kit.MDB_COUNT))
|
||||
}
|
||||
|
||||
const (
|
||||
SHELL = "shell"
|
||||
HISTORY = "history"
|
||||
@ -21,12 +27,33 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
SYNC: {Name: SYNC, Help: "同步流", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_FIELD, "time,id,type,name,text",
|
||||
kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SYNC: {Name: "sync id auto export import", Help: "同步流", Action: map[string]*ice.Action{
|
||||
"/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{
|
||||
HISTORY: {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) {
|
||||
ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4)
|
||||
if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TIME, ls[1]+" "+ls[2],
|
||||
kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0], kit.MDB_TEXT, text,
|
||||
m.OptionSimple(cli.PWD, aaa.USERNAME, tcp.HOSTNAME, tcp.HOSTNAME))
|
||||
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0],
|
||||
kit.MDB_TEXT, m.Option(SUB), m.OptionSimple(cli.PWD))
|
||||
}},
|
||||
SYNC: {Name: "sync id auto page export import", Help: "同步流", Action: map[string]*ice.Action{
|
||||
mdb.PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.PrevPage(m, _sync_count(m), kit.Slice(arg, _sync_index)...)
|
||||
}},
|
||||
mdb.NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.NextPage(m, _sync_count(m), kit.Slice(arg, _sync_index)...)
|
||||
}},
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(SYNC), "", mdb.LIST)
|
||||
}},
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -34,46 +61,24 @@ func init() {
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
case kit.MDB_ZONE:
|
||||
m.Cmdy(FAVOR, mdb.INPUTS, arg)
|
||||
}
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == cli.RUN {
|
||||
m.Cmdy(cli.SYSTEM, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.ShowPlugin("", cli.SYSTEM, cli.RUN)
|
||||
m.Push(cli.ARG, kit.Format(kit.Simple(kit.Split(m.Option(kit.MDB_TEXT)))))
|
||||
m.Option(cli.CMD_DIR, m.Option(cli.PWD))
|
||||
m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...)
|
||||
m.ProcessCommandOpt(cli.PWD)
|
||||
}},
|
||||
FAVOR: {Name: "favor topic=some@key type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
|
||||
kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(FAVOR, mdb.INSERT, m.OptionSimple(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Option(mdb.FIELDS, mdb.DETAIL)
|
||||
} else {
|
||||
m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD))
|
||||
defer m.PushAction(cli.SYSTEM, FAVOR)
|
||||
}
|
||||
|
||||
m.OptionPage(kit.Slice(arg, _sync_index)...)
|
||||
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
|
||||
}},
|
||||
"/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{
|
||||
HISTORY: {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) {
|
||||
ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4)
|
||||
if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0],
|
||||
tcp.HOSTNAME, m.Option(tcp.HOSTNAME), aaa.USERNAME, m.Option(aaa.USERNAME),
|
||||
kit.MDB_TEXT, text, PWD, m.Option(PWD), kit.MDB_TIME, ls[1]+" "+ls[2])
|
||||
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0],
|
||||
kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD))
|
||||
m.PushAction(cli.SYSTEM, FAVOR)
|
||||
m.StatusTimeCountTotal(_sync_count(m))
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -2,6 +2,7 @@ package bash
|
||||
|
||||
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/nfs"
|
||||
@ -19,45 +20,38 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data(
|
||||
kit.MDB_FIELD, "time,hash,hostname,size,from,to",
|
||||
kit.MDB_FIELD, "time,hash,username,hostname,size,from,to",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
"/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{
|
||||
mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(TRASH, mdb.INSERT, arg)
|
||||
}},
|
||||
}},
|
||||
TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Action: map[string]*ice.Action{
|
||||
mdb.INSERT: {Name: "insert from= to=", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, FROM, m.Option(FROM), TO, m.Option(TO))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, kit.MDB_SIZE, FROM, TO))
|
||||
}},
|
||||
mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, "mv", m.Option(TO), m.Option(FROM))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH))
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option(TO))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH))
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
"reback": {Name: "reback", Help: "恢复", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, "mv", m.Option(TO), m.Option(FROM))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == cli.RUN {
|
||||
m.Option(nfs.DIR_ROOT, m.Option(TO))
|
||||
m.Cmdy(nfs.DIR, kit.Select("", arg, 1))
|
||||
return
|
||||
}
|
||||
m.ShowPlugin("", nfs.DIR, cli.RUN)
|
||||
m.ProcessCommand(nfs.DIR, "", arg...)
|
||||
m.ProcessCommandOpt(TO)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(TRASH), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Fields(len(arg) == 0, m.Conf(TRASH, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(nfs.DIR, "reback", mdb.REMOVE)
|
||||
}},
|
||||
|
||||
"/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{
|
||||
mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, tcp.HOSTNAME, m.Option(tcp.HOSTNAME),
|
||||
kit.MDB_SIZE, m.Option(kit.MDB_SIZE), FROM, m.Option(FROM), TO, m.Option(TO))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
|
||||
m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE)
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
2
type.go
2
type.go
@ -128,7 +128,7 @@ func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Mess
|
||||
}
|
||||
|
||||
m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg,
|
||||
kit.Select(kit.FileLine(cmd.Hand, 3), kit.FileLine(8, 3), m.target.Name == "mdb"))
|
||||
kit.Select(kit.FileLine(cmd.Hand, 3), kit.FileLine(9, 3), m.target.Name == "mdb"))
|
||||
cmd.Hand(m, c, key, arg...)
|
||||
return m
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user