1
0
mirror of https://shylinux.com/x/icebergs synced 2025-05-01 19:19:24 +08:00
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) { 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] { switch arg[0] {
case "check": 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) { 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] { switch arg[0] {
case "first": case "first":
// 初始用户 // 超级用户
if m.Richs(ice.AAA_USER, nil, "%", nil) == nil { if m.Richs(ice.AAA_USER, nil, "%", nil) == nil {
m.Rich(ice.AAA_USER, nil, kit.Dict("username", arg[1], m.Rich(ice.AAA_USER, nil, kit.Dict("username", arg[1],
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"), "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]) m.Echo(m.Cmdx(ice.AAA_SESS, "create", 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)
} }
}}, }},
ice.AAA_SESS: {Name: "sess check|login", Help: "会话", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.AAA_SESS: {Name: "sess check|login", Help: "会话", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { 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"}) m.Push(key, value, []string{"key", "time", "username", "userrole"})
}) })
return return
@ -162,6 +176,7 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
// 创建会话 // 创建会话
h := m.Rich(ice.AAA_SESS, nil, kit.Dict( h := m.Rich(ice.AAA_SESS, nil, kit.Dict(
"username", arg[1], "userrole", m.Cmdx(ice.AAA_ROLE, "check", arg[1]), "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.Log(ice.LOG_CREATE, "sessid: %s username: %s", h, arg[1])
m.Echo(h) m.Echo(h)

View File

@ -5,11 +5,10 @@ import (
) )
var share_template = kit.Dict( var share_template = kit.Dict(
"value", `<img src="/share/%s/value">`, "text", `<img src="%s/share/%s/text">`,
"share", `<img src="/share/%s/share">`, "value", `<img src="%s/share/%s/value">`,
"text", `<img src="/share/%s/text">`, "share", `<img src="%s/share/%s/share">`,
"link", `<a href="%s/share/%s" target="_blank">%s</a>`,
"link", `<a href="/share/%s" target="_blank">%s</a>`,
"simple", `<!DOCTYPE html> "simple", `<!DOCTYPE html>
<head> <head>
<meta charset='utf-8'> <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"))...) 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), "/static/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/plugin/") { } 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), "/space/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/route/") { } else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/route/") {
} else if strings.HasPrefix(msg.Option(ice.MSG_USERURL), "/share/") { } 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": case "result":
fmt.Fprint(w, msg.Result()) fmt.Fprint(w, msg.Result())
default: default:
w.Header().Set("Content-Type", "application/json")
fmt.Fprint(w, msg.Formats("meta")) fmt.Fprint(w, msg.Formats("meta"))
} }
}) })
@ -521,7 +523,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Push("detail", value) m.Push("detail", value)
if kit.Value(value, "client.share") != nil { if kit.Value(value, "client.share") != nil {
m.Push("key", "share") 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 return
@ -769,17 +771,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
// } // }
// m.Cmd(ice.WEB_SPACE, arg[1], "sessid", sessid) // m.Cmd(ice.WEB_SPACE, arg[1], "sessid", sessid)
// }) // })
//
case "share": case "share":
switch arg[1] { m.Richs(ice.WEB_SPIDE, nil, m.Option("_dev"), func(key string, value map[string]interface{}) {
case "add": m.Log(ice.LOG_CREATE, "dev: %s share: %s", m.Option("_dev"), arg[1])
m.Cmdy(ice.WEB_SPIDE, "self", path.Join("/space/share/add", path.Join(arg[2:]...))) value["share"] = arg[1]
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]
})
}
case "connect": 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) msg.Info("%d sleep: %s reconnect: %s", i, sleep, u)
time.Sleep(sleep) 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.Richs(ice.WEB_SHARE, nil, arg[0], func(key string, value map[string]interface{}) {
m.Push("detail", value) m.Push("detail", value)
m.Push("key", "link") 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("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("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 return
} }
@ -1602,13 +1599,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
switch arg[0] { switch arg[0] {
case "auth": case "auth":
m.Richs(ice.WEB_SHARE, nil, arg[1], func(key string, value map[string]interface{}) { 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{}) {
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])
value["userrole"] = m.Cmdx(ice.AAA_ROLE, "check", arg[2]) m.Echo("%s", value["userrole"])
m.Echo("%s", value["userrole"]) })
value["username"] = arg[2]
})
}
}) })
case "add": 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) { "/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.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)) 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:]) m.Cmdy(ice.WEB_FAVOR, arg[5:])
return 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 return
case "upload": case "upload":
@ -483,7 +484,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
}) })
if len(cmds) == 0 { if len(cmds) == 0 {
web.Render(m, "status", 404, "not found")
return 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")}, "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{ Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { 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/base/web"
"github.com/shylinux/icebergs/core/chat" "github.com/shylinux/icebergs/core/chat"
"github.com/shylinux/toolkits" "github.com/shylinux/toolkits"
"path"
) )
var Index = &ice.Context{Name: "mp", Help: "小程序", var Index = &ice.Context{Name: "mp", Help: "小程序",
@ -20,25 +22,45 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load() 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.Confm("login", "meta.userrole", func(key string, value string) {
m.Cmd(ice.AAA_ROLE, value, key) 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) { ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save("login") 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) { "/login/": {Name: "/login/", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[0] { switch arg[0] {
case "code": case "code":
msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"), msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"), "js_code", m.Option("code"),
"js_code", m.Option("code"), "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm")) "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm"))
// 用户登录 // 用户登录
m.Option(ice.MSG_USERNAME, msg.Append("openid")) m.Echo(m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", 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))))
case "info": case "info":
// 用户信息 // 用户信息
@ -58,26 +80,35 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
web.Render(m, "qrcode", m.Option("scan")) web.Render(m, "qrcode", m.Option("scan"))
case "auth": 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") web.Render(m, "status", 401, "not login")
break break
} }
switch kit.Select("active", m.Option("type")) { switch kit.Select("active", m.Option("type")) {
case "active": 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": 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) { if arg = kit.Split(arg[1]); !m.Right(arg) {
return web.Render(m, "status", 403, "not auth")
break
} }
// 执行命令 // 执行命令
msg := m.Cmd(arg) m.Cmdy(arg)
if m.Hand = false; !msg.Hand {
msg = m.Cmd(ice.CLI_SYSTEM, arg)
}
} }
}}, }},
}, },