diff --git a/base/web/dream.go b/base/web/dream.go index 49d77767..e907b899 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -29,6 +29,7 @@ func _dream_list(m *ice.Message, simple bool) *ice.Message { return } if space, ok := list[value[mdb.NAME]]; ok { + value[mdb.ICONS] = space[mdb.ICONS] m.Push("", value, kit.Slice(head, 0, -1)) if m.IsCliUA() || simple { m.Push(mdb.TYPE, space[mdb.TYPE]).Push(cli.STATUS, cli.START) @@ -95,15 +96,14 @@ func _dream_list_icon(m *ice.Message) { }) } func _dream_list_more(m *ice.Message, simple bool) *ice.Message { - list := m.CmdMap(SPIDE, CLIENT_NAME) + // list := m.CmdMap(SPIDE, CLIENT_NAME) m.Cmds(SPACE).Table(func(value ice.Maps) { - value[mdb.ICONS] = nfs.USR_ICONS_VOLCANOS + // value[mdb.ICONS] = nfs.USR_ICONS_VOLCANOS value[nfs.REPOS] = "https://" + value[nfs.MODULE] value[aaa.ACCESS] = kit.Select("", value[aaa.USERROLE], value[aaa.USERROLE] != aaa.VOID) value[mdb.STATUS] = cli.START switch value[mdb.TYPE] { case SERVER: - value[mdb.ICONS] = m.FileURI(nfs.USR_ICONS_ICEBERGS) value[mdb.TEXT] = kit.JoinLine(value[nfs.MODULE], value[mdb.TEXT]) if simple { defer m.PushButton("") @@ -112,9 +112,6 @@ func _dream_list_more(m *ice.Message, simple bool) *ice.Message { defer m.PushButton(strings.Join(msg.Appendv(ctx.ACTION), "")) } case ORIGIN: - if spide, ok := list[value[mdb.NAME]]; ok { - value[mdb.ICONS] = kit.Select(value[mdb.ICONS], spide[mdb.ICONS]) - } value[mdb.TEXT] = kit.JoinLine(value[nfs.MODULE], value[mdb.TEXT]) if simple { defer m.PushButton("") @@ -123,7 +120,6 @@ func _dream_list_more(m *ice.Message, simple bool) *ice.Message { defer m.PushButton(strings.Join(msg.Appendv(ctx.ACTION), "")) } case aaa.LOGIN: - value[mdb.ICONS] = kit.Select(value[mdb.ICONS], agentIcons[value[AGENT]]) value[mdb.TEXT] = kit.JoinWord(value[AGENT], value[cli.SYSTEM], value[aaa.IP]) defer m.PushButton(GRANT) default: @@ -422,7 +418,11 @@ func init() { if m.Option(mdb.TYPE) == ORIGIN && m.IsLocalhost() { m.ProcessOpen(SpideOrigin(m, m.Option(mdb.NAME))) } else { - m.ProcessOpen(S(m.Option(mdb.NAME))) + if p := ProxyDomain(m, m.Option(mdb.NAME)); p != "" { + m.ProcessOpen(p) + } else { + m.ProcessOpen(S(m.Option(mdb.NAME))) + } } }}, GRANT: {Hand: func(m *ice.Message, arg ...string) { diff --git a/base/web/serve.go b/base/web/serve.go index 1a8f2986..ca250682 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -297,7 +297,7 @@ func ParseUA(m *ice.Message) (res []string) { res = append(res, cli.DAEMON, m.Option(ice.MSG_DAEMON)) for _, p := range html.AgentList { if strings.Contains(m.Option(ice.MSG_USERUA), p) { - res = append(res, mdb.ICONS, agentIcons[p], AGENT, p) + res = append(res, mdb.ICONS, kit.Select(agentIcons[p], m.Option(mdb.ICONS)), AGENT, p) break } } @@ -314,6 +314,9 @@ func ProxyDomain(m *ice.Message, name string) string { m.Cmd(nfs.CAT, path.Join(PROXY_PATH, "conf/portal", name, "server.conf"), func(ls []string) { kit.If(ls[0] == "server_name", func() { domain = ls[1] }) }) + if domain == "" { + return "" + } return "https://" + domain } func Script(m *ice.Message, str string, arg ...ice.Any) string { diff --git a/base/web/space.go b/base/web/space.go index 0d09ce02..89bc8831 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -29,7 +29,7 @@ func _space_qrcode(m *ice.Message, dev string) { } func _space_dial(m *ice.Message, dev, name string, arg ...string) { origin := m.Cmdv(SPIDE, dev, CLIENT_ORIGIN) - u := kit.ParseURL(kit.MergeURL2(strings.Replace(origin, HTTP, "ws", 1), PP(SPACE), mdb.TYPE, ice.Info.NodeType, mdb.NAME, name, mdb.NAME, "", + u := kit.ParseURL(kit.MergeURL2(strings.Replace(origin, HTTP, "ws", 1), PP(SPACE), mdb.TYPE, ice.Info.NodeType, mdb.NAME, name, mdb.NAME, "", mdb.ICONS, mdb.Config(m, mdb.ICONS), mdb.TIME, ice.Info.Make.Time, nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions(), cli.GOOS, runtime.GOOS, cli.GOARCH, runtime.GOARCH, arg)) args := kit.SimpleKV("type,name,host,port", u.Scheme, dev, u.Hostname(), kit.Select(kit.Select(tcp.PORT_443, tcp.PORT_80, u.Scheme == "ws"), u.Port())) gdb.Go(m, func() { @@ -74,10 +74,14 @@ func _space_fork(m *ice.Message) { if msg := m.Cmd(TOKEN, m.Option(TOKEN)); msg.Append(mdb.TIME) > m.Time() && kit.IsIn(msg.Append(mdb.TYPE), SERVER, SPIDE) { aaa.SessAuth(m, kit.Dict(m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME, msg.Append(mdb.NAME))).AppendSimple())) name = SpaceName(kit.Select(name, msg.Append(mdb.TEXT))) + kit.If(ProxyDomain(m, name), func(p string) { text = p }) safe = aaa.IsTechOrRoot(m) } } - args := kit.Simple(mdb.TYPE, m.Option(mdb.TYPE), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(mdb.TIME, nfs.MODULE, nfs.VERSION, cli.DAEMON)) + if m.Option(mdb.ICONS) != "" && !kit.HasPrefix(m.Option(mdb.ICONS), nfs.PS, HTTP) { + m.Option(mdb.ICONS, kit.MergeURL("/require/"+m.Option(mdb.ICONS), ice.POD, name)) + } + args := kit.Simple(mdb.TYPE, m.Option(mdb.TYPE), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(mdb.ICONS, mdb.TIME, nfs.MODULE, nfs.VERSION, cli.DAEMON)) args = append(args, aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERROLE, m.Option(ice.MSG_USERROLE)) args = append(args, ParseUA(m)...) if c, e := websocket.Upgrade(m.W, m.R); !m.WarnNotValid(e) { @@ -99,7 +103,7 @@ func _space_fork(m *ice.Message) { case SERVER: defer gdb.EventDeferEvent(m, SPACE_OPEN, args)(SPACE_CLOSE, args) m.Go(func() { - m.Cmd(SPACE, name, cli.PWD, name, kit.Dict( + m.Cmd(SPACE, name, cli.PWD, name, kit.Dict(mdb.ICONS, mdb.Config(m, mdb.ICONS), mdb.TIME, ice.Info.Make.Time, 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) { @@ -180,7 +184,7 @@ func _space_exec(m *ice.Message, name string, source, target []string, c *websoc m.Warn(true, ice.ErrNotValid) return case cli.PWD: - mdb.HashModify(m, mdb.HASH, name, ParseUA(m), m.OptionSimple(mdb.TIME, nfs.MODULE, nfs.VERSION, AGENT, cli.SYSTEM)) + mdb.HashModify(m, mdb.HASH, name, ParseUA(m), m.OptionSimple(mdb.ICONS, mdb.TIME, nfs.MODULE, nfs.VERSION, AGENT, cli.SYSTEM)) m.Push(mdb.LINK, m.MergePod(kit.Select("", source, -1))) default: if m.IsErr() { @@ -332,8 +336,9 @@ func init() { }}, nfs.PS: {Hand: func(m *ice.Message, arg ...string) { _space_fork(m) }}, }, gdb.EventsAction(SPACE_LOGIN), mdb.HashAction( + mdb.ICONS, "src/main.ico", mdb.LIMIT, 1000, mdb.LEAST, 500, - mdb.SHORT, mdb.NAME, mdb.FIELD, "time,type,name,text,module,version,agent,system,ip,usernick,username,userrole", + mdb.SHORT, mdb.NAME, mdb.FIELD, "time,type,name,text,icons,module,version,agent,system,ip,usernick,username,userrole", ctx.ACTION, OPEN, REDIAL, kit.Dict("a", 1000, "b", 100, "c", 1000), ), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) < 2 {