1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2023-02-19 19:14:25 +08:00
parent 9207059fce
commit 6127d47aee
14 changed files with 50 additions and 119 deletions

View File

@ -71,6 +71,7 @@ func init() {
m.PushQRCode(mdb.SCAN, kit.Format(m.Config(mdb.LINK), value[mdb.NAME], value[SECRET]))
m.Echo(m.Append(mdb.VALUE))
} else {
m.PushAction(mdb.REMOVE)
m.StatusTimeCount()
}
})

View File

@ -117,7 +117,7 @@ func (f *Frame) parse(m *ice.Message, h, line string) string {
func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
f.ps1 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS1)))
f.ps2 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS2)))
// m.Options(MESSAGE, m, ice.LOG_DISABLE, ice.TRUE)
m.Options(MESSAGE, m, ice.LOG_DISABLE, ice.TRUE)
m.I, m.O = f.stdin, f.stdout
ps, bio := f.ps1, bufio.NewScanner(f.stdin)
for f.prompt(m, ps...); f.stdin != nil && bio.Scan(); f.prompt(m, ps...) {

View File

@ -111,7 +111,8 @@ func init() {
gdb.Event(m, "", arg)
}
}},
mdb.CREATE: {Name: "create name=hi repos template", Hand: func(m *ice.Message, arg ...string) {
mdb.CREATE: {Name: "create name*=hi repos template", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.REPOS, kit.Slice(kit.Split(m.Option(nfs.REPOS)), -1)[0])
_dream_show(m, m.OptionDefault(mdb.NAME, path.Base(m.Option(nfs.REPOS))))
}},
cli.START: {Hand: func(m *ice.Message, arg ...string) {

View File

@ -110,8 +110,11 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response
if m.Option(ice.MSG_USERWEB, _serve_domain(m)); m.Option(ice.POD) != "" {
m.Option(ice.MSG_USERPOD, m.Option(ice.POD))
}
u := OptionUserWeb(m)
m.Option(ice.MSG_USERHOST, tcp.PublishLocalhost(m, u.Scheme+"://"+u.Host))
if u := OptionUserWeb(m); strings.Contains(u.Host, tcp.LOCALHOST) {
m.Option(ice.MSG_USERHOST, tcp.PublishLocalhost(m, u.Scheme+"://"+u.Host))
} else {
m.Option(ice.MSG_USERHOST, u.Scheme+"://"+u.Host)
}
m.Option(ice.MSG_SESSID, kit.Select(m.Option(ice.MSG_SESSID), m.Option(CookieName(m.Option(ice.MSG_USERWEB)))))
if m.Optionv(ice.MSG_CMDS) == nil {
if p := strings.TrimPrefix(r.URL.Path, key); p != "" {
@ -234,9 +237,9 @@ func init() {
m.RenderDownload(p)
}},
PP(ice.REQUIRE, ice.NODE_MODULES): {Name: "/require/node_modules/", Help: "依赖库", Hand: func(m *ice.Message, arg ...string) {
p := path.Join(ice.SRC, ice.NODE_MODULES, path.Join(arg...))
p := path.Join(ice.USR, ice.NODE_MODULES, path.Join(arg...))
if !nfs.ExistsFile(m, p) {
m.Cmd(cli.SYSTEM, "npm", "install", arg[0], kit.Dict(cli.CMD_DIR, ice.SRC))
m.Cmd(cli.SYSTEM, "npm", "install", arg[0], kit.Dict(cli.CMD_DIR, ice.USR))
}
m.RenderDownload(p)
}},

View File

@ -282,7 +282,7 @@ func init() {
mdb.CREATE: {Name: "create name address", Hand: func(m *ice.Message, arg ...string) { _spide_create(m, m.Option(mdb.NAME), m.Option(ADDRESS)) }},
tcp.CLIENT: {Hand: func(m *ice.Message, arg ...string) {
msg := m.Cmd("", kit.Select(ice.DEV, arg, 0))
ls := kit.Split(msg.Append(CLIENT_HOSTNAME), ice.DF)
ls := kit.Split(msg.Append(kit.Keys(SPIDE_CLIENT, tcp.HOST)), ice.DF)
m.Push(tcp.HOST, ls[0]).Push(tcp.PORT, kit.Select(kit.Select("443", "80", msg.Append(CLIENT_PROTOCOL) == ice.HTTP), ls, 1))
m.Push(DOMAIN, msg.Append(CLIENT_PROTOCOL)+"://"+msg.Append(CLIENT_HOSTNAME)+kit.Select("", arg, 1))
m.Push(tcp.PROTOCOL, msg.Append(CLIENT_PROTOCOL)).Push(tcp.HOSTNAME, msg.Append(CLIENT_HOSTNAME))

36
conf.go
View File

@ -120,33 +120,31 @@ const ( // DIR
USR_LOCAL_EXPORT = "usr/local/export/"
USR_LOCAL_REPOS = "usr/local/repos/"
VAR_RUN = "var/run/"
VAR_TMP = "var/tmp/"
VAR_LOG = "var/log/"
VAR_CONF = "var/conf/"
VAR_DATA = "var/data/"
VAR_FILE = "var/file/"
VAR_PROXY = "var/proxy/"
VAR_TRASH = "var/trash/"
BIN_ICE_BIN = "bin/ice.bin"
BIN_BOOT_LOG = "bin/boot.log"
ETC_INIT_SHY = "etc/init.shy"
ETC_LOCAL_SHY = "etc/local.shy"
ETC_EXIT_SHY = "etc/exit.shy"
ETC_MISS_SH = "etc/miss.sh"
ETC_PATH = "etc/path"
VAR_RUN = "var/run/"
VAR_TMP = "var/tmp/"
VAR_LOG = "var/log/"
VAR_CONF = "var/conf/"
VAR_DATA = "var/data/"
VAR_FILE = "var/file/"
VAR_PROXY = "var/proxy/"
VAR_TRASH = "var/trash/"
BIN_ICE_BIN = "bin/ice.bin"
BIN_BOOT_LOG = "bin/boot.log"
ETC_INIT_SHY = "etc/init.shy"
ETC_LOCAL_SHY = "etc/local.shy"
ETC_EXIT_SHY = "etc/exit.shy"
ETC_MISS_SH = "etc/miss.sh"
ETC_PATH = "etc/path"
SRC_HELP = "src/help/"
SRC_DEBUG = "src/debug/"
SRC_RELEASE = "src/release/"
SRC_MAIN_SVG = "src/main.svg"
SRC_MAIN_SHY = "src/main.shy"
SRC_MAIN_SH = "src/main.sh"
SRC_MAIN_JS = "src/main.js"
SRC_MAIN_GO = "src/main.go"
SRC_VERSION_GO = "src/version.go"
SRC_BINPACK_GO = "src/binpack.go"
SRC_VERSION_GO = "src/version.go"
SRC_WEBVIEW_GO = "src/webview.go"
SRC_RELAY_GO = "src/relay.go"
README_MD = "README.md"
MAKEFILE = "Makefile"
LICENSE = "LICENSE"

View File

@ -7,7 +7,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/ssh"
@ -104,25 +103,8 @@ const AUTOGEN = "autogen"
func init() {
Index.MergeCommands(ice.Commands{
AUTOGEN: {Name: "autogen path auto module binpack script relay", Help: "生成", Actions: ice.Actions{
AUTOGEN: {Name: "autogen path auto module binpack script", Help: "生成", Actions: ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(ctx.ACTION) == RELAY {
switch arg[0] {
case nfs.ALIAS:
m.Cmdy(web.SPIDE).CutTo("client.name", arg[0])
case aaa.USERNAME:
m.Cmdy(aaa.USER).Cut(aaa.USERNAME)
m.Push(arg[0], "shy")
case tcp.HOST:
m.Option(ice.MSG_FIELDS, "client.hostname")
m.Cmdy(web.SPIDE)
case tcp.PORT:
m.Push(arg[0], "22")
case ice.INIT:
m.Push(arg[0], "tmux attach -t miss")
}
return
}
switch arg[0] {
case cli.MAIN:
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH), nfs.DIR_REG, `.*\.go$`)).RenameAppend(nfs.PATH, arg[0])
@ -165,13 +147,6 @@ func init() {
_autogen_version(m)
m.Cmdy(nfs.CAT, ice.SRC_VERSION_GO)
}},
RELAY: {Name: "relay alias username host port=22 init", Help: "跳板", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(COMPILE, RELAY)
// m.Cmdy(nfs.LINK, ice.USR_PUBLISH+m.Option(mdb.ALIAS), ice.USR_PUBLISH+RELAY)
m.Cmdy(cli.SYSTEM, "ln", "-s", RELAY, ice.USR_PUBLISH+m.Option(mdb.ALIAS))
m.Cmd(nfs.SAVE, path.Join(kit.Env(cli.HOME), ".ssh/"+m.Option(mdb.ALIAS)+".json"),
kit.Formats(kit.Dict(m.OptionSimple("username,host,port,init"))))
}},
}, Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, kit.Select(path.Base(ice.SRC_VERSION_GO), arg, 0), kit.Dict(nfs.DIR_ROOT, ice.SRC))
}},

View File

@ -16,38 +16,21 @@ import (
)
func _binpack_file(m *ice.Message, w io.Writer, arg ...string) {
switch arg[0] {
case ice.SRC_BINPACK_GO, ice.SRC_VERSION_GO, ice.ETC_LOCAL_SHY:
return
}
if f, e := nfs.OpenFile(m, arg[0]); !m.Warn(e, ice.ErrNotFound, arg[0]) {
defer f.Close()
if b, e := ioutil.ReadAll(f); !m.Warn(e, ice.ErrNotValid, arg[0]) && len(b) > 0 || strings.Contains(arg[0], "/cache.") {
if b, e := ioutil.ReadAll(f); !m.Warn(e, ice.ErrNotValid, arg[0]) {
fmt.Fprintf(w, " \"%s\": \"%s\",\n", kit.Select(arg[0], arg, 1), base64.StdEncoding.EncodeToString(b))
}
}
}
func _binpack_dir(m *ice.Message, w io.Writer, dir string) {
nfs.DirDeepAll(m, dir, nfs.PWD, func(value ice.Maps) {
switch path.Base(value[nfs.PATH]) {
case ice.GO_MOD, ice.GO_SUM, "binpack.go", "version.go":
return
}
switch strings.Split(value[nfs.PATH], ice.PS)[0] {
case ice.BIN, ice.VAR, "website", "polaris":
return
}
_binpack_file(m, w, path.Join(dir, value[nfs.PATH]))
})
fmt.Fprintln(w)
}
func _binpack_can(m *ice.Message, w io.Writer, dir string) {
for _, k := range []string{ice.INDEX_CSS, ice.PROTO_JS, ice.FRAME_JS} {
_binpack_file(m, w, path.Join(dir, k))
}
for _, k := range []string{LIB, PAGE, PANEL, PLUGIN, "publish/client/nodejs/"} {
nfs.DirDeepAll(m, dir, k, func(value ice.Maps) {
_binpack_file(m, w, path.Join(dir, value[nfs.PATH]))
})
}
fmt.Fprintln(w)
}
func _binpack_all(m *ice.Message) {
nfs.OptionFiles(m, nfs.DiskFile)
@ -56,23 +39,15 @@ func _binpack_all(m *ice.Message) {
defer m.Echo(p)
fmt.Fprintln(w, _binpack_template)
defer fmt.Fprintln(w, _binpack_template_end)
if m.Option(ice.MSG_USERPOD) == "" {
if nfs.ExistsFile(m, ice.USR_VOLCANOS) {
_binpack_can(m, w, ice.USR_VOLCANOS)
}
if nfs.ExistsFile(m, ice.USR_INTSHELL) {
_binpack_dir(m, w, ice.USR_INTSHELL)
}
}
_binpack_dir(m, w, ice.USR_VOLCANOS)
_binpack_dir(m, w, ice.USR_INTSHELL)
_binpack_dir(m, w, ice.SRC)
_binpack_file(m, w, ice.ETC_MISS_SH)
_binpack_file(m, w, ice.ETC_INIT_SHY)
_binpack_file(m, w, ice.ETC_EXIT_SHY)
fmt.Fprintln(w)
_binpack_file(m, w, ice.LICENSE)
_binpack_file(m, w, ice.MAKEFILE)
_binpack_file(m, w, ice.README_MD)
fmt.Fprintln(w)
_binpack_file(m, w, ice.MAKEFILE)
_binpack_file(m, w, ice.LICENSE)
list := map[string]bool{}
ctx.TravelCmd(m, func(key, file, line string) {
dir := path.Dir(file)
@ -126,15 +101,12 @@ import (
)
func init() {
pack := ice.Maps{
`
var _binpack_template_end = `
}
pack := ice.Maps{`
var _binpack_template_end = ` }
nfs.PackFile.RemoveAll(ice.SRC)
for k, v := range pack {
if b, e := base64.StdEncoding.DecodeString(v); e == nil {
nfs.PackFile.WriteFile(k, b)
}
}
}
`
}`

View File

@ -35,14 +35,11 @@ func _compile_target(m *ice.Message, arg ...string) (string, string, string, str
return main, file, goos, arch
}
const (
RELAY = "relay"
)
const COMPILE = "compile"
func init() {
Index.MergeCommands(ice.Commands{
COMPILE: {Name: "compile arch=amd64,386,mipsle,arm,arm64 os=linux,darwin,windows src=src/main.go@key run relay binpack", Help: "编译", Actions: ice.MergeActions(ice.Actions{
COMPILE: {Name: "compile arch=amd64,386,arm,arm64,mipsle os=linux,darwin,windows src=src/main.go@key run binpack", Help: "编译", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
kit.Fetch([]string{"curl", "make", "gcc", "vim", "tmux"}, func(cmd string) { cli.IsSystem(m, cmd) })
if cli.IsAlpine(m, "git"); !cli.IsAlpine(m, "go", "go git") {
@ -53,7 +50,6 @@ func init() {
m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, kit.ExtReg(GO)))
}},
BINPACK: {Help: "打包", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(AUTOGEN, BINPACK) }},
RELAY: {Help: "跳板", Hand: func(m *ice.Message, arg ...string) { m.Cmdy("", ice.SRC_RELAY_GO, path.Join(ice.USR_PUBLISH, RELAY)) }},
}, ctx.ConfAction(cli.ENV, kit.Dict("GOPRIVATE", "shylinux.com,github.com", "GOPROXY", "https://goproxy.cn,direct", "CGO_ENABLED", "0"))), Hand: func(m *ice.Message, arg ...string) {
_autogen_version(m.Spawn())
main, file, goos, arch := _compile_target(m, arg...)

View File

@ -61,9 +61,6 @@ func _publish_contexts(m *ice.Message, arg ...string) {
m.Option(web.DOMAIN, fmt.Sprintf("%s://%s:%s", u.Scheme, host, kit.Select(kit.Select("443", "80", u.Scheme == ice.HTTP), strings.Split(u.Host, ice.DF), 1)))
for _, k := range kit.Default(arg, ice.MISC) {
switch k {
case INSTALL:
m.Echo(kit.Renders(`export ctx_dev={{.Option "domain"}}{{.Option "ctx_env"}}; ctx_temp=$(mktemp); wget -O $ctx_temp -q $ctx_dev; source $ctx_temp app username {{.Option "user.name"}}`, m))
return
case ice.MISC:
_publish_file(m, ice.ICE_BIN)
case ice.CORE:
@ -85,13 +82,9 @@ const PUBLISH = "publish"
func init() {
Index.MergeCommands(ice.Commands{
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell relay", Help: "发布", Actions: ice.MergeActions(ice.Actions{
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell", Help: "发布", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Config(ice.CONTEXTS, _contexts) }},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(ctx.ACTION) == RELAY {
m.Cmdy(AUTOGEN, mdb.INPUTS, arg)
return
}
m.Cmdy(nfs.DIR, arg[1:]).Cut("path,size,time").ProcessAgain()
}},
web.SERVE_START: {Hand: func(m *ice.Message, arg ...string) {
@ -115,10 +108,7 @@ func init() {
}},
ice.CONTEXTS: {Hand: func(m *ice.Message, arg ...string) { _publish_contexts(m, arg...) }},
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { _publish_file(m, m.Option(nfs.FILE)) }},
RELAY: {Name: "relay alias username host port=22 init", Help: "跳板", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(AUTOGEN, RELAY, arg)
}},
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.Trash(m, path.Join(ice.USR_PUBLISH, m.Option(nfs.PATH))) }},
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.Trash(m, path.Join(ice.USR_PUBLISH, m.Option(nfs.PATH))) }},
}, ctx.ConfAction(ice.CONTEXTS, _contexts), aaa.RoleAction()), Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), nfs.DIR_WEB_FIELDS, kit.Dict(nfs.DIR_ROOT, ice.USR_PUBLISH)).SortTimeR(mdb.TIME)
}},
@ -127,10 +117,10 @@ func init() {
var _contexts = kit.Dict(
ice.MISC, `
# 下载工具 wget Alpine
# 下载应用 wget Alpine / Busybox
export ctx_dev={{.Option "domain"}}{{.Option "ctx_env"}}; ctx_temp=$(mktemp); wget -O $ctx_temp -q $ctx_dev; source $ctx_temp app username {{.Option "user.name"}} usernick {{.Option "user.nick"}}
# 下载工具 curl Centos / MacOS
# 下载应用 curl Centos / MacOS
export ctx_dev={{.Option "domain"}}{{.Option "ctx_env"}}; ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL $ctx_dev; source $ctx_temp app username {{.Option "user.name"}} usernick {{.Option "user.nick"}}
`,
ice.CORE, `

View File

@ -56,7 +56,7 @@ const PLAN = "plan"
func init() {
Index.MergeCommands(ice.Commands{
PLAN: {Name: "plan scale=week,day,week,month,year,long begin_time@date place@province img@img list", Help: "计划", Actions: ice.MergeActions(ice.Actions{
PLAN: {Name: "plan scale=week,day,week,month,year,long begin_time@date place@province img@img list", Help: "任务计划", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(TODO, mdb.INPUTS, arg) }},
mdb.PLUGIN: {Name: "plugin extra.index extra.args", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(TASK, mdb.MODIFY, arg) }},
mdb.INSERT: {Name: "insert zone* type=once,step,week name* text begin_time@date close_time@date", Hand: func(m *ice.Message, arg ...string) {

View File

@ -176,7 +176,7 @@ const STATUS = "status"
func init() {
Index.MergeCommands(ice.Commands{
STATUS: {Name: "status repos:text auto", Help: "状态机", Actions: ice.MergeActions(ice.Actions{
STATUS: {Name: "status repos:text auto", Help: "代码库", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case COMMENT:

View File

@ -192,7 +192,7 @@ func init() {
)), Hand: func(m *ice.Message, arg ...string) {
m.Fields(len(arg), m.Config(mdb.FIELD), m.Config(mdb.FIELDS))
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.PushAction(aaa.INVITE, mdb.INSERT, ctx.LOAD, ctx.SAVE)
m.PushAction(aaa.INVITE, mdb.INSERT, ctx.LOAD, ctx.SAVE, mdb.REMOVE)
}
}},
})

View File

@ -1,9 +1,4 @@
chapter "ssh"
refer `
官网 http://www.openssh.com/
文档 https://man.openbsd.org/ssh
源码 https://github.com/openssh/openssh-portable
`
field "连接" ssh.connect
field "会话" ssh.session