1
0
forked from x/icebergs
This commit is contained in:
shaoying 2022-11-17 09:29:28 +08:00
parent a85e701e5b
commit 5db51d4724
5 changed files with 51 additions and 35 deletions

View File

@ -22,6 +22,15 @@ func init() {
}, mdb.ZoneAction(mdb.SHORT, EVENT, mdb.FIELD, "time,id,cmd"))}, }, mdb.ZoneAction(mdb.SHORT, EVENT, mdb.FIELD, "time,id,cmd"))},
}) })
} }
func EventAction(arg ...string) ice.Actions {
return ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, args ...string) {
for _, v := range arg {
Watch(m, v)
}
}},
}
}
func Watch(m *ice.Message, key string, arg ...string) *ice.Message { func Watch(m *ice.Message, key string, arg ...string) *ice.Message {
if len(arg) == 0 { if len(arg) == 0 {
arg = append(arg, m.PrefixKey()) arg = append(arg, m.PrefixKey())

View File

@ -3,7 +3,6 @@ package web
import ( import (
"math/rand" "math/rand"
"net" "net"
"path"
"strings" "strings"
"time" "time"
@ -21,6 +20,7 @@ import (
func _space_domain(m *ice.Message) (link string) { func _space_domain(m *ice.Message) (link string) {
if link = ice.Info.Domain; link == "" { if link = ice.Info.Domain; link == "" {
m.Optionv(ice.MSG_OPTS, ice.MSG_USERNAME)
link = m.Cmd(SPACE, ice.OPS, cli.PWD).Append(mdb.LINK) link = m.Cmd(SPACE, ice.OPS, cli.PWD).Append(mdb.LINK)
} }
if link == "" { if link == "" {
@ -205,40 +205,24 @@ func _space_fork(m *ice.Message) {
text := kit.Select(s.RemoteAddr().String(), m.Option(ice.MSG_USERADDR)) text := kit.Select(s.RemoteAddr().String(), m.Option(ice.MSG_USERADDR))
name := strings.ToLower(m.Option(mdb.NAME, kit.ReplaceAll(kit.Select(text, m.Option(mdb.NAME)), ".", "_", ":", "_"))) name := strings.ToLower(m.Option(mdb.NAME, kit.ReplaceAll(kit.Select(text, m.Option(mdb.NAME)), ".", "_", ":", "_")))
kind := kit.Select(WORKER, m.Option(mdb.TYPE)) kind := kit.Select(WORKER, m.Option(mdb.TYPE))
args := append([]string{mdb.TYPE, kind, mdb.NAME, name}, m.OptionSimple(SHARE, RIVER, ice.CMD)...) args := append([]string{mdb.TYPE, kind, mdb.NAME, name}, m.OptionSimple(SHARE, RIVER, ice.MSG_USERUA)...)
m.Go(func() { m.Go(func() {
mdb.HashCreate(m, mdb.TEXT, kit.Select(text, m.Option(mdb.TEXT)), args, kit.Dict(mdb.TARGET, s)) mdb.HashCreate(m, mdb.TEXT, kit.Select(text, m.Option(mdb.TEXT)), args, kit.Dict(mdb.TARGET, s))
defer mdb.HashRemove(m, mdb.NAME, name)
gdb.Event(m, SPACE_OPEN, args)
defer gdb.Event(m, SPACE_CLOSE, args)
switch kind { switch kind {
case CHROME: // 交互节点 case CHROME:
gdb.Event(m, SPACE_OPEN, args) m.Go(func(msg *ice.Message) { msg.Sleep300ms(SPACE, name, cli.PWD, name) })
defer gdb.Event(m, SPACE_CLOSE, args) case WORKER:
defer mdb.HashRemove(m, mdb.NAME, name)
m.Go(func(msg *ice.Message) {
switch m.Option(ice.CMD) {
case cli.PWD:
link := kit.MergeURL2(_space_domain(m), path.Join("/chat/cmd/web.chat.grant", name))
msg.Sleep300ms(SPACE, name, cli.PWD, name, link, msg.Cmdx(cli.QRCODE, link))
case SSO:
link := _space_domain(m)
ls := strings.Split(kit.ParseURL(link).Path, ice.PS)
link = kit.MergeURL2(_space_domain(m), "/chat/sso", SPACE, kit.Select("", ls, 3), "back", m.Option("back"))
msg.Sleep300ms(SPACE, name, cli.PWD, name, link, msg.Cmdx(cli.QRCODE, link))
default:
msg.Sleep300ms(SPACE, name, cli.PWD, name)
}
})
case WORKER: // 工作节点
gdb.Event(m, DREAM_START, args) gdb.Event(m, DREAM_START, args)
defer gdb.Event(m, DREAM_STOP, args) defer gdb.Event(m, DREAM_STOP, args)
if m.Option("daemon") == "ops" { if m.Option("daemon") == "ops" {
defer m.Cmd(DREAM, DREAM_STOP, args) defer m.Cmd(DREAM, DREAM_STOP, args)
} }
default: // 服务节点
gdb.Event(m, SPACE_START, args)
defer gdb.Event(m, SPACE_STOP, args)
defer mdb.HashRemove(m, mdb.NAME, name)
} }
_space_handle(m, false, m.Target().Server().(*Frame), s, name) _space_handle(m, false, m.Target().Server().(*Frame), s, name)
}) })

View File

@ -4,6 +4,9 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
) )
@ -13,6 +16,16 @@ func init() {
const CONFIRM = "confirm" const CONFIRM = "confirm"
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
GRANT: {Name: "grant space auto", Help: "授权", Actions: ice.MergeActions(ice.Actions{ GRANT: {Name: "grant space auto", Help: "授权", Actions: ice.MergeActions(ice.Actions{
web.SPACE_OPEN: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(mdb.TYPE) != aaa.LOGIN {
return
}
m.Go(func(msg *ice.Message) {
link := web.MergePodCmd(m, "", "", web.SPACE, m.Option(mdb.NAME))
link = tcp.ReplaceLocalhost(m, link)
msg.Sleep300ms(web.SPACE, m.Option(mdb.NAME), cli.PWD, m.Option(mdb.NAME), link, msg.Cmdx(cli.QRCODE, link))
})
}},
CONFIRM: {Help: "授权", Hand: func(m *ice.Message, arg ...string) { CONFIRM: {Help: "授权", Hand: func(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
@ -20,13 +33,15 @@ func init() {
if m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) { if m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) {
return return
} }
if m.Warn(m.CmdAppend(web.SPACE, m.Option(web.SPACE), ice.CMD) != cli.PWD, ice.ErrNotFound, m.Option(web.SPACE)) { if msg := m.Cmd(web.SPACE, m.Option(web.SPACE)); m.Warn(msg.Append(mdb.TYPE) != aaa.LOGIN, ice.ErrNotFound, m.Option(web.SPACE)) {
return return
} else {
m.Option(ice.MSG_USERUA, msg.Append(ice.MSG_USERUA))
} }
m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME)))
m.ProcessLocation(web.MergeURL2(m, ice.PS)) m.ProcessLocation(web.MergeURL2(m, ice.PS))
}}, }},
}, aaa.RoleAction(CONFIRM)), Hand: func(m *ice.Message, arg ...string) { }, gdb.EventAction(web.SPACE_OPEN), aaa.RoleAction(CONFIRM)), Hand: func(m *ice.Message, arg ...string) {
m.Echo("请授权: %s 访问设备: %s", arg[0], ice.Info.HostName).Echo(ice.NL).EchoButton(CONFIRM) m.Echo("请授权: %s 访问设备: %s", arg[0], ice.Info.HostName).Echo(ice.NL).EchoButton(CONFIRM)
}}, }},
}) })

View File

@ -53,10 +53,8 @@ func _header_check(m *ice.Message, arg ...string) bool {
if m.Option(ice.MSG_USERNAME) != "" { if m.Option(ice.MSG_USERNAME) != "" {
return true return true
} }
if m.OptionFromConfig(web.SSO) == "" && m.Option(ice.DEV, m.CmdAppend(web.SPACE, ice.DEV, mdb.TEXT)) == "" { if m.OptionFromConfig(web.SSO) == "" && m.OptionFromConfig(web.LOGIN) == "" {
if m.Option(ice.DEV, m.CmdAppend(web.SPACE, ice.SHY, mdb.TEXT)) == "" { m.Option(web.SSO, GetSSO(m))
m.OptionFromConfig(web.LOGIN)
}
} }
return false return false
} }

View File

@ -1,6 +1,8 @@
package chat package chat
import ( import (
"strings"
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
@ -14,13 +16,21 @@ const SSO = "sso"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
web.P(SSO): {Name: "/sso", Help: "授权", Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) { web.P(SSO): {Name: "/sso", Help: "授权", Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) {
if m.Option(ice.MSG_USERNAME) == "" || m.Warn(m.Option(cli.BACK) == "") { if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) || m.Warn(m.Option(cli.BACK) == "", ice.ErrNotValid) {
web.RenderIndex(m, ice.VOLCANOS) web.RenderIndex(m, ice.VOLCANOS)
return return
} }
sessid := aaa.UserRoot(m).Cmdx(web.SPACE, m.Option(web.SPACE), aaa.SESS, mdb.CREATE, aaa.USERNAME, m.Option(ice.MSG_USERNAME), m.RenderRedirect(kit.MergeURL(m.Option(cli.BACK), ice.MSG_SESSID, aaa.UserRoot(m).Cmdx(web.SPACE, m.Option(web.SPACE), aaa.SESS, mdb.CREATE,
aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNICK, m.Option(ice.MSG_USERNICK)) aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNICK, m.Option(ice.MSG_USERNICK))))
m.RenderRedirect(kit.MergeURL(m.Option(cli.BACK), ice.MSG_SESSID, sessid))
}}, }},
}) })
} }
func GetSSO(m *ice.Message) string {
link := m.Cmdx(web.SPACE, web.DOMAIN)
if !strings.Contains(link, "/chat/pod/") {
return ""
}
ls := strings.Split(kit.ParseURL(link).Path, ice.PS)
return kit.MergeURL2(link, web.P(CHAT, SSO), web.SPACE, kit.Select("", ls, 3), cli.BACK, m.R.Header.Get(web.Referer))
}