1
0
forked from x/icebergs
This commit is contained in:
shylinux 2020-03-18 10:13:26 +08:00
parent b0f8396853
commit d8451b0060
6 changed files with 98 additions and 53 deletions

View File

@ -28,6 +28,17 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
}},
ice.AAA_ROLE: {Name: "role check|black|white|right", Help: "角色", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
kit.Fetch(m.Confv("role", "meta.root"), func(key string, value string) {
m.Push("userrole", "root")
m.Push("username", key)
})
kit.Fetch(m.Confv("role", "meta.tech"), func(key string, value string) {
m.Push("userrole", "tech")
m.Push("username", key)
})
return
}
switch arg[0] {
case "check":
// 用户角色
@ -90,9 +101,17 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
}
}},
ice.AAA_USER: {Name: "user first|login", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
// 用户列表
m.Richs(ice.AAA_USER, nil, "*", func(key string, value map[string]interface{}) {
m.Push(key, value, []string{"time", "username", "usernode"})
})
return
}
switch arg[0] {
case "first":
// 初始用户
// 超级用户
if m.Richs(ice.AAA_USER, nil, "%", nil) == nil {
m.Rich(ice.AAA_USER, nil, kit.Dict("username", arg[1],
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
@ -133,18 +152,13 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
}
// 创建会话
role := m.Cmdx(ice.AAA_ROLE, "check", arg[1])
sessid := m.Rich(ice.AAA_SESS, nil, kit.Dict(
"username", arg[1], "userrole", role,
))
m.Info("user: %s role: %s sess: %s", arg[1], role, sessid)
m.Echo(sessid)
m.Echo(m.Cmdx(ice.AAA_SESS, "create", arg[1]))
}
}},
ice.AAA_SESS: {Name: "sess check|login", Help: "会话", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
// 会话列表
m.Richs(ice.AAA_SESS, nil, "", func(key string, value map[string]interface{}) {
m.Richs(ice.AAA_SESS, nil, "*", func(key string, value map[string]interface{}) {
m.Push(key, value, []string{"key", "time", "username", "userrole"})
})
return
@ -162,6 +176,7 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
// 创建会话
h := m.Rich(ice.AAA_SESS, nil, kit.Dict(
"username", arg[1], "userrole", m.Cmdx(ice.AAA_ROLE, "check", arg[1]),
"from", m.Option(ice.MSG_SESSID),
))
m.Log(ice.LOG_CREATE, "sessid: %s username: %s", h, arg[1])
m.Echo(h)

View File

@ -5,11 +5,10 @@ import (
)
var share_template = kit.Dict(
"value", `<img src="/share/%s/value">`,
"share", `<img src="/share/%s/share">`,
"text", `<img src="/share/%s/text">`,
"link", `<a href="/share/%s" target="_blank">%s</a>`,
"text", `<img src="%s/share/%s/text">`,
"value", `<img src="%s/share/%s/value">`,
"share", `<img src="%s/share/%s/share">`,
"link", `<a href="%s/share/%s" target="_blank">%s</a>`,
"simple", `<!DOCTYPE html>
<head>
<meta charset='utf-8'>

View File

@ -117,6 +117,7 @@ func (web *Frame) Login(msg *ice.Message, w http.ResponseWriter, r *http.Request
msg.Target().Run(msg, s, ice.WEB_LOGIN, kit.Simple(msg.Optionv("cmds"))...)
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/static/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/plugin/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/login/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/space/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/route/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/share/") {
@ -305,6 +306,7 @@ func (web *Frame) HandleCmd(m *ice.Message, key string, cmd *ice.Command) {
case "result":
fmt.Fprint(w, msg.Result())
default:
w.Header().Set("Content-Type", "application/json")
fmt.Fprint(w, msg.Formats("meta"))
}
})
@ -521,7 +523,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Push("detail", value)
if kit.Value(value, "client.share") != nil {
m.Push("key", "share")
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.text"), kit.Value(value, "client.share")))
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.text"), m.Conf(ice.WEB_SHARE, "meta.domain"), kit.Value(value, "client.share")))
}
})
return
@ -769,17 +771,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
// }
// m.Cmd(ice.WEB_SPACE, arg[1], "sessid", sessid)
// })
//
case "share":
switch arg[1] {
case "add":
m.Cmdy(ice.WEB_SPIDE, "self", path.Join("/space/share/add", path.Join(arg[2:]...)))
default:
m.Richs(ice.WEB_SPIDE, nil, m.Option("_dev"), func(key string, value map[string]interface{}) {
m.Log(ice.LOG_CREATE, "dev: %s share: %s", m.Option("_dev"), arg[1])
value["share"] = arg[1]
})
}
m.Richs(ice.WEB_SPIDE, nil, m.Option("_dev"), func(key string, value map[string]interface{}) {
m.Log(ice.LOG_CREATE, "dev: %s share: %s", m.Option("_dev"), arg[1])
value["share"] = arg[1]
})
case "connect":
// 基本信息
@ -812,7 +809,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
}
// 断线重连
sleep := time.Duration(rand.Intn(kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.a"))*i)+kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.b"))) * time.Millisecond
sleep := time.Duration(rand.Intn(kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.a"))*i+2)+kit.Int(msg.Conf(ice.WEB_SPACE, "meta.redial.b"))) * time.Millisecond
msg.Info("%d sleep: %s reconnect: %s", i, sleep, u)
time.Sleep(sleep)
}
@ -1590,11 +1587,11 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
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"), key, key))
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.link"), m.Conf(ice.WEB_SHARE, "meta.domain"), key, key))
m.Push("key", "share")
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.share"), key))
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"), key))
m.Push("value", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.value"), m.Conf(ice.WEB_SHARE, "meta.domain"), key))
})
return
}
@ -1602,13 +1599,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
switch arg[0] {
case "auth":
m.Richs(ice.WEB_SHARE, nil, arg[1], func(key string, value map[string]interface{}) {
if value["type"] == "login" {
m.Richs(ice.AAA_SESS, nil, value["text"], func(key string, value map[string]interface{}) {
value["userrole"] = m.Cmdx(ice.AAA_ROLE, "check", arg[2])
m.Echo("%s", value["userrole"])
value["username"] = arg[2]
})
}
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"])
})
})
case "add":
@ -1670,6 +1664,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
}},
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[0] {
case "local":
Render(m, "download", m.Cmdx(arg[1], path.Join(arg[2:]...)))
return
}
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))

View File

@ -457,9 +457,10 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
m.Cmdy(ice.WEB_FAVOR, arg[5:])
return
case "location":
case "device":
// 记录位置
m.Cmdy("aaa.location", arg[5:])
m.Cmd(ice.WEB_FAVOR, kit.Select("device", m.Option("hot")), arg[5], arg[6],
kit.Select("", arg, 7), kit.KeyValue(map[string]interface{}{}, "", kit.UnMarshal(kit.Select("{}", arg, 8))))
return
case "upload":
@ -483,7 +484,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
})
if len(cmds) == 0 {
web.Render(m, "status", 404, "not found")
return
}

View File

@ -76,7 +76,7 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
},
)},
"walk": {Name: "walk", Help: "走遍世界", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.csv")},
"feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.(png|JPG|MOV|m4v)")},
"feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.(png|jpg|JPG|MOV|m4v)")},
},
Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {

View File

@ -5,6 +5,8 @@ import (
"github.com/shylinux/icebergs/base/web"
"github.com/shylinux/icebergs/core/chat"
"github.com/shylinux/toolkits"
"path"
)
var Index = &ice.Context{Name: "mp", Help: "小程序",
@ -20,25 +22,45 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load()
m.Cmd(ice.WEB_SPIDE, "add", "weixin", m.Conf("login", "meta.weixin"))
m.Confm("login", "meta.userrole", func(key string, value string) {
m.Cmd(ice.AAA_ROLE, value, key)
})
m.Cmd(ice.WEB_SPIDE, "add", "weixin", m.Conf("login", "meta.weixin"))
}},
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save("login")
}},
"scan": {Name: "scan", Help: "扫码", List: kit.List(
kit.MDB_INPUT, "text", "name", "location", "cb", "location",
kit.MDB_INPUT, "text", "name", "battery", "cb", "battery",
kit.MDB_INPUT, "text", "name", "paste", "cb", "paste",
kit.MDB_INPUT, "text", "name", "scan", "cb", "scan",
kit.MDB_INPUT, "text", "name", "wifi", "cb", "wifi",
kit.MDB_INPUT, "text", "name", "album", "cb", "album",
kit.MDB_INPUT, "text", "name", "finger", "cb", "finger",
kit.MDB_INPUT, "text", "name", "vibrate", "cb", "vibrate",
kit.MDB_INPUT, "text", "name", "wifiList", "cb", "wifiList",
kit.MDB_INPUT, "text", "name", "wifiConn", "cb", "wifiConn",
kit.MDB_INPUT, "textarea", "name", "scan", "cb", "scan",
kit.MDB_INPUT, "textarea", "name", "location", "cb", "location",
kit.MDB_INPUT, "button", "name", "scan", "cb", "scan",
kit.MDB_INPUT, "button", "name", "location", "cb", "location",
kit.MDB_INPUT, "button", "name", "text",
kit.MDB_INPUT, "button", "name", "share",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Echo(arg[0])
}},
"/login/": {Name: "/login/", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[0] {
case "code":
msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"),
"js_code", m.Option("code"), "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm"))
msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"), "js_code", m.Option("code"),
"appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm"))
// 用户登录
m.Option(ice.MSG_USERNAME, msg.Append("openid"))
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", m.Option("FromUserName")))
m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME))
m.Echo(m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", m.Option(ice.MSG_USERNAME))))
m.Echo(m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", msg.Append("openid"))))
case "info":
// 用户信息
@ -58,26 +80,35 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
web.Render(m, "qrcode", m.Option("scan"))
case "auth":
if !m.Options(ice.MSG_USERNAME) || !m.Options(ice.MSG_SESSID) {
if !m.Options(ice.MSG_USERNAME) {
web.Render(m, "status", 401, "not login")
break
}
switch kit.Select("active", m.Option("type")) {
case "active":
// 授权登录
m.Cmd(ice.WEB_SPACE, "auth", m.Option("auth"), m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERROLE))
m.Cmd(ice.WEB_SPACE, m.Option("auth"), "sessid", m.Cmdx(ice.AAA_SESS, "create", m.Option(ice.MSG_USERNAME)))
}
case "upload":
msg := m.Cmd(ice.WEB_CACHE, "upload")
m.Cmdy(ice.WEB_STORY, ice.STORY_WATCH, msg.Append("data"), path.Join("usr/local/mp/", path.Base(msg.Append("name"))))
web.Render(m, msg.Append("data"))
m.Cmdy(ice.WEB_FAVOR, "device", "file", msg.Append("name"), msg.Append("data"))
case "cmds":
if !m.Options(ice.MSG_USERNAME) {
web.Render(m, "status", 401, "not login")
break
}
if arg = kit.Split(arg[1]); !m.Right(arg) {
return
web.Render(m, "status", 403, "not auth")
break
}
// 执行命令
msg := m.Cmd(arg)
if m.Hand = false; !msg.Hand {
msg = m.Cmd(ice.CLI_SYSTEM, arg)
}
m.Cmdy(arg)
}
}},
},