diff --git a/base/aaa/user.go b/base/aaa/user.go index 9aeac13f..3f03b68d 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -17,13 +17,11 @@ func _user_list(m *ice.Message) { m.Sort(USERNAME) } func _user_login(m *ice.Message, name, word string) (ok bool) { - m.Debug("what %v %v", name, word) if m.Richs(USER, nil, name, nil) == nil { _user_create(m, name, "") } m.Richs(USER, nil, name, func(key string, value map[string]interface{}) { - m.Debug("what %v %v", name, word) if kit.Format(value[PASSWORD]) == "" { ok, value[PASSWORD] = true, word } else if value[PASSWORD] == word { diff --git a/base/ctx/ctx.go b/base/ctx/ctx.go index 8c277837..cf7ad06d 100644 --- a/base/ctx/ctx.go +++ b/base/ctx/ctx.go @@ -51,7 +51,9 @@ var Index = &ice.Context{Name: "ctx", Help: "配置模块", } else { m.Search(arg[0]+".", func(p *ice.Context, s *ice.Context, key string) { msg := m.Spawn(s) - switch arg[1] { + switch kit.Select(CONTEXT, arg, 1) { + case CONTEXT: + _context_list(msg, true) case COMMAND: msg.Cmdy(COMMAND, arg[0], arg[2:]) case CONFIG: diff --git a/base/web/serve.go b/base/web/serve.go index 1173cb9b..c3adaee7 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -29,12 +29,12 @@ func _serve_login(msg *ice.Message, cmds []string, w http.ResponseWriter, r *htt if !msg.Options(ice.MSG_USERNAME) && tcp.IPIsLocal(msg, msg.Option(ice.MSG_USERIP)) { // 自动认证 - if aaa.UserLogin(msg, cli.UserName, cli.PassWord) { - if strings.HasPrefix(msg.Option(ice.MSG_USERUA), "Mozilla/5.0") { - // msg.Option(ice.MSG_SESSID, aaa.SessCreate(msg, msg.Option(ice.MSG_USERNAME), msg.Option(ice.MSG_USERROLE))) - // Render(msg, "cookie", msg.Option(ice.MSG_SESSID)) - } - } + // if aaa.UserLogin(msg, cli.UserName, cli.PassWord) { + // if strings.HasPrefix(msg.Option(ice.MSG_USERUA), "Mozilla/5.0") { + // // msg.Option(ice.MSG_SESSID, aaa.SessCreate(msg, msg.Option(ice.MSG_USERNAME), msg.Option(ice.MSG_USERROLE))) + // // Render(msg, "cookie", msg.Option(ice.MSG_SESSID)) + // } + // } } if _, ok := msg.Target().Commands[LOGIN]; ok { @@ -234,6 +234,10 @@ func init() { "black", kit.Dict(), "white", kit.Dict( "header", true, + "river", true, + "action", true, + "footer", true, + "login", true, "share", true, "space", true, diff --git a/base/web/share.go b/base/web/share.go index 24e079f3..68695387 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -253,32 +253,32 @@ func _trash(m *ice.Message, arg ...string) { } } -func ShareCreate(m *ice.Message, kind, name, text string, arg ...string) string { - return _share_create(m, kind, name, text, arg...) -} - const SHARE = "share" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ SHARE: {Name: "share", Help: "共享链", Value: kit.Data( - "template", share_template, "expire", "72h", - "limit", 10, + "expire", "72h", "template", share_template, )}, }, Commands: map[string]*ice.Command{ - SHARE: {Name: "share share=auto auto", Help: "共享链", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create type name text arg...", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - _share_create(m, arg[0], arg[1], arg[2], arg[3:]...) + SHARE: {Name: "share hash auto", Help: "共享链", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, SHARE, "", mdb.HASH, + aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME), + "river", m.Option(ice.MSG_RIVER), "storm", m.Option(ice.MSG_STORM), + kit.MDB_TIME, m.Time(m.Conf(SHARE, "meta.expire")), arg) + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.DELETE, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) < 2 { - _share_list(m, kit.Select("", arg, 0)) - return - } - _share_create(m, arg[0], arg[1], arg[2], arg[3:]...) + m.Option(mdb.FIELDS, "time,hash,userrole,username,river,storm,type,name,text") + m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg) + m.PushAction("删除") }}, + "/share/local/": {Name: "/share/local/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { _share_local(m, arg...) }}, diff --git a/base/web/space.go b/base/web/space.go index 3dbfeeda..bb1f2d8a 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -5,7 +5,6 @@ import ( ice "github.com/shylinux/icebergs" aaa "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/cli" - "github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" "github.com/shylinux/toolkits/task" @@ -13,6 +12,7 @@ import ( "math/rand" "net" "net/url" + "os" "strings" "time" ) @@ -41,7 +41,7 @@ func _space_dial(m *ice.Message, dev, name string, arg ...string) { host := kit.Format(client["hostname"]) proto := kit.Select("ws", "wss", client["protocol"] == "https") - uri := kit.MergeURL(proto+"://"+host+"/space/", "name", name, "type", cli.NodeType) + uri := kit.MergeURL(proto+"://"+host+"/space/", "name", name, "type", cli.NodeType, "share", os.Getenv("ctx_share"), "river", os.Getenv("ctx_river")) if u, e := url.Parse(uri); m.Assert(e) { task.Put(dev, func(task *task.Task) error { @@ -206,6 +206,10 @@ const ( WORKER = "worker" ) +const ( + SPACE_START = "space.start" + SPACE_CLOSE = "space.close" +) const SPACE = "space" func init() { @@ -243,9 +247,11 @@ func init() { if s, e := websocket.Upgrade(m.W, m.R, nil, m.Confi(SPACE, "meta.buffer.r"), m.Confi(SPACE, "meta.buffer.w")); m.Assert(e) { name := m.Option(kit.MDB_NAME, strings.Replace(kit.Select(m.Option(ice.MSG_USERADDR), m.Option(kit.MDB_NAME)), ".", "_", -1)) kind := kit.Select(WORKER, m.Option(kit.MDB_TYPE)) + share := m.Option("share") + river := m.Option("river") // 添加节点 - h := m.Rich(SPACE, nil, kit.Dict("socket", s, + h := m.Rich(SPACE, nil, kit.Dict("socket", s, "share", share, "river", river, kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, s.RemoteAddr().String(), )) m.Log_CREATE(SPACE, name) @@ -257,8 +263,8 @@ func init() { m.Event(DREAM_START, name) defer m.Event(DREAM_STOP, name) default: - m.Event(gdb.SPACE_START, kind, name) - defer m.Event(gdb.SPACE_CLOSE, kind, name) + m.Event(SPACE_START, "type", kind, "name", name, "share", share, "river", river) + defer m.Event(SPACE_CLOSE, "type", kind, "name", name, "share", share, "river", river) } _space_handle(m, false, m.Target().Server().(*Frame).send, s, name) m.Log(ice.LOG_CLOSE, "%s: %s", name, kit.Format(m.Confv(SPACE, kit.Keys(kit.MDB_HASH, h)))) diff --git a/base/web/spide.go b/base/web/spide.go index 176447e3..abd2d48e 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -72,7 +72,7 @@ func _spide_create(m *ice.Message, name, address string, arg ...string) { dir, file := path.Split(uri.EscapedPath()) m.Rich(SPIDE, nil, kit.Dict( "cookie", kit.Dict(), "header", kit.Dict(), "client", kit.Dict( - "share", ShareCreate(m.Spawn(), SPIDE, name, address), + // "share", ShareCreate(m.Spawn(), SPIDE, name, address), "name", name, "url", address, "method", "POST", "protocol", uri.Scheme, "hostname", uri.Host, "path", dir, "file", file, "query", uri.RawQuery, diff --git a/core/chat/action.go b/core/chat/action.go index 313e7c0d..20f9d8cc 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -248,6 +248,9 @@ func init() { m.Cmdy(ctx.COMMAND, arg[0]) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { + return + } if m.Warn(!_action_right(m, m.Option(ice.MSG_RIVER, arg[0]), m.Option(ice.MSG_STORM, arg[1])), ice.ErrNotAuth) { return } diff --git a/core/chat/chat.go b/core/chat/chat.go index 394fb259..65320db7 100644 --- a/core/chat/chat.go +++ b/core/chat/chat.go @@ -16,6 +16,7 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心", "base", kit.Dict( "info", []interface{}{ "web.chat.info", + "web.chat.code", "web.chat.node", "web.chat.tool", "web.chat.user", @@ -27,6 +28,8 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心", }, ), )) + m.Watch(web.SPACE_START, m.Prefix(NODE)) + m.Watch(web.SPACE_CLOSE, m.Prefix(NODE)) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save(RIVER) diff --git a/core/chat/river.go b/core/chat/river.go index feb3a6d9..0dea85d8 100644 --- a/core/chat/river.go +++ b/core/chat/river.go @@ -10,6 +10,15 @@ import ( ) func _river_list(m *ice.Message) { + if m.Option("share") != "" && m.Option("share") != "" { + m.Option(ice.MSG_RIVER, m.Option("river")) + if m.Cmd(CODE, m.Option("share")).Append(kit.MDB_TYPE) == USER { + if m.Cmd(USER, m.Option(ice.MSG_USERNAME)).Append(ice.MSG_USERNAME) == "" { + m.Cmd(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) + } + } + } + m.Set(ice.MSG_OPTION, kit.MDB_KEY) m.Set(ice.MSG_OPTION, kit.MDB_NAME) @@ -20,13 +29,14 @@ func _river_list(m *ice.Message) { } m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) { - m.Push(key, value[kit.MDB_META], []string{kit.MDB_KEY, kit.MDB_NAME}, val[kit.MDB_META]) + m.Push(key, value[kit.MDB_META], []string{kit.MDB_HASH, kit.MDB_NAME}, val[kit.MDB_META]) }) }) } const ( INFO = "info" + CODE = "code" NODE = "node" TOOL = "tool" USER = "user" @@ -41,96 +51,136 @@ func init() { Commands: map[string]*ice.Command{ INFO: {Name: "info auto", Help: "信息", Action: map[string]*ice.Action{ mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, RIVER, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg) + m.Cmdy(mdb.MODIFY, RIVER, "", mdb.HASH, kit.MDB_HASH, m.Option(ice.MSG_RIVER), arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(mdb.FIELDS, mdb.DETAIL) m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, m.Option(ice.MSG_RIVER)) }}, - NODE: {Name: "node hash=auto auto 添加 启动", Help: "设备", Action: map[string]*ice.Action{ - "invite": {Name: "invite", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + CODE: {Name: "code hash auto 添加", Help: "共享", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create type=node,user name text", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), CODE), mdb.HASH, + aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME), + kit.MDB_TIME, m.Time("72h"), arg) + }}, + mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), CODE), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg) + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), CODE), mdb.HASH, + kit.MDB_HASH, m.Option(kit.MDB_HASH)) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,userrole,username,type,name,text") + m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), CODE), mdb.HASH, kit.MDB_HASH, arg) + m.PushAction("删除") + }}, + NODE: {Name: "node name ctx cmd auto 邀请", Help: "设备", Action: map[string]*ice.Action{ + "invite": {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { + m.Option(web.SHARE, m.Cmdx(CODE, mdb.CREATE, "type", NODE)) m.Cmdy("web.code.publish", "contexts", "tool") }}, - "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.code.publish", "contexts", "tool") + web.SPACE_START: {Name: "start type name share river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" { + return + } + if msg := m.Cmd(CODE, m.Option("share")); msg.Append(kit.MDB_TYPE) == NODE { + m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), NODE), mdb.HASH, arg) + } }}, - mdb.INSERT: {Name: "insert route", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH, arg) - }}, - mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) + web.SPACE_CLOSE: {Name: "close", Help: "关闭", Hand: func(m *ice.Message, arg ...string) { }}, + + // mdb.INSERT: {Name: "insert route", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + // m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH, arg) + // }}, + // mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + // m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) + // }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.ROUTE) }}, + mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), NODE), mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, "time,hash,route") - m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH) - m.Table(func(index int, value map[string]string, head []string) { - m.Push(kit.MDB_LINK, kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", kit.Keys(m.Option("pod"), value["route"]))) - }) - m.PushAction("删除") + if len(arg) == 0 { + m.Option(mdb.FIELDS, "time,type,name,share") + m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH) + m.PushAction("删除") + return + } + m.Cmdy(web.ROUTE, arg) }}, - TOOL: {Name: "tool key auto 添加 创建", Help: "工具", Action: map[string]*ice.Action{ + TOOL: {Name: "tool hash auto 添加 创建", Help: "工具", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create type=public,protected,private name=hi text=hello", Help: "创建", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH, arg) }}, - mdb.INSERT: {Name: "insert pod ctx cmd help", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(ice.MSG_STORM)), mdb.LIST, arg) + mdb.INSERT: {Name: "insert hash pod ctx cmd help", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, arg[2:]) }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { if m.Option(kit.MDB_ID) != "" { - m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(ice.MSG_STORM)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) + m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) } else { m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg) } }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) + }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { - case "pod": - _storm_list(m, m.Option(ice.MSG_RIVER)) - case "ctx": - m.Cmdy(ctx.CONTEXT) - case "cmd", "help": - m.Cmdy(ctx.CONTEXT, m.Option("ctx"), ctx.COMMAND) + case "hash": + m.Cmd(TOOL).Table(func(index int, value map[string]string, head []string) { + m.Push("hash", value["hash"]) + m.Push("name", value["name"]) + }) + case POD: + m.Cmdy(web.ROUTE) + case CTX: + m.Cmd(ctx.CONTEXT, "web").Table(func(index int, value map[string]string, head []string) { + m.Push(CTX, kit.Keys(kit.Select("", value["ups"], value["ups"] != "shy"), value["name"])) + m.Push("help", value["help"]) + }) + case CMD, "help": + m.Cmd(ctx.CONTEXT, m.Option(CTX), ctx.COMMAND).Table(func(index int, value map[string]string, head []string) { + m.Push(CMD, value["key"]) + m.Push("name", value["name"]) + m.Push("help", value["help"]) + }) } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - m.Option(mdb.FIELDS, "time,key,name,count") + m.Option(mdb.FIELDS, "time,hash,name,count") m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH) - } else { - m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,help") - m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) - if len(m.Appendv(CMD)) == 0 { - m.Push("time", m.Time()) - m.Push("id", "") - m.Push("pod", "") - m.Push("ctx", "") - m.Push("cmd", arg[1]) - m.Push("help", "") - } + m.PushAction("删除") + return + } + + m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,help") + m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) + if len(m.Appendv(CMD)) == 0 && len(arg) > 1 { + m.Push("cmd", arg[1]) } - m.PushAction("删除") }}, - USER: {Name: "user hash=auto auto 添加 邀请", Help: "用户", Action: map[string]*ice.Action{ + USER: {Name: "user username auto 邀请", Help: "用户", Action: map[string]*ice.Action{ "invite": {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.wiki.spark", "inner", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER))) - m.Cmdy("web.wiki.image", "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER))) + share := m.Option(web.SHARE, m.Cmdx(CODE, mdb.CREATE, kit.MDB_TYPE, USER)) + m.Cmdy("web.wiki.spark", "inner", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER), "share", share)) + m.Cmdy("web.wiki.image", "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER), "share", share)) m.Render("") }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(aaa.USER) - }}, - mdb.INSERT: {Name: "insert username", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, arg) }}, mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) + m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, aaa.USERNAME, m.Option(aaa.USERNAME)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, "time,hash,username") - m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH) + m.Option(mdb.FIELDS, "time,username") + m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, aaa.USERNAME, arg) m.Table(func(index int, value map[string]string, head []string) { m.Push(aaa.USERZONE, aaa.UserZone(m, value[aaa.USERNAME])) m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME])) @@ -144,14 +194,15 @@ func init() { m.Echo(h) m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, USER, kit.MDB_META, kit.MDB_SHORT), aaa.USERNAME) + m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, NODE, kit.MDB_META, kit.MDB_SHORT), kit.MDB_NAME) m.Cmd(USER, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME)) + kit.Fetch(m.Confv(RIVER, kit.Keys("meta.template", "base")), func(storm string, value interface{}) { h := m.Cmdx(TOOL, mdb.CREATE, kit.MDB_TYPE, "public", kit.MDB_NAME, storm, kit.MDB_TEXT, storm) - m.Option(ice.MSG_STORM, h) kit.Fetch(value, func(index int, value string) { m.Search(value, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { - m.Cmd(TOOL, mdb.INSERT, "pod", "", "ctx", s.Cap(ice.CTX_FOLLOW), "cmd", key, "help", kit.Simple(cmd.Help)[0]) + m.Cmd(TOOL, mdb.INSERT, kit.MDB_HASH, h, "ctx", s.Cap(ice.CTX_FOLLOW), "cmd", key, "help", kit.Simple(cmd.Help)[0]) }) }) }) @@ -174,13 +225,16 @@ func init() { }}, "/river": {Name: "/river", Help: "小河流", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { + return + } if len(arg) == 0 { _river_list(m) return } - if len(arg) == 1 { + if len(arg) > 1 && arg[1] == TOOL { m.Option(ice.MSG_RIVER, arg[0]) - m.Cmdy(TOOL, arg[1:]) + m.Cmdy(TOOL, arg[2:]) return } if !m.Warn(!m.Right(RIVER, arg), ice.ErrNotAuth) { diff --git a/core/code/publish.go b/core/code/publish.go index 5799c3c9..70a0dc9a 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -98,7 +98,7 @@ export ctx_dev={{.Option "httphost"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ct "tool", ` # 生产环境 mkdir contexts; cd contexts -export ctx_dev={{.Option "httphost"}} ctx_share={{.Option "share"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp dev +export ctx_dev={{.Option "httphost"}} ctx_river={{.Option "sess.river"}} ctx_share={{.Option "share"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp ice `, ) diff --git a/logs.go b/logs.go index cbd6f3eb..304df1ea 100644 --- a/logs.go +++ b/logs.go @@ -9,6 +9,7 @@ import ( ) var ErrWarn = "warn: " +var ErrNotLogin = "not login: " var ErrNotAuth = "not auth: " var ErrNotJoin = "not join: " var ErrNotFound = "not found: " diff --git a/misc/chrome/sync.go b/misc/chrome/sync.go index ddc0a098..be6c7e4a 100644 --- a/misc/chrome/sync.go +++ b/misc/chrome/sync.go @@ -53,8 +53,8 @@ func init() { }}, "/crx": {Name: "/crx", Help: "插件", Action: map[string]*ice.Action{ web.HISTORY: {Name: "history", Help: "历史记录", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(web.SPIDE, web.SPIDE_SELF, "/code/chrome/sync", - kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2]) + // m.Cmdy(web.SPIDE, web.SPIDE_SELF, "/code/chrome/sync", + // kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2]) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }},