mirror of
https://shylinux.com/x/icebergs
synced 2025-05-01 19:19:24 +08:00
opt chat
This commit is contained in:
parent
441013508b
commit
3b5b2b717b
@ -66,7 +66,6 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
CHECK: {Name: "check sessid", Help: "检查", Hand: func(m *ice.Message, arg ...string) {
|
CHECK: {Name: "check sessid", Help: "检查", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_sess_check(m, m.Option(SESSID))
|
_sess_check(m, m.Option(SESSID))
|
||||||
m.Debug("what %v", m.FormatsMeta())
|
|
||||||
}},
|
}},
|
||||||
}, mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,userrole,username,usernick,ip,ua", mdb.EXPIRE, "720h"))},
|
}, mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,userrole,username,usernick,ip,ua", mdb.EXPIRE, "720h"))},
|
||||||
})
|
})
|
||||||
|
@ -25,12 +25,13 @@ func _user_login(m *ice.Message, name, word string) {
|
|||||||
if m.Warn(name == "", ice.ErrNotValid, name) {
|
if m.Warn(name == "", ice.ErrNotValid, name) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !mdb.HashSelectDetail(m, name, nil) {
|
if !mdb.HashSelectDetail(m.Spawn(), name, nil) {
|
||||||
_user_create(m, VOID, name, word)
|
_user_create(m.Spawn(), name, word)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.Debug("what %v", m.FormatMeta())
|
||||||
_source := logs.FileLineMeta(logs.FileLine(-1, 3))
|
_source := logs.FileLineMeta(logs.FileLine(-1, 3))
|
||||||
mdb.HashSelectDetail(m, name, func(value ice.Map) {
|
mdb.HashSelectDetail(m.Spawn(), name, func(value ice.Map) {
|
||||||
if m.Warn(word != "" && word != kit.Format(kit.Value(value, kit.Keys(mdb.EXTRA, PASSWORD))), ice.ErrNotRight) {
|
if m.Warn(word != "" && word != kit.Format(kit.Value(value, kit.Keys(mdb.EXTRA, PASSWORD))), ice.ErrNotRight) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -41,6 +42,7 @@ func _user_login(m *ice.Message, name, word string) {
|
|||||||
_source,
|
_source,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
m.Debug("what %v", m.FormatMeta())
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -38,7 +38,8 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
file := kit.Select(BENCH, m.Conf(SHOW, kit.Keys(l.l, FILE)))
|
// file := kit.Select(BENCH, m.Conf(SHOW, kit.Keys(l.l, FILE)))
|
||||||
|
file := BENCH
|
||||||
view := m.Confm(VIEW, m.Conf(SHOW, kit.Keys(l.l, VIEW)))
|
view := m.Confm(VIEW, m.Conf(SHOW, kit.Keys(l.l, VIEW)))
|
||||||
bio := m.Confv(FILE, kit.Keys(file, FILE)).(*bufio.Writer)
|
bio := m.Confv(FILE, kit.Keys(file, FILE)).(*bufio.Writer)
|
||||||
if bio == nil {
|
if bio == nil {
|
||||||
|
@ -279,12 +279,14 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
func _serve_login(msg *ice.Message, key string, cmds []string, w http.ResponseWriter, r *http.Request) ([]string, bool) {
|
func _serve_login(msg *ice.Message, key string, cmds []string, w http.ResponseWriter, r *http.Request) ([]string, bool) {
|
||||||
|
msg.Debug("what %v", msg.Append("extra.password"))
|
||||||
aaa.SessCheck(msg, msg.Option(ice.MSG_SESSID)) // 会话认证
|
aaa.SessCheck(msg, msg.Option(ice.MSG_SESSID)) // 会话认证
|
||||||
msg.Debug("what %v", msg.FormatsMeta())
|
|
||||||
|
|
||||||
|
msg.Debug("what %v", msg.Append("extra.password"))
|
||||||
if msg.Config("staffname") != "" {
|
if msg.Config("staffname") != "" {
|
||||||
aaa.UserLogin(msg, r.Header.Get("Staffname"), "")
|
aaa.UserLogin(msg, r.Header.Get("Staffname"), "")
|
||||||
}
|
}
|
||||||
|
msg.Debug("what %v", msg.Append("extra.password"))
|
||||||
|
|
||||||
if msg.Option(ice.MSG_USERNAME) == "" && msg.Config(tcp.LOCALHOST) == ice.TRUE && tcp.IsLocalHost(msg, msg.Option(ice.MSG_USERIP)) {
|
if msg.Option(ice.MSG_USERNAME) == "" && msg.Config(tcp.LOCALHOST) == ice.TRUE && tcp.IsLocalHost(msg, msg.Option(ice.MSG_USERIP)) {
|
||||||
aaa.UserRoot(msg) // 本机认证
|
aaa.UserRoot(msg) // 本机认证
|
||||||
|
@ -99,6 +99,9 @@ const ACTION = "action"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
web.P(ACTION): {Name: "/action river storm action arg...", Help: "工作台", Actions: ice.MergeActions(ice.Actions{
|
web.P(ACTION): {Name: "/action river storm action arg...", Help: "工作台", Actions: ice.MergeActions(ice.Actions{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
|
||||||
|
}},
|
||||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.MODIFY, RIVER, _action_key(m), mdb.LIST, m.OptionSimple(mdb.ID), arg)
|
m.Cmdy(mdb.MODIFY, RIVER, _action_key(m), mdb.LIST, m.OptionSimple(mdb.ID), arg)
|
||||||
}},
|
}},
|
||||||
|
@ -55,7 +55,7 @@ func init() {
|
|||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(ice.Actions{
|
CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(aaa.ROLE, aaa.WHITE, CMD)
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, CMD)
|
||||||
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.SHY, mdb.NAME, "web.wiki.word")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.SHY, mdb.NAME, "web.wiki.word")
|
||||||
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.SVG, mdb.NAME, "web.wiki.draw")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.SVG, mdb.NAME, "web.wiki.draw")
|
||||||
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.CSV, mdb.NAME, "web.wiki.data")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.CSV, mdb.NAME, "web.wiki.data")
|
||||||
|
@ -16,6 +16,9 @@ const FOOTER = "footer"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
FOOTER: {Name: "footer", Help: "状态栏", Actions: ice.MergeActions(ice.Actions{
|
FOOTER: {Name: "footer", Help: "状态栏", Actions: ice.MergeActions(ice.Actions{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
|
||||||
|
}},
|
||||||
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if aaa.Right(m, arg) {
|
if aaa.Right(m, arg) {
|
||||||
if m.Cmdy(arg); m.IsErrNotFound() {
|
if m.Cmdy(arg); m.IsErrNotFound() {
|
||||||
|
@ -60,7 +60,7 @@ const HEADER = "header"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
web.WEB_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
|
web.WEB_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch arg[0] {
|
switch kit.Select("", arg, 0) {
|
||||||
case web.P(HEADER):
|
case web.P(HEADER):
|
||||||
switch kit.Select("", arg, 1) {
|
switch kit.Select("", arg, 1) {
|
||||||
case "", aaa.LOGIN:
|
case "", aaa.LOGIN:
|
||||||
@ -74,6 +74,9 @@ func init() {
|
|||||||
m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg)
|
m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg)
|
||||||
}},
|
}},
|
||||||
HEADER: {Name: "header", Help: "标题栏", Actions: ice.MergeActions(ice.Actions{
|
HEADER: {Name: "header", Help: "标题栏", Actions: ice.MergeActions(ice.Actions{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
|
||||||
|
}},
|
||||||
aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) {
|
aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if aaa.UserLogin(m, arg[0], arg[1]) {
|
if aaa.UserLogin(m, arg[0], arg[1]) {
|
||||||
web.RenderCookie(m, aaa.SessCreate(m, arg[0]))
|
web.RenderCookie(m, aaa.SessCreate(m, arg[0]))
|
||||||
@ -116,7 +119,9 @@ func init() {
|
|||||||
m.Option(k, msg.Append(k))
|
m.Option(k, msg.Append(k))
|
||||||
}
|
}
|
||||||
for _, k := range []string{aaa.AVATAR, aaa.BACKGROUND} {
|
for _, k := range []string{aaa.AVATAR, aaa.BACKGROUND} {
|
||||||
m.Option(k, kit.Select(web.SHARE_LOCAL+k, kit.Select("void", msg.Append(k)), aaa.Right(m, msg.Append(k))))
|
if msg.Append(k) != "" && aaa.Right(m.Spawn(), msg.Append(k)) {
|
||||||
|
m.Option(k, web.SHARE_LOCAL+k)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if m.Option(aaa.AVATAR) == "" && m.R.Header.Get("Staffname") != "" {
|
if m.Option(aaa.AVATAR) == "" && m.R.Header.Get("Staffname") != "" {
|
||||||
m.Option(aaa.AVATAR, kit.Format("https://dayu.oa.com/avatars/%s/profile.jpg", m.R.Header.Get("Staffname")))
|
m.Option(aaa.AVATAR, kit.Format("https://dayu.oa.com/avatars/%s/profile.jpg", m.R.Header.Get("Staffname")))
|
||||||
|
@ -18,7 +18,7 @@ const POD = "pod"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
POD: {Name: "pod", Help: "节点", Actions: ice.MergeActions(ice.Actions{
|
POD: {Name: "pod", Help: "节点", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, POD) }},
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, POD) }},
|
||||||
}, ctx.CmdAction(), web.ApiAction("/pod/")), Hand: func(m *ice.Message, arg ...string) {
|
}, ctx.CmdAction(), web.ApiAction("/pod/")), Hand: func(m *ice.Message, arg ...string) {
|
||||||
if web.OptionAgentIs(m, "curl", "Wget") {
|
if web.OptionAgentIs(m, "curl", "Wget") {
|
||||||
aaa.UserRoot(m)
|
aaa.UserRoot(m)
|
||||||
|
@ -43,9 +43,9 @@ func _river_list(m *ice.Message) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mdb.Richs(m, RIVER, nil, mdb.FOREACH, func(key string, value ice.Map) {
|
m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields(mdb.HASH, mdb.NAME)).Tables(func(value ice.Maps) {
|
||||||
mdb.Richs(m, RIVER, kit.Keys(mdb.HASH, key, OCEAN), m.Option(ice.MSG_USERNAME), func(k string, val ice.Map) {
|
m.Cmd(mdb.SELECT, m.PrefixKey(), kit.Keys(mdb.HASH, value[mdb.HASH], OCEAN), mdb.HASH, m.Option(ice.MSG_USERNAME)).Tables(func(value ice.Maps) {
|
||||||
m.Push(key, kit.GetMeta(value), []string{mdb.HASH, mdb.NAME}, kit.GetMeta(val))
|
m.Push("", value, []string{mdb.HASH, mdb.NAME}, value)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -58,6 +58,9 @@ const RIVER = "river"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
RIVER: {Name: "river hash auto create", Help: "群组", Actions: ice.MergeActions(ice.Actions{
|
RIVER: {Name: "river hash auto create", Help: "群组", Actions: ice.MergeActions(ice.Actions{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.CommandKey())
|
||||||
|
}},
|
||||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch m.Option(ctx.ACTION) {
|
switch m.Option(ctx.ACTION) {
|
||||||
case cli.START, "创建空间":
|
case cli.START, "创建空间":
|
||||||
|
@ -14,7 +14,7 @@ const SSO = "sso"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
"/sso": {Name: "/sso", Help: "登录", Actions: ice.Actions{
|
"/sso": {Name: "/sso", Help: "登录", Actions: ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, SSO) }},
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, SSO) }},
|
||||||
}, Hand: func(m *ice.Message, arg ...string) {
|
}, Hand: func(m *ice.Message, arg ...string) {
|
||||||
if m.Option(ice.MSG_USERNAME) == "" {
|
if m.Option(ice.MSG_USERNAME) == "" {
|
||||||
web.RenderIndex(m, ice.VOLCANOS)
|
web.RenderIndex(m, ice.VOLCANOS)
|
||||||
|
@ -2,6 +2,7 @@ package chat
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/aaa"
|
||||||
"shylinux.com/x/icebergs/base/ctx"
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
@ -53,17 +54,23 @@ func init() {
|
|||||||
m.OptionFields("time,id,space,index,args,style,display")
|
m.OptionFields("time,id,space,index,args,style,display")
|
||||||
msg := m.Cmd(mdb.SELECT, RIVER, _storm_key(m, arg[0]), mdb.LIST, mdb.ID, kit.Select("", arg, 1))
|
msg := m.Cmd(mdb.SELECT, RIVER, _storm_key(m, arg[0]), mdb.LIST, mdb.ID, kit.Select("", arg, 1))
|
||||||
if msg.Length() == 0 && len(arg) > 1 { // 虚拟群组
|
if msg.Length() == 0 && len(arg) > 1 { // 虚拟群组
|
||||||
msg.Push(ctx.INDEX, arg[1])
|
if aaa.Right(m, arg[1]) {
|
||||||
|
msg.Push(ctx.INDEX, arg[1])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(arg) > 2 && arg[2] == ice.RUN { // 执行命令
|
if len(arg) > 2 && arg[2] == ice.RUN { // 执行命令
|
||||||
m.Cmdy(web.Space(m, kit.Select(m.Option(ice.POD), msg.Append(web.SPACE))), msg.Append(ctx.INDEX), arg[3:])
|
if !m.Warn(aaa.Right(m, msg.Append(ctx.INDEX))) {
|
||||||
|
m.Cmdy(web.Space(m, kit.Select(m.Option(ice.POD), msg.Append(web.SPACE))), msg.Append(ctx.INDEX), arg[3:])
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Copy(msg); len(arg) > 1 { // 命令插件
|
if m.Copy(msg); len(arg) > 1 { // 命令插件
|
||||||
m.Tables(func(value ice.Maps) { m.Cmdy(web.Space(m, value[web.SPACE]), ctx.COMMAND, value[ctx.INDEX]) })
|
m.Tables(func(value ice.Maps) { m.Cmdy(web.Space(m, value[web.SPACE]), ctx.COMMAND, value[ctx.INDEX]) })
|
||||||
m.ProcessField(arg[0], arg[1], ice.RUN)
|
if m.Length() > 0 {
|
||||||
|
m.ProcessField(arg[0], arg[1], ice.RUN)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
|
@ -26,7 +26,7 @@ func init() {
|
|||||||
Index.MergeCommands(ice.Commands{
|
Index.MergeCommands(ice.Commands{
|
||||||
TOPIC: {Name: "topic zone id auto create insert", Help: "主题", Actions: ice.MergeActions(ice.Actions{
|
TOPIC: {Name: "topic zone id auto create insert", Help: "主题", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(aaa.ROLE, aaa.WHITE, TOPIC)
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, TOPIC)
|
||||||
}},
|
}},
|
||||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
|
@ -43,7 +43,8 @@ func init() {
|
|||||||
}, Commands: ice.Commands{
|
}, Commands: ice.Commands{
|
||||||
WORD: {Name: "word path=src/main.shy@key list play", Help: "语言文字", Actions: ice.MergeActions(ice.Actions{
|
WORD: {Name: "word path=src/main.shy@key list play", Help: "语言文字", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey("src/main.shy"))
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
|
||||||
|
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, "src/main.shy")
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == mdb.FOREACH && arg[1] == "" {
|
if arg[0] == mdb.FOREACH && arg[1] == "" {
|
||||||
|
8
meta.go
8
meta.go
@ -518,7 +518,13 @@ func (m *Message) Appendv(key string, arg ...Any) []string {
|
|||||||
if len(arg) > 0 {
|
if len(arg) > 0 {
|
||||||
m.meta[key] = kit.Simple(arg...)
|
m.meta[key] = kit.Simple(arg...)
|
||||||
}
|
}
|
||||||
return m.meta[key]
|
if v, ok := m.meta[key]; ok {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
if v, ok := m.meta[kit.Keys(EXTRA, key)]; ok {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
func (m *Message) Resultv(arg ...Any) []string {
|
func (m *Message) Resultv(arg ...Any) []string {
|
||||||
if len(arg) > 0 {
|
if len(arg) > 0 {
|
||||||
|
@ -17,7 +17,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func _ssh_exec(m *ice.Message, cmd string, arg []string, env []string, input io.Reader, output io.Writer, done func()) {
|
func _ssh_exec(m *ice.Message, cmd string, arg []string, env []string, input io.Reader, output io.Writer, done func()) {
|
||||||
m.Log_IMPORT(CMD, cmd, ARG, arg, ENV, env)
|
m.Logs(mdb.IMPORT, CMD, cmd, ARG, arg, ENV, env)
|
||||||
c := exec.Command(cmd, arg...)
|
c := exec.Command(cmd, arg...)
|
||||||
// c.Env = env
|
// c.Env = env
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ func _ssh_watch(m *ice.Message, meta ice.Maps, h string, input io.Reader, output
|
|||||||
switch buf[i] {
|
switch buf[i] {
|
||||||
case '\r', '\n':
|
case '\r', '\n':
|
||||||
cmd := strings.TrimSpace(string(buf[:i]))
|
cmd := strings.TrimSpace(string(buf[:i]))
|
||||||
m.Log_IMPORT(tcp.HOSTNAME, meta[tcp.HOSTNAME], aaa.USERNAME, meta[aaa.USERNAME], CMD, cmd)
|
m.Logs(mdb.IMPORT, tcp.HOSTNAME, meta[tcp.HOSTNAME], aaa.USERNAME, meta[aaa.USERNAME], CMD, cmd)
|
||||||
m.Cmdy(mdb.INSERT, CHANNEL, kit.Keys(mdb.HASH, h), mdb.LIST, mdb.TYPE, CMD, mdb.TEXT, cmd)
|
m.Cmdy(mdb.INSERT, CHANNEL, kit.Keys(mdb.HASH, h), mdb.LIST, mdb.TYPE, CMD, mdb.TEXT, cmd)
|
||||||
i = 0
|
i = 0
|
||||||
default:
|
default:
|
||||||
@ -70,7 +70,7 @@ func init() {
|
|||||||
psh.Index.MergeCommands(ice.Commands{
|
psh.Index.MergeCommands(ice.Commands{
|
||||||
CHANNEL: {Name: "channel hash id auto", Help: "通道", Actions: ice.MergeActions(ice.Actions{
|
CHANNEL: {Name: "channel hash id auto", Help: "通道", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(CHANNEL, "", mdb.FOREACH, func(key string, value ice.Map) {
|
mdb.Richs(m, CHANNEL, "", mdb.FOREACH, func(key string, value ice.Map) {
|
||||||
kit.Value(value, kit.Keym(mdb.STATUS), tcp.CLOSE)
|
kit.Value(value, kit.Keym(mdb.STATUS), tcp.CLOSE)
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
@ -85,7 +85,7 @@ func init() {
|
|||||||
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, CHANNEL, kit.Keys(mdb.HASH, m.Option(mdb.HASH)),
|
m.Cmdy(mdb.INSERT, CHANNEL, kit.Keys(mdb.HASH, m.Option(mdb.HASH)),
|
||||||
mdb.LIST, mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD))
|
mdb.LIST, mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD))
|
||||||
m.Richs(CHANNEL, "", m.Option(mdb.HASH), func(key string, value ice.Map) {
|
mdb.Richs(m, CHANNEL, "", m.Option(mdb.HASH), func(key string, value ice.Map) {
|
||||||
if w, ok := kit.Value(value, kit.Keym(INPUT)).(io.Writer); ok {
|
if w, ok := kit.Value(value, kit.Keym(INPUT)).(io.Writer); ok {
|
||||||
w.Write([]byte(m.Option(CMD) + ice.NL))
|
w.Write([]byte(m.Option(CMD) + ice.NL))
|
||||||
}
|
}
|
||||||
|
@ -159,13 +159,13 @@ func init() {
|
|||||||
CONNECT: {Name: "connect name auto", Help: "连接", Actions: ice.MergeActions(ice.Actions{
|
CONNECT: {Name: "connect name auto", Help: "连接", Actions: ice.MergeActions(ice.Actions{
|
||||||
tcp.OPEN: {Name: "open authfile username=shy password verfiy host=shylinux.com port=22 private=.ssh/id_rsa", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
|
tcp.OPEN: {Name: "open authfile username=shy password verfiy host=shylinux.com port=22 private=.ssh/id_rsa", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
|
||||||
aaa.UserRoot(m)
|
aaa.UserRoot(m)
|
||||||
_ssh_open(m.OptionLoad(m.Option("authfile")), arg...)
|
_ssh_open(nfs.OptionLoad(m, m.Option("authfile")), arg...)
|
||||||
m.Echo("exit %v@%v:%v\n", m.Option(aaa.USERNAME), m.Option(tcp.HOST), m.Option(tcp.PORT))
|
m.Echo("exit %v@%v:%v\n", m.Option(aaa.USERNAME), m.Option(tcp.HOST), m.Option(tcp.PORT))
|
||||||
}},
|
}},
|
||||||
tcp.DIAL: {Name: "dial name=shylinux username=shy host=shylinux.com port=22 private=.ssh/id_rsa", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
tcp.DIAL: {Name: "dial name=shylinux username=shy host=shylinux.com port=22 private=.ssh/id_rsa", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Go(func() {
|
m.Go(func() {
|
||||||
_ssh_conn(m, func(client *ssh.Client) {
|
_ssh_conn(m, func(client *ssh.Client) {
|
||||||
m.Rich(CONNECT, "", kit.Dict(
|
mdb.Rich(m, CONNECT, "", kit.Dict(
|
||||||
mdb.NAME, m.Option(mdb.NAME),
|
mdb.NAME, m.Option(mdb.NAME),
|
||||||
aaa.USERNAME, m.Option(aaa.USERNAME),
|
aaa.USERNAME, m.Option(aaa.USERNAME),
|
||||||
tcp.HOST, m.Option(tcp.HOST), tcp.PORT, m.Option(tcp.PORT),
|
tcp.HOST, m.Option(tcp.HOST), tcp.PORT, m.Option(tcp.PORT),
|
||||||
@ -178,11 +178,11 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
SESSION: {Name: "session name", Help: "会话", Hand: func(m *ice.Message, arg ...string) {
|
SESSION: {Name: "session name", Help: "会话", Hand: func(m *ice.Message, arg ...string) {
|
||||||
var client *ssh.Client
|
var client *ssh.Client
|
||||||
m.Richs(CONNECT, "", m.Option(mdb.NAME), func(key string, value ice.Map) {
|
mdb.Richs(m, CONNECT, "", m.Option(mdb.NAME), func(key string, value ice.Map) {
|
||||||
client, _ = value[CONNECT].(*ssh.Client)
|
client, _ = value[CONNECT].(*ssh.Client)
|
||||||
})
|
})
|
||||||
|
|
||||||
h := m.Rich(SESSION, "", kit.Data(mdb.NAME, m.Option(mdb.NAME), mdb.STATUS, tcp.OPEN, CONNECT, m.Option(mdb.NAME)))
|
h := mdb.Rich(m, SESSION, "", kit.Data(mdb.NAME, m.Option(mdb.NAME), mdb.STATUS, tcp.OPEN, CONNECT, m.Option(mdb.NAME)))
|
||||||
if session, e := _ssh_session(m, h, client); m.Assert(e) {
|
if session, e := _ssh_session(m, h, client); m.Assert(e) {
|
||||||
session.Shell()
|
session.Shell()
|
||||||
session.Wait()
|
session.Wait()
|
||||||
@ -190,7 +190,7 @@ func init() {
|
|||||||
m.Echo(h)
|
m.Echo(h)
|
||||||
}},
|
}},
|
||||||
"command": {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
"command": {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(CONNECT, "", m.Option(mdb.NAME), func(key string, value ice.Map) {
|
mdb.Richs(m, CONNECT, "", m.Option(mdb.NAME), func(key string, value ice.Map) {
|
||||||
if client, ok := value[CONNECT].(*ssh.Client); ok {
|
if client, ok := value[CONNECT].(*ssh.Client); ok {
|
||||||
if session, e := client.NewSession(); m.Assert(e) {
|
if session, e := client.NewSession(); m.Assert(e) {
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
@ -201,7 +201,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
}, mdb.HashActionStatus(mdb.SHORT, "name", mdb.FIELD, "time,name,status,username,host,port")), Hand: func(m *ice.Message, arg ...string) {
|
}, mdb.HashStatusAction(mdb.SHORT, "name", mdb.FIELD, "time,name,status,username,host,port")), Hand: func(m *ice.Message, arg ...string) {
|
||||||
mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
|
mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
|
||||||
m.PushButton(kit.Select("", "command,session", value[mdb.STATUS] == tcp.OPEN), mdb.REMOVE)
|
m.PushButton(kit.Select("", "command,session", value[mdb.STATUS] == tcp.OPEN), mdb.REMOVE)
|
||||||
})
|
})
|
||||||
|
@ -28,7 +28,7 @@ func _ssh_config(m *ice.Message, h string) *ssh.ServerConfig {
|
|||||||
PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
|
PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
|
||||||
meta, err := _ssh_meta(conn), errors.New(ice.ErrNotRight)
|
meta, err := _ssh_meta(conn), errors.New(ice.ErrNotRight)
|
||||||
if tcp.IsLocalHost(m, strings.Split(conn.RemoteAddr().String(), ":")[0]) {
|
if tcp.IsLocalHost(m, strings.Split(conn.RemoteAddr().String(), ":")[0]) {
|
||||||
m.Log_AUTH(tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User())
|
m.Logs(ice.LOG_AUTH, tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User())
|
||||||
err = nil // 本机用户
|
err = nil // 本机用户
|
||||||
} else {
|
} else {
|
||||||
m.Cmd(mdb.SELECT, SERVICE, kit.Keys(mdb.HASH, h), mdb.LIST).Tables(func(value ice.Maps) {
|
m.Cmd(mdb.SELECT, SERVICE, kit.Keys(mdb.HASH, h), mdb.LIST).Tables(func(value ice.Maps) {
|
||||||
@ -39,7 +39,7 @@ func _ssh_config(m *ice.Message, h string) *ssh.ServerConfig {
|
|||||||
if pub, e := ssh.ParsePublicKey([]byte(s)); !m.Warn(e) {
|
if pub, e := ssh.ParsePublicKey([]byte(s)); !m.Warn(e) {
|
||||||
|
|
||||||
if bytes.Compare(pub.Marshal(), key.Marshal()) == 0 {
|
if bytes.Compare(pub.Marshal(), key.Marshal()) == 0 {
|
||||||
m.Log_AUTH(tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User(), tcp.HOSTNAME, value[mdb.NAME])
|
m.Logs(ice.LOG_AUTH, tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User(), tcp.HOSTNAME, value[mdb.NAME])
|
||||||
meta[tcp.HOSTNAME] = kit.Select("", kit.Split(value[mdb.NAME], "@"), 1)
|
meta[tcp.HOSTNAME] = kit.Select("", kit.Split(value[mdb.NAME], "@"), 1)
|
||||||
err = nil // 认证成功
|
err = nil // 认证成功
|
||||||
}
|
}
|
||||||
@ -52,14 +52,14 @@ func _ssh_config(m *ice.Message, h string) *ssh.ServerConfig {
|
|||||||
PasswordCallback: func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error) {
|
PasswordCallback: func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error) {
|
||||||
meta, err := _ssh_meta(conn), errors.New(ice.ErrNotRight)
|
meta, err := _ssh_meta(conn), errors.New(ice.ErrNotRight)
|
||||||
if aaa.UserLogin(m, conn.User(), string(password)) {
|
if aaa.UserLogin(m, conn.User(), string(password)) {
|
||||||
m.Log_AUTH(tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User(), aaa.PASSWORD, strings.Repeat("*", len(string(password))))
|
m.Logs(ice.LOG_AUTH, tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User(), aaa.PASSWORD, strings.Repeat("*", len(string(password))))
|
||||||
err = nil // 密码登录
|
err = nil // 密码登录
|
||||||
}
|
}
|
||||||
return &ssh.Permissions{Extensions: meta}, err
|
return &ssh.Permissions{Extensions: meta}, err
|
||||||
},
|
},
|
||||||
|
|
||||||
BannerCallback: func(conn ssh.ConnMetadata) string {
|
BannerCallback: func(conn ssh.ConnMetadata) string {
|
||||||
m.Log_IMPORT(tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User())
|
m.Logs(ice.LOG_AUTH, tcp.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User())
|
||||||
return m.Conf(SERVICE, kit.Keym(WELCOME))
|
return m.Conf(SERVICE, kit.Keym(WELCOME))
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -106,14 +106,14 @@ func init() {
|
|||||||
}, Commands: ice.Commands{
|
}, Commands: ice.Commands{
|
||||||
SERVICE: {Name: "service port id auto listen prunes", Help: "服务", Actions: ice.MergeActions(ice.Actions{
|
SERVICE: {Name: "service port id auto listen prunes", Help: "服务", Actions: ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(SERVICE, "", mdb.FOREACH, func(key string, value ice.Map) {
|
mdb.Richs(m, SERVICE, "", mdb.FOREACH, func(key string, value ice.Map) {
|
||||||
if value = kit.GetMeta(value); kit.Value(value, mdb.STATUS) == tcp.OPEN {
|
if value = kit.GetMeta(value); kit.Value(value, mdb.STATUS) == tcp.OPEN {
|
||||||
m.Cmd(SERVICE, tcp.LISTEN, tcp.PORT, value[tcp.PORT], value)
|
m.Cmd(SERVICE, tcp.LISTEN, tcp.PORT, value[tcp.PORT], value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
tcp.LISTEN: {Name: "listen port=9030 private=.ssh/id_rsa authkey=.ssh/authorized_keys", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
tcp.LISTEN: {Name: "listen port=9030 private=.ssh/id_rsa authkey=.ssh/authorized_keys", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if m.Richs(SERVICE, "", m.Option(tcp.PORT), func(key string, value ice.Map) {
|
if mdb.Richs(m, SERVICE, "", m.Option(tcp.PORT), func(key string, value ice.Map) {
|
||||||
kit.Value(value, kit.Keym(mdb.STATUS), tcp.OPEN)
|
kit.Value(value, kit.Keym(mdb.STATUS), tcp.OPEN)
|
||||||
}) == nil {
|
}) == nil {
|
||||||
m.Cmd(mdb.INSERT, SERVICE, "", mdb.HASH, tcp.PORT, m.Option(tcp.PORT),
|
m.Cmd(mdb.INSERT, SERVICE, "", mdb.HASH, tcp.PORT, m.Option(tcp.PORT),
|
||||||
@ -159,7 +159,7 @@ func init() {
|
|||||||
m.EchoScript(string(buf))
|
m.EchoScript(string(buf))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}, mdb.HashActionStatus()), Hand: func(m *ice.Message, arg ...string) {
|
}, mdb.HashStatusAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||||
if len(arg) == 0 { // 服务列表
|
if len(arg) == 0 { // 服务列表
|
||||||
mdb.HashSelect(m, arg...)
|
mdb.HashSelect(m, arg...)
|
||||||
m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE)
|
m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE)
|
||||||
|
@ -42,7 +42,7 @@ func _ssh_handle(m *ice.Message, meta ice.Maps, c net.Conn, channel ssh.Channel,
|
|||||||
}
|
}
|
||||||
defer tty.Close()
|
defer tty.Close()
|
||||||
|
|
||||||
h := m.Rich(CHANNEL, "", kit.Data(mdb.STATUS, tcp.OPEN, TTY, tty.Name(), INPUT, pty, OUTPUT, tty, meta))
|
h := mdb.Rich(m, CHANNEL, "", kit.Data(mdb.STATUS, tcp.OPEN, TTY, tty.Name(), INPUT, pty, OUTPUT, tty, meta))
|
||||||
meta[CHANNEL] = h
|
meta[CHANNEL] = h
|
||||||
|
|
||||||
for request := range requests {
|
for request := range requests {
|
||||||
|
@ -30,13 +30,13 @@ func _ssh_session(m *ice.Message, h string, client *ssh.Client) (*ssh.Session, e
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Grow(SESSION, kit.Keys(mdb.HASH, h), kit.Dict(
|
mdb.Grow(m, SESSION, kit.Keys(mdb.HASH, h), kit.Dict(
|
||||||
mdb.TYPE, RES, mdb.TEXT, string(buf[:n]),
|
mdb.TYPE, RES, mdb.TEXT, string(buf[:n]),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
m.Richs(SESSION, "", h, func(key string, value ice.Map) {
|
mdb.Richs(m, SESSION, "", h, func(key string, value ice.Map) {
|
||||||
kit.Value(value, kit.Keym(OUTPUT), out, kit.Keym(INPUT), in)
|
kit.Value(value, kit.Keym(OUTPUT), out, kit.Keym(INPUT), in)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -64,9 +64,9 @@ func init() {
|
|||||||
m.Cmdy(SESSION, ctx.ACTION, ctx.COMMAND, CMD, m.Option(mdb.TEXT))
|
m.Cmdy(SESSION, ctx.ACTION, ctx.COMMAND, CMD, m.Option(mdb.TEXT))
|
||||||
}},
|
}},
|
||||||
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(SESSION, "", m.Option(mdb.NAME), func(key string, value ice.Map) {
|
mdb.Richs(m, SESSION, "", m.Option(mdb.NAME), func(key string, value ice.Map) {
|
||||||
if w, ok := kit.Value(value, kit.Keym(INPUT)).(io.Writer); ok {
|
if w, ok := kit.Value(value, kit.Keym(INPUT)).(io.Writer); ok {
|
||||||
m.Grow(SESSION, kit.Keys(mdb.HASH, key), kit.Dict(mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD)))
|
mdb.Grow(m, SESSION, kit.Keys(mdb.HASH, key), kit.Dict(mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD)))
|
||||||
w.Write([]byte(m.Option(CMD) + ice.NL))
|
w.Write([]byte(m.Option(CMD) + ice.NL))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -81,7 +81,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.Action(ctx.COMMAND, mdb.PAGE)
|
m.Action(ctx.COMMAND, mdb.PAGE)
|
||||||
m.OptionPage(kit.Slice(arg, 2)...)
|
mdb.OptionPage(m, kit.Slice(arg, 2)...)
|
||||||
m.Fields(len(kit.Slice(arg, 1, 2)), "time,id,type,text")
|
m.Fields(len(kit.Slice(arg, 1, 2)), "time,id,type,text")
|
||||||
mdb.ZoneSelect(m, kit.Slice(arg, 0, 2)...).Tables(func(value ice.Maps) {
|
mdb.ZoneSelect(m, kit.Slice(arg, 0, 2)...).Tables(func(value ice.Maps) {
|
||||||
m.PushButton(kit.Select("", mdb.REPEAT, value[mdb.TYPE] == CMD))
|
m.PushButton(kit.Select("", mdb.REPEAT, value[mdb.TYPE] == CMD))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user