diff --git a/base/web/web.go b/base/web/web.go index 48075a19..f4585cc6 100644 --- a/base/web/web.go +++ b/base/web/web.go @@ -131,9 +131,7 @@ func (web *Frame) Login(msg *ice.Message, w http.ResponseWriter, r *http.Request if s, ok := msg.Target().Commands[ice.WEB_LOGIN]; ok { // 权限检查 - msg.Debug("user %v", msg.Option(ice.MSG_USERNAME)) msg.Target().Run(msg, s, ice.WEB_LOGIN, kit.Simple(msg.Optionv("cmds"))...) - msg.Debug("user %v", msg.Option(ice.MSG_USERNAME)) } else if ls := strings.Split(msg.Option(ice.MSG_USERURL), "/"); kit.IndexOf([]string{ "static", "plugin", "login", "space", "route", "share", "publish", diff --git a/core/chat/chat.go b/core/chat/chat.go index 6b7bff26..7970699e 100644 --- a/core/chat/chat.go +++ b/core/chat/chat.go @@ -161,17 +161,9 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心", switch arg[0] { case "login": // 密码登录 - m.Debug("user %v", m.Option(ice.MSG_USERNAME)) if len(arg) > 2 { web.Render(m, "cookie", m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", m.Option(ice.MSG_USERNAME, arg[1]), arg[2]))) } - m.Debug("user %v", m.Option(ice.MSG_USERNAME)) - - case "": - m.Info("what %v", m.Option("share")) - if m.Option("share") != "" { - return - } default: // 群组检查 @@ -183,15 +175,13 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心", m.Option(ice.MSG_STORM, arg[1]) }) } - m.Log(ice.LOG_AUTH, "river: %s storm: %s", m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)) + m.Logs(ice.LOG_AUTH, "river", m.Option(ice.MSG_RIVER), "storm", m.Option(ice.MSG_STORM)) }) }) } } - if m.Option(ice.MSG_USERURL) == "/login" { - return - } - if m.Option(ice.MSG_USERURL) == "/header" { + switch m.Option(ice.MSG_USERURL) { + case "/login", "/header", "/footer": return } @@ -277,45 +267,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心", m.Echo(river) } }}, - "/river": {Name: "/river", Help: "小河流", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) < 2 { - // 群组列表 - m.Richs(ice.CHAT_RIVER, nil, "*", func(key string, value map[string]interface{}) { - m.Richs(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, key, "user"), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) { - m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME}) - }) - }) - m.Log(ice.LOG_SELECT, "%s", m.Format("append")) - return - } - - if !m.Right(cmd, arg[1]) { - m.Render("status", 403, "not auth") - return - } - - switch arg[1] { - case "add": - m.Rich(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, arg[0], "user"), kit.Data("username", m.Conf(ice.CLI_RUNTIME, "boot.username"))) - // 添加用户 - for _, v := range arg[2:] { - user := m.Rich(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, arg[0], "user"), kit.Data("username", v)) - m.Log(ice.LOG_INSERT, "river: %s user: %s name: %s", arg[0], user, v) - } - case "rename": - // 重命名群组 - old := m.Conf(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, arg[0], kit.MDB_META, kit.MDB_NAME)) - m.Log(ice.LOG_MODIFY, "river: %s %s->%s", arg[0], old, arg[2]) - m.Conf(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, arg[0], kit.MDB_META, kit.MDB_NAME), arg[2]) - - case "remove": - // 删除群组 - m.Richs(ice.CHAT_RIVER, nil, arg[0], func(value map[string]interface{}) { - m.Log(ice.LOG_REMOVE, "river: %s value: %s", arg[0], kit.Format(value)) - }) - m.Conf(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, arg[0]), "") - } - }}, "/steam": {Name: "/steam", Help: "大气层", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Warn(m.Option(ice.MSG_RIVER) == "", "not join") { m.Render("status", 402, "not join") @@ -367,26 +318,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心", } }}, - "/header": {Name: "/header", Help: "标题栏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - switch kit.Select("", arg, 0) { - case "check": - if m.Option(ice.MSG_USERNAME) != "" { - m.Echo(m.Option(ice.MSG_USERNAME)) - } - case "login": - if m.Option(ice.MSG_USERNAME) != "" { - m.Render(m.Option(ice.MSG_USERNAME)) - } - default: - m.Echo(m.Conf(ice.WEB_SERVE, "meta.title")) - } - }}, - "/footer": {Name: "/footer", Help: "状态栏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - kit.Fetch(m.Confv(ice.WEB_SERVE, "meta.legal"), func(index int, value string) { - m.Echo(value) - }) - }}, - "/target": {Name: "/target", Help: "对话框", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}}, "/source": {Name: "/source", Help: "输入框", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}}, diff --git a/core/chat/footer.go b/core/chat/footer.go new file mode 100644 index 00000000..a7ec5ef1 --- /dev/null +++ b/core/chat/footer.go @@ -0,0 +1,16 @@ +package chat + +import ( + "github.com/shylinux/icebergs" + "github.com/shylinux/toolkits" +) + +func init() { + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + "/footer": {Name: "/footer", Help: "状态栏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + kit.Fetch(m.Confv(ice.WEB_SERVE, "meta.legal"), func(index int, value string) { + m.Echo(value) + }) + }}, + }}, nil) +} diff --git a/core/chat/header.go b/core/chat/header.go new file mode 100644 index 00000000..ef673a89 --- /dev/null +++ b/core/chat/header.go @@ -0,0 +1,25 @@ +package chat + +import ( + "github.com/shylinux/icebergs" + "github.com/shylinux/toolkits" +) + +func init() { + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + "/header": {Name: "/header", Help: "标题栏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + switch kit.Select("", arg, 0) { + case "check": + if m.Option(ice.MSG_USERNAME) != "" { + m.Echo(m.Option(ice.MSG_USERNAME)) + } + case "login": + if m.Option(ice.MSG_USERNAME) != "" { + m.Render(m.Option(ice.MSG_USERNAME)) + } + default: + m.Echo(m.Conf(ice.WEB_SERVE, "meta.title")) + } + }}, + }}, nil) +} diff --git a/core/chat/river.go b/core/chat/river.go new file mode 100644 index 00000000..60274f73 --- /dev/null +++ b/core/chat/river.go @@ -0,0 +1,72 @@ +package chat + +import ( + "github.com/shylinux/icebergs" + "github.com/shylinux/toolkits" +) + +var RIVER = ice.Name("river", Index) + +func _river_right(m *ice.Message, action string) bool { + if m.Warn(m.Option(ice.MSG_RIVER) == "", "not join") { + m.Render("status", 402, "not join") + return false + } + + if !m.Right(RIVER, action) { + m.Render("status", 403, "not auth") + return false + } + return true +} + +func _river_list(m *ice.Message) { + m.Richs(RIVER, nil, "*", 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["meta"], []string{kit.MDB_KEY, kit.MDB_NAME}) + }) + }) +} +func _river_user(m *ice.Message, river string, user ...string) { + m.Rich(RIVER, kit.Keys(kit.MDB_HASH, river, "user"), kit.Data("username", m.Conf(ice.CLI_RUNTIME, "boot.username"))) + for _, v := range user { + user := m.Rich(RIVER, kit.Keys(kit.MDB_HASH, river, "user"), kit.Data("username", v)) + m.Log_INSERT(RIVER, river, "hash", user, "user", v) + } +} +func _river_rename(m *ice.Message, river string, name string) { + old := m.Conf(RIVER, kit.Keys(kit.MDB_HASH, river, kit.MDB_META, kit.MDB_NAME)) + m.Log_MODIFY(RIVER, river, "value", name, "old", old) + m.Conf(RIVER, kit.Keys(kit.MDB_HASH, river, kit.MDB_META, kit.MDB_NAME), name) +} +func _river_remove(m *ice.Message, river string) { + m.Richs(RIVER, nil, river, func(value map[string]interface{}) { + m.Log_REMOVE(RIVER, river, "value", kit.Format(value)) + }) + m.Conf(RIVER, kit.Keys(kit.MDB_HASH, river), "") +} + +func init() { + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + "/river": {Name: "/river river user|rename|remove arg...", Help: "小河流", + Action: map[string]*ice.Action{ + "user": {Name: "user user...", Help: "添加用户", Hand: func(m *ice.Message, arg ...string) { + if _river_right(m, "user") { + _river_user(m, m.Option(ice.CHAT_RIVER), arg...) + } + }}, + "rename": {Name: "rename name", Help: "重命名", Hand: func(m *ice.Message, arg ...string) { + if _river_right(m, "rename") { + _river_rename(m, m.Option(ice.CHAT_RIVER), arg[0]) + } + }}, + "remove": {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + if _river_right(m, "remove") { + _river_remove(m, m.Option(ice.CHAT_RIVER)) + } + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + _river_list(m) + }}, + }}, nil) +} diff --git a/core/chat/storm.go b/core/chat/storm.go index d05e40cc..82332b3e 100644 --- a/core/chat/storm.go +++ b/core/chat/storm.go @@ -5,12 +5,47 @@ import ( "github.com/shylinux/toolkits" ) +var STORM = ice.Name("storm", Index) + +func _storm_list(m *ice.Message, river string) { + m.Richs(ice.CHAT_RIVER, kit.Keys(kit.MDB_HASH, river, "tool"), "*", func(key string, value map[string]interface{}) { + m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME}) + }) + m.Sort(kit.MDB_NAME) +} +func _storm_tool(m *ice.Message, river, storm string, arg ...string) { + prefix := kit.Keys(kit.MDB_HASH, river, "tool", kit.MDB_HASH, storm) + for i := 0; i < len(arg)-3; i += 4 { + id := m.Grow(ice.CHAT_RIVER, kit.Keys(prefix), kit.Data( + "pod", arg[i], "ctx", arg[i+1], "cmd", arg[i+2], "help", arg[i+3], + )) + m.Log_INSERT(RIVER, river, STORM, storm, "hash", id, "tool", arg[i:i+4]) + } +} +func _storm_share(m *ice.Message, river, storm, name string, arg ...string) { + m.Cmdy(ice.WEB_SHARE, ice.TYPE_STORM, name, storm, RIVER, river, arg) +} +func _storm_rename(m *ice.Message, river, storm string, name string) { + prefix := kit.Keys(kit.MDB_HASH, river, "tool", kit.MDB_HASH, storm) + old := m.Conf(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_META, kit.MDB_NAME)) + m.Log_MODIFY(RIVER, river, STORM, storm, "value", name, "old", old) + m.Conf(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_META, kit.MDB_NAME), name) +} +func _storm_remove(m *ice.Message, river string, storm string) { + prefix := kit.Keys(kit.MDB_HASH, river, "tool") + m.Richs(ice.CHAT_RIVER, kit.Keys(prefix), storm, func(value map[string]interface{}) { + m.Log_REMOVE(RIVER, river, STORM, storm, "value", kit.Format(value)) + }) + m.Conf(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_HASH, storm), "") +} + func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - "/storm": {Name: "/storm", Help: "暴风雨", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + "/storm": {Name: "/storm share|tool|rename|remove arg...", Help: "暴风雨", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[0] { case "share": - m.Cmdy(ice.WEB_SHARE, ice.TYPE_STORM, m.Option("name"), m.Option("storm"), "river", m.Option("river")) + // TODO check right + _storm_share(m, m.Option(RIVER), m.Option(STORM), m.Option("name")) return } @@ -19,14 +54,8 @@ func init() { return } - prefix := kit.Keys(kit.MDB_HASH, arg[0], "tool") if len(arg) < 3 { - // 应用列表 - m.Richs(ice.CHAT_RIVER, prefix, "*", func(key string, value map[string]interface{}) { - m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME}) - }) - m.Log(ice.LOG_SELECT, "%s", m.Format("append")) - m.Sort(kit.MDB_NAME) + _storm_list(m, arg[0]) return } @@ -36,27 +65,12 @@ func init() { } switch arg[2] { - case "add": - // 添加命令 - for i := 3; i < len(arg)-3; i += 4 { - id := m.Grow(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_HASH, arg[1]), kit.Data( - "pod", arg[i], "ctx", arg[i+1], "cmd", arg[i+2], "help", arg[i+3], - )) - m.Log(ice.LOG_INSERT, "storm: %s %d: %v", arg[1], id, arg[i:i+4]) - } - + case "add", "tool": + _storm_tool(m, arg[0], arg[1], arg[3:]...) case "rename": - // 重命名应用 - old := m.Conf(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_HASH, arg[1], kit.MDB_META, kit.MDB_NAME)) - m.Log(ice.LOG_MODIFY, "storm: %s %s->%s", arg[1], old, arg[3]) - m.Conf(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_HASH, arg[1], kit.MDB_META, kit.MDB_NAME), arg[3]) - + _storm_rename(m, arg[0], arg[1], arg[3]) case "remove": - // 删除应用 - m.Richs(ice.CHAT_RIVER, kit.Keys(prefix), arg[1], func(value map[string]interface{}) { - m.Log(ice.LOG_REMOVE, "storm: %s value: %s", arg[1], kit.Format(value)) - }) - m.Conf(ice.CHAT_RIVER, kit.Keys(prefix, kit.MDB_HASH, arg[1]), "") + _storm_remove(m, arg[0], arg[1]) } }}, }}, nil) diff --git a/info.go b/info.go index 1d9845ee..ad262cfd 100644 --- a/info.go +++ b/info.go @@ -98,3 +98,20 @@ func (m *Message) Trace(key string, str string, arg ...interface{}) *Message { func (m *Message) Cost(str string, arg ...interface{}) *Message { return m.log(LOG_COST, "%s: %s", m.Format("cost"), kit.Format(str, arg...)) } + +func log_fields(arg ...interface{}) string { + list := []string{} + for i := 0; i < len(arg)-1; i += 2 { + list = append(list, fmt.Sprintf("%v: %v", arg[i], arg[i+1])) + } + return strings.Join(list, " ") +} +func (m *Message) Log_INSERT(arg ...interface{}) *Message { + return m.log(LOG_INSERT, log_fields(arg...)) +} +func (m *Message) Log_MODIFY(arg ...interface{}) *Message { + return m.log(LOG_MODIFY, log_fields(arg...)) +} +func (m *Message) Log_REMOVE(arg ...interface{}) *Message { + return m.log(LOG_REMOVE, log_fields(arg...)) +}