forked from x/icebergs
opt favor
This commit is contained in:
parent
8e8d487541
commit
f3ad58e3f0
@ -42,9 +42,11 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
||||
switch arg[0] {
|
||||
case "check":
|
||||
// 用户角色
|
||||
if len(arg) > 1 && arg[1] != "" {
|
||||
m.Echo(kit.Select(kit.Select("void",
|
||||
"tech", m.Confs(ice.AAA_ROLE, kit.Keys("meta.tech", arg[1]))),
|
||||
"root", m.Confs(ice.AAA_ROLE, kit.Keys("meta.root", arg[1]))))
|
||||
}
|
||||
|
||||
case "black", "white":
|
||||
// 黑白名单
|
||||
@ -97,7 +99,7 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
||||
m.Echo("ok")
|
||||
|
||||
default:
|
||||
m.Conf(ice.AAA_ROLE, kit.Keys("meta", arg[0], arg[1]), "true")
|
||||
m.Conf(ice.AAA_ROLE, kit.Keys("meta", arg[0], arg[1]), kit.Select("true", arg, 2))
|
||||
}
|
||||
}},
|
||||
ice.AAA_USER: {Name: "user first|login", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
@ -125,9 +127,13 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
||||
// 用户认证
|
||||
user := m.Richs(ice.AAA_USER, nil, arg[1], nil)
|
||||
if word := kit.Select("", arg, 2); user == nil {
|
||||
nick := arg[1]
|
||||
if len(nick) > 8 {
|
||||
nick = nick[:8]
|
||||
}
|
||||
// 创建用户
|
||||
m.Rich(ice.AAA_USER, nil, kit.Dict(
|
||||
"username", arg[1], "password", word,
|
||||
"usernick", nick, "username", arg[1], "password", word,
|
||||
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
||||
))
|
||||
user = m.Richs(ice.AAA_USER, nil, arg[1], nil)
|
||||
@ -165,6 +171,13 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
||||
}
|
||||
|
||||
switch arg[0] {
|
||||
case "auth":
|
||||
m.Richs(ice.AAA_SESS, nil, arg[1], func(value map[string]interface{}) {
|
||||
value["username"], value["userrole"] = arg[2], m.Cmdx(ice.AAA_ROLE, "check", arg[2])
|
||||
m.Log(ice.LOG_LOGIN, "sessid: %s username: %s userrole: %s", arg[1], arg[2], value["userrole"])
|
||||
m.Echo("%v", value["userrole"])
|
||||
})
|
||||
|
||||
case "check":
|
||||
// 查看会话
|
||||
m.Richs(ice.AAA_SESS, nil, arg[1], func(value map[string]interface{}) {
|
||||
|
@ -76,9 +76,12 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) {
|
||||
case ice.RENDER_QRCODE:
|
||||
if qr, e := qrcode.New(arg[0], qrcode.Medium); msg.Assert(e) {
|
||||
msg.W.Header().Set("Content-Type", "image/png")
|
||||
msg.Assert(qr.Write(256, msg.W))
|
||||
msg.Assert(qr.Write(kit.Int(kit.Select("256", arg, 1)), msg.W))
|
||||
}
|
||||
default:
|
||||
if cmd != "" {
|
||||
msg.Echo(kit.Format(cmd, args...))
|
||||
}
|
||||
msg.W.Header().Set("Content-Type", "application/json")
|
||||
fmt.Fprint(msg.W, msg.Formats("meta"))
|
||||
}
|
||||
@ -251,7 +254,13 @@ func (web *Frame) HandleCmd(m *ice.Message, key string, cmd *ice.Command) {
|
||||
msg.Option(ice.MSG_USERIP, r.Header.Get(ice.MSG_USERIP))
|
||||
msg.Option(ice.MSG_USERURL, r.URL.Path)
|
||||
msg.Option(ice.MSG_SESSID, "")
|
||||
msg.Option(ice.MSG_OUTPUT, "")
|
||||
msg.R, msg.W = r, w
|
||||
if r.Header.Get("X-Real-Port") != "" {
|
||||
msg.Option(ice.MSG_USERADDR, msg.Option(ice.MSG_USERIP)+":"+r.Header.Get("X-Real-Port"))
|
||||
} else {
|
||||
msg.Option(ice.MSG_USERADDR, r.RemoteAddr)
|
||||
}
|
||||
|
||||
// 请求变量
|
||||
for _, v := range r.Cookies() {
|
||||
@ -349,7 +358,7 @@ func (web *Frame) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
m.Conf(ice.WEB_SERVE, "meta.init", "true")
|
||||
}
|
||||
m.W = w
|
||||
m.Render("refresh")
|
||||
Render(m, "refresh")
|
||||
m.Event(ice.SYSTEM_INIT)
|
||||
m.W = nil
|
||||
} else {
|
||||
@ -813,12 +822,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
|
||||
default:
|
||||
if len(arg) == 1 {
|
||||
// 空间空间
|
||||
list := []string{}
|
||||
m.Cmdy(ice.WEB_SPACE, arg[0], "space").Table(func(index int, value map[string]string, head []string) {
|
||||
list = append(list, arg[0]+"."+value["name"])
|
||||
// 空间详情
|
||||
m.Richs(ice.WEB_SPACE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||
m.Push("detail", value)
|
||||
})
|
||||
m.Append("name", list)
|
||||
break
|
||||
}
|
||||
|
||||
@ -1577,7 +1584,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
}
|
||||
if len(arg) == 1 {
|
||||
// 共享详情
|
||||
m.Richs(ice.WEB_SHARE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||
if m.Richs(ice.WEB_SHARE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||
m.Push("detail", value)
|
||||
m.Push("key", "link")
|
||||
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.link"), m.Conf(ice.WEB_SHARE, "meta.domain"), key, key))
|
||||
@ -1585,17 +1592,30 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.share"), m.Conf(ice.WEB_SHARE, "meta.domain"), key))
|
||||
m.Push("key", "value")
|
||||
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.value"), m.Conf(ice.WEB_SHARE, "meta.domain"), key))
|
||||
})
|
||||
}) != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
switch arg[0] {
|
||||
case "invite":
|
||||
arg = []string{arg[0], m.Cmdx(ice.WEB_SHARE, "add", "invite", kit.Select("tech", arg, 1), kit.Select("miss", arg, 2))}
|
||||
|
||||
fallthrough
|
||||
case "check":
|
||||
m.Richs(ice.WEB_SHARE, nil, arg[1], func(key string, value map[string]interface{}) {
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format(kit.Dict(
|
||||
kit.MDB_TYPE, "share", kit.MDB_NAME, value["type"], kit.MDB_TEXT, key,
|
||||
)))
|
||||
})
|
||||
|
||||
case "auth":
|
||||
m.Richs(ice.WEB_SHARE, nil, arg[1], func(key string, value map[string]interface{}) {
|
||||
m.Richs(ice.AAA_SESS, nil, value["text"], func(key string, value map[string]interface{}) {
|
||||
value["username"], value["userrole"] = arg[2], m.Cmdx(ice.AAA_ROLE, "check", arg[2])
|
||||
m.Echo("%s", value["userrole"])
|
||||
})
|
||||
if value["type"] == "active" {
|
||||
m.Cmdy(ice.WEB_SPACE, value["name"], "sessid", m.Cmdx(ice.AAA_SESS, "create", arg[2]))
|
||||
} else {
|
||||
m.Cmdy(ice.AAA_SESS, "auth", value["text"], arg[2])
|
||||
}
|
||||
})
|
||||
|
||||
case "add":
|
||||
@ -1609,6 +1629,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
|
||||
// 创建共享
|
||||
h := m.Rich(ice.WEB_SHARE, nil, kit.Dict(
|
||||
kit.MDB_TIME, m.Time("10m"),
|
||||
kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2],
|
||||
"extra", extra,
|
||||
))
|
||||
@ -1850,6 +1871,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
|
||||
m.Richs(ice.WEB_SHARE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||
m.Log(ice.LOG_EXPORT, "%s: %v", arg, kit.Format(value))
|
||||
if kit.Time(kit.Format(value[kit.MDB_TIME])) < kit.Time(m.Time()) {
|
||||
m.Echo("invalid")
|
||||
return
|
||||
}
|
||||
|
||||
switch value["type"] {
|
||||
case ice.TYPE_SPACE:
|
||||
@ -1877,8 +1902,13 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
case "share", "共享码":
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format("%s/share/%s/", m.Conf(ice.WEB_SHARE, "meta.domain"), key))
|
||||
return
|
||||
case "check", "安全码":
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format(kit.Dict(
|
||||
kit.MDB_TYPE, "share", kit.MDB_NAME, value["type"], kit.MDB_TEXT, key,
|
||||
)))
|
||||
return
|
||||
case "value", "数据值":
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format(value))
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format(value), kit.Select("256", arg, 2))
|
||||
return
|
||||
case "text":
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format(value["text"]))
|
||||
@ -1903,7 +1933,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
|
||||
if arg[1] == "" {
|
||||
// 返回主页
|
||||
http.ServeFile(m.W, m.R, m.Conf(ice.WEB_SHARE, "meta.index"))
|
||||
Render(m, ice.RENDER_DOWNLOAD, m.Conf(ice.WEB_SHARE, "meta.index"))
|
||||
break
|
||||
}
|
||||
|
||||
@ -1946,16 +1976,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
m.Cmdy(cmds).Option("cmds", cmds)
|
||||
m.Option("title", value["name"])
|
||||
|
||||
case ice.TYPE_ACTIVE:
|
||||
// 扫码数据
|
||||
m.Render(ice.RENDER_QRCODE, kit.Format(value))
|
||||
|
||||
default:
|
||||
// 查看数据
|
||||
m.Option("type", value["type"])
|
||||
m.Option("name", value["name"])
|
||||
m.Option("text", value["text"])
|
||||
m.Render(m.Conf(ice.WEB_SHARE, "meta.template.simple"))
|
||||
m.Render(ice.RENDER_TEMPLATE, m.Conf(ice.WEB_SHARE, "meta.template.simple"))
|
||||
m.Option(ice.MSG_OUTPUT, ice.RENDER_RESULT)
|
||||
}
|
||||
})
|
||||
@ -2036,36 +2062,33 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
|
||||
})
|
||||
})
|
||||
case "push":
|
||||
m.Richs(ice.WEB_FAVOR, nil, m.Option("favor"), func(key string, value map[string]interface{}) {
|
||||
m.Log(ice.LOG_IMPORT, "%v", value)
|
||||
m.Grow(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), kit.Dict(
|
||||
kit.MDB_TYPE, m.Option("type"), kit.MDB_NAME, m.Option("name"), kit.MDB_TEXT, m.Option("text"),
|
||||
"extra", kit.UnMarshal(m.Option("extra")),
|
||||
))
|
||||
})
|
||||
m.Cmdy(ice.WEB_FAVOR, m.Option("favor"), m.Option("type"), m.Option("name"), m.Option("text"), m.Option("extra"))
|
||||
}
|
||||
}},
|
||||
|
||||
"/route/": {Name: "/route/", Help: "路由器", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[0] {
|
||||
case "login":
|
||||
if m.Richs(ice.WEB_ROUTE, nil, kit.Select(m.Option("login"), arg, 1), func(key string, value map[string]interface{}) {
|
||||
m.Echo("%s", value["share"])
|
||||
}) == nil {
|
||||
if m.Option(ice.MSG_USERNAME) != "" {
|
||||
m.Push(ice.MSG_USERNAME, m.Option(ice.MSG_USERNAME))
|
||||
m.Info("username: %v", m.Option(ice.MSG_USERNAME))
|
||||
break
|
||||
}
|
||||
if m.Option(ice.MSG_SESSID) != "" && m.Cmdx(ice.AAA_SESS, "check", m.Option(ice.MSG_SESSID)) != "" {
|
||||
m.Info("sessid: %v", m.Option(ice.MSG_SESSID))
|
||||
break
|
||||
}
|
||||
|
||||
sessid := m.Cmdx(ice.AAA_SESS, "create", "")
|
||||
share := m.Cmdx(ice.WEB_SHARE, "add", "login", m.Option(ice.MSG_USERIP), sessid)
|
||||
m.Rich(ice.WEB_ROUTE, nil, kit.Dict("share", share, "sessid", sessid))
|
||||
m.Render("cookie", sessid)
|
||||
Render(m, "cookie", sessid)
|
||||
m.Render(share)
|
||||
}
|
||||
}
|
||||
}},
|
||||
"/space/": {Name: "/space/", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if s, e := websocket.Upgrade(m.W, m.R, nil, m.Confi(ice.WEB_SPACE, "meta.buffer.r"), m.Confi(ice.WEB_SPACE, "meta.buffer.w")); m.Assert(e) {
|
||||
m.Option("name", strings.Replace(m.Option("name"), ".", "_", -1))
|
||||
if !m.Options("name") {
|
||||
m.Option("name", kit.Hashs("uniq"))
|
||||
}
|
||||
m.Option("name", strings.Replace(kit.Select(m.Option(ice.MSG_USERADDR), m.Option("name")), ".", "_", -1))
|
||||
m.Option("node", kit.Select("worker", m.Option("node")))
|
||||
|
||||
// 共享空间
|
||||
share := m.Option("share")
|
||||
|
2
conf.go
2
conf.go
@ -33,8 +33,10 @@ const ( // MSG
|
||||
MSG_USERIP = "user.ip"
|
||||
MSG_USERUA = "user.ua"
|
||||
MSG_USERURL = "user.url"
|
||||
MSG_USERNICK = "user.nick"
|
||||
MSG_USERNAME = "user.name"
|
||||
MSG_USERROLE = "user.role"
|
||||
MSG_USERADDR = "user.addr"
|
||||
|
||||
MSG_RIVER = "sess.river"
|
||||
MSG_STORM = "sess.storm"
|
||||
|
@ -11,6 +11,8 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
||||
Configs: map[string]*ice.Config{
|
||||
ice.CHAT_RIVER: {Name: "river", Help: "群组", Value: kit.Data(
|
||||
"template", kit.Dict("root", []interface{}{
|
||||
[]interface{}{"river", `{{.Option "user.nick"|Format}}@{{.Conf "runtime" "node.name"|Format}}`, "mall"},
|
||||
|
||||
[]interface{}{"storm", "mall", "mall"},
|
||||
[]interface{}{"field", "asset", "web.mall"},
|
||||
[]interface{}{"field", "spend", "web.mall"},
|
||||
@ -118,22 +120,19 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
||||
}},
|
||||
"auto": {Name: "auto user", Help: "自动化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Richs(ice.AAA_USER, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||
m.Option(ice.MSG_USERNICK, value["usernick"])
|
||||
m.Option(ice.MSG_USERNAME, value["username"])
|
||||
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", value["username"]))
|
||||
|
||||
if len(arg[0]) > 8 {
|
||||
arg[0] = arg[0][:8]
|
||||
}
|
||||
|
||||
// 创建群组
|
||||
name := kit.Select(arg[0], value["nickname"]) + "@" + m.Conf(ice.CLI_RUNTIME, "boot.hostname")
|
||||
storm, river := "", m.Option(ice.MSG_RIVER, m.Cmdx("/ocean", "spawn", name, m.Option(ice.MSG_USERNAME)))
|
||||
m.Option(ice.MSG_USERROLE, "root")
|
||||
|
||||
// 创建应用
|
||||
storm, river := "", ""
|
||||
m.Option("cache.limit", -2)
|
||||
m.Richs(ice.WEB_FAVOR, nil, kit.Keys("river", m.Option(ice.MSG_USERROLE)), func(key string, value map[string]interface{}) {
|
||||
m.Richs(ice.WEB_FAVOR, nil, kit.Keys("river", m.Cmdx(ice.AAA_ROLE, "check", value["username"])), func(key string, value map[string]interface{}) {
|
||||
m.Grows(ice.WEB_FAVOR, kit.Keys("hash", key), "", "", func(index int, value map[string]interface{}) {
|
||||
switch value["type"] {
|
||||
case "river":
|
||||
name, _ := kit.Render(kit.Format(value["name"]), m)
|
||||
river = m.Option(ice.MSG_RIVER, m.Cmdx("/ocean", "spawn", string(name)))
|
||||
case "storm":
|
||||
storm = m.Option(ice.MSG_STORM, m.Cmdx("/steam", river, "spawn", value["name"]))
|
||||
case "field":
|
||||
@ -218,6 +217,8 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
||||
arg = append(arg, "tool.0.args", m.Option("args"))
|
||||
arg = append(arg, "tool.0.single", "yes")
|
||||
} else {
|
||||
m.Option(ice.MSG_RIVER, arg[5])
|
||||
m.Option(ice.MSG_STORM, arg[7])
|
||||
m.Cmd("/action", arg[5], arg[7]).Table(func(index int, value map[string]string, head []string) {
|
||||
arg = append(arg, kit.Format("tool.%d.pod", index), value["node"])
|
||||
arg = append(arg, kit.Format("tool.%d.ctx", index), value["group"])
|
||||
@ -403,6 +404,7 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
||||
if len(arg) == 2 {
|
||||
// 命令列表
|
||||
m.Set(ice.MSG_OPTION)
|
||||
m.Render("")
|
||||
m.Grows(ice.CHAT_RIVER, prefix, "", "", func(index int, value map[string]interface{}) {
|
||||
if meta, ok := kit.Value(value, "meta").(map[string]interface{}); ok {
|
||||
m.Push("river", arg[0])
|
||||
|
@ -85,10 +85,31 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
|
||||
break
|
||||
}
|
||||
|
||||
switch kit.Select("active", m.Option("type")) {
|
||||
case "share":
|
||||
m.Richs(ice.WEB_SHARE, nil, m.Option("text"), func(key string, value map[string]interface{}) {
|
||||
switch value["type"] {
|
||||
case "invite":
|
||||
if m.Option(ice.MSG_USERROLE) != value["name"] {
|
||||
m.Cmd(ice.AAA_ROLE, value["name"], m.Option(ice.MSG_USERNAME))
|
||||
m.Cmd("web.chat.auto", m.Option(ice.MSG_USERNAME), value["name"])
|
||||
}
|
||||
break
|
||||
default:
|
||||
m.Option("type", value["type"])
|
||||
m.Option("name", value["name"])
|
||||
m.Option("text", value["text"])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
switch kit.Select("active", m.Option("type")) {
|
||||
case "active":
|
||||
// 授权登录
|
||||
m.Cmd(ice.WEB_SPACE, m.Option("auth"), "sessid", m.Cmdx(ice.AAA_SESS, "create", m.Option(ice.MSG_USERNAME)))
|
||||
// 网页登录
|
||||
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "sessid", m.Cmdx(ice.AAA_SESS, "create", m.Option(ice.MSG_USERNAME)))
|
||||
case "login":
|
||||
// 终端登录
|
||||
m.Cmdy(ice.AAA_SESS, "auth", m.Option("text"), m.Option(ice.MSG_USERNAME))
|
||||
}
|
||||
|
||||
case "upload":
|
||||
|
Loading…
x
Reference in New Issue
Block a user