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) {
|
||||
_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"))},
|
||||
})
|
||||
|
@ -25,12 +25,13 @@ func _user_login(m *ice.Message, name, word string) {
|
||||
if m.Warn(name == "", ice.ErrNotValid, name) {
|
||||
return
|
||||
}
|
||||
if !mdb.HashSelectDetail(m, name, nil) {
|
||||
_user_create(m, VOID, name, word)
|
||||
if !mdb.HashSelectDetail(m.Spawn(), name, nil) {
|
||||
_user_create(m.Spawn(), name, word)
|
||||
}
|
||||
|
||||
m.Debug("what %v", m.FormatMeta())
|
||||
_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) {
|
||||
return
|
||||
}
|
||||
@ -41,6 +42,7 @@ func _user_login(m *ice.Message, name, word string) {
|
||||
_source,
|
||||
)
|
||||
})
|
||||
m.Debug("what %v", m.FormatMeta())
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -38,7 +38,8 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
||||
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)))
|
||||
bio := m.Confv(FILE, kit.Keys(file, FILE)).(*bufio.Writer)
|
||||
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) {
|
||||
msg.Debug("what %v", msg.Append("extra.password"))
|
||||
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") != "" {
|
||||
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)) {
|
||||
aaa.UserRoot(msg) // 本机认证
|
||||
|
@ -99,6 +99,9 @@ const ACTION = "action"
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
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) {
|
||||
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{
|
||||
CMD: {Name: "cmd path auto upload up home", Help: "命令", Actions: ice.MergeActions(ice.Actions{
|
||||
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.SVG, mdb.NAME, "web.wiki.draw")
|
||||
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, nfs.CSV, mdb.NAME, "web.wiki.data")
|
||||
|
@ -16,6 +16,9 @@ const FOOTER = "footer"
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
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) {
|
||||
if aaa.Right(m, arg) {
|
||||
if m.Cmdy(arg); m.IsErrNotFound() {
|
||||
|
@ -60,7 +60,7 @@ const HEADER = "header"
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
web.WEB_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
switch kit.Select("", arg, 0) {
|
||||
case web.P(HEADER):
|
||||
switch kit.Select("", arg, 1) {
|
||||
case "", aaa.LOGIN:
|
||||
@ -74,6 +74,9 @@ func init() {
|
||||
m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin, arg)
|
||||
}},
|
||||
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) {
|
||||
if aaa.UserLogin(m, arg[0], arg[1]) {
|
||||
web.RenderCookie(m, aaa.SessCreate(m, arg[0]))
|
||||
@ -116,7 +119,9 @@ func init() {
|
||||
m.Option(k, msg.Append(k))
|
||||
}
|
||||
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") != "" {
|
||||
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() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
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) {
|
||||
if web.OptionAgentIs(m, "curl", "Wget") {
|
||||
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) {
|
||||
mdb.Richs(m, RIVER, kit.Keys(mdb.HASH, key, OCEAN), m.Option(ice.MSG_USERNAME), func(k string, val ice.Map) {
|
||||
m.Push(key, kit.GetMeta(value), []string{mdb.HASH, mdb.NAME}, kit.GetMeta(val))
|
||||
m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields(mdb.HASH, mdb.NAME)).Tables(func(value ice.Maps) {
|
||||
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("", value, []string{mdb.HASH, mdb.NAME}, value)
|
||||
})
|
||||
})
|
||||
}
|
||||
@ -58,6 +58,9 @@ const RIVER = "river"
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
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) {
|
||||
switch m.Option(ctx.ACTION) {
|
||||
case cli.START, "创建空间":
|
||||
|
@ -14,7 +14,7 @@ const SSO = "sso"
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
"/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) {
|
||||
if m.Option(ice.MSG_USERNAME) == "" {
|
||||
web.RenderIndex(m, ice.VOLCANOS)
|
||||
|
@ -2,6 +2,7 @@ package chat
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
@ -53,18 +54,24 @@ func init() {
|
||||
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))
|
||||
if msg.Length() == 0 && len(arg) > 1 { // 虚拟群组
|
||||
if aaa.Right(m, arg[1]) {
|
||||
msg.Push(ctx.INDEX, arg[1])
|
||||
}
|
||||
}
|
||||
|
||||
if len(arg) > 2 && arg[2] == ice.RUN { // 执行命令
|
||||
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
|
||||
}
|
||||
|
||||
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]) })
|
||||
if m.Length() > 0 {
|
||||
m.ProcessField(arg[0], arg[1], ice.RUN)
|
||||
}
|
||||
}
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
TOPIC: {Name: "topic zone id auto create insert", Help: "主题", Actions: ice.MergeActions(ice.Actions{
|
||||
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) {
|
||||
switch arg[0] {
|
||||
|
@ -43,7 +43,8 @@ func init() {
|
||||
}, Commands: ice.Commands{
|
||||
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) {
|
||||
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) {
|
||||
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 {
|
||||
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 {
|
||||
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()) {
|
||||
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.Env = env
|
||||
|
||||
@ -52,7 +52,7 @@ func _ssh_watch(m *ice.Message, meta ice.Maps, h string, input io.Reader, output
|
||||
switch buf[i] {
|
||||
case '\r', '\n':
|
||||
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)
|
||||
i = 0
|
||||
default:
|
||||
@ -70,7 +70,7 @@ func init() {
|
||||
psh.Index.MergeCommands(ice.Commands{
|
||||
CHANNEL: {Name: "channel hash id auto", Help: "通道", Actions: ice.MergeActions(ice.Actions{
|
||||
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)
|
||||
})
|
||||
}},
|
||||
@ -85,7 +85,7 @@ func init() {
|
||||
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)),
|
||||
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 {
|
||||
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{
|
||||
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)
|
||||
_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))
|
||||
}},
|
||||
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() {
|
||||
_ssh_conn(m, func(client *ssh.Client) {
|
||||
m.Rich(CONNECT, "", kit.Dict(
|
||||
mdb.Rich(m, CONNECT, "", kit.Dict(
|
||||
mdb.NAME, m.Option(mdb.NAME),
|
||||
aaa.USERNAME, m.Option(aaa.USERNAME),
|
||||
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) {
|
||||
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)
|
||||
})
|
||||
|
||||
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) {
|
||||
session.Shell()
|
||||
session.Wait()
|
||||
@ -190,7 +190,7 @@ func init() {
|
||||
m.Echo(h)
|
||||
}},
|
||||
"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 session, e := client.NewSession(); m.Assert(e) {
|
||||
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) {
|
||||
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) {
|
||||
meta, err := _ssh_meta(conn), errors.New(ice.ErrNotRight)
|
||||
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 // 本机用户
|
||||
} else {
|
||||
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 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)
|
||||
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) {
|
||||
meta, err := _ssh_meta(conn), errors.New(ice.ErrNotRight)
|
||||
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 // 密码登录
|
||||
}
|
||||
return &ssh.Permissions{Extensions: meta}, err
|
||||
},
|
||||
|
||||
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))
|
||||
},
|
||||
}
|
||||
@ -106,14 +106,14 @@ func init() {
|
||||
}, Commands: ice.Commands{
|
||||
SERVICE: {Name: "service port id auto listen prunes", Help: "服务", Actions: ice.MergeActions(ice.Actions{
|
||||
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 {
|
||||
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) {
|
||||
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)
|
||||
}) == nil {
|
||||
m.Cmd(mdb.INSERT, SERVICE, "", mdb.HASH, tcp.PORT, m.Option(tcp.PORT),
|
||||
@ -159,7 +159,7 @@ func init() {
|
||||
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 { // 服务列表
|
||||
mdb.HashSelect(m, arg...)
|
||||
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()
|
||||
|
||||
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
|
||||
|
||||
for request := range requests {
|
||||
|
@ -30,13 +30,13 @@ func _ssh_session(m *ice.Message, h string, client *ssh.Client) (*ssh.Session, e
|
||||
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]),
|
||||
))
|
||||
}
|
||||
})
|
||||
|
||||
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)
|
||||
})
|
||||
|
||||
@ -64,9 +64,9 @@ func init() {
|
||||
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) {
|
||||
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 {
|
||||
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))
|
||||
}
|
||||
})
|
||||
@ -81,7 +81,7 @@ func init() {
|
||||
}
|
||||
|
||||
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")
|
||||
mdb.ZoneSelect(m, kit.Slice(arg, 0, 2)...).Tables(func(value ice.Maps) {
|
||||
m.PushButton(kit.Select("", mdb.REPEAT, value[mdb.TYPE] == CMD))
|
||||
|
Loading…
x
Reference in New Issue
Block a user