1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2022-12-26 15:25:26 +08:00
parent 5f3c3e4b36
commit bb3b898dc7
15 changed files with 31 additions and 28 deletions

View File

@ -29,6 +29,9 @@ func init() {
if m.Option(SERVICE) == "" { if m.Option(SERVICE) == "" {
m.Options(m.Cmd("", ADMIN).AppendSimple(SERVICE, USERNAME, PASSWORD)) 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)) 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]) 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)) m.Warn(smtp.SendMail(m.Option(SERVICE), auth, m.Option(USERNAME), kit.Split(m.Option(TO)), content))

View File

@ -16,10 +16,10 @@ func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
OFFER: {Name: "offer hash auto", Help: "邀请", Actions: ice.MergeActions(ice.Actions{ 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) { 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)), 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)) 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) { ACCEPT: {Help: "接受", Hand: func(m *ice.Message, arg ...string) {
if m.Warn(m.Option(mdb.HASH) == "", ice.ErrNotValid, mdb.HASH) { if m.Warn(m.Option(mdb.HASH) == "", ice.ErrNotValid, mdb.HASH) {

View File

@ -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 }) mdb.HashSelectUpdate(m, h, func(value ice.Map) { value[PID] = cmd.Process.Pid })
m.Echo("%d", cmd.Process.Pid) m.Echo("%d", cmd.Process.Pid)
m.Go(func() { 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) m.Cost(CODE, "0", ctx.ARGS, cmd.Args)
mdb.HashModify(m, mdb.HASH, h, STATUS, STOP) mdb.HashModify(m, mdb.HASH, h, STATUS, STOP)
} else { } else {

View File

@ -97,9 +97,12 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) {
}() }()
} }
if e := cmd.Run(); !m.Warn(e, ice.ErrNotFound, cmd.Args) { 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 { func _system_find(m Message, bin string, dir ...string) string {
if strings.Contains(bin, ice.DF) { if strings.Contains(bin, ice.DF) {

View File

@ -120,7 +120,7 @@ func init() {
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) {
nfs.Trash(m, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME))) 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.Option(cli.DAEMON) == ice.OPS {
if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) != cli.STOP { if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) != cli.STOP {
m.Go(func() { m.Sleep3s(DREAM, cli.START, m.OptionSimple(mdb.NAME)) }) m.Go(func() { m.Sleep3s(DREAM, cli.START, m.OptionSimple(mdb.NAME)) })
@ -147,5 +147,5 @@ func init() {
} }
func DreamAction() ice.Actions { 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)
} }

View File

@ -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 { 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 != "" { 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{ return m.Echo(kit.Renders(_main_template, ice.Maps{"version": renderVersion(m), "script": script})).RenderResult()
"version": renderVersion(m), "script": script,
})).RenderResult()
} }
return RenderIndex(m, ice.VOLCANOS) return RenderIndex(m, ice.VOLCANOS)
} }

View File

@ -102,7 +102,7 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response
} }
u := OptionUserWeb(m) u := OptionUserWeb(m)
m.Option(ice.MSG_USERHOST, u.Scheme+"//"+u.Host) 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 m.Optionv(ice.MSG_CMDS) == nil {
if p := strings.TrimPrefix(r.URL.Path, key); p != "" { if p := strings.TrimPrefix(r.URL.Path, key); p != "" {
m.Optionv(ice.MSG_CMDS, strings.Split(p, ice.PS)) m.Optionv(ice.MSG_CMDS, strings.Split(p, ice.PS))

View File

@ -134,7 +134,7 @@ func init() {
case LOGIN: case LOGIN:
m.RenderRedirect(ice.PS, ice.MSG_SESSID, aaa.SessCreate(m, msg.Append(aaa.USERNAME))) m.RenderRedirect(ice.PS, ice.MSG_SESSID, aaa.SessCreate(m, msg.Append(aaa.USERNAME)))
default: 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) { }, 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) {

View File

@ -19,7 +19,7 @@ import (
func _space_dial(m *ice.Message, dev, name string, arg ...string) { func _space_dial(m *ice.Message, dev, name string, arg ...string) {
msg := m.Cmd(SPIDE, tcp.CLIENT, dev, PP(SPACE)) 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)) args := kit.SimpleKV("type,name,host,port", msg.Append(tcp.PROTOCOL), dev, msg.Append(tcp.HOST), msg.Append(tcp.PORT))
m.Go(func() { m.Go(func() {
redial := kit.Dict(m.Configv(REDIAL)) 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) { 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)) 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, "_")) 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() { m.Go(func() {
defer mdb.HashCreateDeferRemove(m, args, kit.Dict(mdb.TARGET, conn))() defer mdb.HashCreateDeferRemove(m, args, kit.Dict(mdb.TARGET, conn))()
defer gdb.EventDeferEvent(m, SPACE_OPEN, args)(SPACE_CLOSE, args) 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) { 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( return kit.GetValid(
func() string { return ice.Info.Domain }, func() string { return ice.Info.Domain },
func() string { func() string { return m.CmdAppend(SPACE, ice.OPS, cli.PWD, mdb.LINK) },
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.DEV, 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 m.CmdAppend(SPACE, ice.SHY, cli.PWD, mdb.LINK) },
func() string { return tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB)) }, func() string { return tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB)) },

View File

@ -21,8 +21,6 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) {
}).Length() == 0, ice.ErrNotRight, index, arg) { }).Length() == 0, ice.ErrNotRight, index, arg) {
return 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) { if !ctx.PodCmd(m, index, arg) {
m.Cmdy(index, arg) m.Cmdy(index, arg)
} }

View File

@ -28,7 +28,7 @@ func init() {
func GetSSO(m *ice.Message) string { func GetSSO(m *ice.Message) string {
link := m.Cmdx(web.SPACE, web.DOMAIN) link := m.Cmdx(web.SPACE, web.DOMAIN)
if !strings.Contains(link, web.PP(CHAT, SSO)) { if !strings.Contains(link, web.PP(CHAT, POD)) {
return "" return ""
} }
ls := strings.Split(kit.ParseURL(link).Path, ice.PS) ls := strings.Split(kit.ParseURL(link).Path, ice.PS)

View File

@ -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{ 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.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.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) m.Cmdy(TASK, mdb.INSERT, arg)
}}, }},
ice.RUN: {Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Hand: func(m *ice.Message, arg ...string) {

View File

@ -67,7 +67,7 @@ func init() {
case mdb.TYPE: case mdb.TYPE:
m.Push(arg[0], ONCE, STEP, WEEK) m.Push(arg[0], ONCE, STEP, WEEK)
default: 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) { 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

@ -7,7 +7,7 @@ import (
type cache struct { type cache struct {
ice.Hash ice.Hash
short string `data:"word"` 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:"缓存"` list string `name:"list word auto create prunes" help:"缓存"`
} }

View File

@ -78,9 +78,7 @@ func init() {
)}, )},
}, Commands: ice.Commands{ }, Commands: ice.Commands{
SESSION: {Name: "session session window pane cmd auto", Help: "会话管理", Actions: ice.MergeActions(ice.Actions{ SESSION: {Name: "session session window pane cmd auto", Help: "会话管理", Actions: ice.MergeActions(ice.Actions{
web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", mdb.CREATE) }},
kit.If(m.Cmd("", m.Option(mdb.NAME)).Length() == 0, func() { m.Cmd("", mdb.CREATE) })
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(ctx.ACTION) == SCRIPT { if m.Option(ctx.ACTION) == SCRIPT {
m.Cmdy(SCRIPT, mdb.INPUTS, arg) 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))) m.Option(cli.CMD_DIR, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME)))
ls := kit.Split(m.Option(mdb.NAME), "-") ls := kit.Split(m.Option(mdb.NAME), "-")
name := kit.Select(ls[0], ls, 1) 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) 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.Go(func() {
m.Sleep("1s") m.Sleep("1s")
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER) _tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER)