diff --git a/base/cli/mirrors.go b/base/cli/mirrors.go index 137a30f0..19ff01f8 100644 --- a/base/cli/mirrors.go +++ b/base/cli/mirrors.go @@ -46,6 +46,7 @@ func init() { IsAlpine(m, "node", "system apk add nodejs") IsAlpine(m, "java", "system apk add openjdk8") IsAlpine(m, "javac", "system apk add openjdk8") + IsAlpine(m, "mvn", "system apk add openjdk8 maven") IsAlpine(m, "python", "system apk add python2") IsAlpine(m, "python2", "system apk add python2") IsAlpine(m, "python3", "system apk add python3") diff --git a/base/ctx/config.go b/base/ctx/config.go index d59b84ba..643e2093 100644 --- a/base/ctx/config.go +++ b/base/ctx/config.go @@ -34,6 +34,9 @@ func _config_save(m *ice.Message, name string, arg ...string) { for _, k := range arg { if v := msg.Confv(k); v != "" { data[k] = v + if k == "web.code.trpc.oauth" { + m.Debug("wha5 %v %v", k, v) + } } } @@ -43,6 +46,9 @@ func _config_save(m *ice.Message, name string, arg ...string) { m.Log_EXPORT(CONFIG, name, nfs.FILE, p, nfs.SIZE, n) } } + if name == "var/conf/web.code.trpc.json" { + m.Debug("wha5 %v %v %v", name, p, data) + } m.Echo(p) } } diff --git a/base/web/dream.go b/base/web/dream.go index f71d9fd1..58c551ca 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -19,7 +19,7 @@ func _dream_list(m *ice.Message) *ice.Message { if m.Richs(SPACE, nil, value[mdb.NAME], func(key string, val map[string]interface{}) { m.Push(mdb.TYPE, val[mdb.TYPE]) m.Push(cli.STATUS, cli.START) - m.PushButton("edit", "open", cli.STOP) + m.PushButton("vimer", cli.OPEN, cli.STOP) m.PushAnchor(strings.Split(m.MergePod(value[mdb.NAME]), "?")[0]) }) == nil { m.Push(mdb.TYPE, WORKER) @@ -111,13 +111,13 @@ func init() { _dream_list(m).Cut("name,status,time") } }}, - cli.START: {Name: "start name=hi repos river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + cli.START: {Name: "start name=hi repos", 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) { + cli.OPEN: {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.MergePod(m.Option(mdb.NAME), "", "")) }}, - "edit": {Name: "edit", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + "vimer": {Name: "vimer", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.MergePod(m.Option(mdb.NAME)+"/cmd/web.code.vimer", "", "")) }}, cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { diff --git a/base/web/space.go b/base/web/space.go index 2f09c7e1..f12456df 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -92,6 +92,10 @@ func _space_handle(m *ice.Message, safe bool, send map[string]*ice.Message, c *w msg.Log("recv", "%v->%v %s %v", source, target, msg.Detailv(), msg.FormatMeta()) if len(target) == 0 { + if msg.Option(ice.MSG_HANDLE) == ice.TRUE { + msg.Debug("what %v %v", msg.FormatMeta(), msg.FormatStack()) + continue + } if msg.Optionv(ice.MSG_HANDLE, ice.TRUE); safe { // 下行命令 msg.Option(ice.MSG_USERROLE, kit.Select(msg.Option(ice.MSG_USERROLE), msg.Cmd(aaa.USER, msg.Option(ice.MSG_USERNAME)).Append(aaa.USERROLE))) if msg.Option(ice.MSG_USERROLE) == aaa.VOID && ice.Info.UserName == "demo" { @@ -220,7 +224,7 @@ func _space_search(m *ice.Message, kind, name, text string, arg ...string) { func _space_fork(m *ice.Message) { if s, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(m.Config("buffer.r")), kit.Int(m.Config("buffer.w"))); m.Assert(e) { text := kit.Select(s.RemoteAddr().String(), m.Option(ice.MSG_USERADDR)) - name := m.Option(mdb.NAME, kit.ReplaceAll(kit.Select(text, m.Option(mdb.NAME)), ".", "_", ":", "_")) + name := strings.ToLower(m.Option(mdb.NAME, kit.ReplaceAll(kit.Select(text, m.Option(mdb.NAME)), ".", "_", ":", "_"))) kind := kit.Select(WORKER, m.Option(mdb.TYPE)) args := append([]string{mdb.TYPE, kind, mdb.NAME, name}, m.OptionSimple(SHARE, RIVER)...) @@ -326,7 +330,7 @@ func init() { return } // 下发命令 - _space_send(m, arg[0], arg[1:]...) + _space_send(m, strings.ToLower(arg[0]), arg[1:]...) }}, "/space/": {Name: "/space/ type name share river", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { _space_fork(m) diff --git a/base/web/spide.go b/base/web/spide.go index 6fb536f8..3ec8dd98 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -94,7 +94,7 @@ func _spide_list(m *ice.Message, arg ...string) { return } - if m.Config(LOGHEADERS) == ice.TRUE { + if true || m.Config(LOGHEADERS) == ice.TRUE { for k, v := range res.Header { m.Debug("%v: %v", k, v) } @@ -112,6 +112,8 @@ func _spide_list(m *ice.Message, arg ...string) { // 错误信息 if m.Warn(res.StatusCode != http.StatusOK, ice.ErrNotFound, uri, "status", res.Status) { + b, _ := ioutil.ReadAll(res.Body) + m.Debug("whhat %v", string(b)) switch m.Set(ice.MSG_RESULT); res.StatusCode { case http.StatusNotFound: m.Warn(true, ice.ErrNotFound, uri) @@ -225,7 +227,13 @@ func _spide_head(m *ice.Message, req *http.Request, head map[string]string, valu req.AddCookie(&http.Cookie{Name: key, Value: value}) m.Logs(key, value) }) - list := kit.Simple(m.Optionv(SPIDE_HEADER)) + list := kit.Simple(m.Optionv(SPIDE_COOKIE)) + for i := 0; i < len(list)-1; i += 2 { + req.AddCookie(&http.Cookie{Name: list[i], Value: list[i+1]}) + m.Logs(list[i], list[i+1]) + } + + list = kit.Simple(m.Optionv(SPIDE_HEADER)) for i := 0; i < len(list)-1; i += 2 { req.Header.Set(list[i], list[i+1]) m.Logs(list[i], list[i+1]) diff --git a/core/chat/cmd.go b/core/chat/cmd.go index 12bf7785..a07f4256 100644 --- a/core/chat/cmd.go +++ b/core/chat/cmd.go @@ -50,6 +50,8 @@ func init() { } switch p := path.Join(arg...); kit.Ext(p) { + case nfs.CSS: + case nfs.JS: if cmd := ice.GetFileCmd(p); cmd != "" { m.Display(ice.FileURI(p)) @@ -71,6 +73,9 @@ func init() { m.RenderResult() } return + case "iml": + m.RenderRedirect(path.Join(CHAT_WEBSITE, strings.TrimPrefix(p, SRC_WEBSITE))) + return } if m.PodCmd(ctx.COMMAND, arg[0]) { diff --git a/core/chat/header.go b/core/chat/header.go index a947ff09..8397503b 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -126,6 +126,11 @@ func init() { ctx.CONFIG: {Name: "config scope", Help: "配置", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.SPACE, m.Option(ice.MSG_USERPOD), m.Prefix(OAUTH), CHECK, arg) }}, + code.PUBLISH: {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) { + if !m.PodCmd(code.PUBLISH, ice.CONTEXTS) { + m.Cmdy(code.PUBLISH, ice.CONTEXTS) + } + }}, code.WEBPACK: {Name: "webpack", Help: "打包页面", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(code.WEBPACK, cli.BUILD, m.OptionSimple(mdb.NAME)) }}, diff --git a/core/chat/oauth.go b/core/chat/oauth.go index f2df5f60..7ae12636 100644 --- a/core/chat/oauth.go +++ b/core/chat/oauth.go @@ -4,6 +4,7 @@ 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" @@ -37,7 +38,8 @@ func init() { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(OAUTH_OFFER)) }}, CHECK: {Name: "check scope", Help: "检查", Hand: func(m *ice.Message, arg ...string) { - m.Echo(kit.MergeURL(m.Cmdx(cli.RUNTIME, cli.MAKE_DOMAIN)+OAUTH_APPLY, m.OptionSimple(SCOPE), REDIRECT_URI, m.MergePodURL(OAUTH_REPLY))) + m.Echo(kit.MergeURL(m.Cmdx(cli.RUNTIME, cli.MAKE_DOMAIN)+OAUTH_APPLY, m.OptionSimple(SCOPE), REDIRECT_URI, + kit.Select(m.MergePodURL(OAUTH_REPLY), m.MergeLink("/chat/"+OAUTH_REPLY), m.Option(ice.MSG_USERPOD) == ""))) }}, APPLY: {Name: "apply redirect_uri", Help: "申请", Hand: func(m *ice.Message, arg ...string) { if m.Right(m.Option(SCOPE)) { @@ -50,11 +52,11 @@ func init() { m.Cmd(ssh.SOURCE, ice.ETC_LOCAL_SHY, kit.Dict(nfs.CAT_CONTENT, m.Cmdx(web.SPIDE, ice.DEV, web.SPIDE_GET, m.Option(OFFER)))) m.ProcessHistory() }}, - }, mdb.HashAction(mdb.SHORT, mdb.UNIQ, EXPIRES, "720h"))}, + }, mdb.HashAction(mdb.SHORT, mdb.UNIQ, EXPIRES, "720h"), ctx.CmdAction())}, OAUTH_APPLY: {Name: "/oauth/apply", Help: "授权申请", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.RenderCmd(m.Prefix(OAUTH), APPLY) }}, - OAUTH_REPLY: {Name: "/oauth/reply", Help: "授权通过", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + OAUTH_REPLY: {Name: "/oauth/reply", Help: "授权通过", Action: ctx.CmdAction(), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.RenderCmd(m.Prefix(OAUTH), REPLY) }}, OAUTH_OFFER: {Name: "/oauth/offer", Help: "授权资源", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/core/chat/website.go b/core/chat/website.go index b73945e3..0a27013f 100644 --- a/core/chat/website.go +++ b/core/chat/website.go @@ -184,13 +184,13 @@ func _website_search(m *ice.Message, kind, name, text string, arg ...string) { }) } +const ( + SRC_WEBSITE = "src/website/" + CHAT_WEBSITE = "/chat/website/" +) const WEBSITE = "website" func init() { - const ( - SRC_WEBSITE = "src/website/" - CHAT_WEBSITE = "/chat/website/" - ) Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ WEBSITE: {Name: "website", Help: "网站", Value: kit.Data(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path,type,name,text")}, }, Commands: map[string]*ice.Command{ diff --git a/core/code/autogen.go b/core/code/autogen.go index f503bf84..d8aeda69 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -86,7 +86,10 @@ field "{{.Option "help"}}" {{.Option "key"}} `) } func _autogen_source(m *ice.Message, main, file string) { - m.Cmd(nfs.PUSH, strings.ReplaceAll(main, ice.PT+GO, ice.PT+SHY), ice.NL, "source "+strings.TrimPrefix(file, ice.SRC+ice.PS)) + main = strings.ReplaceAll(main, ice.PT+GO, ice.PT+SHY) + m.Cmd(nfs.DEFS, main, `chapter "{{.Option "name"}}" +`) + m.Cmd(nfs.PUSH, main, ice.NL, "source "+strings.TrimPrefix(file, ice.SRC+ice.PS)) } func _autogen_mod(m *ice.Message, file string) (mod string) { host := kit.ParseURLMap(m.Option(ice.MSG_USERWEB))[tcp.HOSTNAME] @@ -99,6 +102,9 @@ func _autogen_mod(m *ice.Message, file string) (mod string) { m.Cmd(nfs.DEFS, file, kit.Format(`module %s go 1.11 +`, host)) + m.Cmd(nfs.DEFS, ice.GO_SUM, kit.Format(` + `, host)) m.Cmd(nfs.CAT, file, func(line string) { diff --git a/core/code/binpack.go b/core/code/binpack.go index ade9379a..e488ee0f 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -95,6 +95,9 @@ func init() { return false }) nfs.AddRewrite(func(msg *ice.Message, name string) []byte { + if kit.FileExists(name) { + return nil + } if strings.HasPrefix(name, ice.SRC) && kit.FileExists(name) { return nil } @@ -138,8 +141,13 @@ func init() { } _binpack_ctx(m, f) + fmt.Fprintln(f, _binpack_file(m, ice.GO_MOD)) + fmt.Fprintln(f, _binpack_file(m, ice.GO_SUM)) + fmt.Fprintln(f, _binpack_file(m, ice.MAKEFILE)) + fmt.Fprintln(f, _binpack_file(m, ice.ETC_MISS_SH)) fmt.Fprintln(f, _binpack_file(m, ice.ETC_INIT_SHY)) fmt.Fprintln(f, _binpack_file(m, ice.ETC_EXIT_SHY)) + fmt.Fprintln(f, _binpack_file(m, ice.README_MD)) fmt.Fprintln(f) m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields(nfs.PATH)).Tables(func(value map[string]string) { diff --git a/core/code/publish.go b/core/code/publish.go index 4030d7cc..ed58471c 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -98,6 +98,9 @@ func init() { m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ice.DF)[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ice.DF), 1))) + m.Option("remote", kit.Select(ice.Info.Make.Remote, strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "config", "remote.origin.url")))) + m.Option("pathname", strings.TrimSuffix(path.Base(m.Option("remote")), ".git")) + if len(arg) == 0 { arg = append(arg, ice.MISC, ice.CORE, ice.BASE) } @@ -152,7 +155,7 @@ var _contexts = kit.Dict( 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 +git clone {{.Option "remote"}}; cd {{.Option "pathname"}} && 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/sh.go b/core/code/sh.go index ac356c56..e78d5d3e 100644 --- a/core/code/sh.go +++ b/core/code/sh.go @@ -48,7 +48,6 @@ func init() { }, PlugAction())}, }, Configs: map[string]*ice.Config{ SH: {Name: SH, Help: "命令", Value: kit.Data(PLUG, kit.Dict( - mdb.ENGINE, kit.Dict(), SPLIT, kit.Dict("space", " ", "operator", "{[(.,;!|<>)]}"), PREFIX, kit.Dict("#", COMMENT), SUFFIX, kit.Dict("{", COMMENT), diff --git a/go.mod b/go.mod index a3981b74..43b14f3d 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,6 @@ go 1.11 require ( shylinux.com/x/go-qrcode v0.0.1 - shylinux.com/x/toolkits v0.5.8 + shylinux.com/x/toolkits v0.5.9 shylinux.com/x/websocket v0.0.1 ) diff --git a/go.sum b/go.sum index 6f21b039..52bda9df 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,6 @@ shylinux.com/x/go-qrcode v0.0.1 h1:/eOGqMj1qtgs9Ymd12zTUa1gcJZs9S92kj2lb0QzKsE= shylinux.com/x/go-qrcode v0.0.1/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po= -shylinux.com/x/toolkits v0.5.8 h1:8MhHLmglPTPiXAdUgAJXx+gOxJoQzmpNeC7QzsZcjJw= -shylinux.com/x/toolkits v0.5.8/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA= +shylinux.com/x/toolkits v0.5.9 h1:d2x4hNp9ariX66w8dsY8qFsPYtP0MYdOhh+exmqECDo= +shylinux.com/x/toolkits v0.5.9/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA= shylinux.com/x/websocket v0.0.1 h1:OBc21DxqsGlQ2+Pz76xqLyDNo1LV+PUUqfWi+1PZPDE= shylinux.com/x/websocket v0.0.1/go.mod h1:AaSpMToOxbMULKQytzczeHPuqb708vK1vrAzCxLo/XE= diff --git a/misc.go b/misc.go index 13fa740a..1a553d07 100644 --- a/misc.go +++ b/misc.go @@ -74,8 +74,8 @@ func (m *Message) Split(str string, arg ...string) *Message { // field sp nl func (m *Message) SplitIndex(str string, arg ...string) *Message { return m.Split(str, kit.Simple("index", arg)...) } -func (m *Message) PushDetail(value interface{}, arg ...interface{}) *Message { - return m.Push(CACHE_DETAIL, value, arg...) +func (m *Message) PushDetail(value interface{}, arg ...string) *Message { + return m.Push(CACHE_DETAIL, value, kit.Split(kit.Join(arg))) } func (m *Message) PushRecord(value interface{}, arg ...string) *Message { return m.Push("", value, kit.Split(kit.Join(arg))) diff --git a/misc/git/status.go b/misc/git/status.go index 3a34f2eb..555b3fa1 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -276,8 +276,7 @@ func init() { "branch_switch": {Name: "branch_switch", Help: "切换", Hand: func(m *ice.Message, arg ...string) { _repos_cmd(m.Spawn(), m.Option(REPOS), "checkout", m.Option(BRANCH)) }}, - "submit": {Name: "submit", Help: "发布", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.SYSTEM, GIT, PUSH, "-u", kit.Select(m.MergeURL2("/x/")+kit.Select(ice.CONTEXTS, m.Option(ice.MSG_USERPOD)), arg, 0)) + "publish": {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(code.PUBLISH, ice.CONTEXTS, ice.MISC, ice.CORE) }}, BRANCH: {Name: "branch", Help: "分支", Hand: func(m *ice.Message, arg ...string) { @@ -307,7 +306,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - m.Action(PULL, MAKE, PUSH, TAGS, STASH, PIE, "submit") + m.Action(PULL, MAKE, PUSH, TAGS, STASH, PIE, "publish") files, adds, dels, last := _status_list(m) m.Status("files", files, "adds", adds, "dels", dels, "last", last.Format(ice.MOD_TIME))