mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
opt aaa
This commit is contained in:
parent
660d594e8e
commit
b01ebf5c2f
@ -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()
|
||||
|
136
base/aaa/role.go
136
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:]...)
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -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)
|
||||
}},
|
||||
|
100
base/aaa/user.go
100
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)
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -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, "."))
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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)))
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -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")
|
||||
|
1
logs.go
1
logs.go
@ -8,6 +8,7 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
var OK = "ok"
|
||||
var ErrWarn = "warn: "
|
||||
var ErrNotLogin = "not login: "
|
||||
var ErrNotRight = "not right: "
|
||||
|
7
misc.go
7
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")))
|
||||
}
|
||||
|
@ -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))
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user