From 1f0a904767af0819fb8241265fd720b0453ea381 Mon Sep 17 00:00:00 2001 From: shy Date: Sat, 13 Jan 2024 15:32:06 +0800 Subject: [PATCH] opt island --- base/web/basic.go | 6 ++++-- base/web/option.go | 4 ++-- base/web/space.go | 20 +++++++++++--------- base/web/token.go | 2 +- core/chat/action.go | 8 ++------ misc/git/repos.go | 9 +++++++-- misc/git/service.go | 8 ++++++-- misc/git/status.go | 2 +- render.go | 4 +++- 9 files changed, 37 insertions(+), 26 deletions(-) diff --git a/base/web/basic.go b/base/web/basic.go index 303218e3..259763ce 100644 --- a/base/web/basic.go +++ b/base/web/basic.go @@ -33,13 +33,15 @@ func BasicSess(m *ice.Message) { m.Options(ice.MSG_SESSID, kit.Select(m.Option(ice.MSG_SESSID), m.Option(CookieName(m.Option(ice.MSG_USERWEB))))) aaa.SessCheck(m, m.Option(ice.MSG_SESSID)) } -func BasicCheck(m *ice.Message, realm string) bool { +func BasicCheck(m *ice.Message, realm string, check ...func(*ice.Message) bool) bool { switch ls := kit.Split(m.R.Header.Get(html.Authorization)); kit.Select("", ls, 0) { case html.Basic: if buf, err := base64.StdEncoding.DecodeString(kit.Select("", ls, 1)); !m.Warn(err) { if ls := strings.SplitN(string(buf), ":", 2); !m.Warn(len(ls) < 2 || ls[1] == "", ice.ErrNotValid, html.Basic) { if msg := m.Cmd(TOKEN, ls[1]); !m.Warn(msg.Time() > msg.Append(mdb.TIME), ice.ErrNotValid) { - return true + if len(check) == 0 || check[0](msg) { + return true + } } } } diff --git a/base/web/option.go b/base/web/option.go index 9ca797fe..efdf4256 100644 --- a/base/web/option.go +++ b/base/web/option.go @@ -140,9 +140,9 @@ func ToastSuccess(m *ice.Message, arg ...ice.Any) { func ToastFailure(m *ice.Message, arg ...ice.Any) { Toast(m, toastContent(m, ice.FAILURE, arg...), "", m.OptionDefault(ice.TOAST_DURATION, "3s")).Sleep(m.OptionDefault(ice.TOAST_DURATION, "3s")) } -func ToastProcess(m *ice.Message, arg ...ice.Any) func() { +func ToastProcess(m *ice.Message, arg ...ice.Any) func(...ice.Any) { Toast(m, toastContent(m, ice.PROCESS, arg...), "", "30s") - return func() { Toast(m, toastContent(m, ice.SUCCESS, arg...), "", "1s") } + return func(arg ...ice.Any) { Toast(m, toastContent(m, ice.SUCCESS, arg...), "", "1s") } } func GoToast(m *ice.Message, title string, cb func(toast func(name string, count, total int)) []string) *ice.Message { _total := 0 diff --git a/base/web/space.go b/base/web/space.go index a93c2e3d..665ed1f3 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -69,23 +69,22 @@ func _space_fork(m *ice.Message) { addr := kit.Select(m.R.RemoteAddr, m.R.Header.Get(ice.MSG_USERADDR)) text := strings.ReplaceAll(kit.Select(addr, m.Option(mdb.TEXT)), "%2F", nfs.PS) name := kit.ReplaceAll(kit.Select(addr, m.Option(mdb.NAME)), "[", "_", "]", "_", nfs.DF, "_", nfs.PT, "_") - if kit.IsIn(m.Option(mdb.TYPE), WORKER) && IsLocalHost(m) || m.Option(TOKEN) != "" && m.Cmdv(TOKEN, m.Option(TOKEN), mdb.TIME) > m.Time() { + if kit.IsIn(m.Option(mdb.TYPE), WORKER) && IsLocalHost(m) { } else if kit.IsIn(m.Option(mdb.TYPE), PORTAL, aaa.LOGIN) && len(name) == 32 && kit.IsIn(mdb.HashSelects(m.Spawn(), name).Append(aaa.IP), "", m.Option(ice.MSG_USERIP)) { } else { name, text = kit.Hashs(name), kit.Select(addr, m.Option(mdb.NAME), m.Option(mdb.TEXT)) } - - if kit.IsIn(m.Option(mdb.TYPE), WORKER, PORTAL) { + if m.Option(ice.MSG_USERNAME, ""); kit.IsIn(m.Option(mdb.TYPE), WORKER, PORTAL) { if tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) { aaa.SessAuth(m, kit.Dict(m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME, ice.Info.Username)).AppendSimple())) } } else if m.Option(TOKEN) != "" { - msg := m.Cmd(TOKEN, m.Option(TOKEN)) - aaa.SessAuth(m, kit.Dict(m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME, msg.Append(mdb.NAME))).AppendSimple())) - } else { - m.Option(ice.MSG_USERNAME, "") + if msg := m.Cmd(TOKEN, m.Option(TOKEN)); msg.Append(mdb.TIME) > m.Time() && msg.Append(mdb.TYPE) == SERVER { + aaa.SessAuth(m, kit.Dict(m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME, msg.Append(mdb.NAME))).AppendSimple())) + name = kit.Select(name, msg.Append(mdb.TEXT)) + } } if m.Option(mdb.TYPE) == WORKER { if p := nfs.USR_LOCAL_WORK + m.Option(mdb.NAME); nfs.Exists(m, p) { @@ -115,10 +114,11 @@ func _space_fork(m *ice.Message) { m.Go(func() { m.Cmd(SPACE, name, cli.PWD, name, kit.Dict(nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions(), AGENT, "Go-http-client", cli.SYSTEM, runtime.GOOS)) m.Cmd(SPACE).Table(func(value ice.Maps) { - if kit.IsIn(value[mdb.TYPE], WORKER, SERVER) { + if kit.IsIn(value[mdb.TYPE], WORKER, SERVER) && value[mdb.NAME] != name { m.Cmd(SPACE, value[mdb.NAME], gdb.EVENT, gdb.HAPPEN, gdb.EVENT, OPS_SERVER_OPEN, args, kit.Dict(ice.MSG_USERROLE, aaa.TECH)) } }) + m.Cmd(gdb.EVENT, gdb.HAPPEN, gdb.EVENT, OPS_SERVER_OPEN, args, kit.Dict(ice.MSG_USERROLE, aaa.TECH)) }) } _space_handle(m, false, name, c) @@ -226,7 +226,9 @@ func _space_send(m *ice.Message, name string, arg ...string) (h string) { } } }) { - m.Warn(kit.IndexOf([]string{ice.OPS, ice.DEV}, target[0]) == -1, ice.ErrNotFound, SPACE, name) + kit.If(m.IsDebug(), func() { + m.Warn(kit.IndexOf([]string{ice.OPS, ice.DEV}, target[0]) == -1, ice.ErrNotFound, SPACE, name) + }) } else if withecho { m.Warn(!wait(), "time out") } diff --git a/base/web/token.go b/base/web/token.go index 3ee664af..cb8a7500 100644 --- a/base/web/token.go +++ b/base/web/token.go @@ -34,7 +34,7 @@ func init() { return } msg := m.Cmd("", mdb.CREATE, mdb.TYPE, m.Option(mdb.TYPE), mdb.NAME, m.Option(ice.MSG_USERNAME), mdb.TEXT, m.Option(tcp.HOST)) - m.ProcessReplace(kit.MergeURL2(m.Option(tcp.HOST), kit.MergeURL(C(m.PrefixKey()), ctx.ACTION, SET), + m.ProcessReplace(kit.MergeURL2(m.Option(tcp.HOST), C(m.PrefixKey()), ctx.ACTION, SET, TOKEN, strings.Replace(UserHost(m), "://", kit.Format("://%s:%s@", m.Option(ice.MSG_USERNAME), msg.Result()), 1))) }}, SET: {Hand: func(m *ice.Message, arg ...string) { diff --git a/core/chat/action.go b/core/chat/action.go index e8cfd205..bb5b4c20 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -21,9 +21,8 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) { }).Length() == 0, ice.ErrNotRight, index, arg) { return } - kit.If(!ctx.PodCmd(m, index, arg), func() { - m.Cmdy(index, arg) - }) + kit.If(index == "web.chat.island.portal", func() { m.Option(ice.MSG_USERROLE, aaa.VOID) }) + kit.If(!ctx.PodCmd(m, index, arg), func() { m.Cmdy(index, arg) }) } func _action_auth(m *ice.Message, share string) *ice.Message { msg := m.Cmd(web.SHARE, share) @@ -82,9 +81,6 @@ func init() { ctx.OptionFromConfig(m, MENUS) _action_list(m, arg[0], arg[1]) } else { - if arg[2] == "web.chat.island.portal" { - m.Option(ice.MSG_USERROLE, aaa.VOID) - } _action_exec(m, arg[0], arg[1], arg[2], arg[3:]...) } }}, diff --git a/misc/git/repos.go b/misc/git/repos.go index 11d6b253..34afc08d 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -126,7 +126,7 @@ func _repos_each_origin(m *ice.Message, title string, cb func(*git.Repository, s _repos_each(m, title, func(repos *git.Repository, value ice.Maps) error { remote := _repos_remote(m, _repos_origin(m, repos)) auth := _repos_auth(m, remote) - m.Info("%s: %s %s", m.ActionKey(), auth.Username, remote) + m.Info("%s: %s %s %v", m.ActionKey(), auth.Username, remote, auth) return cb(repos, remote, auth, value) }) } @@ -543,7 +543,12 @@ func init() { PUSH: {Help: "上传", Hand: func(m *ice.Message, arg ...string) { _repos_each_origin(m, "", func(repos *git.Repository, remoteURL string, auth *http.BasicAuth, value ice.Maps) error { defer _git_cmd(m.Spawn(kit.Dict(cli.CMD_DIR, value[nfs.PATH])), PUSH, "--tags") - return repos.Push(&git.PushOptions{RemoteURL: remoteURL, Auth: auth, FollowTags: true}) + err := repos.Push(&git.PushOptions{RemoteURL: remoteURL, Auth: auth, FollowTags: true}) + switch kit.Format(err) { + case "empty input": + return nil + } + return err }) }}, STATUS: {Help: "状态", Icon: "bi bi-app-indicator", Hand: func(m *ice.Message, arg ...string) { diff --git a/misc/git/service.go b/misc/git/service.go index 05922e70..f8a8b26d 100644 --- a/misc/git/service.go +++ b/misc/git/service.go @@ -124,14 +124,18 @@ func init() { } switch repos, service := _service_param(m, arg...); service { case RECEIVE_PACK: - if !web.BasicCheck(m, "git server") { + if !web.BasicCheck(m, "git server", func(msg *ice.Message) bool { + return msg.Append(mdb.TYPE) == "web.code.git.status" || (msg.Append(mdb.TYPE) == web.SERVER && msg.Append(mdb.TEXT) == path.Base(repos)) + }) { return } else if !nfs.Exists(m, repos) { m.Cmd(Prefix(SERVICE), mdb.CREATE, mdb.NAME, path.Base(repos)) } case UPLOAD_PACK: if mdb.Conf(m, Prefix(SERVICE), kit.Keym(aaa.AUTH)) == aaa.PRIVATE { - if !web.BasicCheck(m, "git server") { + if !web.BasicCheck(m, "git server", func(msg *ice.Message) bool { + return msg.Append(mdb.TYPE) == "web.code.git.status" || msg.Append(mdb.TYPE) == web.SERVER && msg.Append(mdb.TEXT) == path.Base(repos) + }) { return } } diff --git a/misc/git/status.go b/misc/git/status.go index 06d7f35b..64a9f706 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -44,7 +44,7 @@ func init() { }}, OAUTH: {Name: "oauth remote", Help: "授权", Icon: "bi bi-person-check", Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(kit.MergeURL2(kit.Select(ice.Info.Make.Domain, m.Cmdx(REPOS, REMOTE_URL), m.Option(REMOTE)), - web.ChatCmdPath(m, web.TOKEN, "gen"), mdb.TYPE, web.CODE_GIT_STATUS, tcp.HOST, web.UserHost(m))) + web.C(web.TOKEN), ctx.ACTION, "gen", mdb.TYPE, web.CODE_GIT_STATUS, tcp.HOST, web.UserHost(m))) }}, CONFIGS: {Name: "configs email* username*", Help: "配置", Hand: func(m *ice.Message, arg ...string) { m.Cmd(nfs.DEFS, kit.HomePath(_GITCONFIG), kit.Format(nfs.Template(m, "gitconfig"), m.Option(aaa.USERNAME), m.Option(aaa.EMAIL))) diff --git a/render.go b/render.go index c0260465..60291fe6 100644 --- a/render.go +++ b/render.go @@ -114,7 +114,9 @@ func (m *Message) RenderJson(arg ...Any) *Message { func (m *Message) RenderVoid(arg ...Any) *Message { return m.Render(RENDER_VOID, arg...) } - +func (m *Message) IsDebug() bool { + return m.Option(MSG_DEBUG) == TRUE +} func (m *Message) IsCliUA() bool { return m.Option(MSG_USERUA) == "" || !strings.HasPrefix(m.Option(MSG_USERUA), "Mozilla") }