1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 01:24:05 +08:00

opt aaa.user

This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-03-23 02:26:24 +08:00
parent cf184b384e
commit 1da4185842
26 changed files with 72 additions and 96 deletions

View File

@ -10,9 +10,9 @@ import (
func _sess_create(m *ice.Message, username string, arg ...string) (h string) { func _sess_create(m *ice.Message, username string, arg ...string) (h string) {
if msg := m.Cmd(USER, username); msg.Length() > 0 { if msg := m.Cmd(USER, username); msg.Length() > 0 {
h = mdb.HashCreate(m, msg.AppendSimple(USERNAME, USERNICK, USERROLE), arg) h = mdb.HashCreate(m, msg.AppendSimple(USERNICK, USERNAME, USERROLE), arg)
} else { } else {
h = mdb.HashCreate(m, m.OptionSimple(USERNAME, USERNICK, USERROLE), arg) h = mdb.HashCreate(m, m.OptionSimple(USERNICK, USERNAME, USERROLE), arg)
} }
gdb.Event(m, SESS_CREATE, SESS, h, USERNAME, username) gdb.Event(m, SESS_CREATE, SESS, h, USERNAME, username)
return return
@ -48,7 +48,7 @@ func init() {
CHECK: {Name: "check sessid*", Hand: func(m *ice.Message, arg ...string) { CHECK: {Name: "check sessid*", Hand: func(m *ice.Message, arg ...string) {
_sess_check(m, m.Option(SESSID)) _sess_check(m, m.Option(SESSID))
}}, }},
}, mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,usernick,userrole,ua,ip", mdb.EXPIRE, "720h", mdb.ImportantDataAction()))}, }, mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,usernick,userrole,ua,ip", mdb.EXPIRE, mdb.MONTH, mdb.ImportantDataAction()))},
}) })
} }
@ -56,7 +56,7 @@ func SessCreate(m *ice.Message, username string) string {
return m.Option(ice.MSG_SESSID, m.Cmdx(SESS, mdb.CREATE, username)) return m.Option(ice.MSG_SESSID, m.Cmdx(SESS, mdb.CREATE, username))
} }
func SessCheck(m *ice.Message, sessid string) bool { func SessCheck(m *ice.Message, sessid string) bool {
m.Options(ice.MSG_USERNAME, "", ice.MSG_USERNICK, "", ice.MSG_USERROLE, VOID, "aaa.checker", logs.FileLine(-1)) m.Options(ice.MSG_USERNICK, "", ice.MSG_USERNAME, "", ice.MSG_USERROLE, VOID, "aaa.checker", logs.FileLine(-1))
return sessid != "" && m.Cmdy(SESS, CHECK, sessid, logs.FileLineMeta(-1)).Option(ice.MSG_USERNAME) != "" return sessid != "" && m.Cmdy(SESS, CHECK, sessid, logs.FileLineMeta(-1)).Option(ice.MSG_USERNAME) != ""
} }
func SessAuth(m *ice.Message, value ice.Any, arg ...string) *ice.Message { func SessAuth(m *ice.Message, value ice.Any, arg ...string) *ice.Message {

View File

@ -7,28 +7,16 @@ import (
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
func _user_create(m *ice.Message, name, word string, arg ...string) { func _user_create(m *ice.Message, name string, arg ...string) {
mdb.HashCreate(m, USERNAME, name, PASSWORD, kit.GetValid( mdb.HashCreate(m, USERNAME, name, arg)
func() string { return word },
func() string { return m.CmdAppend(USER, name, PASSWORD) },
func() string { return kit.Hashs() },
), arg)
gdb.Event(m, USER_CREATE, USER, name) gdb.Event(m, USER_CREATE, USER, name)
} }
func _user_login(m *ice.Message, name, word string) {
if val := mdb.HashSelectDetails(m.Spawn(), name, func(value ice.Map) bool {
return !m.Warn(word != "" && word != kit.Format(value[PASSWORD]), ice.ErrNotValid)
}); len(val) > 0 {
SessAuth(m, val)
}
}
const ( const (
BACKGROUND = "background" BACKGROUND = "background"
AVATAR = "avatar"
AVATAR = "avatar" GENDER = "gender"
GENDER = "gender" MOBILE = "mobile"
MOBILE = "mobile"
CITY = "city" CITY = "city"
COUNTRY = "country" COUNTRY = "country"
@ -36,11 +24,11 @@ const (
LANGUAGE = "language" LANGUAGE = "language"
) )
const ( const (
USERNICK = "usernick"
USERNAME = "username" USERNAME = "username"
PASSWORD = "password" PASSWORD = "password"
USERNICK = "usernick"
USERZONE = "userzone"
USERROLE = "userrole" USERROLE = "userrole"
USERZONE = "userzone"
USER_CREATE = "user.create" USER_CREATE = "user.create"
) )
@ -51,19 +39,16 @@ func init() {
USER: {Name: "user username auto create", Help: "用户", Actions: ice.MergeActions(ice.Actions{ USER: {Name: "user username auto create", Help: "用户", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg); arg[0] { switch mdb.HashInputs(m, arg); arg[0] {
case USERNAME:
m.Push(arg[0], m.Option(ice.MSG_USERNAME))
case USERNICK: case USERNICK:
m.Push(arg[0], m.Option(ice.MSG_USERNICK)) m.Push(arg[0], m.Option(ice.MSG_USERNICK))
case USERNAME:
m.Push(arg[0], m.Option(ice.MSG_USERNAME))
} }
}}, }},
mdb.CREATE: {Name: "create username* password usernick userzone userrole=void,tech", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create usernick username* userrole=void,tech userzone", Hand: func(m *ice.Message, arg ...string) {
_user_create(m, m.Option(USERNAME), m.Option(PASSWORD), m.OptionSimple(USERNICK, USERZONE, USERROLE)...) _user_create(m, m.Option(USERNAME), m.OptionSimple(USERNICK, USERROLE, USERZONE)...)
}}, }},
LOGIN: {Name: "login username* password", Hand: func(m *ice.Message, arg ...string) { }, mdb.HashAction(mdb.SHORT, USERNAME, mdb.FIELD, "time,usernick,username,userrole,userzone"), mdb.ImportantDataAction())},
_user_login(m, m.Option(USERNAME), m.Option(PASSWORD))
}},
}, mdb.HashAction(mdb.SHORT, USERNAME, mdb.FIELD, "time,username,usernick,userzone,userrole"), mdb.ImportantDataAction())},
}) })
} }
@ -76,9 +61,6 @@ func UserInfo(m *ice.Message, name ice.Any, key, meta string) (value string) {
func UserNick(m *ice.Message, username ice.Any) (nick string) { func UserNick(m *ice.Message, username ice.Any) (nick string) {
return UserInfo(m, username, USERNICK, ice.MSG_USERNICK) return UserInfo(m, username, USERNICK, ice.MSG_USERNICK)
} }
func UserZone(m *ice.Message, username ice.Any) (zone string) {
return UserInfo(m, username, USERZONE, ice.MSG_USERZONE)
}
func UserRole(m *ice.Message, username ice.Any) (role string) { func UserRole(m *ice.Message, username ice.Any) (role string) {
if username == "" { if username == "" {
return VOID return VOID
@ -88,18 +70,17 @@ func UserRole(m *ice.Message, username ice.Any) (role string) {
} }
return UserInfo(m, username, USERROLE, ice.MSG_USERROLE) return UserInfo(m, username, USERROLE, ice.MSG_USERROLE)
} }
func UserLogin(m *ice.Message, username, password string) bool { func UserZone(m *ice.Message, username ice.Any) (zone string) {
m.Options(ice.MSG_USERNAME, "", ice.MSG_USERNICK, "", ice.MSG_USERROLE, VOID) return UserInfo(m, username, USERZONE, ice.MSG_USERZONE)
return m.Cmdy(USER, LOGIN, username, password).Option(ice.MSG_USERNAME) != ""
} }
func UserRoot(m *ice.Message, arg ...string) *ice.Message { func UserRoot(m *ice.Message, arg ...string) *ice.Message {
username := kit.Select(ice.Info.Username, arg, 0)
usernick := kit.Select(UserNick(m, username), arg, 1)
userrole := kit.Select(ROOT, arg, 2)
userzone := kit.Select("", arg, 3) userzone := kit.Select("", arg, 3)
userrole := kit.Select(ROOT, arg, 2)
username := kit.Select(ice.Info.Username, arg, 1)
usernick := kit.Select(UserNick(m, username), arg, 0)
if len(arg) > 0 { if len(arg) > 0 {
m.Cmd(USER, mdb.CREATE, username, "", usernick, userzone, userrole) m.Cmd(USER, mdb.CREATE, usernick, username, userrole, userzone)
ice.Info.Username = username ice.Info.Username = username
} }
return SessAuth(m, kit.Dict(USERNAME, username, USERNICK, usernick, USERROLE, userrole)) return SessAuth(m, kit.Dict(USERNICK, usernick, USERNAME, username, USERROLE, userrole))
} }

View File

@ -17,10 +17,10 @@ import (
func _runtime_init(m *ice.Message) { func _runtime_init(m *ice.Message) {
count := kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, mdb.COUNT))) count := kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, mdb.COUNT)))
kit.Fetch(kit.UnMarshal(kit.Format(ice.Info.Make)), func(key string, value ice.Any) { kit.For(kit.UnMarshal(kit.Format(ice.Info.Make)), func(key string, value ice.Any) {
m.Conf(RUNTIME, kit.Keys(MAKE, strings.ToLower(key)), value) m.Conf(RUNTIME, kit.Keys(MAKE, strings.ToLower(key)), value)
}) })
aaa.UserRoot(ice.Pulse, ice.Info.Make.Username, "", aaa.TECH, ice.DEV) aaa.UserRoot(ice.Pulse, "", ice.Info.Make.Username, aaa.TECH, ice.DEV)
m.Conf(RUNTIME, kit.Keys(HOST, GOARCH), runtime.GOARCH) m.Conf(RUNTIME, kit.Keys(HOST, GOARCH), runtime.GOARCH)
m.Conf(RUNTIME, kit.Keys(HOST, GOOS), runtime.GOOS) m.Conf(RUNTIME, kit.Keys(HOST, GOOS), runtime.GOOS)
m.Conf(RUNTIME, kit.Keys(HOST, OSID), release(m)) m.Conf(RUNTIME, kit.Keys(HOST, OSID), release(m))
@ -47,7 +47,7 @@ func _runtime_init(m *ice.Message) {
ice.Info.Hostname = m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME)) ice.Info.Hostname = m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME))
ice.Info.Pathname = m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME)) ice.Info.Pathname = m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME))
ice.Info.Username = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME)) ice.Info.Username = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME))
aaa.UserRoot(ice.Pulse, ice.Info.Username, "", "", ice.OPS) aaa.UserRoot(ice.Pulse, "", ice.Info.Username, aaa.ROOT, ice.OPS)
msg := m.Cmd(nfs.DIR, _system_find(m, os.Args[0]), "time,path,size,hash") msg := m.Cmd(nfs.DIR, _system_find(m, os.Args[0]), "time,path,size,hash")
m.Conf(RUNTIME, kit.Keys(BOOT, ice.BIN), msg.Append(nfs.PATH)) m.Conf(RUNTIME, kit.Keys(BOOT, ice.BIN), msg.Append(nfs.PATH))
m.Conf(RUNTIME, kit.Keys(BOOT, nfs.SIZE), msg.Append(nfs.SIZE)) m.Conf(RUNTIME, kit.Keys(BOOT, nfs.SIZE), msg.Append(nfs.SIZE))

View File

@ -13,7 +13,7 @@ import (
func _tail_create(m *ice.Message, arg ...string) { func _tail_create(m *ice.Message, arg ...string) {
h := mdb.HashCreate(m, arg) h := mdb.HashCreate(m, arg)
kit.Fetch(kit.Split(m.Option(FILE)), func(file string) { kit.For(kit.Split(m.Option(FILE)), func(file string) {
m.Options(cli.CMD_OUTPUT, Pipe(m, func(text string) { mdb.ZoneInsert(m, h, FILE, file, nfs.SIZE, len(text), mdb.TEXT, text) }), mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE) m.Options(cli.CMD_OUTPUT, Pipe(m, func(text string) { mdb.ZoneInsert(m, h, FILE, file, nfs.SIZE, len(text), mdb.TEXT, text) }), mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE)
m.Cmd(cli.DAEMON, TAIL, "-n", "0", "-f", file) m.Cmd(cli.DAEMON, TAIL, "-n", "0", "-f", file)
}) })

View File

@ -158,7 +158,7 @@ func OptionLoad(m *ice.Message, file string) *ice.Message {
defer f.Close() defer f.Close()
var data ice.Any var data ice.Any
m.Assert(json.NewDecoder(f).Decode(&data)) m.Assert(json.NewDecoder(f).Decode(&data))
kit.Fetch(data, func(key string, value ice.Any) { m.Option(key, kit.Simple(value)) }) kit.For(data, func(key string, value ice.Any) { m.Option(key, kit.Simple(value)) })
} }
return m return m
} }

View File

@ -27,7 +27,7 @@ func _serve_address(m *ice.Message) string {
} }
func _serve_start(m *ice.Message) { func _serve_start(m *ice.Message) {
defer kit.For(kit.Split(m.Option(ice.DEV)), func(v string) { m.Cmd(SPACE, tcp.DIAL, ice.DEV, v, mdb.NAME, ice.Info.NodeName) }) defer kit.For(kit.Split(m.Option(ice.DEV)), func(v string) { m.Cmd(SPACE, tcp.DIAL, ice.DEV, v, mdb.NAME, ice.Info.NodeName) })
kit.If(m.Option(aaa.USERNAME), func() { aaa.UserRoot(m, m.Option(aaa.USERNAME), m.Option(aaa.USERNICK)) }) kit.If(m.Option(aaa.USERNAME), func() { aaa.UserRoot(m, m.Option(aaa.USERNICK), m.Option(aaa.USERNAME)) })
kit.If(m.Option(tcp.PORT) == tcp.RANDOM, func() { m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT)) }) kit.If(m.Option(tcp.PORT) == tcp.RANDOM, func() { m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT)) })
kit.If(runtime.GOOS == cli.WINDOWS, func() { m.Cmd(SPIDE, ice.OPS, _serve_address(m)+"/exit").Sleep("300ms") }) kit.If(runtime.GOOS == cli.WINDOWS, func() { m.Cmd(SPIDE, ice.OPS, _serve_address(m)+"/exit").Sleep("300ms") })
cli.NodeInfo(m, kit.Select(ice.Info.Hostname, m.Option(tcp.NODENAME)), SERVER) cli.NodeInfo(m, kit.Select(ice.Info.Hostname, m.Option(tcp.NODENAME)), SERVER)

View File

@ -132,7 +132,7 @@ func init() {
RenderMain(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, mdb.DAYS), ServeAction(), aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) {
if ctx.PodCmd(m, SHARE, arg) { if ctx.PodCmd(m, SHARE, arg) {
return return
} }

View File

@ -111,7 +111,7 @@ func _spide_body(m *ice.Message, method string, arg ...string) (io.Reader, ice.M
fallthrough fallthrough
default: default:
data := ice.Map{} data := ice.Map{}
kit.Fetch(arg, func(k, v string) { kit.Value(data, k, v) }) kit.For(arg, func(k, v string) { kit.Value(data, k, v) })
head[ContentType], body = ContentJSON, bytes.NewBufferString(kit.Format(data)) head[ContentType], body = ContentJSON, bytes.NewBufferString(kit.Format(data))
} }
arg = arg[:0] arg = arg[:0]
@ -155,23 +155,23 @@ func _spide_part(m *ice.Message, arg ...string) (string, io.Reader) {
} }
func _spide_head(m *ice.Message, req *http.Request, head ice.Maps, value ice.Map) { func _spide_head(m *ice.Message, req *http.Request, head ice.Maps, value ice.Map) {
m.Logs(req.Method, req.URL.String()) m.Logs(req.Method, req.URL.String())
kit.Fetch(value[SPIDE_HEADER], func(k string, v string) { kit.For(value[SPIDE_HEADER], func(k string, v string) {
req.Header.Set(k, v) req.Header.Set(k, v)
m.Logs("Header", k, v) m.Logs("Header", k, v)
}) })
kit.Fetch(value[SPIDE_COOKIE], func(k string, v string) { kit.For(value[SPIDE_COOKIE], func(k string, v string) {
req.AddCookie(&http.Cookie{Name: k, Value: v}) req.AddCookie(&http.Cookie{Name: k, Value: v})
m.Logs("Cookie", k, v) m.Logs("Cookie", k, v)
}) })
kit.Fetch(kit.Simple(m.Optionv(SPIDE_COOKIE)), func(k, v string) { kit.For(kit.Simple(m.Optionv(SPIDE_COOKIE)), func(k, v string) {
req.AddCookie(&http.Cookie{Name: k, Value: v}) req.AddCookie(&http.Cookie{Name: k, Value: v})
m.Logs("Cookie", k, v) m.Logs("Cookie", k, v)
}) })
kit.Fetch(kit.Simple(m.Optionv(SPIDE_HEADER)), func(k, v string) { kit.For(kit.Simple(m.Optionv(SPIDE_HEADER)), func(k, v string) {
req.Header.Set(k, v) req.Header.Set(k, v)
m.Logs("Header", k, v) m.Logs("Header", k, v)
}) })
kit.Fetch(head, func(k, v string) { kit.For(head, func(k, v string) {
req.Header.Set(k, v) req.Header.Set(k, v)
m.Logs("Header", k, v) m.Logs("Header", k, v)
}) })
@ -194,7 +194,7 @@ func _spide_save(m *ice.Message, format, file, uri string, res *http.Response) {
case SPIDE_MSG: case SPIDE_MSG:
var data map[string][]string var data map[string][]string
m.Assert(json.NewDecoder(res.Body).Decode(&data)) m.Assert(json.NewDecoder(res.Body).Decode(&data))
kit.Fetch(data[ice.MSG_APPEND], func(k string) { kit.Fetch(data[k], func(v string) { m.Push(k, v) }) }) kit.For(data[ice.MSG_APPEND], func(k string) { kit.For(data[k], func(v string) { m.Push(k, v) }) })
m.Resultv(data[ice.MSG_RESULT]) m.Resultv(data[ice.MSG_RESULT])
case SPIDE_SAVE: case SPIDE_SAVE:
_cache_download(m, res, file, m.OptionCB(SPIDE)) _cache_download(m, res, file, m.OptionCB(SPIDE))

View File

@ -26,7 +26,7 @@ func _header_share(m *ice.Message, arg ...string) {
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, "没有登录") { if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, "没有登录") {
return return
} }
if kit.Fetch(arg, func(k, v string) { m.Option(k, v) }); m.Option(mdb.LINK) == "" { if kit.For(arg, func(k, v string) { m.Option(k, v) }); m.Option(mdb.LINK) == "" {
m.Cmdy(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN, arg) m.Cmdy(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN, arg)
} else { } else {
m.Option(mdb.LINK, tcp.PublishLocalhost(m, m.Option(mdb.LINK))) m.Option(mdb.LINK, tcp.PublishLocalhost(m, m.Option(mdb.LINK)))
@ -65,12 +65,7 @@ const HEADER = "header"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
web.P(HEADER): {Name: "/header", Help: "标题栏", Actions: ice.MergeActions(ice.Actions{ web.P(HEADER): {Name: "/header", Help: "标题栏", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {}}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {}},
aaa.LOGIN: {Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 1 && aaa.UserLogin(m, arg[0], arg[1]) {
web.RenderCookie(m, aaa.SessCreate(m, arg[0]))
}
}},
aaa.LOGOUT: {Hand: aaa.SessLogout}, aaa.LOGOUT: {Hand: aaa.SessLogout},
aaa.PASSWORD: {Hand: _header_users}, aaa.PASSWORD: {Hand: _header_users},
aaa.USERNICK: {Hand: _header_users}, aaa.USERNICK: {Hand: _header_users},

View File

@ -79,9 +79,9 @@ var Index = &ice.Context{Name: OAUTH, Help: "认证授权", Commands: ice.Comman
}}, }},
})}, })},
APPLY: {Name: "apply hash auto create prunes", Help: "申请", Actions: mdb.HashAction(mdb.EXPIRE, "72h", mdb.FIELD, "time,hash,username,scope,redirect_uri")}, APPLY: {Name: "apply hash auto create prunes", Help: "申请", Actions: mdb.HashAction(mdb.EXPIRE, mdb.DAYS, mdb.FIELD, "time,hash,username,scope,redirect_uri")},
REPLY: {Name: "reply hash auto create prunes", Help: "授权", Actions: mdb.HashAction(mdb.EXPIRE, "720h", mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,scope,offer")}, REPLY: {Name: "reply hash auto create prunes", Help: "授权", Actions: mdb.HashAction(mdb.EXPIRE, mdb.MONTH, mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,scope,offer")},
OFFER: {Name: "offer hash auto create prunes", Help: "访问", Actions: mdb.HashAction(mdb.EXPIRE, "720h", mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,scope,redirect_uri")}, OFFER: {Name: "offer hash auto create prunes", Help: "访问", Actions: mdb.HashAction(mdb.EXPIRE, mdb.MONTH, mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,scope,redirect_uri")},
web.P(APPLY): {Name: "/apply scope redirect_uri", Help: "申请", Actions: ctx.CmdAction(), Hand: func(m *ice.Message, arg ...string) { web.P(APPLY): {Name: "/apply scope redirect_uri", Help: "申请", Actions: ctx.CmdAction(), Hand: func(m *ice.Message, arg ...string) {
if m.Option(REDIRECT_URI) == "" { if m.Option(REDIRECT_URI) == "" {
@ -112,8 +112,8 @@ var Index = &ice.Context{Name: OAUTH, Help: "认证授权", Commands: ice.Comman
}}, }},
AUTHORIZE: {Name: "authorize hash auto create prunes", Help: "认证", Actions: mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,redirect_uri")}, AUTHORIZE: {Name: "authorize hash auto create prunes", Help: "认证", Actions: mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,redirect_uri")},
TOKEN: {Name: "token hash auto create prunes", Help: "授权", Actions: mdb.HashAction(mdb.EXPIRE, "72h", mdb.FIELD, "time,hash,used,state,scope,redirect_uri")}, TOKEN: {Name: "token hash auto create prunes", Help: "授权", Actions: mdb.HashAction(mdb.EXPIRE, mdb.DAYS, mdb.FIELD, "time,hash,used,state,scope,redirect_uri")},
ACCESS: {Name: "access hash auto create prunes", Help: "访问", Actions: mdb.HashAction(mdb.EXPIRE, "720h", mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,scope,redirect_uri")}, ACCESS: {Name: "access hash auto create prunes", Help: "访问", Actions: mdb.HashAction(mdb.EXPIRE, mdb.MONTH, mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,username,scope,redirect_uri")},
web.P(AUTHORIZE): {Name: "/authorize state scope client_id redirect_uri", Help: "认证", Hand: func(m *ice.Message, arg ...string) { web.P(AUTHORIZE): {Name: "/authorize state scope client_id redirect_uri", Help: "认证", Hand: func(m *ice.Message, arg ...string) {
if m.Option(CLIENT_ID) == "" || m.Option(REDIRECT_URI) == "" { if m.Option(CLIENT_ID) == "" || m.Option(REDIRECT_URI) == "" {

View File

@ -15,11 +15,11 @@ func init() {
TEMPLATE: {Name: "template river storm index auto 删除配置 查看配置", Help: "模板", Actions: ice.MergeActions(ice.Actions{ TEMPLATE: {Name: "template river storm index auto 删除配置 查看配置", Help: "模板", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
if gdb.Watch(m, RIVER_CREATE); m.Cmd("").Length() == 0 { if gdb.Watch(m, RIVER_CREATE); m.Cmd("").Length() == 0 {
kit.Fetch(_river_template, func(river string, value ice.Any) { kit.For(_river_template, func(river string, value ice.Any) {
m.Cmd("", mdb.CREATE, RIVER, river) m.Cmd("", mdb.CREATE, RIVER, river)
kit.Fetch(value, func(storm string, value ice.Any) { kit.For(value, func(storm string, value ice.Any) {
m.Cmd("", mdb.INSERT, RIVER, river, STORM, storm) m.Cmd("", mdb.INSERT, RIVER, river, STORM, storm)
kit.Fetch(value, func(index int, value ice.Any) { kit.For(value, func(index int, value ice.Any) {
m.Cmd("", "add", RIVER, river, STORM, storm, ctx.INDEX, value) m.Cmd("", "add", RIVER, river, STORM, storm, ctx.INDEX, value)
}) })
}) })

View File

@ -62,7 +62,7 @@ func init() {
m.Push("name", kit.Select(kit.Format(kit.Value(tags, "name")), value["name"])) m.Push("name", kit.Select(kit.Format(kit.Value(tags, "name")), value["name"]))
m.Push("value", kit.Select(kit.Format(kit.Value(tags, "value")), value["value"])) m.Push("value", kit.Select(kit.Format(kit.Value(tags, "value")), value["value"]))
}) })
kit.Fetch(form, func(k string, v ice.Map) { kit.For(form, func(k string, v ice.Map) {
m.Push("tags", k) m.Push("tags", k)
m.Push("", v, kit.Split("type,name,value")) m.Push("", v, kit.Split("type,name,value"))
}) })

View File

@ -41,7 +41,7 @@ func (b *Block) Init(m *ice.Message, arg ...string) wiki.Chart {
} }
func (b *Block) Data(m *ice.Message, meta ice.Any) wiki.Chart { func (b *Block) Data(m *ice.Message, meta ice.Any) wiki.Chart {
b.Text = kit.Select(b.Text, kit.Value(meta, mdb.TEXT)) b.Text = kit.Select(b.Text, kit.Value(meta, mdb.TEXT))
kit.Fetch(meta, func(key string, value string) { kit.For(meta, func(key string, value string) {
switch key { switch key {
case wiki.FG: case wiki.FG:
b.TextData += kit.Format("%s='%s' %s='%s'", wiki.FILL, value, wiki.STROKE, value) b.TextData += kit.Format("%s='%s' %s='%s'", wiki.FILL, value, wiki.STROKE, value)
@ -49,10 +49,10 @@ func (b *Block) Data(m *ice.Message, meta ice.Any) wiki.Chart {
b.RectData += kit.Format("%s='%s' ", wiki.FILL, value) b.RectData += kit.Format("%s='%s' ", wiki.FILL, value)
} }
}) })
kit.Fetch(kit.Value(meta, "data"), func(key string, value string) { kit.For(kit.Value(meta, "data"), func(key string, value string) {
b.TextData += kit.Format("%s='%s' ", key, value) b.TextData += kit.Format("%s='%s' ", key, value)
}) })
kit.Fetch(kit.Value(meta, "rect"), func(key string, value string) { kit.For(kit.Value(meta, "rect"), func(key string, value string) {
b.RectData += kit.Format("%s='%s' ", key, value) b.RectData += kit.Format("%s='%s' ", key, value)
}) })
return b return b

View File

@ -46,7 +46,7 @@ func (c *Chain) Draw(m *ice.Message, x, y int) wiki.Chart {
func (c *Chain) height(m *ice.Message, root ice.Map) (height int) { func (c *Chain) height(m *ice.Message, root ice.Map) (height int) {
meta := kit.GetMeta(root) meta := kit.GetMeta(root)
if list, ok := root[mdb.LIST].([]ice.Any); ok && len(list) > 0 { if list, ok := root[mdb.LIST].([]ice.Any); ok && len(list) > 0 {
kit.Fetch(root[mdb.LIST], func(index int, value ice.Map) { height += c.height(m, value) }) kit.For(root[mdb.LIST], func(index int, value ice.Map) { height += c.height(m, value) })
} else { } else {
height = 1 height = 1
} }
@ -76,7 +76,7 @@ func (c *Chain) draw(m *ice.Message, root ice.Map, x, y int, p *Block, gs *wiki.
gs.EchoTexts(TEXT, item.x+item.GetWidths()/2, item.y+item.GetHeights()/2, item.Text, item.TextData) gs.EchoTexts(TEXT, item.x+item.GetWidths()/2, item.y+item.GetHeights()/2, item.Text, item.TextData)
h, x := 0, x+item.GetWidths() h, x := 0, x+item.GetWidths()
if kit.Fetch(root[mdb.LIST], func(value ice.Map) { h += c.draw(m, value, x, y+h, item, gs) }); h == 0 { if kit.For(root[mdb.LIST], func(value ice.Map) { h += c.draw(m, value, x, y+h, item, gs) }); h == 0 {
return item.GetHeights() return item.GetHeights()
} }
return h return h

View File

@ -53,7 +53,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
switch arg[i] { switch arg[i] {
case ARGS: case ARGS:
count := 0 count := 0
kit.Fetch(meta[INPUTS], func(index int, value ice.Map) { kit.For(meta[INPUTS], func(index int, value ice.Map) {
if value[mdb.TYPE] != "button" { if value[mdb.TYPE] != "button" {
count++ count++
} }

View File

@ -112,7 +112,7 @@ func (m *Message) OptionTemplate() string {
} }
add("data-", key) add("data-", key)
} }
kit.Fetch(m.Optionv(mdb.EXTRA), func(key string, value string) { kit.For(m.Optionv(mdb.EXTRA), func(key string, value string) {
switch key { switch key {
case PADDING: case PADDING:
return return

View File

@ -100,7 +100,7 @@ func Run(arg ...string) string {
} }
} }
Pulse.meta[MSG_DETAIL] = arg Pulse.meta[MSG_DETAIL] = arg
kit.Fetch(kit.Sort(os.Environ()), func(env string) { kit.For(kit.Sort(os.Environ()), func(env string) {
if ls := strings.SplitN(env, EQ, 2); strings.ToLower(ls[0]) == ls[0] && ls[0] != "_" { if ls := strings.SplitN(env, EQ, 2); strings.ToLower(ls[0]) == ls[0] && ls[0] != "_" {
Pulse.Option(ls[0], ls[1]) Pulse.Option(ls[0], ls[1])
} }

View File

@ -151,7 +151,7 @@ func (m *Message) Design(action Any, help string, input ...Any) {
list = append(list, input) list = append(list, input)
continue continue
} }
kit.Fetch(kit.KeyValue(nil, "", input), func(k string, v Any) { kit.For(kit.KeyValue(nil, "", input), func(k string, v Any) {
list = append(list, kit.Dict(NAME, k, TYPE, TEXT, VALUE, v)) list = append(list, kit.Dict(NAME, k, TYPE, TEXT, VALUE, v))
}) })
default: default:

View File

@ -15,10 +15,10 @@ import (
func _run_action(m *ice.Message, cmd *ice.Command, script string, arg ...string) { func _run_action(m *ice.Message, cmd *ice.Command, script string, arg ...string) {
list, args := []string{}, []string{} list, args := []string{}, []string{}
kit.Fetch(cmd.Meta["_trans"], func(k string, v string) { kit.For(cmd.Meta["_trans"], func(k string, v string) {
list = append(list, k) list = append(list, k)
args = append(args, kit.Format(` %s)`, k)) args = append(args, kit.Format(` %s)`, k))
kit.Fetch(cmd.Meta[k], func(index int, value ice.Map) { kit.For(cmd.Meta[k], func(index int, value ice.Map) {
args = append(args, kit.Format(` read -p "input %s: " v; url="$url/%s/$v" `, value[mdb.NAME], value[mdb.NAME])) args = append(args, kit.Format(` read -p "input %s: " v; url="$url/%s/$v" `, value[mdb.NAME], value[mdb.NAME]))
}) })
args = append(args, kit.Format(` ;;`)) args = append(args, kit.Format(` ;;`))

View File

@ -40,8 +40,8 @@ func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
CONFIGS: {Name: "configs name value auto create init", Help: "配置键", Actions: ice.MergeActions(ice.Actions{ CONFIGS: {Name: "configs name value auto create init", Help: "配置键", Actions: ice.MergeActions(ice.Actions{
ice.INIT: {Help: "初始化", Hand: func(m *ice.Message, arg ...string) { ice.INIT: {Help: "初始化", Hand: func(m *ice.Message, arg ...string) {
kit.Fetch(mdb.Configv(m, ice.INIT), func(p string, v ice.Any) { kit.For(mdb.Configv(m, ice.INIT), func(p string, v ice.Any) {
kit.Fetch(v, func(k string, v string) { _configs_set(m, kit.Keys(p, k), v) }) kit.For(v, func(k string, v string) { _configs_set(m, kit.Keys(p, k), v) })
}) })
}}, }},
mdb.CREATE: {Name: "create name* value*", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create name* value*", Hand: func(m *ice.Message, arg ...string) {

View File

@ -54,7 +54,7 @@ func init() {
lines[kit.Ext(file)]++ lines[kit.Ext(file)]++
}) })
}) })
kit.Fetch(lines, func(k string, v int) { m.Push(mdb.TYPE, k).Push("files", files[k]).Push("lines", lines[k]) }) kit.For(lines, func(k string, v int) { m.Push(mdb.TYPE, k).Push("files", files[k]).Push("lines", lines[k]) })
m.StatusTimeCount().SortIntR("lines") m.StatusTimeCount().SortIntR("lines")
}}, }},
"order": {Help: "排行", Hand: func(m *ice.Message, arg ...string) { "order": {Help: "排行", Hand: func(m *ice.Message, arg ...string) {
@ -62,7 +62,7 @@ func init() {
_count_count(m, arg, func(file string) { _count_count(m, arg, func(file string) {
m.Cmdy(nfs.CAT, file, func(text string) { files[strings.TrimPrefix(file, arg[0])]++ }) m.Cmdy(nfs.CAT, file, func(text string) { files[strings.TrimPrefix(file, arg[0])]++ })
}) })
kit.Fetch(files, func(k string, v int) { m.Push("files", k).Push("lines", v) }) kit.For(files, func(k string, v int) { m.Push("files", k).Push("lines", v) })
m.StatusTimeCount().SortIntR("lines") m.StatusTimeCount().SortIntR("lines")
}}, }},
"tags": {Help: "索引", Hand: func(m *ice.Message, arg ...string) { "tags": {Help: "索引", Hand: func(m *ice.Message, arg ...string) {
@ -76,7 +76,7 @@ func init() {
count[kit.Split(ls[1])[0]]++ count[kit.Split(ls[1])[0]]++
} }
}) })
kit.Fetch(count, func(k string, v int) { m.Push(mdb.TYPE, k).Push(mdb.COUNT, v) }) kit.For(count, func(k string, v int) { m.Push(mdb.TYPE, k).Push(mdb.COUNT, v) })
m.StatusTimeCount().SortIntR(mdb.COUNT) m.StatusTimeCount().SortIntR(mdb.COUNT)
}}, }},
}, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.DIR, arg) }}, }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.DIR, arg) }},

View File

@ -149,7 +149,7 @@ func _repos_dir(m *ice.Message, dir, branch, commit, file string, cb func(*gogit
return false return false
}) })
} }
kit.Fetch(prev, func(pp, id string) { kit.For(prev, func(pp, id string) {
if path.Dir(file) != path.Dir(pp) { if path.Dir(file) != path.Dir(pp) {
return return
} }

View File

@ -34,7 +34,7 @@ func _server_login(m *ice.Message) error {
if err != nil { if err != nil {
return err return err
} }
if ls = strings.SplitN(string(data), ice.DF, 2); m.Cmd("web.code.git.token", ls[0]).Append(TOKEN) != ls[1] && !aaa.UserLogin(m.Spawn(), ls[0], ls[1]) { if ls = strings.SplitN(string(data), ice.DF, 2); m.Cmd("web.code.git.token", ls[0]).Append(TOKEN) != ls[1] {
return fmt.Errorf("username or password error") return fmt.Errorf("username or password error")
} }
if aaa.UserRole(m, ls[0]) == aaa.VOID { if aaa.UserRole(m, ls[0]) == aaa.VOID {

View File

@ -9,9 +9,9 @@ import (
func _company_list(m *ice.Message, appid string) { func _company_list(m *ice.Message, appid string) {
_, data := _lark_get(m, appid, "/open-apis/contact/v1/scope/get/") _, data := _lark_get(m, appid, "/open-apis/contact/v1/scope/get/")
kit.Fetch(kit.Value(data, "data.authed_departments"), func(index int, ship_id string) { kit.For(kit.Value(data, "data.authed_departments"), func(index int, ship_id string) {
_, data := _lark_get(m, appid, "/open-apis/contact/v1/department/detail/batch_get", "department_ids", ship_id) _, data := _lark_get(m, appid, "/open-apis/contact/v1/department/detail/batch_get", "department_ids", ship_id)
kit.Fetch(kit.Value(data, "data.department_infos"), func(index int, value ice.Map) { kit.For(kit.Value(data, "data.department_infos"), func(index int, value ice.Map) {
m.Push(SHIP_ID, ship_id) m.Push(SHIP_ID, ship_id)
m.Push(mdb.NAME, value[mdb.NAME]) m.Push(mdb.NAME, value[mdb.NAME])
m.Push(mdb.COUNT, value["member_count"]) m.Push(mdb.COUNT, value["member_count"])
@ -22,7 +22,7 @@ func _company_list(m *ice.Message, appid string) {
} }
func _company_members(m *ice.Message, appid string, ship_id string) { func _company_members(m *ice.Message, appid string, ship_id string) {
_, data := _lark_get(m, appid, "/open-apis/contact/v1/department/user/list", "department_id", ship_id, "page_size", "100", "fetch_child", ice.TRUE) _, data := _lark_get(m, appid, "/open-apis/contact/v1/department/user/list", "department_id", ship_id, "page_size", "100", "fetch_child", ice.TRUE)
kit.Fetch(kit.Value(data, "data.user_list"), func(index int, value ice.Map) { kit.For(kit.Value(data, "data.user_list"), func(index int, value ice.Map) {
msg := m.Cmd(EMPLOYEE, appid, value[OPEN_ID]) msg := m.Cmd(EMPLOYEE, appid, value[OPEN_ID])
m.PushImages(aaa.AVATAR, msg.Append("avatar_72")) m.PushImages(aaa.AVATAR, msg.Append("avatar_72"))
m.Push(aaa.GENDER, kit.Select("女", "男", msg.Append(aaa.GENDER) == "1")) m.Push(aaa.GENDER, kit.Select("女", "男", msg.Append(aaa.GENDER) == "1"))

View File

@ -16,8 +16,8 @@ func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
TALK: {Name: "talk text", Help: "聊天", Hand: func(m *ice.Message, arg ...string) { TALK: {Name: "talk text", Help: "聊天", Hand: func(m *ice.Message, arg ...string) {
cmds := kit.Split(strings.Join(arg, " ")) cmds := kit.Split(strings.Join(arg, " "))
if aaa.UserLogin(m, m.Option(OPEN_ID), ""); !aaa.Right(m, cmds) { if aaa.SessAuth(m, kit.Dict(aaa.USERNAME, m.Option(OPEN_ID))); !aaa.Right(m, cmds) {
if aaa.UserLogin(m, m.Option(OPEN_CHAT_ID), ""); !aaa.Right(m, cmds) { if aaa.SessAuth(m, kit.Dict(aaa.USERNAME, m.Option(OPEN_CHAT_ID))); !aaa.Right(m, cmds) {
m.Cmd(DUTY, m.Option(OPEN_CHAT_ID), m.Option("text_without_at_bot")) m.Cmd(DUTY, m.Option(OPEN_CHAT_ID), m.Option("text_without_at_bot"))
m.Cmd(HOME) m.Cmd(HOME)
return return

View File

@ -158,7 +158,7 @@ func init() {
}}, }},
SCRIPT: {Name: "script name", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { SCRIPT: {Name: "script name", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SCRIPT, m.Option(mdb.NAME), func(value ice.Maps) { m.Cmd(SCRIPT, m.Option(mdb.NAME), func(value ice.Maps) {
kit.Fetch(kit.SplitLine(value[mdb.TEXT]), func(line string) { kit.For(kit.SplitLine(value[mdb.TEXT]), func(line string) {
kit.Switch(value[mdb.TYPE], kit.Switch(value[mdb.TYPE],
"shell", func() { m.Cmd(CMD, _tmux_key(m.Option(SESSION), m.Option(WINDOW), m.Option(PANE)), line) }, "shell", func() { m.Cmd(CMD, _tmux_key(m.Option(SESSION), m.Option(WINDOW), m.Option(PANE)), line) },
"vim", func() { m.Cmd(CMD, _tmux_key(m.Option(SESSION), m.Option(WINDOW), m.Option(PANE)), line) }, "vim", func() { m.Cmd(CMD, _tmux_key(m.Option(SESSION), m.Option(WINDOW), m.Option(PANE)), line) },