forked from x/icebergs
opt chat
This commit is contained in:
parent
a85e701e5b
commit
5db51d4724
@ -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())
|
||||||
|
@ -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)
|
||||||
})
|
})
|
||||||
|
@ -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)
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user