diff --git a/base/web/dream.go b/base/web/dream.go index 9c0d6bb3..f71d9fd1 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -111,7 +111,7 @@ func init() { _dream_list(m).Cut("name,status,time") } }}, - cli.START: {Name: "start name repos river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + cli.START: {Name: "start name=hi repos river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { _dream_show(m, m.Option(mdb.NAME, kit.Select(path.Base(m.Option(nfs.REPOS)), m.Option(mdb.NAME)))) }}, "open": {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) { diff --git a/core/code/binpack.go b/core/code/binpack.go index 394bdffc..ade9379a 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -1,6 +1,7 @@ package code import ( + "encoding/base64" "fmt" "io" "io/ioutil" @@ -17,17 +18,13 @@ import ( ) func _binpack_file(m *ice.Message, arg ...string) string { // file name - text := "" if f, e := os.Open(arg[0]); e == nil { defer f.Close() - if b, e := ioutil.ReadAll(f); e == nil && len(b) > 0 { - if list := strings.ReplaceAll(fmt.Sprintf("%v", b), ice.SP, ice.FS); len(list) > 0 { - text = list[1 : len(list)-1] - } + return fmt.Sprintf(" \"%s\": \"%s\",", kit.Select(arg[0], arg, 1), base64.StdEncoding.EncodeToString(b)) } } - return fmt.Sprintf(" \"%s\": []byte{%s},", kit.Select(arg[0], arg, 1), text) + return fmt.Sprintf(" // \"%s\": \"%s\",", kit.Select(arg[0], arg, 1), "") } func _binpack_dir(m *ice.Message, f *os.File, dir string) { m.Option(nfs.DIR_ROOT, dir) @@ -35,16 +32,12 @@ func _binpack_dir(m *ice.Message, f *os.File, dir string) { m.Option(nfs.DIR_TYPE, nfs.CAT) m.Cmd(nfs.DIR, nfs.PWD).Sort(nfs.PATH).Tables(func(value map[string]string) { - if path.Base(value[nfs.PATH]) == "binpack.go" { + switch path.Base(value[nfs.PATH]) { + case "go.sum", "binpack.go": return } - if path.Base(value[nfs.PATH]) == "go.sum" { - return - } - if strings.HasPrefix(value[nfs.PATH], "var/") { - return - } - if strings.HasPrefix(value[nfs.PATH], "website/") { + switch strings.Split(value[nfs.PATH], ice.PS)[0] { + case "var", "polaris", "website": return } fmt.Fprintln(f, _binpack_file(m, path.Join(dir, value[nfs.PATH]))) @@ -75,119 +68,108 @@ func _binpack_ctx(m *ice.Message, f *os.File) { const BINPACK = "binpack" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - BINPACK: {Name: "binpack", Help: "打包", Value: kit.Data(mdb.SHORT, "path", mdb.FIELD, "time,path")}, - }, - Commands: map[string]*ice.Command{ - BINPACK: {Name: "binpack path auto create remove export", Help: "打包", Action: map[string]*ice.Action{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - if kit.FileExists(path.Join(ice.USR_VOLCANOS, ice.PROTO_JS)) { - m.Cmd(BINPACK, mdb.REMOVE) - } else { - ice.Info.Dump = func(w io.Writer, name string, cb func(string)) bool { - for _, key := range []string{name, strings.TrimPrefix(name, ice.USR_VOLCANOS)} { - if b, ok := ice.Info.Pack[key]; ok { - if cb != nil { - cb(name) - } - w.Write(b) - return true // 打包文件 - } - } - return false - } - web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool { - if ice.Info.Dump(w, r.URL.Path, func(name string) { web.RenderType(w, name, "") }) { - return true // 打包文件 - } - return false - }) - } - - nfs.AddRewrite(func(msg *ice.Message, name string) []byte { - if strings.HasPrefix(name, ice.SRC) && kit.FileExists(name) { - return nil - } - if b, ok := ice.Info.Pack[name]; ok { - m.Logs(BINPACK, len(b), name) - return b - } - if b, ok := ice.Info.Pack[path.Join(m.Option(nfs.DIR_ROOT), name)]; ok && len(b) > 0 { - m.Logs(BINPACK, len(b), name) - return b - } - if b, ok := ice.Info.Pack[strings.TrimPrefix(name, ice.USR_VOLCANOS)]; ok && len(b) > 0 { - m.Logs(BINPACK, len(b), name) - return b - } - if b, ok := ice.Info.Pack[path.Join(ice.PS, name)]; ok && len(b) > 0 { - m.Logs(BINPACK, len(b), name) - return b - } - return nil - }) - }}, - mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - if f, p, e := kit.Create(ice.SRC_BINPACK_GO); m.Assert(e) { - defer f.Close() - defer m.Echo(p) - - fmt.Fprintln(f, `package main`) - fmt.Fprintln(f) - fmt.Fprintln(f, `import (`) - fmt.Fprintln(f, ` ice "shylinux.com/x/icebergs"`) - fmt.Fprintln(f, `)`) - fmt.Fprintln(f) - - fmt.Fprintln(f, `func init() {`) - defer fmt.Fprintln(f, `}`) - - if kit.FileExists(ice.USR_VOLCANOS) && kit.FileExists(ice.USR_INTSHELL) && m.Option(ice.MSG_USERPOD) == "" { - fmt.Fprintln(f, ` ice.Info.Pack = map[string][]byte{`) - _binpack_can(m, f, ice.USR_VOLCANOS) - _binpack_dir(m, f, ice.USR_INTSHELL) - fmt.Fprintln(f, ` }`) - } - - fmt.Fprintln(f, ` pack := map[string][]byte{`) - _binpack_ctx(m, f) - m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields(nfs.PATH)).Table(func(index int, value map[string]string, head []string) { - _binpack_dir(m, f, value[nfs.PATH]) - }) - fmt.Fprintln(f, _binpack_file(m, ice.ETC_INIT_SHY)) - fmt.Fprintln(f, _binpack_file(m, ice.ETC_EXIT_SHY)) - fmt.Fprintln(f, ` }`) - fmt.Fprintln(f, ` - for k, v := range pack { - ice.Info.Pack[k] = v - } -`) - } - }}, - mdb.INSERT: {Name: "insert", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, nfs.PATH, arg[0]) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - ice.Info.Pack = map[string][]byte{} - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - for key, value := range ice.Info.Pack { - if strings.HasPrefix(key, ice.PS) { - key = ice.USR_VOLCANOS + key - } - m.Log_EXPORT(nfs.FILE, kit.WriteFile(key, value), nfs.SIZE, len(value)) - } - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - for k, v := range ice.Info.Pack { - m.Push(nfs.PATH, k).Push(nfs.SIZE, len(v)) - } - m.Sort(nfs.PATH) + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + BINPACK: {Name: "binpack path auto create remove export", Help: "打包", Action: ice.MergeAction(map[string]*ice.Action{ + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { + if kit.FileExists(path.Join(ice.USR_VOLCANOS, ice.PROTO_JS)) { + m.Cmd(BINPACK, mdb.REMOVE) return } - m.Echo(string(ice.Info.Pack[arg[0]])) + + ice.Info.Dump = func(w io.Writer, name string, cb func(string)) bool { + for _, key := range []string{name, strings.TrimPrefix(name, ice.USR_VOLCANOS)} { + if b, ok := ice.Info.Pack[key]; ok { + if cb != nil { + cb(name) + } + w.Write(b) + return true // 读取数据 + } + } + return false + } + web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool { + if ice.Info.Dump(w, r.URL.Path, func(name string) { web.RenderType(w, name, "") }) { + return true // 输出数据 + } + return false + }) + nfs.AddRewrite(func(msg *ice.Message, name string) []byte { + if strings.HasPrefix(name, ice.SRC) && kit.FileExists(name) { + return nil + } + for _, key := range []string{name, path.Join(m.Option(nfs.DIR_ROOT), name), path.Join(ice.PS, name), strings.TrimPrefix(name, ice.USR_VOLCANOS)} { + if b, ok := ice.Info.Pack[key]; ok && len(b) > 0 { + m.Logs(BINPACK, len(b), key) + return b // 读取数据 + } + } + return nil + }) }}, - }}) + mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + if f, p, e := kit.Create(ice.SRC_BINPACK_GO); m.Assert(e) { + defer f.Close() + defer m.Echo(p) + + fmt.Fprintln(f, `package main + +import ( + "encoding/base64" + ice "shylinux.com/x/icebergs" +) + +func init() { +`) + defer fmt.Fprintln(f, `}`) + + defer fmt.Fprintln(f, ` + for k, v := range pack { + ice.Info.Pack[k], _ = base64.StdEncoding.DecodeString(v) + } +`) + + fmt.Fprintln(f, ` pack := map[string]string{`) + defer fmt.Fprintln(f, ` }`) + + if kit.FileExists(ice.USR_VOLCANOS) && kit.FileExists(ice.USR_INTSHELL) && m.Option(ice.MSG_USERPOD) == "" { + _binpack_can(m, f, ice.USR_VOLCANOS) + _binpack_dir(m, f, ice.USR_INTSHELL) + } + _binpack_ctx(m, f) + + fmt.Fprintln(f, _binpack_file(m, ice.ETC_INIT_SHY)) + fmt.Fprintln(f, _binpack_file(m, ice.ETC_EXIT_SHY)) + fmt.Fprintln(f) + + m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields(nfs.PATH)).Tables(func(value map[string]string) { + _binpack_dir(m, f, value[nfs.PATH]) + }) + } + }}, + mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, nfs.PATH, arg[0]) + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + ice.Info.Pack = map[string][]byte{} + }}, + mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + for key, value := range ice.Info.Pack { + if strings.HasPrefix(key, ice.PS) { + key = ice.USR_VOLCANOS + key + } + m.Log_EXPORT(nfs.FILE, kit.WriteFile(key, value), nfs.SIZE, len(value)) + } + }}, + }, mdb.HashAction(mdb.SHORT, nfs.PATH)), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + for k, v := range ice.Info.Pack { + m.Push(nfs.PATH, k).Push(nfs.SIZE, len(v)) + } + m.Sort(nfs.PATH) + return + } + m.Echo(string(ice.Info.Pack[arg[0]])) + }}, + }}) } diff --git a/core/code/publish.go b/core/code/publish.go index 741dafb9..4030d7cc 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -148,11 +148,11 @@ func init() { } var _contexts = kit.Dict( - ice.MISC, `# 源码下载 -git clone {{.Option "httphost"}}/x/{{.Option "user.pod"}}; cd {{.Option "user.pod"}} && source etc/miss.sh port 9020 -`, - ice.CORE, `# 命令下载 + ice.MISC, `# 命令下载 export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); wget -O $ctx_temp $ctx_dev; source $ctx_temp app +`, + ice.CORE, `# 源码下载 +git clone {{.Option "httphost"}}/x/{{.Option "user.pod"}}; cd {{.Option "user.pod"}} && source etc/miss.sh port 9020 `, ice.BASE, `# 官方下载 ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary diff --git a/core/code/vimer.go b/core/code/vimer.go index 7f1ec4d7..ae6df7df 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -24,7 +24,7 @@ func init() { AUTOGEN: {Name: "create main=src/main.go zone name=hi help type=Zone,Hash,Lists,Data,Code list key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(AUTOGEN, mdb.CREATE, arg) }}, - web.DREAM: {Name: "dream name repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) { + web.DREAM: {Name: "dream name=hi repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.DREAM, cli.START, arg) }}, "script": {Name: "script file=hi/hi.js text=", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { diff --git a/misc/wework/bot.go b/misc/wework/bot.go index 05cc70ce..b5973685 100644 --- a/misc/wework/bot.go +++ b/misc/wework/bot.go @@ -24,16 +24,19 @@ func init() { web.WEB_LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}}, "/bot/": {Name: "/bot/", Help: "机器人", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { msg := m.Cmd(BOT, arg[0]) + check := kit.Sort([]string{msg.Append("token"), m.Option("nonce"), m.Option("timestamp"), m.Option("echostr")}) sig := kit.Format(sha1.Sum([]byte(strings.Join(check, "")))) - if m.Warn(sig != m.Option("msg_signature"), ice.ErrNotRight, arg) { + if m.Warn(sig != m.Option("msg_signature"), ice.ErrNotRight, check, sig) { // return } - aeskey, err := base64.RawURLEncoding.DecodeString(msg.Append("ekey")) + aeskey, err := base64.StdEncoding.DecodeString(msg.Append("ekey")) + m.Debug("what %v %v", msg.Append("ekey"), aeskey) m.Assert(err) - en_msg, err := base64.RawURLEncoding.DecodeString(m.Option("echostr")) + en_msg, err := base64.StdEncoding.DecodeString(m.Option("echostr")) + m.Debug("what %v", en_msg) m.Assert(err) block, err := aes.NewCipher(aeskey) @@ -41,6 +44,8 @@ func init() { mode := cipher.NewCBCDecrypter(block, aeskey[:aes.BlockSize]) mode.CryptBlocks(en_msg, en_msg) + m.Debug("what %v", en_msg) + m.RenderResult(en_msg) }}, BOT: {Name: "bot name chat text:textarea auto create", Help: "机器人", Action: ice.MergeAction(map[string]*ice.Action{ mdb.CREATE: {Name: "create name token ekey hook", Help: "创建", Hand: func(m *ice.Message, arg ...string) {