1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2021-06-03 16:35:26 +08:00
parent a50ef26303
commit e4a4bbde8f
14 changed files with 88 additions and 25 deletions

View File

@ -66,10 +66,23 @@ func init() {
SESS: {Name: SESS, Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", kit.MDB_EXPIRE, "720h")},
},
Commands: map[string]*ice.Command{
SESS: {Name: "sess hash auto", Help: "会话", Action: map[string]*ice.Action{
SESS: {Name: "sess hash auto prunes", Help: "会话", Action: map[string]*ice.Action{
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Option(mdb.FIELDS, "time,username,userrole,ip,ua")
m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}},
mdb.PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
list := []string{}
m.Richs(SESS, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
if value = kit.GetMeta(value); kit.Time(kit.Format(value[kit.MDB_TIME])) < kit.Time(m.Option("before")) {
list = append(list, key)
}
})
m.Option(mdb.FIELDS, "time,username,userrole,ip,ua")
for _, v := range list {
m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, v)
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,username,userrole")
m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg)

View File

@ -121,14 +121,16 @@ func init() {
},
Commands: map[string]*ice.Command{
QRCODE: {Name: "qrcode text fg bg size auto", Help: "二维码", Action: map[string]*ice.Action{}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(FG, kit.Select(BLUE, arg, 1))
m.Option(BG, kit.Select(WHITE, arg, 2))
m.Option(SIZE, kit.Select("240", arg, 3))
m.Option(BG, kit.Select(WHITE, arg, 2))
m.Option(FG, kit.Select(BLUE, arg, 1))
if aaa.SessIsCli(m) {
_qrcode_cli(m, kit.Select("hi", arg, 0))
if len(arg) == 0 {
} else if aaa.SessIsCli(m) {
_qrcode_cli(m, arg[0])
} else {
_qrcode_web(m, kit.Select("hi", arg, 0))
_qrcode_web(m, arg[0])
}
}},
},

View File

@ -72,6 +72,11 @@ func init() {
}},
PROCINFO: {Name: "procinfo", Help: "进程信息", Hand: func(m *ice.Message, arg ...string) {
m.Split(m.Cmdx(SYSTEM, "ps", "u"), "", " ", "\n")
m.PushAction("kill")
}},
"kill": {Name: "kill", Help: "结束进程", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(SYSTEM, "kill", m.Option("PID"))
m.ProcessRefresh("10ms")
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] == BOOTINFO {

View File

@ -6,8 +6,10 @@ import (
"io"
"os"
"os/exec"
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits"
)
@ -80,6 +82,13 @@ func init() {
},
Commands: map[string]*ice.Command{
SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if len(arg) == 0 {
m.Fields(len(arg) == 0, "time,id,cmd")
m.Cmdy(mdb.SELECT, SYSTEM, "", mdb.LIST)
return
}
m.Grow(SYSTEM, "", kit.Dict(kit.MDB_TIME, m.Time(), CMD, strings.Join(arg, " ")))
if len(arg) == 1 {
arg = kit.Split(arg[0])
}

View File

@ -409,8 +409,9 @@ const (
IMPORT = "import"
PRUNES = "prunes"
INPUTS = "inputs"
REPEAT = "repeat"
REVERT = "revert"
REPEAT = "repeat"
UPLOAD = "upload"
)
const (
CACHE_LIMIT = "cache.limit"

View File

@ -13,6 +13,7 @@ import (
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits"
)
@ -181,10 +182,12 @@ func init() {
_dir_show(m, arg[2], arg[1], 0, m.Option(DIR_DEEP) == ice.TRUE, kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)),
nil, kit.Split("time,size,type,path"))
}},
"upload": {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
mdb.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
m.Upload(m.Option(kit.MDB_PATH))
}},
TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(TRASH, m.Option(kit.MDB_PATH))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
arg = append(arg, "")
@ -193,6 +196,11 @@ func init() {
0, m.Options(DIR_DEEP), kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), kit.Regexp(m.Option(DIR_REG)),
kit.Split(kit.Select("time,size,path", strings.Join(arg[1:], ","))))
m.SortTimeR(kit.MDB_TIME)
if !aaa.SessIsCli(m) {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", TRASH, !strings.HasSuffix(value[kit.MDB_PATH], "/")))
})
}
}},
},
})

View File

@ -35,7 +35,7 @@ func _ssh_close(m *ice.Message, c net.Conn, channel ssh.Channel) {
defer channel.Close()
channel.Write([]byte(m.Conf(SERVICE, kit.Keym(GOODBYE))))
}
func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reader, output io.Writer, display io.Writer) {
func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reader, output io.Writer) {
r, w := io.Pipe()
bio := io.TeeReader(input, w)
m.Go(func() { io.Copy(output, r) })

View File

@ -28,6 +28,11 @@ func _ssh_open(m *ice.Message, arg ...string) {
defer terminal.Restore(fd, oldState)
}
gdb.SignalNotify(m, 28, func() {
w, h, _ := terminal.GetSize(fd)
_ssh_sizes(os.Stdin.Fd(), w, h)
})
// 设置宽高
w, h, _ := terminal.GetSize(fd)
c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w)))
@ -89,11 +94,11 @@ func _ssh_dial(m *ice.Message, cb func(net.Conn), arg ...string) {
ssh.TTY_OP_OSPEED: 14400,
})
gdb.SignalNotify(m, 28, func() {
w, h, _ := terminal.GetSize(int(os.Stdin.Fd()))
session.WindowChange(h, w)
})
// gdb.SignalNotify(m, 28, func() {
// w, h, _ := terminal.GetSize(int(os.Stdin.Fd()))
// session.WindowChange(h, w)
// })
//
session.Shell()
session.Wait()
})

View File

@ -19,5 +19,9 @@ func _ssh_size(fd uintptr, b []byte) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
}
func _ssh_sizes(fd uintptr, w, h int) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
}
func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) {
}

View File

@ -2,13 +2,14 @@ package ssh
import (
"encoding/binary"
"github.com/kr/pty"
"io"
"net"
"os"
"syscall"
"unsafe"
"github.com/kr/pty"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
@ -26,6 +27,10 @@ func _ssh_size(fd uintptr, b []byte) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
}
func _ssh_sizes(fd uintptr, w, h int) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
}
func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) {
m.Logs(CHANNEL, tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr())
defer m.Logs("dischan", tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr())
@ -67,14 +72,13 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh
channel.Close()
})
case "shell":
_ssh_watch(m, meta, h, channel, pty)
m.Go(func() { io.Copy(channel, pty) })
_ssh_exec(m, shell, nil, list, tty, tty, func() {
defer m.Cmd(mdb.MODIFY, CHANNEL, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, tcp.CLOSE)
_ssh_close(m, c, channel)
})
_ssh_watch(m, meta, h, channel, pty, channel)
}
request.Reply(true, nil)
}

View File

@ -11,5 +11,7 @@ type Winsize struct{ Height, Width, x, y uint16 }
func _ssh_size(fd uintptr, b []byte) {
}
func _ssh_sizes(fd uintptr, w, h int) {
}
func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) {
}

View File

@ -6,7 +6,7 @@ const ( // MOD
MOD_CHAN = 16
MOD_TICK = "1s"
MOD_BUFS = 1024
MOD_BUFS = 4096
MOD_DATE = "2006-01-02"
MOD_TIME = "2006-01-02 15:04:05"

5
go.sum
View File

@ -1,7 +1,9 @@
github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc=
github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/shylinux/toolkits v0.2.3 h1:UdE5dUKtc+iVeco9sFrlj98BxVJADYoLNeywTnLrSMc=
github.com/shylinux/toolkits v0.2.3/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY=
@ -9,9 +11,12 @@ github.com/shylinux/toolkits v0.2.4 h1:2TaRBYdt15dE9vTUTO++6aF66vOZNd+ruP3be1C4z
github.com/shylinux/toolkits v0.2.4/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

View File

@ -58,6 +58,11 @@ func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) {
for _, v := range strings.Split(strings.TrimSpace(diff), "\n") {
vs := strings.SplitN(strings.TrimSpace(v), " ", 2)
switch kit.Ext(vs[1]) {
case "swp", "bin":
continue
}
m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
m.Push(kit.MDB_TYPE, vs[0])
m.Push(kit.MDB_FILE, vs[1])
@ -96,8 +101,9 @@ const (
OPT = "opt"
PRO = "pro"
DIFF = "diff"
COMMIT = "commit"
DIFF = "diff"
COMMIT = "commit"
COMMENT = "comment"
)
const STATUS = "status"
@ -130,7 +136,7 @@ func init() {
m.Cmdy(cli.SYSTEM, GIT, ADD, m.Option(kit.MDB_FILE))
}}, OPT: {Name: "opt", Help: "优化"}, PRO: {Name: "pro", Help: "自举"},
COMMIT: {Name: "commit action=add,opt,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
COMMIT: {Name: "commit action=opt,add,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == kit.MDB_ACTION {
m.Option(kit.MDB_TEXT, arg[1]+" "+arg[3])
} else {
@ -144,10 +150,9 @@ func init() {
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case kit.MDB_NAME:
m.OptionFields("name,time")
m.Cmdy(REPOS)
m.Cmdy(REPOS, ice.OptionFields("name,time"))
case "comment":
case COMMENT:
ls := []string{}
ls = append(ls, kit.Split(m.Option(kit.MDB_FILE), " /")...)