diff --git a/base/aaa/aaa.go b/base/aaa/aaa.go index 0a9d558a..834dd41f 100644 --- a/base/aaa/aaa.go +++ b/base/aaa/aaa.go @@ -6,21 +6,6 @@ import ( kit "github.com/shylinux/toolkits" ) -const ( - ErrNotAuth = "not auth: " -) -const ( - IP = "ip" - UA = "ua" - - USERROLE = "userrole" - USERNAME = "username" - PASSWORD = "password" - USERNICK = "usernick" - USERZONE = "userzone" - - SESSID = "sessid" -) const AAA = "aaa" var Index = &ice.Context{Name: AAA, Help: "认证模块", Commands: map[string]*ice.Command{ @@ -28,7 +13,7 @@ var Index = &ice.Context{Name: AAA, Help: "认证模块", Commands: map[string]* m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, VOID, WHITE, kit.Dict(), BLACK, kit.Dict())) m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, TECH, BLACK, kit.Dict(), WHITE, kit.Dict())) m.Load() - m.Cmd(mdb.SEARCH, mdb.CREATE, USER, USER, AAA) + m.Cmd(mdb.SEARCH, mdb.CREATE, USER, m.Prefix(USER)) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() diff --git a/base/aaa/role.go b/base/aaa/role.go index 6e5a1d26..74a768f8 100644 --- a/base/aaa/role.go +++ b/base/aaa/role.go @@ -1,27 +1,20 @@ package aaa import ( + "strings" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" - - "strings" -) - -const ( // 用户角色 - ROOT = "root" - TECH = "tech" - VOID = "void" -) -const ( // 角色操作 - WHITE = "white" - BLACK = "black" - RIGHT = "right" -) -const ( // 返回结果 - OK = "ok" ) +func _role_user(m *ice.Message, userrole string, username ...string) { + m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { + for _, user := range username { + kit.Value(value, kit.Keys(USER, user), true) + } + }) +} func _role_list(m *ice.Message, userrole string) { m.Richs(ROLE, nil, kit.Select(kit.MDB_FOREACH, userrole), func(key string, value map[string]interface{}) { for k := range value[WHITE].(map[string]interface{}) { @@ -36,50 +29,6 @@ func _role_list(m *ice.Message, userrole string) { } }) } -func _role_user(m *ice.Message, userrole string, username ...string) { - m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { - for _, user := range username { - kit.Value(value, kit.Keys(USER, user), true) - } - }) -} -func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) { - if userrole == ROOT { - // 超级用户 - return true - } - - m.Richs(ROLE, nil, kit.Select(VOID, userrole), func(key string, value map[string]interface{}) { - ok = true - list := value[BLACK].(map[string]interface{}) - for i := 0; i < len(keys); i++ { - if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true { - ok = false - } - } - - if m.Warn(!ok, "%s black right %s", userrole, keys) { - return - } - if userrole == TECH { - // 管理用户 - return - } - - ok = false - list = value[WHITE].(map[string]interface{}) - for i := 0; i < len(keys); i++ { - if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true { - ok = true - } - } - if m.Warn(!ok, ErrNotAuth, userrole, " of ", keys) { - return - } - // 普通用户 - }) - return ok -} func _role_black(m *ice.Message, userrole, chain string, status bool) { m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { m.Log_MODIFY(ROLE, userrole, BLACK, chain) @@ -94,11 +43,58 @@ func _role_white(m *ice.Message, userrole, chain string, status bool) { list[chain] = status }) } +func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) { + if userrole == ROOT { + return true // 超级用户 + } + + m.Richs(ROLE, nil, kit.Select(VOID, userrole), func(key string, value map[string]interface{}) { + ok = true + list := value[BLACK].(map[string]interface{}) + for i := 0; i < len(keys); i++ { + if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true { + ok = false + } + } + + if m.Warn(!ok, ice.ErrNotRight, userrole, " of ", keys) { + return + } + if userrole == TECH { + return // 管理用户 + } + + ok = false + list = value[WHITE].(map[string]interface{}) + for i := 0; i < len(keys); i++ { + if v, o := list[kit.Join(keys[:i+1], ".")]; o && v == true { + ok = true + } + } + + if m.Warn(!ok, ice.ErrNotRight, userrole, " of ", keys) { + return + } + // 普通用户 + }) + return ok +} func RoleRight(m *ice.Message, userrole string, keys ...string) bool { return _role_right(m, userrole, kit.Split(kit.Keys(keys), ".")...) } +const ( // 用户角色 + ROOT = "root" + TECH = "tech" + VOID = "void" +) +const ( // 角色操作 + BLACK = "black" + WHITE = "white" + RIGHT = "right" +) + const ROLE = "role" func init() { @@ -108,18 +104,19 @@ func init() { }, Commands: map[string]*ice.Command{ ROLE: {Name: "role role auto create", Help: "角色", Action: map[string]*ice.Action{ - WHITE: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) { - _role_white(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true) - }}, BLACK: {Name: "black role chain...", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) { _role_black(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true) }}, + WHITE: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) { + _role_white(m, arg[0], strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), true) + }}, RIGHT: {Name: "right role chain...", Help: "查看权限", Hand: func(m *ice.Message, arg ...string) { if _role_right(m, arg[0], kit.Split(strings.ReplaceAll(kit.Keys(arg[1:]), "/", "."), ".")...) { - m.Echo(OK) + m.Echo(ice.OK) } }}, - mdb.CREATE: {Name: "create zone=white,black role=void@key key=", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + + mdb.CREATE: {Name: "create role=void,tech zone=white,black key=", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Richs(ROLE, nil, m.Option(ROLE), func(key string, value map[string]interface{}) { list := value[m.Option(kit.MDB_ZONE)].(map[string]interface{}) m.Log_CREATE(ROLE, m.Option(ROLE), list[m.Option(kit.MDB_KEY)]) @@ -134,12 +131,13 @@ func init() { }) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 1 { - _role_user(m, arg[0], arg[1:]...) + if len(arg) < 2 { + _role_list(m, kit.Select("", arg, 0)) + m.PushAction(mdb.REMOVE) + return } - _role_list(m, kit.Select("", arg, 0)) - m.PushAction(mdb.REMOVE) + _role_user(m, arg[0], arg[1:]...) }}, }, }) diff --git a/base/aaa/sess.go b/base/aaa/sess.go index 54c7a4b9..84b92ca4 100644 --- a/base/aaa/sess.go +++ b/base/aaa/sess.go @@ -6,34 +6,14 @@ import ( kit "github.com/shylinux/toolkits" ) -func _sess_auth(m *ice.Message, sessid string, username string, userrole string) { - m.Richs(SESS, nil, sessid, func(value map[string]interface{}) { - if value = kit.GetMeta(value); m.Option(ice.MSG_USERROLE) == ROOT { - value[USERROLE] = userrole - } else if m.Option(ice.MSG_USERROLE) == TECH && userrole != ROOT { - value[USERROLE] = userrole - } else { - return - } - m.Log_AUTH(SESSID, sessid, USERNAME, username, USERROLE, userrole) - value[USERNAME] = username - }) -} func _sess_check(m *ice.Message, sessid string) { m.Richs(SESS, nil, sessid, func(value map[string]interface{}) { value = kit.GetMeta(value) m.Richs(USER, nil, value[USERNAME], func(value map[string]interface{}) { value = kit.GetMeta(value) - if m.Option(ice.MSG_USERNICK, value[USERNICK]) == "" { - if name := kit.Format(value[USERNAME]); len(name) > 10 { - m.Option(ice.MSG_USERNICK, name[:10]) - } else { - m.Option(ice.MSG_USERNICK, value[USERNAME]) - } - } m.Log_AUTH( - USERROLE, m.Option(ice.MSG_USERROLE, kit.Select(UserRole(m, value[USERNAME]))), + USERROLE, m.Option(ice.MSG_USERROLE, UserRole(m, value[USERNAME])), USERNICK, m.Option(ice.MSG_USERNICK, value[USERNICK]), USERNAME, m.Option(ice.MSG_USERNAME, value[USERNAME]), ) @@ -42,51 +22,50 @@ func _sess_check(m *ice.Message, sessid string) { } func _sess_create(m *ice.Message, username string) string { if m.Richs(USER, nil, username, nil) == nil { - _user_create(m, username, "") + _user_create(m, username, kit.Hashs()) } - m.Cmdy(mdb.INSERT, SESS, "", mdb.HASH, - USERNAME, username, "from", m.Option(ice.MSG_SESSID), - kit.MDB_TIME, m.Time(m.Conf(SESS, "meta.expire")), - "agent", m.Option(ice.MSG_USERUA), - "ip", m.Option(ice.MSG_USERIP), + h := m.Cmdx(mdb.INSERT, SESS, "", mdb.HASH, + USERNAME, username, USERROLE, UserRole(m, username), + kit.MDB_TIME, m.Time(m.Conf(SESS, kit.Keym(kit.MDB_EXPIRE))), + IP, m.Option(ice.MSG_USERIP), UA, m.Option(ice.MSG_USERUA), ) - return m.Result() + m.Log_CREATE(SESS_CREATE, username, kit.MDB_HASH, h) + m.Event(SESS_CREATE, username) + return h } -func SessCheck(m *ice.Message, sessid string) *ice.Message { +func SessCheck(m *ice.Message, sessid string) { _sess_check(m, sessid) - return m } -func SessCreate(m *ice.Message, username, userrole string) string { - m.Set(ice.MSG_RESULT) - _sess_auth(m, _sess_create(m, username), username, userrole) - return m.Result() +func SessCreate(m *ice.Message, username string) string { + return m.Option(ice.MSG_SESSID, _sess_create(m, username)) } +const ( + IP = "ip" + UA = "ua" + + SESSID = "sessid" +) + +const ( + SESS_CREATE = "sess.create" +) const SESS = "sess" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - SESS: {Name: SESS, Help: "会话", Value: kit.Data( - kit.MDB_SHORT, "uniq", "expire", "720h", - )}, + SESS: {Name: SESS, Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", kit.MDB_EXPIRE, "720h")}, }, Commands: map[string]*ice.Command{ SESS: {Name: "sess hash auto", Help: "会话", Action: map[string]*ice.Action{ - "auth": {Name: "auth sessid username [userrole]", Help: "授权", Hand: func(m *ice.Message, arg ...string) { - _sess_auth(m, arg[0], arg[1], kit.Select("", arg, 2)) - }}, - "check": {Name: "check sessid", Help: "校验", Hand: func(m *ice.Message, arg ...string) { - _sess_check(m, arg[0]) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.DELETE, SESS, "", 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, kit.Select("time,hash,username,userrole", mdb.DETAIL, len(arg) > 0)) + m.Fields(len(arg) == 0, "time,hash,username,userrole") m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/base/aaa/user.go b/base/aaa/user.go index 006fd932..54084c2d 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -10,13 +10,11 @@ import ( func _user_login(m *ice.Message, name, word string) (ok bool) { if m.Richs(USER, nil, name, nil) == nil { - _user_create(m, name, "") + _user_create(m, name, word) } m.Richs(USER, nil, name, func(key string, value map[string]interface{}) { - if kit.Format(value[PASSWORD]) == "" { - ok, value[PASSWORD] = true, word - } else if value[PASSWORD] == word { + if value[PASSWORD] == word { ok = true } }) @@ -27,26 +25,31 @@ func _user_create(m *ice.Message, name, word string) { USERNAME, name, PASSWORD, word, USERNICK, name, USERZONE, m.Option(ice.MSG_USERZONE), )) - m.Log_CREATE(USERNAME, name, kit.MDB_HASH, h) + m.Log_CREATE(USER_CREATE, name, kit.MDB_HASH, h) m.Event(USER_CREATE, name) } -func _user_search(m *ice.Message, kind, name, text string, arg ...string) { - if kind != USER { - return - } - m.Richs(USER, nil, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { - if name != "" && name != val[USERNAME] { +func _user_remove(m *ice.Message, name string) { + m.Cmdy(mdb.DELETE, USER, "", mdb.HASH, USERNAME, name) + m.Log_REMOVE(USER_REMOVE, name, kit.MDB_HASH, kit.Hashs(name)) + m.Event(USER_REMOVE, name) +} +func _user_search(m *ice.Message, kind, name, text string) { + m.Richs(USER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { + value = kit.GetMeta(value) + if name != "" && name != value[USERNAME] { return } - m.PushSearch(kit.SSH_CMD, USER, kit.MDB_TYPE, kit.Format(UserRole(m, val[USERNAME])), - kit.MDB_NAME, kit.Format(val[USERNICK]), kit.MDB_TEXT, kit.Format(val[USERNAME]), val) + m.PushSearch(kit.SSH_CMD, USER, kit.MDB_TYPE, kit.Format(UserRole(m, value[USERNAME])), + kit.MDB_NAME, kit.Format(value[USERNICK]), kit.MDB_TEXT, kit.Format(value[USERNAME]), value) }) } -func UserRoot(m *ice.Message) { - ice.Info.PassWord = kit.Hashs("uniq") - ice.Info.PassWord = ice.Info.UserName - _user_create(m, ice.Info.UserName, ice.Info.PassWord) +func UserZone(m *ice.Message, username interface{}) (zone string) { + m.Richs(USER, nil, kit.Format(username), func(key string, value map[string]interface{}) { + value = kit.GetMeta(value) + zone = kit.Format(value[USERZONE]) + }) + return } func UserNick(m *ice.Message, username interface{}) (nick string) { m.Richs(USER, nil, kit.Format(username), func(key string, value map[string]interface{}) { @@ -55,36 +58,38 @@ func UserNick(m *ice.Message, username interface{}) (nick string) { }) return } -func UserZone(m *ice.Message, username interface{}) (zone string) { - m.Richs(USER, nil, kit.Format(username), func(key string, value map[string]interface{}) { - value = kit.GetMeta(value) - zone = kit.Format(value[USERZONE]) - }) - return -} func UserRole(m *ice.Message, username interface{}) (role string) { if role = VOID; username == ice.Info.UserName { return ROOT } m.Richs(ROLE, nil, TECH, func(key string, value map[string]interface{}) { - value = kit.GetMeta(value) - if kit.Value(value, kit.Keys(USER, username)) == true { + if kit.Value(kit.GetMeta(value), kit.Keys(USER, username)) == true { role = TECH } }) return } +func UserRoot(m *ice.Message) { + ice.Info.PassWord = kit.Hashs("uniq") + ice.Info.PassWord = ice.Info.UserName + _user_create(m, ice.Info.UserName, ice.Info.PassWord) +} func UserLogin(m *ice.Message, username, password string) bool { if _user_login(m, username, password) { - m.Option(ice.MSG_USERNAME, username) - m.Option(ice.MSG_USERNICK, UserNick(m, username)) - m.Option(ice.MSG_USERROLE, UserRole(m, username)) - m.Log_AUTH(USERROLE, m.Option(ice.MSG_USERROLE), USERNICK, m.Option(ice.MSG_USERNICK), USERNAME, m.Option(ice.MSG_USERNAME), PASSWORD, strings.Repeat("*", len(password))) + m.Log_AUTH( + USERNICK, m.Option(ice.MSG_USERNICK, UserNick(m, username)), + USERROLE, m.Option(ice.MSG_USERROLE, UserRole(m, username)), + USERNAME, m.Option(ice.MSG_USERNAME, username), + PASSWORD, strings.Repeat("*", len(password)), + ) return true } return false } +const ( + INVITE = "invite" +) const ( AVATAR = "avatar" GENDER = "gender" @@ -95,13 +100,18 @@ const ( COUNTRY = "country" PROVINCE = "province" LANGUAGE = "language" - - USER_CREATE = "user.create" ) const ( - INVITE = "invite" + USERZONE = "userzone" + USERNICK = "usernick" + USERROLE = "userrole" + USERNAME = "username" + PASSWORD = "password" +) +const ( + USER_CREATE = "user.create" + USER_REMOVE = "user.remove" ) - const USER = "user" func init() { @@ -110,20 +120,32 @@ func init() { USER: {Name: USER, Help: "用户", Value: kit.Data(kit.MDB_SHORT, USERNAME)}, }, Commands: map[string]*ice.Command{ - USER: {Name: "user username auto", Help: "用户", Action: map[string]*ice.Action{ + USER: {Name: "user username auto create", Help: "用户", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create userrole=void,tech username password", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + _user_create(m, m.Option(USERNAME), m.Option(PASSWORD)) + _role_user(m, m.Option(USERROLE), m.Option(USERNAME)) + }}, + ROLE: {Name: "role userrole=void,tech", Help: "角色", Hand: func(m *ice.Message, arg ...string) { + _role_user(m, m.Option(USERROLE), m.Option(USERNAME)) + }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.MODIFY, USER, "", mdb.HASH, USERNAME, m.Option(USERNAME), arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, USER, "", mdb.HASH, USERNAME, m.Option(USERNAME)) + _user_remove(m, m.Option(USERNAME)) }}, mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - _user_search(m, arg[0], arg[1], kit.Select("", arg, 2)) + if arg[0] == USER { + _user_search(m, arg[0], arg[1], kit.Select("", arg, 2)) + } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select(kit.Select("time,userzone,usernick,username", mdb.DETAIL, len(arg) > 0), m.Option(mdb.FIELDS))) + m.Fields(len(arg) == 0, "time,username,userzone,usernick") m.Cmdy(mdb.SELECT, USER, "", mdb.HASH, USERNAME, arg) - m.PushAction(mdb.REMOVE) + m.Table(func(index int, value map[string]string, head []string) { + m.Push(USERROLE, UserRole(m, value[USERNAME])) + }) + m.PushAction(ROLE, mdb.REMOVE) }}, }, }) diff --git a/base/ctx/command.go b/base/ctx/command.go index b2afef01..0db04c4e 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -10,10 +10,6 @@ import ( ) func _command_search(m *ice.Message, kind, name, text string) { - if !(kind == COMMAND || kind == kit.MDB_FOREACH && name != "") { - return - } - ice.Pulse.Travel(func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { if strings.HasPrefix(key, "_") || strings.HasPrefix(key, "/") { return @@ -67,7 +63,9 @@ func init() { Commands: map[string]*ice.Command{ COMMAND: {Name: "command key auto", Help: "命令", Action: map[string]*ice.Action{ mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - _command_search(m, arg[0], arg[1], arg[2]) + if arg[0] == COMMAND { + _command_search(m, arg[0], arg[1], arg[2]) + } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { _command_list(m, strings.Join(arg, ".")) diff --git a/base/web/serve.go b/base/web/serve.go index 3ebe72ca..0bfc0008 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -193,6 +193,8 @@ func _serve_login(msg *ice.Message, cmds []string, w http.ResponseWriter, r *htt const ( WEB_LOGIN = "_login" + + SSO = "sso" ) const SERVE = "serve" diff --git a/core/chat/header.go b/core/chat/header.go index 780706c7..4a60ec93 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -9,10 +9,23 @@ import ( kit "github.com/shylinux/toolkits" ) +func _header_check(m *ice.Message) { + if m.Option(web.SHARE) != "" { + switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) { + case web.LOGIN: + if m.Option(ice.MSG_SESSID) == "" { + web.Render(m, web.COOKIE, aaa.SessCreate(m, msg.Append(aaa.USERNAME))) + } + } + } + m.Option(web.SSO, m.Conf(web.SERVE, kit.Keym(web.SSO))) +} + const ( - TITLE = "title" LOGIN = "login" CHECK = "check" + TITLE = "title" + AGENT = "agent" BACKGROUND = "background" ) @@ -28,45 +41,34 @@ func init() { P_HEADER: {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{ LOGIN: {Name: "login", Help: "用户登录", Hand: func(m *ice.Message, arg ...string) { if aaa.UserLogin(m, arg[0], arg[1]) { - m.Option(ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERROLE))) - web.Render(m, web.COOKIE, m.Option(ice.MSG_SESSID)) + web.Render(m, web.COOKIE, aaa.SessCreate(m, arg[0])) } m.Echo(m.Option(ice.MSG_USERNAME)) }}, CHECK: {Name: "check", Help: "登录检查", Hand: func(m *ice.Message, arg ...string) { - if m.Option(web.SHARE) != "" { - switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) { - case web.LOGIN: - if m.Option(ice.MSG_SESSID) == "" { - m.Option(ice.MSG_SESSID, aaa.SessCreate(m, msg.Append(aaa.USERNAME), msg.Append(aaa.USERROLE))) - web.Render(m, web.COOKIE, m.Option(ice.MSG_SESSID)) - } - } - } - - m.Option("sso", m.Conf(web.SERVE, "meta.sso")) + _header_check(m) m.Echo(m.Option(ice.MSG_USERNAME)) }}, + BACKGROUND: {Name: "background", Help: "背景图片", Hand: func(m *ice.Message, arg ...string) { + m.Option(BACKGROUND, m.Conf(HEADER, kit.Keym(BACKGROUND), arg[0])) + }}, + AGENT: {Name: "agent", Help: "宿主机", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("web.chat.wx.access", "config") + }}, - aaa.USERROLE: {Name: "userrole", Help: "用户角色", Hand: func(m *ice.Message, arg ...string) { - m.Echo(aaa.UserRole(m, m.Option("who"))) + code.WEBPACK: {Name: "webpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.WEBPACK, mdb.CREATE) }}, aaa.USERNICK: {Name: "usernick", Help: "用户昵称", Hand: func(m *ice.Message, arg ...string) { m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME)) m.Cmdy("aaa.user", kit.MDB_ACTION, mdb.MODIFY, aaa.USERNICK, arg[0]) }}, - BACKGROUND: {Name: "background", Help: "背景图片", Hand: func(m *ice.Message, arg ...string) { - m.Option(BACKGROUND, m.Conf(HEADER, BACKGROUND, arg[0])) - }}, - code.WEBPACK: {Name: "webpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.WEBPACK, mdb.CREATE) - }}, - "wx": {Name: "wx", Help: "微信", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.chat.wx.access", "config") + aaa.USERROLE: {Name: "userrole", Help: "用户角色", Hand: func(m *ice.Message, arg ...string) { + m.Echo(aaa.UserRole(m, m.Option("who"))) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(BACKGROUND, m.Conf(HEADER, BACKGROUND)) - m.Echo(m.Conf(HEADER, TITLE)) + m.Option(BACKGROUND, m.Conf(HEADER, kit.Keym(BACKGROUND))) + m.Echo(m.Conf(HEADER, kit.Keym(TITLE))) }}, }, }) diff --git a/core/code/webpack.go b/core/code/webpack.go index bdfb0cda..2f69db70 100644 --- a/core/code/webpack.go +++ b/core/code/webpack.go @@ -33,7 +33,7 @@ func init() { m.Option(nfs.DIR_TYPE, nfs.CAT) m.Option(nfs.DIR_DEEP, true) - for _, k := range []string{"lib", "pane", "plugin"} { + for _, k := range []string{"lib", "panel", "plugin"} { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { if strings.HasSuffix(value[kit.MDB_PATH], ".css") { js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n") diff --git a/logs.go b/logs.go index 74ed374a..20f451b0 100644 --- a/logs.go +++ b/logs.go @@ -8,6 +8,7 @@ import ( "strings" ) +var OK = "ok" var ErrWarn = "warn: " var ErrNotLogin = "not login: " var ErrNotRight = "not right: " diff --git a/misc.go b/misc.go index 4be33e83..60845a5c 100644 --- a/misc.go +++ b/misc.go @@ -186,6 +186,9 @@ func (m *Message) PushAnchor(arg ...interface{}) { // [name] link m.Push(kit.MDB_LINK, _render(m, RENDER_ANCHOR, arg...)) } func (m *Message) PushButton(arg ...string) { + if m.Option(MSG_USERUA) == "" || strings.Contains(m.Option(MSG_USERUA), "curl") { + return + } m.Push(kit.MDB_ACTION, _render(m, RENDER_BUTTON, strings.Join(arg, ","))) } func (m *Message) PushScript(arg ...string) *Message { // [type] text... @@ -243,3 +246,7 @@ func (m *Message) RenameAppend(from, to string) { } } } + +func (m *Message) Fields(condition bool, fields string) string { + return m.Option("fields", kit.Select(kit.Select("detail", fields, condition), m.Option("fields"))) +} diff --git a/misc/lark/lark.go b/misc/lark/lark.go index 195d903a..2ba85f82 100644 --- a/misc/lark/lark.go +++ b/misc/lark/lark.go @@ -444,7 +444,7 @@ var Index = &ice.Context{Name: LARK, Help: "机器人", m.Option(aaa.USERZONE, LARK) user := msg.Append("data.open_id") - web.RenderCookie(m, aaa.SessCreate(m, user, aaa.UserRole(m, user))) + web.RenderCookie(m, aaa.SessCreate(m, user)) m.Render("redirect", m.Conf(web.SHARE, "meta.domain")) msg = m.Cmd(EMPLOYEE, m.Option(aaa.USERNAME, user)) diff --git a/misc/mp/mp.go b/misc/mp/mp.go index 600c81a7..887c2864 100644 --- a/misc/mp/mp.go +++ b/misc/mp/mp.go @@ -50,7 +50,7 @@ var Index = &ice.Context{Name: MP, Help: "小程序", // 用户登录 m.Option(ice.MSG_USERZONE, MP) - m.Echo(aaa.SessCreate(msg, msg.Append(OPENID), aaa.UserRole(msg, msg.Append(OPENID)))) + m.Echo(aaa.SessCreate(msg, msg.Append(OPENID))) }}, aaa.USER: {Name: "user", Help: "用户", Hand: func(m *ice.Message, arg ...string) { m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))