1
0
forked from x/icebergs
This commit is contained in:
shylinux 2020-10-08 15:48:18 +08:00
parent fe7c0209a0
commit 9ec30c3d53
9 changed files with 43 additions and 50 deletions

View File

@ -6,8 +6,6 @@ import (
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"fmt"
"os"
"os/exec" "os/exec"
"strings" "strings"
) )
@ -23,7 +21,6 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) {
cmd.Stderr = f cmd.Stderr = f
} }
cmd.Env = append(cmd.Env, fmt.Sprintf("PATH=%s", os.Getenv("PATH")))
if e := cmd.Start(); m.Warn(e != nil, ErrStart, cmd.Args, " ", e) { if e := cmd.Start(); m.Warn(e != nil, ErrStart, cmd.Args, " ", e) {
return return
} }

View File

@ -60,7 +60,7 @@ func _dream_show(m *ice.Message, name string) {
m.Optionv(cli.CMD_DIR, p) m.Optionv(cli.CMD_DIR, p)
m.Optionv(cli.CMD_ENV, kit.Simple( m.Optionv(cli.CMD_ENV, kit.Simple(
"ctx_dev", m.Conf(cli.RUNTIME, "conf.ctx_dev"), "ctx_dev", m.Conf(cli.RUNTIME, "conf.ctx_dev"),
"PATH", kit.Path(path.Join(p, "bin"))+":"+os.Getenv("PATH"), "PATH", kit.Path(path.Join(p, "bin"))+":"+kit.Path("bin")+":"+os.Getenv("PATH"),
"USER", ice.Info.UserName, m.Confv(DREAM, "meta.env"), "USER", ice.Info.UserName, m.Confv(DREAM, "meta.env"),
)) ))
// 启动任务 // 启动任务

View File

@ -56,7 +56,6 @@ func init() {
m.Cmdy("web.code.publish", "contexts", "tmux") m.Cmdy("web.code.publish", "contexts", "tmux")
m.Cmdy("web.code.publish", "contexts", "base") m.Cmdy("web.code.publish", "contexts", "base")
m.Cmdy("web.code.publish", "contexts", "miss") m.Cmdy("web.code.publish", "contexts", "miss")
m.Cmdy("web.wiki.image", "qrcode", m.Option(ice.MSG_USERWEB)) m.Cmdy("web.wiki.image", "qrcode", m.Option(ice.MSG_USERWEB))
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {

View File

@ -64,6 +64,24 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool {
return false return false
} }
if strings.HasPrefix(r.URL.Path, "/debug") {
r.URL.Path = strings.Replace(r.URL.Path, "/debug", "/code", -1)
return true
}
if b, ok := ice.BinPack[r.URL.Path]; ok {
if strings.HasSuffix(r.URL.Path, ".css") {
w.Header().Set("Content-Type", "text/css; charset=utf-8")
}
w.Write(b)
return false
}
if r.URL.Path == "/" && strings.Contains(r.Header.Get("User-Agent"), "curl") {
http.ServeFile(w, r, path.Join(m.Conf(SERVE, "meta.intshell.path"), m.Conf(SERVE, "meta.intshell.index")))
return false
}
// 单点登录 // 单点登录
if r.URL.Path == "/" && m.Conf(SERVE, "meta.sso") != "" { if r.URL.Path == "/" && m.Conf(SERVE, "meta.sso") != "" {
sessid := r.FormValue(ice.MSG_SESSID) sessid := r.FormValue(ice.MSG_SESSID)
@ -82,26 +100,8 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool {
http.Redirect(w, r, m.Conf(SERVE, "meta.sso"), http.StatusTemporaryRedirect) http.Redirect(w, r, m.Conf(SERVE, "meta.sso"), http.StatusTemporaryRedirect)
return false return false
} }
return true
} }
if strings.HasPrefix(r.URL.Path, "/debug") {
r.URL.Path = strings.Replace(r.URL.Path, "/debug", "/code", -1)
return true
}
if b, ok := ice.BinPack[r.URL.Path]; ok {
if strings.HasSuffix(r.URL.Path, ".css") {
w.Header().Set("Content-Type", "text/css; charset=utf-8")
}
w.Write(b)
return false
}
if r.URL.Path == "/" && strings.Contains(r.Header.Get("User-Agent"), "curl") {
http.ServeFile(w, r, path.Join(m.Conf(SERVE, "meta.intshell.path"), m.Conf(SERVE, "meta.intshell.index")))
return false
}
return true return true
} }
func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.ResponseWriter, r *http.Request) { func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.ResponseWriter, r *http.Request) {
@ -197,7 +197,7 @@ func _serve_login(msg *ice.Message, cmds []string, w http.ResponseWriter, r *htt
aaa.SessCheck(msg, msg.Option(ice.MSG_SESSID)) aaa.SessCheck(msg, msg.Option(ice.MSG_SESSID))
} }
if !msg.Options(ice.MSG_USERNAME) && tcp.IsLocalHost(msg, msg.Option(ice.MSG_USERIP)) { if !msg.Options(ice.MSG_USERNAME) && tcp.IsLocalHost(msg, msg.Option(ice.MSG_USERIP)) && msg.Conf(SERVE, "meta.localhost") == "true" {
// 自动认证 // 自动认证
aaa.UserLogin(msg, ice.Info.UserName, ice.Info.PassWord) aaa.UserLogin(msg, ice.Info.UserName, ice.Info.PassWord)
} }
@ -241,8 +241,10 @@ func init() {
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data( SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_SHORT, kit.MDB_NAME,
"logheaders", "false", "black", kit.Dict(), "white", kit.Dict( "logheaders", "false",
"space", true, "share", true, "plugin", true, "publish", true, "localhost", "true",
"black", kit.Dict(), "white", kit.Dict(
"login", true, "space", true, "share", true, "plugin", true, "publish", true,
), ),
"static", kit.Dict("/", "usr/volcanos/"), "static", kit.Dict("/", "usr/volcanos/"),

View File

@ -212,7 +212,7 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SPACE: {Name: "space name cmd auto", Help: "空间站", Action: map[string]*ice.Action{ SPACE: {Name: "space name cmd auto", Help: "空间站", Action: map[string]*ice.Action{
"connect": {Name: "connect dev name", Help: "连接", Hand: func(m *ice.Message, arg ...string) { "connect": {Name: "connect dev name", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
_space_dial(m, arg[0], kit.Select(ice.Info.NodeName, arg[1])) _space_dial(m, arg[0], kit.Select(ice.Info.NodeName, arg, 1))
}}, }},
}, 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 len(arg) < 2 { if len(arg) < 2 {

View File

@ -38,12 +38,7 @@ func init() {
main := kit.Select("src/main.go", arg, 2) main := kit.Select("src/main.go", arg, 2)
arch := kit.Select(m.Conf(cli.RUNTIME, "host.GOARCH"), arg, 1) arch := kit.Select(m.Conf(cli.RUNTIME, "host.GOARCH"), arg, 1)
goos := kit.Select(m.Conf(cli.RUNTIME, "host.GOOS"), arg, 0) goos := kit.Select(m.Conf(cli.RUNTIME, "host.GOOS"), arg, 0)
file := "" file := path.Join(m.Conf(cmd, "meta.path"), kit.Keys(kit.Select("ice"), goos, arch))
if m.Option(cli.CMD_DIR) == "" {
file = path.Join(m.Conf(cmd, "meta.path"), kit.Keys(kit.Select("ice", m.Option("name")), goos, arch))
} else {
file = kit.Keys(kit.Select("ice", m.Option("name")), goos, arch)
}
if goos == "windows" { if goos == "windows" {
// file += ".exe" // file += ".exe"
} }

View File

@ -154,7 +154,7 @@ func Run(arg ...string) string {
Pulse.root = Pulse Pulse.root = Pulse
Pulse.Option("cache.limit", "30") Pulse.Option("cache.limit", "30")
Pulse.Option("begin_time", Pulse.Time()) Pulse.Option("begin_time", Pulse.Time())
_log_disable = false _log_disable = true
switch kit.Select("", arg, 0) { switch kit.Select("", arg, 0) {
case "space", "serve": case "space", "serve":
if _log_disable = false; frame.Begin(Pulse.Spawns(), arg...).Start(Pulse, arg...) { if _log_disable = false; frame.Begin(Pulse.Spawns(), arg...).Start(Pulse, arg...) {

View File

@ -37,11 +37,11 @@ func (m *Message) Watch(key string, arg ...string) *Message {
if len(arg) == 0 { if len(arg) == 0 {
arg = append(arg, m.Prefix("auto")) arg = append(arg, m.Prefix("auto"))
} }
m.Cmd("gdb.event", "listen", "event", key, "cmd", strings.Join(arg, " ")) m.Cmd("gdb.event", "action", "listen", "event", key, "cmd", strings.Join(arg, " "))
return m return m
} }
func (m *Message) Event(key string, arg ...string) *Message { func (m *Message) Event(key string, arg ...string) *Message {
m.Cmd("gdb.event", "action", "event", key, strings.Join(arg, " ")) m.Cmd("gdb.event", "action", "action", "event", key, arg)
return m return m
} }
func (m *Message) Right(arg ...interface{}) bool { func (m *Message) Right(arg ...interface{}) bool {

View File

@ -67,7 +67,7 @@ const (
const ( const (
APP = "app" APP = "app"
SHIP = "ship" SHIP = "ship"
USER = "user" USERS = "users"
GROUP = "group" GROUP = "group"
SEND = "send" SEND = "send"
@ -91,9 +91,9 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
ADD_BOT, "我来也~", P2P_CHAT_CREATE, "让我们做好朋友吧~", ADD_BOT, "我来也~", P2P_CHAT_CREATE, "让我们做好朋友吧~",
), ),
)}, )},
SHIP: {Name: SHIP, Help: "组织配置", Value: kit.Data(kit.MDB_SHORT, SHIP_ID)}, SHIP: {Name: SHIP, Help: "组织配置", Value: kit.Data(kit.MDB_SHORT, SHIP_ID)},
USER: {Name: USER, Help: "用户配置", Value: kit.Data(kit.MDB_SHORT, OPEN_ID)}, USERS: {Name: USERS, Help: "用户配置", Value: kit.Data(kit.MDB_SHORT, OPEN_ID)},
HOME: {Name: HOME, Help: "卡片配置", Value: kit.Data(kit.MDB_SHORT, OPEN_ID)}, HOME: {Name: HOME, Help: "卡片配置", Value: kit.Data(kit.MDB_SHORT, OPEN_ID)},
META: {Name: META, Help: "卡片配置", Value: kit.Data( META: {Name: META, Help: "卡片配置", Value: kit.Data(
kit.MDB_SHORT, "url", kit.MDB_SHORT, "url",
)}, )},
@ -105,7 +105,7 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
m.Cmd(DUTY, "boot", m.Conf(cli.RUNTIME, "boot.hostname"), m.Time()) m.Cmd(DUTY, "boot", m.Conf(cli.RUNTIME, "boot.hostname"), m.Time())
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(APP, SHIP, USER, META) m.Save(APP, SHIP, USERS, META)
}}, }},
APP: {Name: "app [name] auto", Help: "应用", Action: map[string]*ice.Action{ APP: {Name: "app [name] auto", Help: "应用", Action: map[string]*ice.Action{
@ -143,13 +143,13 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
}) })
}) })
}}, }},
"user": {Name: "user ship_id", Hand: func(m *ice.Message, arg ...string) { "users": {Name: "users ship_id", Hand: func(m *ice.Message, arg ...string) {
m.Richs(APP, nil, "bot", func(key string, value map[string]interface{}) { m.Richs(APP, nil, "bot", func(key string, value map[string]interface{}) {
data := raw(m, "/open-apis/contact/v1/department/user/list", data := raw(m, "/open-apis/contact/v1/department/user/list",
"department_id", arg[0], "page_size", "100", "fetch_child", "true") "department_id", arg[0], "page_size", "100", "fetch_child", "true")
kit.Fetch(kit.Value(data, "data.user_list"), func(index int, value map[string]interface{}) { kit.Fetch(kit.Value(data, "data.user_list"), func(index int, value map[string]interface{}) {
msg := m.Cmd(m.Prefix(USER), value[OPEN_ID]) msg := m.Cmd(USERS, value[OPEN_ID])
// m.Push("avatar", m.Cmdx(mdb.RENDER, web.RENDER.IMG, msg.Append("avatar_72"))) // m.Push("avatar", m.Cmdx(mdb.RENDER, web.RENDER.IMG, msg.Append("avatar_72")))
m.Push("gender", kit.Select("男", "女", msg.Append("gender") == "2")) m.Push("gender", kit.Select("男", "女", msg.Append("gender") == "2"))
m.Push(kit.MDB_NAME, msg.Append(kit.MDB_NAME)) m.Push(kit.MDB_NAME, msg.Append(kit.MDB_NAME))
@ -174,13 +174,13 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
} }
if len(arg) == 1 { if len(arg) == 1 {
// 用户列表 // 用户列表
m.Cmdy(m.Prefix(SHIP), USER, arg[0]) m.Cmdy(m.Prefix(SHIP), USERS, arg[0])
return return
} }
// 用户通知 // 用户通知
m.Cmdy(m.Prefix(SEND), OPEN_ID, arg[1], arg[2:]) m.Cmdy(m.Prefix(SEND), OPEN_ID, arg[1], arg[2:])
}}, }},
USER: {Name: "user open_id|mobile|email", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { USERS: {Name: "users open_id|mobile|email", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if strings.HasPrefix(arg[0], "ou_") { if strings.HasPrefix(arg[0], "ou_") {
m.Richs(APP, nil, "bot", func(key string, value map[string]interface{}) { m.Richs(APP, nil, "bot", func(key string, value map[string]interface{}) {
data := raw(m, "/open-apis/contact/v1/user/batch_get", "open_ids", arg[0]) data := raw(m, "/open-apis/contact/v1/user/batch_get", "open_ids", arg[0])
@ -201,12 +201,12 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
} }
}}, }},
GROUP: {Name: "group chat_id open_id text", Help: "群组", Action: map[string]*ice.Action{ GROUP: {Name: "group chat_id open_id text", Help: "群组", Action: map[string]*ice.Action{
"user": {Name: "user id", Hand: func(m *ice.Message, arg ...string) { "users": {Name: "users id", Hand: func(m *ice.Message, arg ...string) {
m.Richs(APP, nil, "bot", func(key string, value map[string]interface{}) { m.Richs(APP, nil, "bot", func(key string, value map[string]interface{}) {
data := raw(m, "/open-apis/chat/v4/info", "chat_id", arg[0]) data := raw(m, "/open-apis/chat/v4/info", "chat_id", arg[0])
kit.Fetch(kit.Value(data, "data.members"), func(index int, value map[string]interface{}) { kit.Fetch(kit.Value(data, "data.members"), func(index int, value map[string]interface{}) {
msg := m.Cmd(m.Prefix(USER), value[OPEN_ID]) msg := m.Cmd(USERS, value[OPEN_ID])
// m.Push("avatar", m.Cmdx(mdb.RENDER, web.RENDER.IMG, msg.Append("avatar_72"))) // m.Push("avatar", m.Cmdx(mdb.RENDER, web.RENDER.IMG, msg.Append("avatar_72")))
m.Push("gender", kit.Select("男", "女", msg.Append("gender") == "2")) m.Push("gender", kit.Select("男", "女", msg.Append("gender") == "2"))
m.Push(kit.MDB_NAME, msg.Append(kit.MDB_NAME)) m.Push(kit.MDB_NAME, msg.Append(kit.MDB_NAME))
@ -234,7 +234,7 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
} }
if len(arg) == 1 { if len(arg) == 1 {
// 用户列表 // 用户列表
m.Cmdy(m.Prefix(GROUP), USER, arg[0]) m.Cmdy(m.Prefix(GROUP), USERS, arg[0])
return return
} }
// 用户通知 // 用户通知
@ -328,7 +328,7 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
m.Cmdy(SEND, m.Conf(APP, "meta.duty"), arg) m.Cmdy(SEND, m.Conf(APP, "meta.duty"), arg)
}}, }},
RAND: {Name: "rand", Help: "随机", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { RAND: {Name: "rand", Help: "随机", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
msg := m.Cmd(GROUP, "user", m.Option(OPEN_CHAT_ID)) msg := m.Cmd(GROUP, USERS, m.Option(OPEN_CHAT_ID))
list := msg.Appendv("name") list := msg.Appendv("name")
if strings.Contains(m.Option("content"), "誰") { if strings.Contains(m.Option("content"), "誰") {
m.Echo(strings.Replace(m.Option("content"), "誰", list[rand.Intn(len(list))], 1)) m.Echo(strings.Replace(m.Option("content"), "誰", list[rand.Intn(len(list))], 1))
@ -531,7 +531,7 @@ var Index = &ice.Context{Name: "lark", Help: "机器人",
m.Render("redirect", m.Conf(web.SHARE, "meta.domain")) m.Render("redirect", m.Conf(web.SHARE, "meta.domain"))
m.Option(aaa.USERNAME, user) m.Option(aaa.USERNAME, user)
msg := m.Cmd(m.Prefix(USER), user) msg := m.Cmd(USERS, user)
m.Cmd(aaa.USER, mdb.MODIFY, aaa.USERZONE, LARK, aaa.USERNICK, msg.Append("name"), m.Cmd(aaa.USER, mdb.MODIFY, aaa.USERZONE, LARK, aaa.USERNICK, msg.Append("name"),
"mobile", msg.Append("mobile"), "avatar_url", msg.Append("avatar_url"), "mobile", msg.Append("mobile"), "avatar_url", msg.Append("avatar_url"),
"gender", kit.Select("女", "男", msg.Append("gender") == "1"), "gender", kit.Select("女", "男", msg.Append("gender") == "1"),