forked from x/icebergs
opt conf.go
This commit is contained in:
parent
c7551a6dbd
commit
2d23491876
@ -19,7 +19,7 @@ func _cat_ext(name string) string {
|
||||
}
|
||||
func _cat_right(m *ice.Message, name string) bool {
|
||||
switch strings.Split(name, "/")[0] {
|
||||
case kit.SSH_ETC, kit.SSH_VAR:
|
||||
case ice.ETC, ice.VAR:
|
||||
if m.Warn(m.Option(ice.MSG_USERROLE) == aaa.VOID, ice.ErrNotRight, "of", name) {
|
||||
return false
|
||||
}
|
||||
|
@ -2,8 +2,6 @@ package ssh
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
const SSH = "ssh"
|
||||
@ -11,12 +9,6 @@ const SSH = "ssh"
|
||||
var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Load()
|
||||
m.Richs(SESSION, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
|
||||
})
|
||||
m.Richs(CHANNEL, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
|
||||
})
|
||||
}},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if f, ok := m.Target().Server().(*Frame); ok {
|
||||
@ -28,7 +20,6 @@ var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*
|
||||
|
||||
func init() {
|
||||
ice.Index.Register(Index, &Frame{},
|
||||
CONNECT, SESSION, SERVICE, CHANNEL,
|
||||
SOURCE, TARGET, PROMPT, PRINTF, SCREEN, RETURN,
|
||||
)
|
||||
}
|
||||
|
@ -99,11 +99,11 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
|
||||
case []string:
|
||||
m.Richs(cb[0], cb[1], cb[2], func(key string, value map[string]interface{}) {
|
||||
value = kit.GetMeta(value)
|
||||
value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = kit.Format(s), size, total
|
||||
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = kit.Format(s), size, total
|
||||
})
|
||||
default:
|
||||
if s != step && s%10 == 0 {
|
||||
m.Log_IMPORT(kit.MDB_FILE, p, kit.SSH_STEP, s,
|
||||
m.Log_IMPORT(kit.MDB_FILE, p, kit.MDB_STEP, s,
|
||||
kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total)))
|
||||
}
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ func _dream_show(m *ice.Message, name string) {
|
||||
m.Option(cli.CMD_DIR, p)
|
||||
m.Optionv(cli.CMD_ENV, kit.Simple(
|
||||
"ctx_dev", "http://:"+m.Cmd(SERVE).Append(tcp.PORT),
|
||||
cli.PATH, kit.Path(path.Join(p, kit.SSH_BIN))+":"+kit.Path(kit.SSH_BIN)+":"+os.Getenv(cli.PATH),
|
||||
cli.PATH, kit.Path(path.Join(p, ice.BIN))+":"+kit.Path(ice.BIN)+":"+os.Getenv(cli.PATH),
|
||||
"USER", ice.Info.UserName, m.Confv(DREAM, kit.Keym(cli.ENV)),
|
||||
))
|
||||
// 启动任务
|
||||
@ -140,7 +140,7 @@ func init() {
|
||||
Configs: map[string]*ice.Config{
|
||||
DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_WORK,
|
||||
cli.CMD, []interface{}{"ice.bin", SPACE, tcp.DIAL},
|
||||
cli.ENV, kit.Dict(cli.CTX_LOG, ice.BIN_BOOTLOG),
|
||||
cli.ENV, kit.Dict(cli.CTX_LOG, ice.BIN_BOOT_LOG),
|
||||
"miss", `#!/bin/bash
|
||||
if [ "$ISH_CONF_PRE" = "" ]; then
|
||||
[ -f $PWD/.ish/plug.sh ] || [ -f $HOME/.ish/plug.sh ] || git clone ${ISH_CONF_HUB_PROXY:="https://"}shylinux.com/x/intshell $PWD/.ish
|
||||
|
@ -67,7 +67,7 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool {
|
||||
msg := m.Spawn()
|
||||
msg.W, msg.R = w, r
|
||||
repos := kit.Select(ice.INTSHELL, ice.VOLCANOS, strings.Contains(r.Header.Get("User-Agent"), "Mozilla/5.0"))
|
||||
Render(msg, ice.RENDER_DOWNLOAD, path.Join(m.Conf(SERVE, kit.Keym(repos, kit.SSH_PATH)), m.Conf(SERVE, kit.Keym(repos, kit.SSH_INDEX))))
|
||||
Render(msg, ice.RENDER_DOWNLOAD, path.Join(m.Conf(SERVE, kit.Keym(repos, kit.MDB_PATH)), m.Conf(SERVE, kit.Keym(repos, kit.MDB_INDEX))))
|
||||
return false
|
||||
}
|
||||
|
||||
@ -246,12 +246,12 @@ func init() {
|
||||
"x", true, ice.PUBLISH, true,
|
||||
), LOGHEADERS, false,
|
||||
|
||||
kit.SSH_STATIC, kit.Dict("/", ice.USR_VOLCANOS),
|
||||
ice.VOLCANOS, kit.Dict(kit.MDB_PATH, ice.USR_VOLCANOS, kit.SSH_INDEX, "page/index.html",
|
||||
"static", kit.Dict("/", ice.USR_VOLCANOS),
|
||||
ice.VOLCANOS, kit.Dict(kit.MDB_PATH, ice.USR_VOLCANOS, kit.MDB_INDEX, "page/index.html",
|
||||
kit.SSH_REPOS, "https://shylinux.com/x/volcanos", kit.SSH_BRANCH, kit.SSH_MASTER,
|
||||
), ice.PUBLISH, ice.USR_PUBLISH,
|
||||
|
||||
ice.INTSHELL, kit.Dict(kit.MDB_PATH, ice.USR_INTSHELL, kit.SSH_INDEX, ice.INDEX_SH,
|
||||
ice.INTSHELL, kit.Dict(kit.MDB_PATH, ice.USR_INTSHELL, kit.MDB_INDEX, ice.INDEX_SH,
|
||||
kit.SSH_REPOS, "https://shylinux.com/x/intshell", kit.SSH_BRANCH, kit.SSH_MASTER,
|
||||
), ice.REQUIRE, ".ish/pluged",
|
||||
)},
|
||||
|
@ -37,7 +37,7 @@ func _share_cache(m *ice.Message, arg ...string) {
|
||||
func _share_local(m *ice.Message, arg ...string) {
|
||||
p := path.Join(arg...)
|
||||
switch ls := strings.Split(p, "/"); ls[0] {
|
||||
case kit.SSH_ETC, kit.SSH_VAR: // 私有文件
|
||||
case ice.ETC, ice.VAR: // 私有文件
|
||||
if m.Option(ice.MSG_USERROLE) == aaa.VOID {
|
||||
m.Render(STATUS, http.StatusUnauthorized, ice.ErrNotRight)
|
||||
return // 没有权限
|
||||
|
35
conf.go
35
conf.go
@ -3,6 +3,7 @@ package ice
|
||||
const (
|
||||
SP = " "
|
||||
NL = "\n"
|
||||
PT = "."
|
||||
|
||||
OK = "ok"
|
||||
TRUE = "true"
|
||||
@ -11,15 +12,29 @@ const (
|
||||
FAILURE = "failure"
|
||||
|
||||
INIT = "init"
|
||||
EXIT = "exit"
|
||||
SAVE = "save"
|
||||
LOAD = "load"
|
||||
AUTO = "auto"
|
||||
HELP = "help"
|
||||
SAVE = "save"
|
||||
EXIT = "exit"
|
||||
|
||||
ICE = "ice"
|
||||
SHY = "shy"
|
||||
DEV = "dev"
|
||||
WEB = "web"
|
||||
ICE = "ice"
|
||||
RUN = "run"
|
||||
|
||||
POD = "pod"
|
||||
CTX = "ctx"
|
||||
CMD = "cmd"
|
||||
ARG = "arg"
|
||||
OPT = "opt"
|
||||
|
||||
SRC = "src"
|
||||
ETC = "etc"
|
||||
BIN = "bin"
|
||||
VAR = "var"
|
||||
USR = "usr"
|
||||
)
|
||||
const ( // MOD
|
||||
MOD_DIR = 0750
|
||||
@ -75,10 +90,11 @@ const ( // DIR
|
||||
VAR_TRASH = "var/trash"
|
||||
BIN_ICE_SH = "bin/ice.sh"
|
||||
BIN_ICE_BIN = "bin/ice.bin"
|
||||
BIN_BOOTLOG = "bin/boot.log"
|
||||
BIN_BOOT_LOG = "bin/boot.log"
|
||||
ETC_INIT_SHY = "etc/init.shy"
|
||||
ETC_EXIT_SHY = "etc/exit.shy"
|
||||
ETC_MISS_SH = "etc/miss.sh"
|
||||
ETC_PATH = "etc/path"
|
||||
|
||||
SRC_HELP = "src/help"
|
||||
SRC_MAIN_SHY = "src/main.shy"
|
||||
@ -104,8 +120,8 @@ const ( // MSG
|
||||
MSG_OUTPUT = "_output"
|
||||
MSG_ARGS = "_args"
|
||||
|
||||
MSG_DAEMON = "_daemon"
|
||||
MSG_UPLOAD = "_upload"
|
||||
MSG_DAEMON = "_daemon"
|
||||
MSG_ACTION = "_action"
|
||||
MSG_STATUS = "_status"
|
||||
|
||||
@ -126,11 +142,12 @@ const ( // MSG
|
||||
MSG_USERDATA = "user.data"
|
||||
MSG_USERNICK = "user.nick"
|
||||
MSG_USERNAME = "user.name"
|
||||
MSG_USERZONE = "user.zone"
|
||||
MSG_USERROLE = "user.role"
|
||||
MSG_USERZONE = "user.zone"
|
||||
MSG_LANGUAGE = "user.lang"
|
||||
|
||||
MSG_TITLE = "sess.title"
|
||||
MSG_TOPIC = "sess.topic"
|
||||
MSG_RIVER = "sess.river"
|
||||
MSG_STORM = "sess.storm"
|
||||
MSG_LOCAL = "sess.local"
|
||||
@ -152,13 +169,13 @@ const ( // RENDER
|
||||
RENDER_IMAGES = "_images"
|
||||
RENDER_VIDEOS = "_videos"
|
||||
RENDER_TEMPLATE = "_template"
|
||||
RENDER_DOWNLOAD = "_download"
|
||||
RENDER_REDIRECT = "_redirect"
|
||||
RENDER_DOWNLOAD = "_download"
|
||||
)
|
||||
const ( // PROCESS
|
||||
PROCESS_LOCATION = "_location"
|
||||
PROCESS_REWRITE = "_rewrite"
|
||||
PROCESS_REFRESH = "_refresh"
|
||||
PROCESS_REWRITE = "_rewrite"
|
||||
PROCESS_DISPLAY = "_display"
|
||||
PROCESS_FIELD = "_field"
|
||||
PROCESS_INNER = "_inner"
|
||||
@ -173,8 +190,8 @@ const ( // PROCESS
|
||||
)
|
||||
const ( // Err
|
||||
ErrWarn = "warn: "
|
||||
ErrExpire = "expire: "
|
||||
ErrExists = "exists: "
|
||||
ErrExpire = "expire: "
|
||||
ErrNotLogin = "not login: "
|
||||
ErrNotFound = "not found: "
|
||||
ErrNotRight = "not right: "
|
||||
|
@ -89,9 +89,6 @@ func init() {
|
||||
SHARE: {Name: "share type", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
||||
_header_share(m, arg...)
|
||||
}},
|
||||
GRANT: {Name: "grant space", Help: "授权", Hand: func(m *ice.Message, arg ...string) {
|
||||
_header_grant(m, arg...)
|
||||
}},
|
||||
|
||||
aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) {
|
||||
if aaa.UserLogin(m, arg[0], arg[1]) {
|
||||
@ -127,5 +124,11 @@ func init() {
|
||||
}
|
||||
m.Echo(m.Conf(HEADER, kit.Keym(TITLE)))
|
||||
}},
|
||||
HEADER: {Name: "header", Help: "标题栏", Action: map[string]*ice.Action{
|
||||
GRANT: {Name: "grant space", Help: "授权", Hand: func(m *ice.Message, arg ...string) {
|
||||
_header_grant(m, arg...)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
@ -157,12 +157,12 @@ func init() {
|
||||
}
|
||||
m.Option("tag", kit.Format("`name:\"%s\" help:\"%s\"`", m.Option("list"), m.Option("help")))
|
||||
|
||||
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
|
||||
if p := path.Join(ice.SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
|
||||
_autogen_script(m, p)
|
||||
_autogen_source(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_NAME))
|
||||
}
|
||||
|
||||
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
|
||||
if p := path.Join(ice.SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
|
||||
_autogen_module(m, p)
|
||||
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_ZONE), _autogen_mod(m, ice.GO_MOD))
|
||||
}
|
||||
@ -171,7 +171,7 @@ func init() {
|
||||
switch arg[0] {
|
||||
case kit.MDB_MAIN:
|
||||
m.Option(nfs.DIR_REG, `.*\.go`)
|
||||
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
|
||||
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time")
|
||||
m.RenameAppend(kit.MDB_PATH, arg[0])
|
||||
}
|
||||
}},
|
||||
@ -183,7 +183,7 @@ func init() {
|
||||
_autogen_miss(m)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
|
||||
if m.Option(nfs.DIR_ROOT, ice.SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
|
||||
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
|
||||
} else {
|
||||
m.Cmdy(nfs.CAT, arg[0])
|
||||
|
@ -37,7 +37,7 @@ func _install_download(m *ice.Message) {
|
||||
p := 0
|
||||
m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) {
|
||||
if n := size * 100 / total; p != n {
|
||||
value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
|
||||
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
|
||||
toast(name, size, total)
|
||||
p = n
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ func init() {
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
WEBPACK: {Name: "webpack path auto create prunes", Help: "打包", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create name=demo", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.SSH_PATH))
|
||||
dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH))
|
||||
css, _, e := kit.Create(path.Join(dir, "page/cache.css"))
|
||||
m.Assert(e)
|
||||
defer css.Close()
|
||||
|
@ -35,6 +35,11 @@ const (
|
||||
PROMPT = "prompt"
|
||||
)
|
||||
|
||||
const (
|
||||
SSH_SHELL = "shell"
|
||||
SSH_BREAK = "break"
|
||||
)
|
||||
|
||||
const SPARK = "spark"
|
||||
|
||||
func init() {
|
||||
@ -43,13 +48,13 @@ func init() {
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
ice.AddRender(ice.RENDER_SCRIPT, func(m *ice.Message, cmd string, args ...interface{}) string {
|
||||
arg := kit.Simple(args...)
|
||||
if len(arg) == 1 && arg[0] != kit.SSH_BREAK {
|
||||
arg = []string{kit.SSH_SHELL, arg[0]}
|
||||
if len(arg) == 1 && arg[0] != SSH_BREAK {
|
||||
arg = []string{SSH_SHELL, arg[0]}
|
||||
}
|
||||
list := []string{kit.Format(`<div class="story" data-type="spark" data-name="%s">`, arg[0])}
|
||||
for _, l := range strings.Split(strings.Join(arg[1:], "\n"), "\n") {
|
||||
switch list = append(list, "<div>"); arg[0] {
|
||||
case kit.SSH_SHELL:
|
||||
case SSH_SHELL:
|
||||
list = append(list, "<label>", "$ ", "</label>")
|
||||
default:
|
||||
list = append(list, "<label>", "> ", "</label>")
|
||||
|
20
exec.go
20
exec.go
@ -18,9 +18,9 @@ func (m *Message) TryCatch(msg *Message, silent bool, hand ...func(msg *Message)
|
||||
default:
|
||||
fileline := kit.FileLine(4, 5)
|
||||
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
|
||||
m.Log("chain", msg.FormatChain())
|
||||
m.Log(kit.MDB_CHAIN, msg.FormatChain())
|
||||
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
|
||||
m.Log("stack", msg.FormatStack())
|
||||
m.Log(kit.MDB_STACK, msg.FormatStack())
|
||||
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
|
||||
if len(hand) > 1 { // 捕获异常
|
||||
m.TryCatch(msg, silent, hand[1:]...)
|
||||
@ -79,7 +79,7 @@ func (m *Message) Done(b bool) bool {
|
||||
func (m *Message) Call(sync bool, cb func(*Message) *Message) *Message {
|
||||
wait := make(chan bool, 2)
|
||||
|
||||
p := kit.Select("10s", m.Option("timeout"))
|
||||
p := kit.Select("10s", m.Option(kit.MDB_TIMEOUT))
|
||||
t := time.AfterFunc(kit.Duration(p), func() {
|
||||
m.Warn(true, "%s timeout %v", p, m.Detailv())
|
||||
wait <- false
|
||||
@ -126,9 +126,9 @@ func (m *Message) Go(cb interface{}, args ...interface{}) *Message {
|
||||
|
||||
func (m *Message) Watch(key string, arg ...string) *Message {
|
||||
if len(arg) == 0 {
|
||||
arg = append(arg, m.Prefix("auto"))
|
||||
arg = append(arg, m.Prefix(AUTO))
|
||||
}
|
||||
m.Cmd("gdb.event", "action", "listen", "event", key, "cmd", strings.Join(arg, " "))
|
||||
m.Cmd("gdb.event", "action", "listen", "event", key, CMD, strings.Join(arg, SP))
|
||||
return m
|
||||
}
|
||||
func (m *Message) Event(key string, arg ...string) *Message {
|
||||
@ -137,8 +137,8 @@ func (m *Message) Event(key string, arg ...string) *Message {
|
||||
}
|
||||
func (m *Message) Right(arg ...interface{}) bool {
|
||||
return m.Option(MSG_USERROLE) == "root" || !m.Warn(m.Cmdx("aaa.role", "right",
|
||||
m.Option(MSG_USERROLE), strings.ReplaceAll(kit.Keys(arg...), "/", ".")) != "ok",
|
||||
ErrNotRight, m.Option(MSG_USERROLE), " of ", strings.Join(kit.Simple(arg), "."), " at ", kit.FileLine(2, 3))
|
||||
m.Option(MSG_USERROLE), strings.ReplaceAll(kit.Keys(arg...), "/", PT)) != OK,
|
||||
ErrNotRight, m.Option(MSG_USERROLE), " of ", strings.Join(kit.Simple(arg), PT), " at ", kit.FileLine(2, 3))
|
||||
}
|
||||
func (m *Message) Space(arg interface{}) []string {
|
||||
if arg == nil || arg == "" || kit.Format(arg) == m.Conf("cli.runtime", "node.name") {
|
||||
@ -147,9 +147,9 @@ func (m *Message) Space(arg interface{}) []string {
|
||||
return []string{"web.space", kit.Format(arg)}
|
||||
}
|
||||
func (m *Message) PodCmd(arg ...interface{}) bool {
|
||||
if pod := m.Option("pod"); pod != "" {
|
||||
m.Option("pod", "")
|
||||
if m.Option("_upload") != "" {
|
||||
if pod := m.Option(POD); pod != "" {
|
||||
m.Option(POD, "")
|
||||
if m.Option(MSG_UPLOAD) != "" {
|
||||
msg := m.Cmd("cache", "upload")
|
||||
m.Option(MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME), msg.Append(kit.MDB_SIZE))
|
||||
}
|
||||
|
4
go.mod
4
go.mod
@ -4,8 +4,6 @@ go 1.11
|
||||
|
||||
require (
|
||||
github.com/gorilla/websocket v1.4.2
|
||||
github.com/kr/pty v1.1.8
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
|
||||
shylinux.com/x/toolkits v0.3.4
|
||||
shylinux.com/x/toolkits v0.3.5
|
||||
)
|
||||
|
19
go.sum
19
go.sum
@ -1,19 +1,4 @@
|
||||
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/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=
|
||||
shylinux.com/x/toolkits v0.3.3 h1:yNH54CANAv7cPT264tpnDt9G2BVfGwLC9y3rxtU6pkg=
|
||||
shylinux.com/x/toolkits v0.3.3/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
|
||||
shylinux.com/x/toolkits v0.3.5 h1:J0KlCuIPiJc074+5T0nUJawp3MJGH8VQKzqlpRsVQ70=
|
||||
shylinux.com/x/toolkits v0.3.5/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
|
||||
|
12
init.go
12
init.go
@ -17,7 +17,7 @@ func (f *Frame) Spawn(m *Message, c *Context, arg ...string) Server {
|
||||
return &Frame{}
|
||||
}
|
||||
func (f *Frame) Begin(m *Message, arg ...string) Server {
|
||||
m.Log(LOG_BEGIN, "ice")
|
||||
m.Log(LOG_BEGIN, ICE)
|
||||
defer m.Cost("begin ice")
|
||||
|
||||
list := map[*Context]*Message{m.target: m}
|
||||
@ -31,7 +31,7 @@ func (f *Frame) Begin(m *Message, arg ...string) Server {
|
||||
return f
|
||||
}
|
||||
func (f *Frame) Start(m *Message, arg ...string) bool {
|
||||
m.Log(LOG_START, "ice")
|
||||
m.Log(LOG_START, ICE)
|
||||
defer m.Cost("start ice")
|
||||
|
||||
m.Cap(CTX_STATUS, CTX_START)
|
||||
@ -41,11 +41,9 @@ func (f *Frame) Start(m *Message, arg ...string) bool {
|
||||
return true
|
||||
}
|
||||
func (f *Frame) Close(m *Message, arg ...string) bool {
|
||||
m.TryCatch(m, true, func(m *Message) {
|
||||
m.target.wg.Wait()
|
||||
})
|
||||
m.TryCatch(m, true, func(m *Message) { m.target.wg.Wait() })
|
||||
|
||||
m.Log(LOG_CLOSE, "ice")
|
||||
m.Log(LOG_CLOSE, ICE)
|
||||
defer m.Cost("close ice")
|
||||
|
||||
list := map[*Context]*Message{m.target: m}
|
||||
@ -59,7 +57,7 @@ func (f *Frame) Close(m *Message, arg ...string) bool {
|
||||
}
|
||||
|
||||
var Index = &Context{Name: "ice", Help: "冰山模块", Caches: map[string]*Cache{
|
||||
CTX_FOLLOW: {Value: "ice"}, CTX_STREAM: {Value: "shy"}, CTX_STATUS: {Value: CTX_BEGIN},
|
||||
CTX_FOLLOW: {Value: ICE}, CTX_STREAM: {Value: SHY}, CTX_STATUS: {Value: CTX_BEGIN},
|
||||
}, Configs: map[string]*Config{
|
||||
HELP: {Value: kit.Data("index", _help)},
|
||||
}, Commands: map[string]*Command{
|
||||
|
71
logs.go
71
logs.go
@ -2,7 +2,6 @@ package ice
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
@ -52,8 +51,8 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message {
|
||||
}
|
||||
|
||||
// 输出日志
|
||||
log.Info(fmt.Sprintf("%02d %9s %s%s %s%s", m.code,
|
||||
fmt.Sprintf("%4s->%-4s", m.source.Name, m.target.Name), prefix, level, str, suffix))
|
||||
log.Info(kit.Format("%02d %9s %s%s %s%s", m.code,
|
||||
kit.Format("%4s->%-4s", m.source.Name, m.target.Name), prefix, level, str, suffix))
|
||||
return m
|
||||
}
|
||||
func (m *Message) join(arg ...interface{}) string {
|
||||
@ -146,7 +145,7 @@ func (m *Message) FormatStack() string {
|
||||
frame, more := frames.Next()
|
||||
file := strings.Split(frame.File, "/")
|
||||
name := strings.Split(frame.Function, "/")
|
||||
meta = append(meta, fmt.Sprintf("\n%s:%d\t%s", file[len(file)-1], frame.Line, name[len(name)-1]))
|
||||
meta = append(meta, kit.Format("\n%s:%d\t%s", file[len(file)-1], frame.Line, name[len(name)-1]))
|
||||
if !more {
|
||||
break
|
||||
}
|
||||
@ -163,16 +162,16 @@ func (m *Message) FormatChain() string {
|
||||
for i := len(ms) - 1; i >= 0; i-- {
|
||||
msg := ms[i]
|
||||
|
||||
meta = append(meta, fmt.Sprintf("%s ", msg.Format("prefix")))
|
||||
meta = append(meta, kit.Format("%s ", msg.Format("prefix")))
|
||||
if len(msg.meta[MSG_DETAIL]) > 0 {
|
||||
meta = append(meta, fmt.Sprintf("detail:%d %v", len(msg.meta[MSG_DETAIL]), msg.meta[MSG_DETAIL]))
|
||||
meta = append(meta, kit.Format("%s:%d %v", MSG_DETAIL, len(msg.meta[MSG_DETAIL]), msg.meta[MSG_DETAIL]))
|
||||
}
|
||||
|
||||
if len(msg.meta[MSG_OPTION]) > 0 {
|
||||
meta = append(meta, fmt.Sprintf("option:%d %v\n", len(msg.meta[MSG_OPTION]), msg.meta[MSG_OPTION]))
|
||||
meta = append(meta, kit.Format("%s:%d %v\n", MSG_OPTION, len(msg.meta[MSG_OPTION]), msg.meta[MSG_OPTION]))
|
||||
for _, k := range msg.meta[MSG_OPTION] {
|
||||
if v, ok := msg.meta[k]; ok {
|
||||
meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v))
|
||||
meta = append(meta, kit.Format(" %s: %d %v\n", k, len(v), v))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -180,30 +179,30 @@ func (m *Message) FormatChain() string {
|
||||
}
|
||||
|
||||
if len(msg.meta[MSG_APPEND]) > 0 {
|
||||
meta = append(meta, fmt.Sprintf(" append:%d %v\n", len(msg.meta[MSG_APPEND]), msg.meta[MSG_APPEND]))
|
||||
meta = append(meta, kit.Format(" %s:%d %v\n", MSG_APPEND, len(msg.meta[MSG_APPEND]), msg.meta[MSG_APPEND]))
|
||||
for _, k := range msg.meta[MSG_APPEND] {
|
||||
if v, ok := msg.meta[k]; ok {
|
||||
meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v))
|
||||
meta = append(meta, kit.Format(" %s: %d %v\n", k, len(v), v))
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(msg.meta[MSG_RESULT]) > 0 {
|
||||
meta = append(meta, fmt.Sprintf(" result:%d %v\n", len(msg.meta[MSG_RESULT]), msg.meta[MSG_RESULT]))
|
||||
meta = append(meta, kit.Format(" %s:%d %v\n", MSG_RESULT, len(msg.meta[MSG_RESULT]), msg.meta[MSG_RESULT]))
|
||||
}
|
||||
}
|
||||
return strings.Join(meta, "")
|
||||
}
|
||||
func (m *Message) FormatTime() string {
|
||||
return m.Format("time")
|
||||
return m.Format(kit.MDB_TIME)
|
||||
}
|
||||
func (m *Message) FormatMeta() string {
|
||||
return m.Format("meta")
|
||||
return m.Format(kit.MDB_META)
|
||||
}
|
||||
func (m *Message) FormatSize() string {
|
||||
return m.Format("size")
|
||||
return m.Format(kit.MDB_SIZE)
|
||||
}
|
||||
func (m *Message) FormatCost() string {
|
||||
return m.Format("cost")
|
||||
return m.Format(kit.MDB_COST)
|
||||
}
|
||||
func (m *Message) Format(key interface{}) string {
|
||||
switch key := key.(type) {
|
||||
@ -211,33 +210,31 @@ func (m *Message) Format(key interface{}) string {
|
||||
json.Unmarshal(key, &m.meta)
|
||||
case string:
|
||||
switch key {
|
||||
case "cost":
|
||||
case kit.MDB_COST:
|
||||
return kit.FmtTime(kit.Int64(time.Since(m.time)))
|
||||
case "meta":
|
||||
case kit.MDB_SIZE:
|
||||
if len(m.meta[MSG_APPEND]) == 0 {
|
||||
return kit.Format("%dx%d", 0, 0)
|
||||
} else {
|
||||
return kit.Format("%dx%d", len(m.meta[m.meta[MSG_APPEND][0]]), len(m.meta[MSG_APPEND]))
|
||||
}
|
||||
case kit.MDB_META:
|
||||
return kit.Format(m.meta)
|
||||
case "size":
|
||||
if len(m.meta["append"]) == 0 {
|
||||
return fmt.Sprintf("%dx%d", 0, 0)
|
||||
case kit.MDB_SHIP:
|
||||
return kit.Format("%s->%s", m.source.Name, m.target.Name)
|
||||
case kit.MDB_PREFIX:
|
||||
return kit.Format("%s %d %s->%s", m.Time(), m.code, m.source.Name, m.target.Name)
|
||||
|
||||
case MSG_APPEND:
|
||||
if len(m.meta[MSG_APPEND]) == 0 {
|
||||
return kit.Format("%dx%d %s", 0, 0, "[]")
|
||||
} else {
|
||||
return fmt.Sprintf("%dx%d", len(m.meta[m.meta["append"][0]]), len(m.meta["append"]))
|
||||
}
|
||||
case "append":
|
||||
if len(m.meta["append"]) == 0 {
|
||||
return fmt.Sprintf("%dx%d %s", 0, 0, "[]")
|
||||
} else {
|
||||
return fmt.Sprintf("%dx%d %s", len(m.meta[m.meta["append"][0]]), len(m.meta["append"]), kit.Format(m.meta["append"]))
|
||||
return kit.Format("%dx%d %s", len(m.meta[m.meta[MSG_APPEND][0]]), len(m.meta[MSG_APPEND]), kit.Format(m.meta[MSG_APPEND]))
|
||||
}
|
||||
|
||||
case "time":
|
||||
return m.Time()
|
||||
case "ship":
|
||||
return fmt.Sprintf("%s->%s", m.source.Name, m.target.Name)
|
||||
case "prefix":
|
||||
return fmt.Sprintf("%s %d %s->%s", m.Time(), m.code, m.source.Name, m.target.Name)
|
||||
|
||||
case "chain":
|
||||
case kit.MDB_CHAIN:
|
||||
return m.FormatChain()
|
||||
case "stack":
|
||||
case kit.MDB_STACK:
|
||||
return m.FormatStack()
|
||||
}
|
||||
}
|
||||
@ -245,7 +242,7 @@ func (m *Message) Format(key interface{}) string {
|
||||
}
|
||||
func (m *Message) Formats(key string) string {
|
||||
switch key {
|
||||
case "meta":
|
||||
case kit.MDB_META:
|
||||
return kit.Formats(m.meta)
|
||||
}
|
||||
return m.Format(key)
|
||||
|
24
meta.go
24
meta.go
@ -9,13 +9,6 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func (m *Message) SetResult(arg ...interface{}) *Message {
|
||||
m.Set(MSG_RESULT)
|
||||
if len(arg) > 0 {
|
||||
m.Echo(kit.Format(arg[0]), arg[1:]...)
|
||||
}
|
||||
return m
|
||||
}
|
||||
func (m *Message) Set(key string, arg ...string) *Message {
|
||||
switch key {
|
||||
case MSG_DETAIL, MSG_RESULT:
|
||||
@ -304,7 +297,7 @@ func (m *Message) Table(cbs ...func(index int, value map[string]string, head []s
|
||||
}
|
||||
|
||||
//计算列宽
|
||||
space := kit.Select(" ", m.Option("table.space"))
|
||||
space := kit.Select(SP, m.Option("table.space"))
|
||||
depth, width := 0, map[string]int{}
|
||||
for _, k := range m.meta[MSG_APPEND] {
|
||||
if len(m.meta[k]) > depth {
|
||||
@ -319,8 +312,8 @@ func (m *Message) Table(cbs ...func(index int, value map[string]string, head []s
|
||||
}
|
||||
|
||||
// 回调函数
|
||||
rows := kit.Select("\n", m.Option("table.row_sep"))
|
||||
cols := kit.Select(" ", m.Option("table.col_sep"))
|
||||
rows := kit.Select(NL, m.Option("table.row_sep"))
|
||||
cols := kit.Select(SP, m.Option("table.col_sep"))
|
||||
compact := m.Option("table.compact") == TRUE
|
||||
cb := func(value map[string]string, field []string, index int) bool {
|
||||
for i, v := range field {
|
||||
@ -374,8 +367,7 @@ func (m *Message) Detailv(arg ...interface{}) []string {
|
||||
}
|
||||
func (m *Message) Optionv(key string, arg ...interface{}) interface{} {
|
||||
if len(arg) > 0 {
|
||||
// 写数据
|
||||
if kit.IndexOf(m.meta[MSG_OPTION], key) == -1 {
|
||||
if kit.IndexOf(m.meta[MSG_OPTION], key) == -1 { // 写数据
|
||||
m.meta[MSG_OPTION] = append(m.meta[MSG_OPTION], key)
|
||||
}
|
||||
|
||||
@ -391,7 +383,7 @@ func (m *Message) Optionv(key string, arg ...interface{}) interface{} {
|
||||
m.data[key] = str
|
||||
}
|
||||
if key == MSG_FIELDS {
|
||||
for _, k := range kit.Split(strings.Join(m.meta[key], ",")) {
|
||||
for _, k := range kit.Split(kit.Join(m.meta[key])) {
|
||||
delete(m.meta, k)
|
||||
}
|
||||
}
|
||||
@ -399,12 +391,10 @@ func (m *Message) Optionv(key string, arg ...interface{}) interface{} {
|
||||
|
||||
for msg := m; msg != nil; msg = msg.message {
|
||||
if list, ok := msg.data[key]; ok {
|
||||
// 读数据
|
||||
return list
|
||||
return list // 读数据
|
||||
}
|
||||
if list, ok := msg.meta[key]; ok {
|
||||
// 读选项
|
||||
return list
|
||||
return list // 读选项
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
23
misc.go
23
misc.go
@ -31,7 +31,7 @@ func (m *Message) CSV(text string, head ...string) *Message {
|
||||
}
|
||||
func (m *Message) Parse(meta string, key string, arg ...string) *Message {
|
||||
list := []string{}
|
||||
for _, line := range kit.Split(strings.Join(arg, " "), "\n") {
|
||||
for _, line := range kit.Split(strings.Join(arg, SP), NL) {
|
||||
ls := kit.Split(line)
|
||||
for i := 0; i < len(ls); i++ {
|
||||
if strings.HasPrefix(ls[i], "#") {
|
||||
@ -157,11 +157,6 @@ func (m *Message) cmd(arg ...interface{}) *Message {
|
||||
case Option:
|
||||
opts[val.Name] = val.Value
|
||||
|
||||
case *Sort:
|
||||
defer func() { m.Sort(val.Fields, val.Method) }()
|
||||
case Sort:
|
||||
defer func() { m.Sort(val.Fields, val.Method) }()
|
||||
|
||||
default:
|
||||
if reflect.Func == reflect.TypeOf(val).Kind() {
|
||||
cbs = val
|
||||
@ -183,7 +178,7 @@ func (m *Message) cmd(arg ...interface{}) *Message {
|
||||
ok := false
|
||||
run := func(msg *Message, ctx *Context, cmd *Command, key string, arg ...string) {
|
||||
if ok = true; cbs != nil {
|
||||
msg.Option(list[0]+".cb", cbs)
|
||||
msg.Option(kit.Keycb(list[0]), cbs)
|
||||
}
|
||||
for k, v := range opts {
|
||||
msg.Option(k, v)
|
||||
@ -242,7 +237,7 @@ func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action
|
||||
return m
|
||||
}
|
||||
|
||||
if k == "run" && m.Warn(!m.Right(arg), ErrNotRight, arg) {
|
||||
if k == RUN && m.Warn(!m.Right(arg), ErrNotRight, arg) {
|
||||
return m
|
||||
}
|
||||
|
||||
@ -250,8 +245,8 @@ func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action
|
||||
if len(h.List) > 0 && k != "search" {
|
||||
order := false
|
||||
for i, v := range h.List {
|
||||
name := kit.Format(kit.Value(v, "name"))
|
||||
value := kit.Format(kit.Value(v, "value"))
|
||||
name := kit.Format(kit.Value(v, kit.MDB_NAME))
|
||||
value := kit.Format(kit.Value(v, kit.MDB_VALUE))
|
||||
|
||||
if i == 0 && len(arg) > 0 && arg[0] != name {
|
||||
order = true
|
||||
@ -285,13 +280,13 @@ func (c *Context) split(name string) (list []interface{}) {
|
||||
)
|
||||
|
||||
item, button := kit.Dict(), false
|
||||
ls := kit.Split(name, " ", ":=@")
|
||||
ls := kit.Split(name, SP, ":=@")
|
||||
for i := 1; i < len(ls); i++ {
|
||||
switch ls[i] {
|
||||
case "text":
|
||||
list = append(list, kit.List(kit.MDB_TYPE, TEXTAREA, kit.MDB_NAME, "text")...)
|
||||
case "auto":
|
||||
list = append(list, kit.List(kit.MDB_TYPE, BUTTON, kit.MDB_NAME, "list", kit.MDB_VALUE, "auto")...)
|
||||
list = append(list, kit.List(kit.MDB_TYPE, BUTTON, kit.MDB_NAME, "list", kit.MDB_VALUE, AUTO)...)
|
||||
list = append(list, kit.List(kit.MDB_TYPE, BUTTON, kit.MDB_NAME, "back")...)
|
||||
button = true
|
||||
case "page":
|
||||
@ -307,7 +302,7 @@ func (c *Context) split(name string) (list []interface{}) {
|
||||
i++
|
||||
case "=":
|
||||
if value := kit.Select("", ls, i+1); strings.Contains(value, ",") {
|
||||
vs := strings.Split(value, ",")
|
||||
vs := kit.Split(value)
|
||||
if strings.Count(value, vs[0]) > 1 {
|
||||
item["values"] = vs[1:]
|
||||
} else {
|
||||
@ -320,7 +315,7 @@ func (c *Context) split(name string) (list []interface{}) {
|
||||
}
|
||||
i++
|
||||
case "@":
|
||||
item["action"] = kit.Select("", ls, i+1)
|
||||
item[kit.MDB_ACTION] = kit.Select("", ls, i+1)
|
||||
i++
|
||||
|
||||
default:
|
||||
|
@ -30,7 +30,7 @@ func init() {
|
||||
h := m.Cmdx(mdb.INSERT, m.Prefix(CACHE), "", mdb.HASH, m.OptionSimple("type,name,text,link"))
|
||||
value := kit.GetMeta(m.Confm(CACHE, kit.Keys(kit.MDB_HASH, h)))
|
||||
m.Option(kit.Keycb(web.DOWNLOAD), func(size, total int) {
|
||||
value[kit.MDB_TOTAL], value[kit.MDB_SIZE], value[kit.SSH_STEP] = total, size, kit.Format(size*100/total)
|
||||
value[kit.MDB_TOTAL], value[kit.MDB_SIZE], value[kit.MDB_STEP] = total, size, kit.Format(size*100/total)
|
||||
})
|
||||
msg := m.Cmd("web.spide", web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(kit.MDB_LINK))
|
||||
|
||||
@ -42,7 +42,7 @@ func init() {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.SSH_STEP, "100")
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_STEP, "100")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg), m.Conf(CACHE, kit.META_FIELD))
|
||||
|
@ -16,7 +16,7 @@ func _repos_path(name string) string {
|
||||
if strings.Contains(name, ":\\") {
|
||||
return name
|
||||
}
|
||||
return kit.Select(path.Join(kit.SSH_USR, name), "./", name == path.Base(kit.Pwd()))
|
||||
return kit.Select(path.Join(ice.USR, name), "./", name == path.Base(kit.Pwd()))
|
||||
}
|
||||
func _repos_insert(m *ice.Message, name string, dir string) {
|
||||
if s, e := os.Stat(m.Option(cli.CMD_DIR, path.Join(dir, ".git"))); e == nil && s.IsDir() {
|
||||
@ -52,14 +52,14 @@ func init() {
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Conf(REPOS, kit.MDB_HASH, "")
|
||||
_repos_insert(m, path.Base(kit.Pwd()), kit.Pwd())
|
||||
m.Cmd(nfs.DIR, kit.SSH_USR, "name,path").Table(func(index int, value map[string]string, head []string) {
|
||||
m.Cmd(nfs.DIR, ice.USR, "name,path").Table(func(index int, value map[string]string, head []string) {
|
||||
_repos_insert(m, value[kit.MDB_NAME], value[kit.MDB_PATH])
|
||||
})
|
||||
}},
|
||||
REPOS: {Name: "repos name path auto create", Help: "代码库", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create repos branch name path", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(kit.MDB_NAME, kit.Select(strings.TrimSuffix(path.Base(m.Option(kit.SSH_REPOS)), ".git"), m.Option(kit.MDB_NAME)))
|
||||
m.Option(kit.MDB_PATH, kit.Select(path.Join(kit.SSH_USR, m.Option(kit.MDB_NAME)), m.Option(kit.MDB_PATH)))
|
||||
m.Option(kit.MDB_PATH, kit.Select(path.Join(ice.USR, m.Option(kit.MDB_NAME)), m.Option(kit.MDB_PATH)))
|
||||
m.Option(kit.SSH_REPOS, kit.Select(m.Conf(REPOS, kit.Keym(kit.SSH_REPOS))+"/"+m.Option(kit.MDB_NAME), m.Option(kit.SSH_REPOS)))
|
||||
|
||||
if s, e := os.Stat(path.Join(m.Option(kit.MDB_PATH), ".git")); e == nil && s.IsDir() {
|
||||
|
@ -30,6 +30,8 @@ func _spide_go(m *ice.Message, file string) {
|
||||
case "w", "e":
|
||||
return
|
||||
ls[0] = "-" + ls[0] + ":" + strings.TrimPrefix(ls[len(ls)-1], "type:")
|
||||
case "-":
|
||||
return
|
||||
case "m":
|
||||
if strings.HasPrefix(ls[5], "ctype") {
|
||||
ls[0] = strings.TrimPrefix(ls[5], "ctype:") + ":" + ls[0]
|
||||
@ -74,9 +76,9 @@ func init() {
|
||||
}
|
||||
|
||||
if arg[0] == path.Base(kit.Pwd()) {
|
||||
m.Option(nfs.DIR_ROOT, path.Join(kit.SSH_SRC))
|
||||
m.Option(nfs.DIR_ROOT, path.Join(ice.SRC))
|
||||
} else {
|
||||
m.Option(nfs.DIR_ROOT, path.Join(kit.SSH_USR, arg[0]))
|
||||
m.Option(nfs.DIR_ROOT, path.Join(ice.USR, arg[0]))
|
||||
}
|
||||
|
||||
if len(arg) == 1 { // 目录列表
|
||||
|
@ -6,13 +6,13 @@ import (
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/crypto/ssh"
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
func _ssh_exec(m *ice.Message, cmd string, arg []string, env []string, input io.Reader, output io.Writer, done func()) {
|
||||
@ -71,6 +71,11 @@ func init() {
|
||||
CHANNEL: {Name: "channel", Help: "通道", Value: kit.Data()},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Richs(CHANNEL, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
|
||||
})
|
||||
}},
|
||||
CHANNEL: {Name: "channel hash id auto command prunes", Help: "通道", Action: map[string]*ice.Action{
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, CHANNEL, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
@ -3,12 +3,12 @@ package ssh
|
||||
import (
|
||||
"io"
|
||||
|
||||
"golang.org/x/crypto/ssh"
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
func _ssh_session(m *ice.Message, h string, client *ssh.Client) (*ssh.Session, error) {
|
||||
@ -62,6 +62,11 @@ func init() {
|
||||
SESSION: {Name: SESSION, Help: "会话", Value: kit.Data()},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Richs(SESSION, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
|
||||
})
|
||||
}},
|
||||
SESSION: {Name: "session hash id auto command prunes", Help: "会话", Action: map[string]*ice.Action{
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, SESSION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
25
option.go
25
option.go
@ -10,11 +10,6 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
type Sort struct {
|
||||
Fields string
|
||||
Method string
|
||||
}
|
||||
|
||||
type Option struct {
|
||||
Name string
|
||||
Value interface{}
|
||||
@ -61,7 +56,7 @@ func (m *Message) OptionSimple(key ...string) (res []string) {
|
||||
}
|
||||
func (m *Message) OptionTemplate() string {
|
||||
res := []string{`class="story"`}
|
||||
for _, key := range kit.Split("style") {
|
||||
for _, key := range kit.Split(kit.MDB_STYLE) {
|
||||
if m.Option(key) != "" {
|
||||
res = append(res, kit.Format(`s="%s"`, key, m.Option(key)))
|
||||
}
|
||||
@ -71,12 +66,12 @@ func (m *Message) OptionTemplate() string {
|
||||
res = append(res, kit.Format(`data-%s="%s"`, key, m.Option(key)))
|
||||
}
|
||||
}
|
||||
kit.Fetch(m.Optionv("extra"), func(key string, value string) {
|
||||
kit.Fetch(m.Optionv(kit.MDB_EXTRA), func(key string, value string) {
|
||||
if value != "" {
|
||||
res = append(res, kit.Format(`data-%s="%s"`, key, value))
|
||||
}
|
||||
})
|
||||
return strings.Join(res, " ")
|
||||
return kit.Join(res, SP)
|
||||
}
|
||||
|
||||
func (m *Message) Fields(length int, fields ...string) string {
|
||||
@ -89,7 +84,7 @@ func (m *Message) Upload(dir string) {
|
||||
m.Cmdy("web.cache", "watch", up[0], p)
|
||||
} else {
|
||||
// 下拉文件
|
||||
m.Cmdy("web.spide", "dev", "save", p, "GET",
|
||||
m.Cmdy("web.spide", DEV, SAVE, p, "GET",
|
||||
kit.MergeURL2(m.Option(MSG_USERWEB), path.Join("/share/cache", up[0])))
|
||||
}
|
||||
}
|
||||
@ -164,25 +159,25 @@ func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") }
|
||||
func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") }
|
||||
func (m *Message) ProcessDisplay(arg ...interface{}) {
|
||||
m.Process(PROCESS_DISPLAY)
|
||||
m.Option("_display", arg...)
|
||||
m.Option(MSG_DISPLAY, arg...)
|
||||
}
|
||||
|
||||
func (m *Message) ProcessCommand(cmd string, val []string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == "run" {
|
||||
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(val))
|
||||
m.ProcessField(cmd, RUN)
|
||||
m.Push(ARG, kit.Format(val))
|
||||
}
|
||||
func (m *Message) ProcessCommandOpt(arg ...string) {
|
||||
m.Push("opt", kit.Format(m.OptionSimple(arg...)))
|
||||
m.Push(OPT, kit.Format(m.OptionSimple(arg...)))
|
||||
}
|
||||
func (m *Message) ProcessField(arg ...interface{}) {
|
||||
m.Process(PROCESS_FIELD)
|
||||
m.Option("_prefix", arg...)
|
||||
m.Option(FIELD_PREFIX, arg...)
|
||||
}
|
||||
func (m *Message) ProcessInner() { m.Process(PROCESS_INNER) }
|
||||
func (m *Message) ProcessAgain() { m.Process(PROCESS_AGAIN) }
|
||||
|
20
render.go
20
render.go
@ -32,7 +32,7 @@ func Render(m *Message, cmd string, args ...interface{}) string {
|
||||
list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`,
|
||||
k, kit.Select(k, kit.Value(m._cmd.Meta, kit.Keys("_trans", k)), m.Option(MSG_LANGUAGE) != "en")))
|
||||
}
|
||||
return kit.Join(list, " ")
|
||||
return kit.Join(list, SP)
|
||||
|
||||
case RENDER_IMAGES: // src [size]
|
||||
return kit.Format(`<img src="%s" height=%s>`, arg[0], kit.Select("120", arg, 1))
|
||||
@ -94,9 +94,9 @@ func (m *Message) PushAction(list ...interface{}) {
|
||||
})
|
||||
}
|
||||
func (m *Message) PushPodCmd(cmd string, arg ...string) {
|
||||
if strings.Contains(m.OptionFields(), "pod") {
|
||||
if strings.Contains(m.OptionFields(), POD) {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push("pod", m.Option(MSG_USERPOD))
|
||||
m.Push(POD, m.Option(MSG_USERPOD))
|
||||
})
|
||||
}
|
||||
|
||||
@ -107,7 +107,7 @@ func (m *Message) PushPodCmd(cmd string, arg ...string) {
|
||||
break
|
||||
}
|
||||
m.Cmd("web.space", value[kit.MDB_NAME], m.Prefix(cmd), arg).Table(func(index int, val map[string]string, head []string) {
|
||||
val["pod"] = kit.Keys(value[kit.MDB_NAME], val["pod"])
|
||||
val[POD] = kit.Keys(value[kit.MDB_NAME], val[POD])
|
||||
m.Push("", val, head)
|
||||
})
|
||||
}
|
||||
@ -117,13 +117,13 @@ func (m *Message) PushSearch(args ...interface{}) {
|
||||
data := kit.Dict(args...)
|
||||
for _, k := range kit.Split(m.OptionFields()) {
|
||||
switch k {
|
||||
case "pod":
|
||||
case POD:
|
||||
m.Push(k, "")
|
||||
// m.Push(k, kit.Select(m.Option(MSG_USERPOD), data[kit.SSH_POD]))
|
||||
case "ctx":
|
||||
case CTX:
|
||||
m.Push(k, m.Prefix())
|
||||
case "cmd":
|
||||
m.Push(k, kit.Format(data["cmd"]))
|
||||
case CMD:
|
||||
m.Push(k, kit.Format(data[CMD]))
|
||||
case kit.MDB_TIME:
|
||||
m.Push(k, kit.Select(m.Time(), data[k]))
|
||||
default:
|
||||
@ -139,7 +139,7 @@ func (m *Message) PushSearchWeb(cmd string, name string) {
|
||||
if value[kit.MDB_NAME] == "" {
|
||||
text = kit.MergeURL(value[kit.MDB_TEXT] + url.QueryEscape(name))
|
||||
}
|
||||
m.PushSearch("cmd", cmd, kit.MDB_TYPE, kit.Select("", value[kit.MDB_TYPE]), kit.MDB_NAME, name, kit.MDB_TEXT, text)
|
||||
m.PushSearch(CMD, cmd, kit.MDB_TYPE, kit.Select("", value[kit.MDB_TYPE]), kit.MDB_NAME, name, kit.MDB_TEXT, text)
|
||||
})
|
||||
}
|
||||
|
||||
@ -193,5 +193,5 @@ func (m *Message) RenderDownload(args ...interface{}) *Message {
|
||||
return m.Render(RENDER_DOWNLOAD, args...)
|
||||
}
|
||||
func (m *Message) RenderIndex(serve, repos string, file ...string) *Message {
|
||||
return m.RenderDownload(path.Join(m.Conf(serve, kit.Keym(repos, kit.SSH_PATH)), kit.Select(m.Conf(serve, kit.Keym(repos, kit.SSH_INDEX)), path.Join(file...))))
|
||||
return m.RenderDownload(path.Join(m.Conf(serve, kit.Keym(repos, kit.MDB_PATH)), kit.Select(m.Conf(serve, kit.Keym(repos, kit.MDB_INDEX)), path.Join(file...))))
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user