diff --git a/base/aaa/email.go b/base/aaa/email.go index d76624b4..f40d87f9 100644 --- a/base/aaa/email.go +++ b/base/aaa/email.go @@ -29,6 +29,9 @@ func init() { if m.Option(SERVICE) == "" { m.Options(m.Cmd("", ADMIN).AppendSimple(SERVICE, USERNAME, PASSWORD)) } + if m.Warn(m.Option(SERVICE) == "", ice.ErrNotValid, SERVICE) { + return + } content := []byte(kit.JoinKV(DF, NL, "From", m.Option(USERNAME), "To", m.Option(TO), "Subject", m.Option(SUBJECT), "Content-Type", "text/html; charset=UTF-8") + NL + NL + m.Option(CONTENT)) auth := smtp.PlainAuth("", m.Option(USERNAME), m.Option(PASSWORD), kit.Split(m.Option(SERVICE), ice.DF)[0]) m.Warn(smtp.SendMail(m.Option(SERVICE), auth, m.Option(USERNAME), kit.Split(m.Option(TO)), content)) diff --git a/base/aaa/offer.go b/base/aaa/offer.go index 320c84c4..60c6e1c4 100644 --- a/base/aaa/offer.go +++ b/base/aaa/offer.go @@ -16,10 +16,10 @@ func init() { Index.MergeCommands(ice.Commands{ OFFER: {Name: "offer hash auto", Help: "邀请", Actions: ice.MergeActions(ice.Actions{ INVITE: {Name: "invite email*='shylinux@163.com' content", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { - h := mdb.HashCreate(m, m.OptionSimple(EMAIL, "content"), "from", m.Option(ice.MSG_USERNAME), mdb.STATUS, INVITE) + h := mdb.HashCreate(m.Spawn(), m.OptionSimple(EMAIL, "content"), "from", m.Option(ice.MSG_USERNAME), mdb.STATUS, INVITE) msg := m.Cmd("web.share", mdb.CREATE, mdb.TYPE, "field", mdb.NAME, m.PrefixKey(), mdb.TEXT, kit.Format(kit.List(h)), kit.Dict(ice.MSG_USERNAME, m.Option(EMAIL), ice.MSG_USERNICK, VOID, ice.MSG_USERROLE, VOID)) - m.Cmd(EMAIL, SEND, m.Option(EMAIL), "welcome to contents, please continue", ice.Render(m, ice.RENDER_ANCHOR, msg.Option(mdb.LINK))) + m.Cmd(EMAIL, SEND, m.Option(EMAIL), "welcome to contents, please continue", ice.Render(m, ice.RENDER_ANCHOR, kit.MergeURL(msg.Option(mdb.LINK), "debug", "true"))) }}, ACCEPT: {Help: "接受", Hand: func(m *ice.Message, arg ...string) { if m.Warn(m.Option(mdb.HASH) == "", ice.ErrNotValid, mdb.HASH) { diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 710f1958..9d7ad9da 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -34,7 +34,7 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) { mdb.HashSelectUpdate(m, h, func(value ice.Map) { value[PID] = cmd.Process.Pid }) m.Echo("%d", cmd.Process.Pid) m.Go(func() { - if e := cmd.Wait(); !m.Warn(e, ice.ErrNotStart, cmd.Args) && cmd.ProcessState.Success() { + if e := cmd.Wait(); !m.Warn(e, ice.ErrNotStart, cmd.Args) && cmd.ProcessState != nil && cmd.ProcessState.Success() { m.Cost(CODE, "0", ctx.ARGS, cmd.Args) mdb.HashModify(m, mdb.HASH, h, STATUS, STOP) } else { diff --git a/base/cli/system.go b/base/cli/system.go index 76d6d0ef..b40dd0cd 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -97,9 +97,12 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) { }() } if e := cmd.Run(); !m.Warn(e, ice.ErrNotFound, cmd.Args) { - m.Cost(CODE, cmd.ProcessState.Success(), ctx.ARGS, cmd.Args) + m.Cost(CODE, _system_code(cmd), ctx.ARGS, cmd.Args) } - m.Push(mdb.TIME, m.Time()).Push(CODE, kit.Select("1", "0", cmd.ProcessState.Success())) + m.Push(mdb.TIME, m.Time()).Push(CODE, _system_code(cmd)) +} +func _system_code(cmd *exec.Cmd) string { + return kit.Select("1", "0", cmd.ProcessState != nil && cmd.ProcessState.Success()) } func _system_find(m Message, bin string, dir ...string) string { if strings.Contains(bin, ice.DF) { diff --git a/base/web/dream.go b/base/web/dream.go index 2ecfc9a2..ab5a4102 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -120,7 +120,7 @@ func init() { nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.Trash(m, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME))) }}, - DREAM_OPEN: {Hand: func(m *ice.Message, arg ...string) { + DREAM_CLOSE: {Hand: func(m *ice.Message, arg ...string) { if m.Option(cli.DAEMON) == ice.OPS { if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) != cli.STOP { m.Go(func() { m.Sleep3s(DREAM, cli.START, m.OptionSimple(mdb.NAME)) }) @@ -147,5 +147,5 @@ func init() { } func DreamAction() ice.Actions { - return gdb.EventsAction(DREAM_OPEN, DREAM_INPUTS, DREAM_TABLES, DREAM_ACTION) + return gdb.EventsAction(DREAM_OPEN, DREAM_CLOSE, DREAM_INPUTS, DREAM_TABLES, DREAM_ACTION) } diff --git a/base/web/render.go b/base/web/render.go index fe04da9d..445d167d 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -159,9 +159,7 @@ func RenderIndex(m *ice.Message, repos string, file ...string) *ice.Message { } func RenderMain(m *ice.Message, pod, index string, arg ...ice.Any) *ice.Message { if script := m.Cmdx(Space(m, pod), nfs.CAT, kit.Select(ice.SRC_MAIN_JS, index)); script != "" { - return m.Echo(kit.Renders(_main_template, ice.Maps{ - "version": renderVersion(m), "script": script, - })).RenderResult() + return m.Echo(kit.Renders(_main_template, ice.Maps{"version": renderVersion(m), "script": script})).RenderResult() } return RenderIndex(m, ice.VOLCANOS) } diff --git a/base/web/serve.go b/base/web/serve.go index 5ca748ff..f02e89e7 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -102,7 +102,7 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response } u := OptionUserWeb(m) m.Option(ice.MSG_USERHOST, u.Scheme+"//"+u.Host) - m.Option(ice.MSG_SESSID, m.Option(CookieName(m.Option(ice.MSG_USERWEB)))) + 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 != "" { m.Optionv(ice.MSG_CMDS, strings.Split(p, ice.PS)) diff --git a/base/web/share.go b/base/web/share.go index e508b0b0..ed60a27b 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -134,7 +134,7 @@ func init() { case LOGIN: m.RenderRedirect(ice.PS, ice.MSG_SESSID, aaa.SessCreate(m, msg.Append(aaa.USERNAME))) default: - RenderIndex(m, "") + RenderMain(m, "", "") } }}, }, mdb.HashAction(mdb.FIELD, "time,hash,username,usernick,userrole,river,storm,type,name,text", mdb.EXPIRE, "72h"), ServeAction(), aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) { diff --git a/base/web/space.go b/base/web/space.go index acb0d2c4..aa6cd138 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -19,7 +19,7 @@ import ( func _space_dial(m *ice.Message, dev, name string, arg ...string) { msg := m.Cmd(SPIDE, tcp.CLIENT, dev, PP(SPACE)) - uri := kit.ParseURL(strings.Replace(kit.MergeURL(msg.Append(DOMAIN), mdb.TYPE, ice.Info.NodeType, mdb.NAME, name, SHARE, ice.Info.CtxShare, RIVER, ice.Info.CtxRiver), ice.HTTP, "ws", 1)) + uri := kit.ParseURL(strings.Replace(kit.MergeURL(msg.Append(DOMAIN), mdb.TYPE, ice.Info.NodeType, mdb.NAME, name, SHARE, ice.Info.CtxShare, RIVER, ice.Info.CtxRiver, arg), ice.HTTP, "ws", 1)) args := kit.SimpleKV("type,name,host,port", msg.Append(tcp.PROTOCOL), dev, msg.Append(tcp.HOST), msg.Append(tcp.PORT)) m.Go(func() { redial := kit.Dict(m.Configv(REDIAL)) @@ -41,7 +41,7 @@ func _space_fork(m *ice.Message) { if conn, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(buffer["r"]), kit.Int(buffer["w"])); m.Assert(e) { text := kit.Select(m.Option(ice.MSG_USERADDR), m.Option(mdb.TEXT)) name := strings.ToLower(kit.ReplaceAll(kit.Select(m.Option(ice.MSG_USERADDR), m.Option(mdb.NAME)), ice.PT, "_", ice.DF, "_")) - args := kit.Simple(mdb.TYPE, kit.Select(WORKER, m.Option(mdb.TYPE)), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(SHARE, RIVER, ice.MSG_USERUA)) + args := kit.Simple(mdb.TYPE, kit.Select(WORKER, m.Option(mdb.TYPE)), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(SHARE, RIVER, ice.MSG_USERUA, cli.DAEMON)) m.Go(func() { defer mdb.HashCreateDeferRemove(m, args, kit.Dict(mdb.TARGET, conn))() defer gdb.EventDeferEvent(m, SPACE_OPEN, args)(SPACE_CLOSE, args) @@ -84,11 +84,10 @@ func _space_handle(m *ice.Message, safe bool, name string, conn *websocket.Conn) } } func _space_domain(m *ice.Message) (link string) { + m.Options(ice.MSG_OPTION, ice.MSG_USERNAME, ice.MSG_OPTS, ice.MSG_USERNAME) return kit.GetValid( func() string { return ice.Info.Domain }, - func() string { - return m.CmdAppend(SPACE, ice.OPS, cli.PWD, kit.Dict(ice.MSG_OPTS, ice.MSG_USERNAME), mdb.LINK) - }, + func() string { return m.CmdAppend(SPACE, ice.OPS, cli.PWD, mdb.LINK) }, func() string { return m.CmdAppend(SPACE, ice.DEV, cli.PWD, mdb.LINK) }, func() string { return m.CmdAppend(SPACE, ice.SHY, cli.PWD, mdb.LINK) }, func() string { return tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB)) }, diff --git a/core/chat/action.go b/core/chat/action.go index 310e8e98..00f3335e 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -21,8 +21,6 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) { }).Length() == 0, ice.ErrNotRight, index, arg) { return } - m.Debug("what %v", m.Option(ice.MSG_USERWEB)) - m.Debug("what %v", m.Option(ice.MSG_USERPOD)) if !ctx.PodCmd(m, index, arg) { m.Cmdy(index, arg) } diff --git a/core/chat/sso.go b/core/chat/sso.go index 1cd79892..8cd9de78 100644 --- a/core/chat/sso.go +++ b/core/chat/sso.go @@ -28,7 +28,7 @@ func init() { func GetSSO(m *ice.Message) string { link := m.Cmdx(web.SPACE, web.DOMAIN) - if !strings.Contains(link, web.PP(CHAT, SSO)) { + if !strings.Contains(link, web.PP(CHAT, POD)) { return "" } ls := strings.Split(kit.ParseURL(link).Path, ice.PS) diff --git a/core/team/plan.go b/core/team/plan.go index 4de20ef6..3adcb87a 100644 --- a/core/team/plan.go +++ b/core/team/plan.go @@ -59,7 +59,7 @@ func init() { PLAN: {Name: "plan scale=week,day,week,month,year,long begin_time@date 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) { + mdb.INSERT: {Name: "insert zone* type=once,step,week name* text begin_time@date close_time@date", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(TASK, mdb.INSERT, arg) }}, ice.RUN: {Hand: func(m *ice.Message, arg ...string) { diff --git a/core/team/task.go b/core/team/task.go index f9c8d420..6ef0477d 100644 --- a/core/team/task.go +++ b/core/team/task.go @@ -67,7 +67,7 @@ func init() { case mdb.TYPE: m.Push(arg[0], ONCE, STEP, WEEK) default: - mdb.HashInputs(m, arg) + mdb.ZoneInputs(m, 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) { diff --git a/misc/alpha/cache.go b/misc/alpha/cache.go index c6d1ac27..89740018 100644 --- a/misc/alpha/cache.go +++ b/misc/alpha/cache.go @@ -7,7 +7,7 @@ import ( type cache struct { ice.Hash short string `data:"word"` - field string `data:"time,word,translation,definition"` + field string `data:"time,word,phonetic,translation,definition"` list string `name:"list word auto create prunes" help:"缓存"` } diff --git a/misc/tmux/session.go b/misc/tmux/session.go index 2b96e8a9..8352cad4 100644 --- a/misc/tmux/session.go +++ b/misc/tmux/session.go @@ -78,9 +78,7 @@ func init() { )}, }, Commands: ice.Commands{ SESSION: {Name: "session session window pane cmd auto", Help: "会话管理", Actions: ice.MergeActions(ice.Actions{ - web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { - kit.If(m.Cmd("", m.Option(mdb.NAME)).Length() == 0, func() { m.Cmd("", mdb.CREATE) }) - }}, + web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", mdb.CREATE) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { if m.Option(ctx.ACTION) == SCRIPT { m.Cmdy(SCRIPT, mdb.INPUTS, arg) @@ -102,9 +100,13 @@ func init() { m.Option(cli.CMD_DIR, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME))) ls := kit.Split(m.Option(mdb.NAME), "-") name := kit.Select(ls[0], ls, 1) - _tmux_cmd(m, NEW_SESSION, "-d", "-s", m.Option(mdb.NAME), "-n", name) + if !cli.IsSuccess(_tmux_cmd(m, NEW_SESSION, "-d", "-s", m.Option(mdb.NAME), "-n", name)) { + return + } name = _tmux_key(m.Option(mdb.NAME), name) - _tmux_cmd(m, SPLIT_WINDOW, "-t", kit.Keys(name, "1"), "-p", "40") + if !cli.IsSuccess(_tmux_cmd(m, SPLIT_WINDOW, "-t", kit.Keys(name, "1"), "-p", "40")) { + return + } m.Go(func() { m.Sleep("1s") _tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER)