diff --git a/base/aaa/sess.go b/base/aaa/sess.go index 4fbae8bc..c128b59f 100644 --- a/base/aaa/sess.go +++ b/base/aaa/sess.go @@ -62,9 +62,9 @@ func SessAuth(m *ice.Message, value ice.Any, arg ...string) *ice.Message { kit.If(language == "", func() { language = ice.Info.Lang }) language = strings.ReplaceAll(strings.ToLower(kit.Select("", kit.Split(language, " ."), 0)), "_", "-") return m.Auth( - USERNICK, m.Option(ice.MSG_USERNICK, kit.Format(kit.Value(value, USERNICK))), - USERNAME, m.Option(ice.MSG_USERNAME, kit.Format(kit.Value(value, USERNAME))), USERROLE, m.Option(ice.MSG_USERROLE, kit.Format(kit.Value(value, USERROLE))), + USERNAME, m.Option(ice.MSG_USERNAME, kit.Format(kit.Value(value, USERNAME))), + USERNICK, m.Option(ice.MSG_USERNICK, kit.Format(kit.Value(value, USERNICK))), LANGUAGE, m.Option(ice.MSG_LANGUAGE, language), arg, logs.FileLineMeta(kit.Select(logs.FileLine(-1), m.Option("aaa.checker"))), ) diff --git a/base/ctx/config.go b/base/ctx/config.go index d2f1b38e..88c195c9 100644 --- a/base/ctx/config.go +++ b/base/ctx/config.go @@ -42,14 +42,7 @@ func _config_only(v ice.Any, arg ...string) bool { for k, v := range v { if v, ok := v.(ice.Map); ok && len(v) == 0 { continue - } else { - for k := range v { - if kit.IsIn(k, mdb.IMPORTANT) && len(v) > 1 { - return false - } - } - } - if kit.IndexOf(arg, k) == -1 { + } else if kit.IndexOf(arg, k) == -1 { return false } } @@ -60,7 +53,7 @@ func _config_only(v ice.Any, arg ...string) bool { func _config_save(m *ice.Message, name string, arg ...string) { data, msg := ice.Map{}, m.Spawn(m.Source()) for _, k := range arg { - if v := mdb.Confv(msg, k); _config_only(v, mdb.META) { + if v := mdb.Confv(msg, k); _config_only(v, mdb.META) && _config_only(kit.Value(v, mdb.META), mdb.IMPORTANT, mdb.SHORT, mdb.FIELD, mdb.FIELDS, mdb.ACTION, mdb.SORT, mdb.TOOLS) { continue } else { data[k] = v diff --git a/base/tcp/host.go b/base/tcp/host.go index 9150b62a..24f0c05b 100644 --- a/base/tcp/host.go +++ b/base/tcp/host.go @@ -12,6 +12,12 @@ import ( kit "shylinux.com/x/toolkits" ) +func _host_publish(m *ice.Message) string { + if p := mdb.Config(m, DOMAIN); p != "" { + return p + } + return m.Cmdv(HOST, mdb.Config(m, ice.MAIN), aaa.IP) +} func _host_list(m *ice.Message, name string) { if ifs, e := net.Interfaces(); m.Assert(e) { for _, v := range ifs { @@ -33,6 +39,7 @@ func _host_list(m *ice.Message, name string) { m.Push(mdb.INDEX, -1).Push(mdb.NAME, LOCALHOST).Push(aaa.IP, "127.0.0.1").Push("mask", "255.0.0.0").Push("hard", "") } m.SortInt(mdb.INDEX) + m.StatusTimeCount(mdb.ConfigSimple(m, ice.MAIN, DOMAIN)) } const ( @@ -41,12 +48,13 @@ const ( ISLOCAL = "islocal" PUBLISH = "publish" GATEWAY = "gateway" + DOMAIN = "domain" ) const HOST = "host" func init() { Index.MergeCommands(ice.Commands{ - HOST: {Name: "host name auto", Help: "主机", Actions: ice.MergeActions(ice.Actions{ + HOST: {Name: "host name auto domain", Help: "主机", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", func(value ice.Maps) { m.Cmd("", aaa.WHITE, LOCALHOST, value[aaa.IP]) }) }}, @@ -71,15 +79,19 @@ func init() { }}, PUBLISH: {Hand: func(m *ice.Message, arg ...string) { if strings.Contains(arg[0], LOCALHOST) { - arg[0] = strings.Replace(arg[0], LOCALHOST, m.Cmdv(HOST, mdb.Config(m, "publish"), aaa.IP), 1) + arg[0] = strings.Replace(arg[0], LOCALHOST, _host_publish(m), 1) } else if strings.Contains(arg[0], "127.0.0.1") { - arg[0] = strings.Replace(arg[0], "127.0.0.1", m.Cmdv(HOST, mdb.Config(m, "publish"), aaa.IP), 1) + arg[0] = strings.Replace(arg[0], "127.0.0.1", _host_publish(m), 1) } m.Echo(arg[0]) }}, GATEWAY: {Hand: func(m *ice.Message, arg ...string) { m.Push(aaa.IP, kit.Keys(kit.Slice(strings.Split(m.Cmdv(HOST, aaa.IP), nfs.PT), 0, 3), "1")) }}, + DOMAIN: {Name: "domain ip", Hand: func(m *ice.Message, arg ...string) { + kit.If(m.Option(aaa.IP), func(p string) { mdb.Config(m, DOMAIN, p) }) + m.Echo(mdb.Config(m, DOMAIN)) + }}, }, mdb.HashAction(mdb.SHORT, mdb.TEXT), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { _host_list(m, kit.Select("", arg, 0)) }}, diff --git a/base/web/space.go b/base/web/space.go index 61bf4844..93a559f9 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -29,8 +29,7 @@ func _space_qrcode(m *ice.Message, dev string) { func _space_dial(m *ice.Message, dev, name string, arg ...string) { u := kit.ParseURL(kit.MergeURL2(strings.Replace(m.Cmdv(SPIDE, dev, CLIENT_ORIGIN), HTTP, "ws", 1), PP(SPACE), mdb.TYPE, ice.Info.NodeType, mdb.NAME, name, nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions(), arg)) - args := kit.SimpleKV("type,name,host,port", u.Scheme, dev, u.Hostname(), - kit.Select(kit.Select("443", "80", u.Scheme == "ws"), u.Port())) + args := kit.SimpleKV("type,name,host,port", u.Scheme, dev, u.Hostname(), kit.Select(kit.Select("443", "80", u.Scheme == "ws"), u.Port())) gdb.Go(m, func() { once := sync.Once{} redial := kit.Dict(mdb.Configv(m, REDIAL)) @@ -294,6 +293,11 @@ func init() { nfs.PS: {Hand: func(m *ice.Message, arg ...string) { _space_fork(m) }}, }, mdb.HashAction(mdb.LIMIT, 1000, mdb.LEAST, 500, mdb.SHORT, mdb.NAME, mdb.FIELD, "time,type,name,text,module,version,ip,usernick,username,userrole", ctx.ACTION, OPEN, REDIAL, kit.Dict("a", 3000, "b", 1000, "c", 1000)), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) < 2 { + if len(arg) == 1 && strings.Contains(arg[0], nfs.PT) { + ls := kit.Split(arg[0], nfs.PT) + m.Cmdy(SPACE, ls[0], SPACE, kit.Keys(ls[1:])) + return + } defer m.StatusTimeCount(kit.Dict(ice.MAIN, mdb.Config(m, ice.MAIN))) m.Option(ice.MSG_USERWEB, tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB))) kit.If(len(arg) > 0 && arg[0] != "", func() { m.OptionFields(ice.MSG_DETAIL) }) @@ -311,7 +315,7 @@ func init() { } m.PushButton(kit.Select(OPEN, LOGIN, value[mdb.TYPE] == LOGIN), mdb.REMOVE) }) - m.Sort("type,name,text", kit.Simple(WEIXIN, PORTAL, WORKER, SERVER)) + m.Sort("", kit.Simple(WEIXIN, PORTAL, WORKER, SERVER)) } else { _space_send(m, arg[0], kit.Simple(kit.Split(arg[1]), arg[2:])...) } diff --git a/conf.go b/conf.go index 5efac02a..63e1b158 100644 --- a/conf.go +++ b/conf.go @@ -301,6 +301,7 @@ const ( // CTX CTX_CLOSE = "close" CTX_INIT = "_init" + CTX_OPEN = "_open" CTX_EXIT = "_exit" CTX_ICONS = "_icons" CTX_TRANS = "_trans" diff --git a/core/chat/grant.go b/core/chat/grant.go index ea12d695..b1281808 100644 --- a/core/chat/grant.go +++ b/core/chat/grant.go @@ -7,6 +7,7 @@ import ( "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/gdb" + "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" @@ -21,7 +22,8 @@ func init() { GRANT: {Name: "grant space auto", Help: "授权", Actions: ice.MergeActions(ice.Actions{ web.SPACE_LOGIN: {Hand: func(m *ice.Message, arg ...string) { m.GoSleep30ms(func() { - link := tcp.PublishLocalhost(m, m.MergePodCmd("", "", web.SPACE, m.Option(mdb.NAME))) + p := m.Cmdx(web.SPACE, web.DOMAIN) + link := tcp.PublishLocalhost(m, m.Options(ice.MSG_USERWEB, p).MergePodCmd("", "", web.SPACE, kit.Keys(web.ParseLink(m, p)[ice.POD], m.Option(mdb.NAME)), log.DEBUG, m.Option(ice.MSG_DEBUG))) m.Cmd(web.SPACE, m.Option(mdb.NAME), cli.PWD, m.Option(mdb.NAME), link, m.Cmdx(cli.QRCODE, link)) }) }}, @@ -41,8 +43,15 @@ func init() { } else { kit.If(m.Option(ice.MSG_SESSID) == "", func() { web.RenderCookie(m, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) }) m.Option(ice.MSG_USERUA, msg.Append(ice.MSG_USERUA)) - m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) - m.ProcessLocation(web.MergeURL2(m, msg.Append(mdb.TEXT))) + if ls := kit.Split(m.Option(web.SPACE), nfs.PT); len(ls) > 1 { + space := kit.Keys(kit.Slice(ls, 0, -1)) + m.Option(ice.MSG_SESSID, m.Cmdx(web.SPACE, space, aaa.SESS, mdb.CREATE, m.Option(ice.MSG_USERNAME))) + m.ProcessLocation(web.MergeURL2(m, msg.Append(mdb.TEXT), ice.POD, space)) + } else { + aaa.SessCreate(m, m.Option(ice.MSG_USERNAME)) + m.ProcessLocation(web.MergeURL2(m, msg.Append(mdb.TEXT))) + } + m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, m.Option(ice.MSG_SESSID)) } gdb.Event(m, web.SPACE_GRANT, m.OptionSimple(web.SPACE)) } diff --git a/core/chat/macos/applications.go b/core/chat/macos/applications.go index 06fb914a..cec316b3 100644 --- a/core/chat/macos/applications.go +++ b/core/chat/macos/applications.go @@ -2,10 +2,8 @@ package macos import ( "path" - "strings" ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" @@ -19,21 +17,7 @@ const APPLICATIONS = "applications" func init() { Index.MergeCommands(ice.Commands{ APPLICATIONS: {Help: "应用", Actions: ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - FinderAppend(m, APPLICATIONS, m.PrefixKey()) - defer Notify(m, "Infomation.png", cli.RUNTIME, "系统启动成功", ctx.INDEX, cli.RUNTIME) - m.Travel(func(p *ice.Context, c *ice.Context, key string, cmd *ice.Command) { - kit.If(cmd.Icon, func() { - if !kit.HasPrefix(cmd.Icon, nfs.PS, web.HTTP) { - nfs.Exists(m, ice.USR_ICONS+cmd.Icon, func(p string) { cmd.Icon = p }) - nfs.Exists(m, path.Join(path.Dir(strings.TrimPrefix(ctx.GetCmdFile(m, m.PrefixKey()), kit.Path(""))), cmd.Icon), func(p string) { - cmd.Icon = p - }) - } - AppInstall(m, cmd.Icon, m.PrefixKey()) - }) - }) - }}, + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { FinderAppend(m, APPLICATIONS, m.PrefixKey()) }}, code.INSTALL: {Hand: func(m *ice.Message, arg ...string) { AppInstall(m, arg[0], arg[1]) }}, mdb.CREATE: {Name: "create space index args name icon"}, }, PodCmdAction(), CmdHashAction("space,index,args"), mdb.ClearOnExitHashAction())}, @@ -43,7 +27,7 @@ func install(m *ice.Message, cmd, icon, index string, arg ...string) { if icon == "" { return } - nfs.Exists(m, ice.USR_ICONS+icon, func(p string) { icon = p }) + kit.If(!kit.HasPrefix(icon, nfs.PS, web.HTTP) && !nfs.Exists(m, icon), func() { icon = ice.USR_ICONS + icon }) name := kit.TrimExt(path.Base(icon), nfs.PNG, nfs.JPG, nfs.JPEG) m.Cmd(Prefix(cmd), mdb.CREATE, mdb.NAME, name, mdb.ICON, icon, ctx.INDEX, index, arg) } diff --git a/core/chat/macos/desktop.go b/core/chat/macos/desktop.go index a36ddfb8..ad69bf06 100644 --- a/core/chat/macos/desktop.go +++ b/core/chat/macos/desktop.go @@ -1,9 +1,15 @@ package macos import ( + "path" + "strings" + ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" + "shylinux.com/x/icebergs/base/cli" + "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) @@ -12,15 +18,32 @@ const DESKTOP = "desktop" func init() { Index.MergeCommands(ice.Commands{ + ice.CTX_OPEN: {Hand: func(m *ice.Message, arg ...string) { + if m.Cmd(DESKTOP).Length() == 0 { + DeskAppend(m, "Books.png", web.WIKI_WORD) + DeskAppend(m, "Photos.png", web.WIKI_FEEL) + DeskAppend(m, "Grapher.png", web.WIKI_DRAW) + DeskAppend(m, "Calendar.png", web.TEAM_PLAN) + } + if m.Cmd(DOCK).Length() == 0 { + DockAppend(m, "Finder.png", Prefix(FINDER)) + DockAppend(m, "Safari.png", web.CHAT_IFRAME) + DockAppend(m, "Terminal.png", web.CODE_XTERM) + DockAppend(m, "go.png", web.CODE_COMPILE) + DockAppend(m, "git.png", web.CODE_GIT_STATUS) + DockAppend(m, "vimer.png", web.CODE_VIMER) + } + m.Travel(func(p *ice.Context, c *ice.Context, key string, cmd *ice.Command) { + kit.If(cmd.Icon, func() { + if !kit.HasPrefix(cmd.Icon, nfs.PS, web.HTTP) { + nfs.Exists(m, path.Join(path.Dir(strings.TrimPrefix(ctx.GetCmdFile(m, m.PrefixKey()), kit.Path(""))), cmd.Icon), func(p string) { cmd.Icon = p }) + } + AppInstall(m, cmd.Icon, m.PrefixKey()) + }) + }) + Notify(m, "Infomation.png", cli.RUNTIME, "系统启动成功", ctx.INDEX, cli.RUNTIME) + }}, DESKTOP: {Help: "应用桌面", Actions: ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - if m.Cmd(DESKTOP).Length() == 0 { - DeskAppend(m, "Books.png", web.WIKI_WORD) - DeskAppend(m, "Photos.png", web.WIKI_FEEL) - DeskAppend(m, "Grapher.png", web.WIKI_DRAW) - DeskAppend(m, "Calendar.png", web.TEAM_PLAN) - } - }}, web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.WORKER, web.SERVER), func() { m.PushButton(kit.Dict(m.CommandKey(), "桌面")) }) }}, diff --git a/core/chat/macos/dock.go b/core/chat/macos/dock.go index 6126abfa..57a022b2 100644 --- a/core/chat/macos/dock.go +++ b/core/chat/macos/dock.go @@ -4,25 +4,13 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/web" ) const DOCK = "dock" func init() { Index.MergeCommands(ice.Commands{ - DOCK: {Help: "工具栏", Actions: ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - if m.Cmd(DOCK).Length() == 0 { - DockAppend(m, "Finder.png", Prefix(FINDER)) - DockAppend(m, "Safari.png", web.CHAT_IFRAME) - DockAppend(m, "Terminal.png", web.CODE_XTERM) - DockAppend(m, "go.png", web.CODE_COMPILE) - DockAppend(m, "git.png", web.CODE_GIT_STATUS) - DockAppend(m, "vimer.png", web.CODE_VIMER) - } - }}, - }, aaa.RoleAction(), CmdHashAction(), mdb.ExportHashAction())}, + DOCK: {Help: "工具栏", Actions: ice.MergeActions(ice.Actions{}, aaa.RoleAction(), CmdHashAction(), mdb.ExportHashAction())}, }) } diff --git a/init.go b/init.go index d07a933c..954d1bb0 100644 --- a/init.go +++ b/init.go @@ -52,11 +52,17 @@ var Index = &Context{Name: ICE, Help: "冰山模块", Commands: Commands{ kit.If(p != nil, func() { c._command(m.Spawn(c), c.Commands[CTX_INIT], CTX_INIT, arg...) }) }) }}, + CTX_OPEN: {Hand: func(m *Message, arg ...string) { + m.Travel(func(p *Context, c *Context) { + kit.If(p != nil, func() { c._command(m.Spawn(c), c.Commands[CTX_OPEN], CTX_OPEN, arg...) }) + }) + }}, INIT: {Hand: func(m *Message, arg ...string) { m.Cmd(kit.Keys(MDB, CTX_INIT)) m.Cmd(CTX_INIT) m.Cmd(SOURCE, ETC_INIT_SHY) loadImportant(m) + m.Cmd(CTX_OPEN) }}, QUIT: {Hand: func(m *Message, arg ...string) { m.GoSleep300ms(func() { os.Exit(kit.Int(kit.Select("0", arg, 0))) }) diff --git a/misc/git/repos.go b/misc/git/repos.go index bb45da1a..c1ffd0b4 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -481,8 +481,8 @@ func init() { switch arg[0] { case ORIGIN: m.Push(arg[0], "https://shylinux.com/x/icons") - m.Push(arg[0], "https://shylinux.com/x/volcanos") - m.Push(arg[0], "https://shylinux.com/x/icebergs") + m.Push(arg[0], "https://shylinux.com/x/geoarea") + m.Push(arg[0], "https://shylinux.com/x/node_modules") } } switch arg[0] { @@ -504,14 +504,20 @@ func init() { }}, CLONE: {Name: "clone origin* branch name path", Help: "克隆", Hand: func(m *ice.Message, arg ...string) { m.OptionDefault(mdb.NAME, path.Base(m.Option(ORIGIN))) - m.OptionDefault(nfs.PATH, path.Join(nfs.USR, m.Option(mdb.NAME))) + m.OptionDefault(nfs.PATH, path.Join(nfs.USR, m.Option(mdb.NAME))+nfs.PS) defer m.Cmdy(nfs.DIR, m.Option(nfs.PATH)) if nfs.Exists(m, path.Join(m.Option(nfs.PATH), ".git")) { return } defer web.ToastProcess(m)() - if _, err := git.PlainClone(m.Option(nfs.PATH), false, &git.CloneOptions{URL: m.Option(ORIGIN), Auth: _repos_auth(m, m.Option(ORIGIN))}); m.Warn(err) { - _repos_insert(m, m.Option(nfs.PATH)) + for _, dev := range []string{ice.DEV, ice.SHY} { + p := m.Option(ORIGIN) + kit.If(!kit.HasPrefix(p, nfs.PS, web.HTTP), func() { p = m.Cmdv("web.spide", dev, web.CLIENT_ORIGIN) + "/x/" + p }) + m.Info("clone %s", p) + if _, err := git.PlainClone(m.Option(nfs.PATH), false, &git.CloneOptions{URL: p, Auth: _repos_auth(m, p)}); !m.Warn(err) { + _repos_insert(m, m.Option(nfs.PATH)) + return + } } }}, PULL: {Help: "下载", Hand: func(m *ice.Message, arg ...string) { @@ -541,7 +547,6 @@ func init() { kit.If(_last > last, func() { last = _last }) } } - m.Info("%s: %s", m.ActionKey(), value[REPOS]) return _repos_status(m, value[REPOS], repos) }) remote := ice.Info.Make.Remote