mirror of
https://shylinux.com/x/icebergs
synced 2025-06-26 18:37:29 +08:00
opt share
This commit is contained in:
parent
e52cd73a31
commit
ef6ac8100e
@ -1,8 +1,6 @@
|
|||||||
package aaa
|
package aaa
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
|
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
@ -80,7 +78,6 @@ func UserLogin(m *ice.Message, username, password string) bool {
|
|||||||
USERNICK, m.Option(ice.MSG_USERNICK, UserNick(m, username)),
|
USERNICK, m.Option(ice.MSG_USERNICK, UserNick(m, username)),
|
||||||
USERROLE, m.Option(ice.MSG_USERROLE, UserRole(m, username)),
|
USERROLE, m.Option(ice.MSG_USERROLE, UserRole(m, username)),
|
||||||
USERNAME, m.Option(ice.MSG_USERNAME, username),
|
USERNAME, m.Option(ice.MSG_USERNAME, username),
|
||||||
PASSWORD, strings.Repeat("*", len(password)),
|
|
||||||
)
|
)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/aaa"
|
"github.com/shylinux/icebergs/base/aaa"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
|
"github.com/shylinux/icebergs/base/tcp"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -13,6 +14,16 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func _share_domain(m *ice.Message) string {
|
||||||
|
link := m.Conf(SHARE, kit.Keym(kit.MDB_DOMAIN))
|
||||||
|
if link == "" {
|
||||||
|
link = m.Cmd(SPACE, SPIDE_DEV, kit.SSH_PWD).Append(kit.MDB_LINK)
|
||||||
|
}
|
||||||
|
if link == "" {
|
||||||
|
link = kit.Format("http://%s:%s", m.Cmd(tcp.HOST).Append(tcp.IP), m.Cmd(SERVE).Append(tcp.PORT))
|
||||||
|
}
|
||||||
|
return link
|
||||||
|
}
|
||||||
func _share_cache(m *ice.Message, arg ...string) {
|
func _share_cache(m *ice.Message, arg ...string) {
|
||||||
msg := m.Cmd(CACHE, arg[0])
|
msg := m.Cmd(CACHE, arg[0])
|
||||||
m.Render(ice.RENDER_DOWNLOAD, msg.Append(kit.MDB_FILE), msg.Append(kit.MDB_TYPE), msg.Append(kit.MDB_NAME))
|
m.Render(ice.RENDER_DOWNLOAD, msg.Append(kit.MDB_FILE), msg.Append(kit.MDB_TYPE), msg.Append(kit.MDB_NAME))
|
||||||
@ -78,7 +89,7 @@ const (
|
|||||||
LOGIN = "login"
|
LOGIN = "login"
|
||||||
RIVER = "river"
|
RIVER = "river"
|
||||||
STORM = "storm"
|
STORM = "storm"
|
||||||
APPLY = "apply"
|
FIELD = "field"
|
||||||
)
|
)
|
||||||
const SHARE = "share"
|
const SHARE = "share"
|
||||||
|
|
||||||
@ -94,6 +105,9 @@ func init() {
|
|||||||
aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME),
|
aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME),
|
||||||
RIVER, m.Option(ice.MSG_RIVER), STORM, m.Option(ice.MSG_STORM), arg)
|
RIVER, m.Option(ice.MSG_RIVER), STORM, m.Option(ice.MSG_STORM), arg)
|
||||||
}},
|
}},
|
||||||
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.MODIFY, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg)
|
||||||
|
}},
|
||||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
m.Cmdy(mdb.DELETE, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||||
}},
|
}},
|
||||||
@ -101,32 +115,29 @@ func init() {
|
|||||||
m.Option(mdb.FIELDS, "time,userrole,username,river,storm,type,name,text")
|
m.Option(mdb.FIELDS, "time,userrole,username,river,storm,type,name,text")
|
||||||
m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||||
}},
|
}},
|
||||||
|
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {}},
|
||||||
|
|
||||||
LOGIN: {Name: "login userrole=void,tech username", Help: "登录", Hand: func(m *ice.Message, arg ...string) {
|
LOGIN: {Name: "login userrole=void,tech username", Help: "登录", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.EchoQRCode(kit.MergeURL(m.Conf(SHARE, kit.Keym(kit.MDB_DOMAIN)),
|
m.EchoQRCode(kit.MergeURL(_share_domain(m),
|
||||||
SHARE, m.Cmdx(SHARE, mdb.CREATE, kit.MDB_TYPE, LOGIN,
|
SHARE, m.Cmdx(SHARE, mdb.CREATE, kit.MDB_TYPE, LOGIN,
|
||||||
aaa.USERNAME, kit.Select(m.Option(ice.MSG_USERNAME), m.Option(aaa.USERNAME)),
|
aaa.USERNAME, kit.Select(m.Option(ice.MSG_USERNAME), m.Option(aaa.USERNAME)),
|
||||||
aaa.USERROLE, m.Option(aaa.USERROLE),
|
aaa.USERROLE, m.Option(aaa.USERROLE),
|
||||||
)))
|
)))
|
||||||
}},
|
}},
|
||||||
APPLY: {Name: "apply", Help: "申请", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.EchoQRCode(kit.MergeURL(m.Conf(SHARE, kit.Keym(kit.MDB_DOMAIN)),
|
|
||||||
SHARE, m.Cmdx(SHARE, mdb.CREATE, kit.MDB_TYPE, APPLY)))
|
|
||||||
}},
|
|
||||||
"auth": {Name: "auth", Help: "授权", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.Cmdy(mdb.MODIFY, SHARE, "", mdb.HASH, kit.MDB_HASH, arg)
|
|
||||||
}},
|
|
||||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
}},
|
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Fields(len(arg) == 0, "time,hash,type,name,text,userrole,username,river,storm")
|
m.Fields(len(arg) == 0, "time,hash,type,name,text,userrole,username,river,storm")
|
||||||
m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg)
|
m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg)
|
||||||
m.PushAction(mdb.REMOVE)
|
m.PushAction(mdb.REMOVE)
|
||||||
|
|
||||||
if len(arg) > 0 {
|
if len(arg) > 0 {
|
||||||
m.PushAnchor(kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/"+arg[0], SHARE, arg[0]))
|
link := kit.MergeURL(m.Option(ice.MSG_USERWEB), SHARE, arg[0])
|
||||||
m.PushScript("shell", kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/"+arg[0], SHARE, arg[0]))
|
if strings.Contains(link, tcp.LOCALHOST) {
|
||||||
m.PushQRCode("share", kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/"+arg[0], SHARE, arg[0]))
|
link = strings.Replace(link, tcp.LOCALHOST, m.Cmd(tcp.HOST, ice.OptionFields(tcp.IP)).Append(tcp.IP), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
m.PushAnchor(link)
|
||||||
|
m.PushScript("shell", link)
|
||||||
|
m.PushQRCode("qrcode", link)
|
||||||
} else {
|
} else {
|
||||||
m.Option("_action", "login")
|
m.Option("_action", "login")
|
||||||
}
|
}
|
||||||
@ -143,7 +154,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch msg.Append(kit.MDB_TYPE) {
|
switch msg.Append(kit.MDB_TYPE) {
|
||||||
case LOGIN, APPLY, RIVER:
|
case LOGIN, RIVER:
|
||||||
switch kit.Select("", arg, 1) {
|
switch kit.Select("", arg, 1) {
|
||||||
case SHARE:
|
case SHARE:
|
||||||
m.Render(ice.RENDER_QRCODE, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/", list))
|
m.Render(ice.RENDER_QRCODE, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/", list))
|
||||||
|
@ -140,8 +140,11 @@ func _space_handle(m *ice.Message, safe bool, send map[string]*ice.Message, c *w
|
|||||||
|
|
||||||
if len(target) == 0 { // 本地执行
|
if len(target) == 0 { // 本地执行
|
||||||
msg.Log_AUTH(aaa.USERROLE, msg.Option(ice.MSG_USERROLE), aaa.USERNAME, msg.Option(ice.MSG_USERNAME))
|
msg.Log_AUTH(aaa.USERROLE, msg.Option(ice.MSG_USERROLE), aaa.USERNAME, msg.Option(ice.MSG_USERNAME))
|
||||||
if msg.Optionv(ice.MSG_HANDLE, "true"); !msg.Warn(!safe, ice.ErrNotRight) {
|
if msg.Optionv(ice.MSG_HANDLE, "true"); safe {
|
||||||
msg.Go(func() { _space_exec(msg, source, target, c, name) })
|
msg.Go(func() { _space_exec(msg, source, target, c, name) })
|
||||||
|
} else {
|
||||||
|
msg.Push(kit.MDB_LINK, kit.MergePOD(_share_domain(msg), name))
|
||||||
|
_space_echo(msg, []string{}, kit.Revert(source)[1:], c, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if msg.Richs(SPACE, nil, target[0], func(key string, value map[string]interface{}) {
|
} else if msg.Richs(SPACE, nil, target[0], func(key string, value map[string]interface{}) {
|
||||||
@ -185,9 +188,10 @@ func _space_search(m *ice.Message, kind, name, text string, arg ...string) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
port := m.Cmd(SERVE, ice.Option{mdb.FIELDS, tcp.PORT}).Append(tcp.PORT)
|
||||||
m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) {
|
||||||
m.PushSearch(kit.SSH_CMD, SPACE, kit.MDB_TYPE, "local", kit.MDB_NAME, value[kit.MDB_NAME],
|
m.PushSearch(kit.SSH_CMD, SPACE, kit.MDB_TYPE, MYSELF, kit.MDB_NAME, value[kit.MDB_NAME],
|
||||||
kit.MDB_TEXT, "http://"+value[tcp.IP]+":9020", kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), value))
|
kit.MDB_TEXT, kit.Format("http://%s:%s", value[tcp.IP], port), kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), value))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,7 +235,9 @@ func init() {
|
|||||||
|
|
||||||
"/space/": {Name: "/space/ type name share river", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/space/": {Name: "/space/ type name share river", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if s, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(m.Conf(SPACE, "meta.buffer.r")), kit.Int(m.Conf(SPACE, "meta.buffer.w"))); m.Assert(e) {
|
if s, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(m.Conf(SPACE, "meta.buffer.r")), kit.Int(m.Conf(SPACE, "meta.buffer.w"))); m.Assert(e) {
|
||||||
name := m.Option(kit.MDB_NAME, strings.Replace(kit.Select(s.RemoteAddr().String(), m.Option(kit.MDB_NAME)), ".", "_", -1))
|
name := kit.Select(s.RemoteAddr().String(), m.Option(kit.MDB_NAME))
|
||||||
|
name = m.Option(kit.MDB_NAME, strings.Replace(name, ".", "_", -1))
|
||||||
|
name = m.Option(kit.MDB_NAME, strings.Replace(name, ":", "-", -1))
|
||||||
kind := kit.Select(WORKER, m.Option(kit.MDB_TYPE))
|
kind := kit.Select(WORKER, m.Option(kit.MDB_TYPE))
|
||||||
share := m.Option("share")
|
share := m.Option("share")
|
||||||
river := m.Option("river")
|
river := m.Option("river")
|
||||||
@ -259,10 +265,11 @@ func init() {
|
|||||||
if m.Option(ice.MSG_USERNAME) != "" {
|
if m.Option(ice.MSG_USERNAME) != "" {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
link := kit.MergeURL(m.Conf(SHARE, kit.Keym(kit.MDB_DOMAIN)), "grant", name)
|
|
||||||
go func() {
|
m.Go(func(msg *ice.Message) {
|
||||||
m.Sleep("100ms").Cmd(SPACE, name, "pwd", name, link, m.Cmdx(cli.QRCODE, link))
|
link := kit.MergeURL(_share_domain(msg), "grant", name)
|
||||||
}()
|
msg.Sleep("100ms").Cmd(SPACE, name, "pwd", name, link, msg.Cmdx(cli.QRCODE, link))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
frame := m.Target().Server().(*Frame)
|
frame := m.Target().Server().(*Frame)
|
||||||
|
1
conf.go
1
conf.go
@ -75,6 +75,7 @@ const ( // MSG
|
|||||||
MSG_USERZONE = "user.zone"
|
MSG_USERZONE = "user.zone"
|
||||||
MSG_USERROLE = "user.role"
|
MSG_USERROLE = "user.role"
|
||||||
|
|
||||||
|
MSG_TITLE = "sess.title"
|
||||||
MSG_RIVER = "sess.river"
|
MSG_RIVER = "sess.river"
|
||||||
MSG_STORM = "sess.storm"
|
MSG_STORM = "sess.storm"
|
||||||
MSG_LOCAL = "sess.local"
|
MSG_LOCAL = "sess.local"
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
package chat
|
package chat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/aaa"
|
"github.com/shylinux/icebergs/base/aaa"
|
||||||
"github.com/shylinux/icebergs/base/ctx"
|
"github.com/shylinux/icebergs/base/ctx"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"path"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) {
|
func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) {
|
||||||
@ -52,6 +53,29 @@ func _action_right(m *ice.Message, river string, storm string) (ok bool) {
|
|||||||
}
|
}
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
func _action_share(m *ice.Message, cmd string, arg ...string) {
|
||||||
|
switch msg := m.Cmd(web.SHARE, arg[1]); msg.Append(kit.MDB_TYPE) {
|
||||||
|
case web.FIELD:
|
||||||
|
if cmd := kit.Keys(msg.Append(web.RIVER), msg.Append(web.STORM)); len(arg) == 2 {
|
||||||
|
m.Push("index", cmd)
|
||||||
|
m.Push("args", msg.Append(kit.MDB_TEXT))
|
||||||
|
} else {
|
||||||
|
if m.Warn(kit.Time() > kit.Time(msg.Append(kit.MDB_TIME)), ice.ErrExpire) {
|
||||||
|
return // 分享超时
|
||||||
|
}
|
||||||
|
m.Log_AUTH(
|
||||||
|
aaa.USERROLE, m.Option(ice.MSG_USERROLE, msg.Append(aaa.USERROLE)),
|
||||||
|
aaa.USERNAME, m.Option(ice.MSG_USERNAME, msg.Append(aaa.USERNAME)),
|
||||||
|
)
|
||||||
|
if m.Warn(!m.Right(arg[3:]), ice.ErrNotRight) {
|
||||||
|
return // 没有授权
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Cmdy(cmd, arg[3:])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func _action_list(m *ice.Message, river, storm string) {
|
func _action_list(m *ice.Message, river, storm string) {
|
||||||
m.Option(ice.MSG_RIVER, river)
|
m.Option(ice.MSG_RIVER, river)
|
||||||
m.Cmdy(TOOL, storm).Table(func(index int, value map[string]string, head []string) {
|
m.Cmdy(TOOL, storm).Table(func(index int, value map[string]string, head []string) {
|
||||||
@ -106,27 +130,24 @@ func init() {
|
|||||||
P_ACTION: {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{
|
P_ACTION: {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{
|
||||||
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||||
for _, k := range arg {
|
for _, k := range arg {
|
||||||
m.Cmdy(ctx.COMMAND, k)
|
m.Cmdy(ctx.COMMAND, strings.TrimPrefix(k, "."))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
_header_share(m, arg...)
|
||||||
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if arg[0] == "_share" {
|
if arg[0] == "_share" {
|
||||||
switch msg := m.Cmd(web.SHARE, arg[1]); msg.Append(kit.MDB_TYPE) {
|
_action_share(m, cmd, arg...)
|
||||||
case STORM:
|
|
||||||
m.Option(kit.MDB_TITLE, msg.Append(kit.MDB_NAME))
|
|
||||||
arg[0] = msg.Append(RIVER)
|
|
||||||
arg[1] = msg.Append(STORM)
|
|
||||||
default:
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) {
|
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) {
|
||||||
return // 没有登录
|
return // 没有登录
|
||||||
}
|
}
|
||||||
if m.Warn(!_action_right(m, arg[0], arg[1]), ice.ErrNotRight) {
|
if m.Warn(!_action_right(m, arg[0], arg[1]), ice.ErrNotRight) {
|
||||||
return // 没有授权
|
return // 没有授权
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
m.Option(ice.MSG_RIVER, arg[0])
|
m.Option(ice.MSG_RIVER, arg[0])
|
||||||
m.Option(ice.MSG_STORM, arg[1])
|
m.Option(ice.MSG_STORM, arg[1])
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
package chat
|
package chat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/aaa"
|
"github.com/shylinux/icebergs/base/aaa"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
|
"github.com/shylinux/icebergs/base/tcp"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
"github.com/shylinux/icebergs/core/code"
|
"github.com/shylinux/icebergs/core/code"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
@ -16,6 +19,8 @@ func _header_check(m *ice.Message) {
|
|||||||
if m.Option(ice.MSG_USERNAME) != msg.Append(aaa.USERNAME) {
|
if m.Option(ice.MSG_USERNAME) != msg.Append(aaa.USERNAME) {
|
||||||
web.RenderCookie(m, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME, msg.Append(aaa.USERNAME))))
|
web.RenderCookie(m, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME, msg.Append(aaa.USERNAME))))
|
||||||
}
|
}
|
||||||
|
case web.FIELD:
|
||||||
|
m.Option(ice.MSG_USERNAME, msg.Append(aaa.USERNAME))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,6 +28,17 @@ func _header_check(m *ice.Message) {
|
|||||||
m.Option(web.SSO, m.Conf(web.SERVE, kit.Keym(web.SSO)))
|
m.Option(web.SSO, m.Conf(web.SERVE, kit.Keym(web.SSO)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func _header_share(m *ice.Message, arg ...string) {
|
||||||
|
share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN, arg)
|
||||||
|
|
||||||
|
link := kit.MergeURL(m.Option(ice.MSG_USERWEB), web.SHARE, share)
|
||||||
|
if strings.Contains(link, tcp.LOCALHOST) {
|
||||||
|
link = strings.Replace(link, tcp.LOCALHOST, m.Cmd(tcp.HOST, ice.OptionFields(tcp.IP)).Append(tcp.IP), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Push(kit.MDB_NAME, link)
|
||||||
|
m.PushQRCode(kit.MDB_TEXT, link)
|
||||||
|
}
|
||||||
func _header_grant(m *ice.Message, arg ...string) {
|
func _header_grant(m *ice.Message, arg ...string) {
|
||||||
if pod := m.Option(kit.SSH_POD); pod != "" {
|
if pod := m.Option(kit.SSH_POD); pod != "" {
|
||||||
m.Option(kit.SSH_POD, "")
|
m.Option(kit.SSH_POD, "")
|
||||||
@ -46,6 +62,8 @@ const (
|
|||||||
GRANT = "grant"
|
GRANT = "grant"
|
||||||
SHARE = "share"
|
SHARE = "share"
|
||||||
AGENT = "agent"
|
AGENT = "agent"
|
||||||
|
|
||||||
|
LOGOUT = "logout"
|
||||||
)
|
)
|
||||||
const P_HEADER = "/header"
|
const P_HEADER = "/header"
|
||||||
const HEADER = "header"
|
const HEADER = "header"
|
||||||
@ -71,11 +89,14 @@ func init() {
|
|||||||
_header_grant(m, arg...)
|
_header_grant(m, arg...)
|
||||||
}},
|
}},
|
||||||
SHARE: {Name: "share type", Help: "扫码登录", Hand: func(m *ice.Message, arg ...string) {
|
SHARE: {Name: "share type", Help: "扫码登录", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN, arg)
|
_header_share(m, arg...)
|
||||||
}},
|
}},
|
||||||
AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) {
|
AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy("web.chat.wx.access", "config")
|
m.Cmdy("web.chat.wx.access", "config")
|
||||||
}},
|
}},
|
||||||
|
LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmd(aaa.SESS, mdb.REMOVE, ice.OptionHash(m.Option(ice.MSG_SESSID)))
|
||||||
|
}},
|
||||||
|
|
||||||
code.WEBPACK: {Name: "webpack", Help: "网页打包", Hand: func(m *ice.Message, arg ...string) {
|
code.WEBPACK: {Name: "webpack", Help: "网页打包", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(code.WEBPACK, mdb.CREATE)
|
m.Cmdy(code.WEBPACK, mdb.CREATE)
|
||||||
|
@ -15,6 +15,24 @@ func _river_list(m *ice.Message) {
|
|||||||
m.Set(ice.MSG_OPTION, kit.MDB_HASH)
|
m.Set(ice.MSG_OPTION, kit.MDB_HASH)
|
||||||
m.Set(ice.MSG_OPTION, kit.MDB_NAME)
|
m.Set(ice.MSG_OPTION, kit.MDB_NAME)
|
||||||
|
|
||||||
|
if m.Option(web.SHARE) != "" {
|
||||||
|
switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) {
|
||||||
|
case web.RIVER, web.STORM: // 应用入口
|
||||||
|
m.Option(ice.MSG_TITLE, msg.Append(kit.MDB_NAME))
|
||||||
|
m.Option(ice.MSG_RIVER, msg.Append(RIVER))
|
||||||
|
m.Option(ice.MSG_STORM, msg.Append(STORM))
|
||||||
|
|
||||||
|
if msg.Cmd(m.Prefix(USER), m.Option(ice.MSG_USERNAME)).Append(aaa.USERNAME) == "" {
|
||||||
|
// msg.Cmd(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
||||||
|
// 加入群组
|
||||||
|
}
|
||||||
|
case web.FIELD: // 应用入口
|
||||||
|
m.Option(ice.MSG_TITLE, msg.Append(kit.MDB_NAME))
|
||||||
|
m.Option(ice.MSG_RIVER, "_share")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
|
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
|
||||||
m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val))
|
m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val))
|
||||||
@ -22,12 +40,8 @@ func _river_list(m *ice.Message) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _river_share(m *ice.Message) {
|
func _river_share(m *ice.Message) {
|
||||||
if m.Option(web.SHARE) == "" || m.Option(RIVER) == "" {
|
|
||||||
return
|
return
|
||||||
}
|
|
||||||
|
|
||||||
msg := m.Spawn()
|
msg := m.Spawn()
|
||||||
msg.Option(mdb.FIELDS, "type,name,text,river,storm")
|
|
||||||
if res := msg.Cmd(web.SHARE, m.Option(web.SHARE)); res.Append(kit.MDB_TYPE) == RIVER {
|
if res := msg.Cmd(web.SHARE, m.Option(web.SHARE)); res.Append(kit.MDB_TYPE) == RIVER {
|
||||||
msg.Option(ice.MSG_RIVER, res.Append(RIVER))
|
msg.Option(ice.MSG_RIVER, res.Append(RIVER))
|
||||||
} else {
|
} else {
|
||||||
@ -330,12 +344,13 @@ func init() {
|
|||||||
m.Cmdy(mdb.INPUTS, RIVER, "", mdb.HASH, arg)
|
m.Cmdy(mdb.INPUTS, RIVER, "", mdb.HASH, arg)
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
web.SHARE: {Name: "share type name", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.Cmdy(web.SHARE, mdb.CREATE, kit.MDB_TYPE, LOGIN, arg)
|
|
||||||
}},
|
|
||||||
tcp.START: {Name: "start name repos template", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
tcp.START: {Name: "start name repos template", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(m.Space(m.Option(kit.SSH_POD)), web.DREAM, tcp.START, arg)
|
m.Cmdy(m.Space(m.Option(kit.SSH_POD)), web.DREAM, tcp.START, arg)
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
_header_share(m, arg...)
|
||||||
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, arg)
|
m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, arg)
|
||||||
m.PushAction(mdb.REMOVE)
|
m.PushAction(mdb.REMOVE)
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
"github.com/shylinux/icebergs/base/nfs"
|
"github.com/shylinux/icebergs/base/nfs"
|
||||||
|
"github.com/shylinux/icebergs/base/web"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -57,15 +58,18 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
|
|||||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||||
|
|
||||||
for _, k := range []string{"favicon.ico", "proto.js", "frame.js"} {
|
for _, k := range []string{"favicon.ico", "proto.js", "frame.js"} {
|
||||||
pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n",
|
pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", k, _pack_file(m, path.Join(dir, k))))
|
||||||
kit.Select("", k, k != "index.html"),
|
|
||||||
_pack_file(m, path.Join(dir, k))))
|
|
||||||
}
|
}
|
||||||
for _, k := range []string{"lib", "page", "panel", "plugin"} {
|
for _, k := range []string{"lib", "page", "panel", "plugin"} {
|
||||||
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
|
||||||
pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n",
|
if value[kit.MDB_PATH] == "page/index.html" {
|
||||||
kit.Select("", value[kit.MDB_PATH], value[kit.MDB_PATH] != "page/index.html"),
|
pack.WriteString(fmt.Sprintf(" \"%s/%s\": %s,\n",
|
||||||
|
m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), value[kit.MDB_PATH],
|
||||||
_pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
|
_pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n",
|
||||||
|
value[kit.MDB_PATH], _pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
pack.WriteString("\n")
|
pack.WriteString("\n")
|
||||||
|
@ -51,6 +51,7 @@ func init() {
|
|||||||
main = k
|
main = k
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_autogen_version(m)
|
||||||
|
|
||||||
// 编译目标
|
// 编译目标
|
||||||
file := path.Join(kit.Select("", m.Conf(cmd, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch))
|
file := path.Join(kit.Select("", m.Conf(cmd, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch))
|
||||||
|
1
logs.go
1
logs.go
@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
var OK = "ok"
|
var OK = "ok"
|
||||||
var ErrWarn = "warn: "
|
var ErrWarn = "warn: "
|
||||||
|
var ErrExpire = "expire: "
|
||||||
var ErrNotLogin = "not login: "
|
var ErrNotLogin = "not login: "
|
||||||
var ErrNotRight = "not right: "
|
var ErrNotRight = "not right: "
|
||||||
var ErrNotFound = "not found: "
|
var ErrNotFound = "not found: "
|
||||||
|
10
misc.go
10
misc.go
@ -143,7 +143,7 @@ func Render(m *Message, cmd string, args ...interface{}) string {
|
|||||||
list := []string{}
|
list := []string{}
|
||||||
for _, k := range kit.Split(strings.Join(arg, ",")) {
|
for _, k := range kit.Split(strings.Join(arg, ",")) {
|
||||||
list = append(list, fmt.Sprintf(`<input type="button" name="%s" value="%s">`,
|
list = append(list, fmt.Sprintf(`<input type="button" name="%s" value="%s">`,
|
||||||
k, kit.Select(k, kit.Value(m.cmd.Meta, kit.Keys("trans", k)))))
|
k, kit.Select(k, kit.Value(m._cmd.Meta, kit.Keys("trans", k)))))
|
||||||
}
|
}
|
||||||
return strings.Join(list, "")
|
return strings.Join(list, "")
|
||||||
|
|
||||||
@ -255,3 +255,11 @@ func (m *Message) RenameAppend(from, to string) {
|
|||||||
func (m *Message) Fields(condition bool, fields string) string {
|
func (m *Message) Fields(condition bool, fields string) string {
|
||||||
return m.Option("fields", kit.Select(kit.Select("detail", fields, condition), m.Option("fields")))
|
return m.Option("fields", kit.Select(kit.Select("detail", fields, condition), m.Option("fields")))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Option struct {
|
||||||
|
Name string
|
||||||
|
Value interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func OptionFields(str string) Option { return Option{"fields", str} }
|
||||||
|
func OptionHash(str string) Option { return Option{kit.MDB_HASH, str} }
|
||||||
|
60
type.go
60
type.go
@ -111,7 +111,7 @@ func (c *Context) _hand(m *Message, cmd *Command, key string, k string, h *Actio
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Message {
|
func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Message {
|
||||||
if m.cmd = cmd; cmd == nil {
|
if m._cmd = cmd; cmd == nil {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,7 +324,7 @@ type Message struct {
|
|||||||
|
|
||||||
source *Context
|
source *Context
|
||||||
target *Context
|
target *Context
|
||||||
cmd *Command
|
_cmd *Command
|
||||||
|
|
||||||
cb func(*Message) *Message
|
cb func(*Message) *Message
|
||||||
W http.ResponseWriter
|
W http.ResponseWriter
|
||||||
@ -628,10 +628,36 @@ func (m *Message) Search(key string, cb interface{}) *Message {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Message) _hand(arg ...interface{}) *Message {
|
func (m *Message) Cmdy(arg ...interface{}) *Message {
|
||||||
list := kit.Simple(arg...)
|
return m.Copy(m.cmd(arg...))
|
||||||
if len(arg) > 0 {
|
}
|
||||||
switch cb := arg[len(arg)-1]; cbs := cb.(type) {
|
func (m *Message) Cmdx(arg ...interface{}) string {
|
||||||
|
return kit.Select("", m.cmd(arg...).meta[MSG_RESULT], 0)
|
||||||
|
}
|
||||||
|
func (m *Message) Cmds(arg ...interface{}) *Message {
|
||||||
|
return m.Go(func() { m.cmd(arg...) })
|
||||||
|
}
|
||||||
|
func (m *Message) Cmd(arg ...interface{}) *Message {
|
||||||
|
return m.cmd(arg...)
|
||||||
|
}
|
||||||
|
func (m *Message) cmd(arg ...interface{}) *Message {
|
||||||
|
opts := map[string]interface{}{}
|
||||||
|
args := []interface{}{}
|
||||||
|
|
||||||
|
for _, v := range arg {
|
||||||
|
switch val := v.(type) {
|
||||||
|
case Option:
|
||||||
|
opts[val.Name] = val.Value
|
||||||
|
case *Option:
|
||||||
|
opts[val.Name] = val.Value
|
||||||
|
default:
|
||||||
|
args = append(args, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list := kit.Simple(args...)
|
||||||
|
if len(args) > 0 {
|
||||||
|
switch cb := args[len(args)-1]; cbs := cb.(type) {
|
||||||
case string:
|
case string:
|
||||||
default:
|
default:
|
||||||
if reflect.Func == reflect.TypeOf(cbs).Kind() {
|
if reflect.Func == reflect.TypeOf(cbs).Kind() {
|
||||||
@ -650,15 +676,24 @@ func (m *Message) _hand(arg ...interface{}) *Message {
|
|||||||
|
|
||||||
if cmd, ok := m.target.Commands[list[0]]; ok {
|
if cmd, ok := m.target.Commands[list[0]]; ok {
|
||||||
m.TryCatch(m.Spawn(), true, func(msg *Message) {
|
m.TryCatch(m.Spawn(), true, func(msg *Message) {
|
||||||
|
for k, v := range opts {
|
||||||
|
msg.Option(k, v)
|
||||||
|
}
|
||||||
m = m.target.cmd(msg, cmd, list[0], list[1:]...)
|
m = m.target.cmd(msg, cmd, list[0], list[1:]...)
|
||||||
})
|
})
|
||||||
} else if cmd, ok := m.source.Commands[list[0]]; ok {
|
} else if cmd, ok := m.source.Commands[list[0]]; ok {
|
||||||
m.TryCatch(m.Spawn(m.source), true, func(msg *Message) {
|
m.TryCatch(m.Spawn(m.source), true, func(msg *Message) {
|
||||||
|
for k, v := range opts {
|
||||||
|
msg.Option(k, v)
|
||||||
|
}
|
||||||
m = m.source.cmd(msg, cmd, list[0], list[1:]...)
|
m = m.source.cmd(msg, cmd, list[0], list[1:]...)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
m.Search(list[0], func(p *Context, s *Context, key string, cmd *Command) {
|
m.Search(list[0], func(p *Context, s *Context, key string, cmd *Command) {
|
||||||
m.TryCatch(m.Spawn(s), true, func(msg *Message) {
|
m.TryCatch(m.Spawn(s), true, func(msg *Message) {
|
||||||
|
for k, v := range opts {
|
||||||
|
msg.Option(k, v)
|
||||||
|
}
|
||||||
m = s.cmd(msg, cmd, key, list[1:]...)
|
m = s.cmd(msg, cmd, key, list[1:]...)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -669,18 +704,7 @@ func (m *Message) _hand(arg ...interface{}) *Message {
|
|||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
func (m *Message) Cmdy(arg ...interface{}) *Message {
|
|
||||||
return m.Copy(m._hand(arg...))
|
|
||||||
}
|
|
||||||
func (m *Message) Cmdx(arg ...interface{}) string {
|
|
||||||
return kit.Select("", m._hand(arg...).meta[MSG_RESULT], 0)
|
|
||||||
}
|
|
||||||
func (m *Message) Cmds(arg ...interface{}) *Message {
|
|
||||||
return m.Go(func() { m._hand(arg...) })
|
|
||||||
}
|
|
||||||
func (m *Message) Cmd(arg ...interface{}) *Message {
|
|
||||||
return m._hand(arg...)
|
|
||||||
}
|
|
||||||
func (m *Message) Confv(arg ...interface{}) (val interface{}) {
|
func (m *Message) Confv(arg ...interface{}) (val interface{}) {
|
||||||
m.Search(kit.Format(arg[0]), func(p *Context, s *Context, key string, conf *Config) {
|
m.Search(kit.Format(arg[0]), func(p *Context, s *Context, key string, conf *Config) {
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user