From 72bbad483af2f46c7b194e5a766e871f3b93edd4 Mon Sep 17 00:00:00 2001 From: shy Date: Sat, 2 Mar 2024 14:57:03 +0800 Subject: [PATCH] add some --- base/aaa/portal/apply.go | 43 +++++++++++++++++++++---------------- base/aaa/user.go | 36 ++++++++++++++++++------------- base/cli/runtime.go | 4 ++-- base/tcp/broad.go | 7 +++--- base/web/html/html.go | 3 +++ base/web/serve.go | 2 +- base/web/stream.go | 3 +++ core/chat/message.css | 6 ++++-- core/chat/message.go | 45 ++++++++++++++++++++++----------------- core/chat/message.js | 13 ++++++----- core/chat/oauth/client.go | 9 ++++---- misc/lark/sso.go | 2 +- misc/wx/login.go | 2 +- 13 files changed, 102 insertions(+), 73 deletions(-) diff --git a/base/aaa/portal/apply.go b/base/aaa/portal/apply.go index 1593c7d4..4894824a 100644 --- a/base/aaa/portal/apply.go +++ b/base/aaa/portal/apply.go @@ -16,7 +16,7 @@ type apply struct { email string `data:"admin"` checkbox string `data:"true"` online string `data:"true"` - field string `data:"time,hash,status,email,usernick,username,userrole,icons,agent,system,ip,ua"` + field string `data:"time,hash,status,email,userrole,username,usernick,icons,agent,system,ip,ua"` apply string `name:"apply" help:"申请" role:"void"` agree string `name:"agree userrole=tech,void" help:"同意" icon:"bi bi-check2-square"` login string `name:"login" help:"登录" role:"void"` @@ -34,9 +34,11 @@ func (s apply) Apply(m *ice.Message, arg ...string) { m.DisplayForm(m, "email*", aaa.USERNICK, s.Apply) } } else if !m.WarnAlreadyExists(m.Options(arg).Cmd(aaa.USER, m.Option(aaa.EMAIL)).Length() > 0, m.Option(aaa.EMAIL)) { - m.Option(ice.MSG_USERNAME, m.Option(aaa.EMAIL), ice.MSG_USERNICK, kit.Split(m.Option(aaa.EMAIL), "@")[0]) - m.ProcessCookie(_cookie_key(m), s.Hash.Create(m, kit.Simple(arg, mdb.STATUS, kit.FuncName(s.Apply), web.ParseUA(m.Message))...)) + m.Options(ice.MSG_USERNAME, m.Option(aaa.EMAIL), ice.MSG_USERNICK, kit.Split(m.Option(aaa.EMAIL), "@")[0]) + h := s.Hash.Create(m, kit.Simple(arg, mdb.STATUS, kit.FuncName(s.Apply), web.ParseUA(m.Message))...) + m.ProcessCookie(_cookie_key(m), h) m.StreamPushRefreshConfirm() + m.ChatMessageInsertPlug(aaa.APPLY, "apply.signup", m.PrefixKey(), h) } } func (s apply) Agree(m *ice.Message, arg ...string) { @@ -48,7 +50,7 @@ func (s apply) Agree(m *ice.Message, arg ...string) { return } s.Hash.Modify(m, kit.Simple(m.OptionSimple(mdb.HASH, aaa.USERROLE), mdb.STATUS, s.Agree)...) - m.Cmd(aaa.USER, mdb.CREATE, msg.AppendSimple(aaa.USERNICK, aaa.USERNAME), m.OptionSimple(aaa.USERROLE)) + m.UserCreate(m.Option(aaa.USERROLE), msg.Append(aaa.USERNAME), msg.Append(aaa.USERNICK)) m.PushRefresh(msg.Append(cli.DAEMON)) } func (s apply) Login(m *ice.Message, arg ...string) { @@ -65,9 +67,12 @@ func (s apply) Login(m *ice.Message, arg ...string) { m.ProcessCookie(_cookie_key(m), "") return } - s.Hash.Modify(m, kit.Simple(m.OptionSimple(mdb.HASH), mdb.STATUS, s.Login)...) + m.UserCreate(m.Option(aaa.USERROLE), msg.Append(aaa.USERNAME), msg.Append(aaa.USERNICK)) web.RenderCookie(m.Message, m.Cmdx(aaa.SESS, mdb.CREATE, msg.Append(aaa.USERNAME))) + s.Hash.Modify(m, kit.Simple(m.OptionSimple(mdb.HASH), mdb.STATUS, s.Login)...) m.ProcessLocation(nfs.PS) + m.StreamPushRefreshConfirm() + m.ChatMessageInsertPlug(aaa.APPLY, "user.create", aaa.USER, msg.Append(aaa.USERNAME)) } else { if m.WarnNotFound(m.Cmd(aaa.USER, m.Option(aaa.EMAIL)).Length() == 0, m.Option(aaa.EMAIL)) { return @@ -81,19 +86,19 @@ func (s apply) Login(m *ice.Message, arg ...string) { } func (s apply) List(m *ice.Message, arg ...string) *ice.Message { kit.If(m.Option(_cookie_key(m)), func(p string) { arg = []string{p} }) - s.Hash.List(m, arg...).Table(func(value ice.Maps) { - switch value[mdb.STATUS] { - case kit.FuncName(s.Apply): - m.PushButton(s.Agree, s.Remove) - case kit.FuncName(s.Agree): - m.PushButton(s.Login, s.Remove) - default: - m.PushButton(s.Remove) - } - }) - if len(arg) == 0 { - m.EchoQRCode(m.MergePodCmd("", "", ctx.ACTION, s.Apply)) - } else if m.Option(_cookie_key(m)) != "" || m.ActionKey() != "" { + if m.IsTech() || (len(arg) > 0 && arg[0] != "") { + s.Hash.List(m, arg...).Table(func(value ice.Maps) { + switch value[mdb.STATUS] { + case kit.FuncName(s.Apply): + m.PushButton(s.Agree, s.Remove) + case kit.FuncName(s.Agree): + m.PushButton(s.Login, s.Remove) + default: + m.PushButton(s.Remove) + } + }) + } + if m.Option(_cookie_key(m)) != "" || m.ActionKey() != "" { switch m.Append(mdb.STATUS) { case kit.FuncName(s.Login): if m.ActionKey() == kit.FuncName(s.Apply) { @@ -106,6 +111,8 @@ func (s apply) List(m *ice.Message, arg ...string) *ice.Message { case kit.FuncName(s.Apply): m.SetAppend().EchoInfoButton(m.Trans("please wait admin agree", "请等待管理员同意"), nil) } + } else if len(arg) == 0 { + m.EchoQRCode(m.MergePodCmd("", "", ctx.ACTION, s.Apply)) } return m } diff --git a/base/aaa/user.go b/base/aaa/user.go index 8efa0da0..5f694e9b 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -12,6 +12,10 @@ func _user_create(m *ice.Message, name string, arg ...string) { mdb.HashCreate(m, USERNAME, name, arg) gdb.Event(m, USER_CREATE, USER, name) } +func _user_remove(m *ice.Message, name string, arg ...string) { + gdb.Event(m, USER_REMOVE, m.OptionSimple(USERNAME, USERNICK)) + mdb.HashRemove(m, m.OptionSimple(USERNAME)) +} const ( BACKGROUND = "background" @@ -38,6 +42,7 @@ const ( USERZONE = "userzone" USER_CREATE = "user.create" + USER_REMOVE = "user.remove" ) const USER = "user" @@ -52,10 +57,11 @@ func init() { m.Push(arg[0], m.Option(ice.MSG_USERNAME)) } }}, - mdb.CREATE: {Name: "create usernick username* userrole=void,tech userzone language", Hand: func(m *ice.Message, arg ...string) { - _user_create(m, m.Option(USERNAME), m.OptionSimple(USERNICK, USERROLE, USERZONE, LANGUAGE, EMAIL, BACKGROUND, AVATAR)...) + mdb.CREATE: {Name: "create userrole=void,tech username* usernick language userzone", Hand: func(m *ice.Message, arg ...string) { + _user_create(m, m.Option(USERNAME), m.OptionSimple(USERROLE, USERNICK, LANGUAGE, AVATAR, BACKGROUND, USERZONE, EMAIL)...) }}, - }, mdb.ImportantHashAction(mdb.SHORT, USERNAME, mdb.FIELD, "time,userrole,username,usernick,avatar,language,userzone", html.CHECKBOX, ice.TRUE))}, + mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) { _user_remove(m, m.Option(USERNAME)) }}, + }, mdb.ImportantHashAction(mdb.SHORT, USERNAME, mdb.FIELD, "time,userrole,username,usernick,language,avatar,background,userzone", html.CHECKBOX, ice.TRUE))}, }) } @@ -65,12 +71,6 @@ func UserInfo(m *ice.Message, name ice.Any, key, meta string) (value string) { } return } -func UserEmail(m *ice.Message, username ice.Any) (nick string) { - return UserInfo(m, username, EMAIL, EMAIL) -} -func UserNick(m *ice.Message, username ice.Any) (nick string) { - return UserInfo(m, username, USERNICK, ice.MSG_USERNICK) -} func UserRole(m *ice.Message, username ice.Any) (role string) { if username == "" { return VOID @@ -80,18 +80,24 @@ func UserRole(m *ice.Message, username ice.Any) (role string) { return UserInfo(m, username, USERROLE, ice.MSG_USERROLE) } } +func UserNick(m *ice.Message, username ice.Any) (nick string) { + return UserInfo(m, username, USERNICK, ice.MSG_USERNICK) +} func UserZone(m *ice.Message, username ice.Any) (zone string) { return UserInfo(m, username, USERZONE, ice.MSG_USERZONE) } +func UserEmail(m *ice.Message, username ice.Any) (nick string) { + return UserInfo(m, username, EMAIL, EMAIL) +} func UserRoot(m *ice.Message, arg ...string) *ice.Message { - language := kit.Select("", arg, 4) - userzone := kit.Select("", arg, 3) - userrole := kit.Select(ROOT, arg, 2) + userrole := kit.Select(TECH, arg, 0) username := kit.Select(ice.Info.Username, arg, 1) - usernick := kit.Select(UserNick(m, username), arg, 0) + usernick := kit.Select(UserNick(m, username), arg, 2) + language := kit.Select("", arg, 3) + userzone := kit.Select(ice.DEV, arg, 4) if len(arg) > 0 { ice.Info.Username = username - m.Cmd(USER, mdb.CREATE, usernick, username, userrole, userzone, language) + m.Cmd(USER, mdb.CREATE, userrole, username, usernick, language, userzone) } - return SessAuth(m, kit.Dict(USERNICK, usernick, USERNAME, username, USERROLE, userrole)) + return SessAuth(m, kit.Dict(USERROLE, userrole, USERNAME, username, USERNICK, usernick)) } diff --git a/base/cli/runtime.go b/base/cli/runtime.go index 2d6bff1d..49e275c2 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -47,8 +47,8 @@ func _runtime_init(m *ice.Message) { kit.HashSeed = append(kit.HashSeed, ice.Info.Username) kit.HashSeed = append(kit.HashSeed, ice.Info.Hostname) kit.HashSeed = append(kit.HashSeed, ice.Info.Pathname) - aaa.UserRoot(ice.Pulse, "", ice.Info.Make.Username, aaa.TECH, ice.DEV) - aaa.UserRoot(ice.Pulse, "", ice.Info.Username, aaa.ROOT, ice.OPS) + aaa.UserRoot(ice.Pulse, "", ice.Info.Make.Username) + aaa.UserRoot(ice.Pulse, aaa.ROOT, ice.Info.Username, "", "", ice.OPS) ice.Info.Time = m.Time() m.Conf(RUNTIME, kit.Keys(BOOT, mdb.TIME), ice.Info.Time) if runtime.GOARCH != MIPSLE { diff --git a/base/tcp/broad.go b/base/tcp/broad.go index 01926e62..370072ae 100644 --- a/base/tcp/broad.go +++ b/base/tcp/broad.go @@ -41,9 +41,10 @@ func _client_dial_udp4(m *ice.Message, arg ...string) { } const ( - UDP4 = "udp4" - SEND = "send" - RECV = "recv" + UDP4 = "udp4" + SEND = "send" + RECV = "recv" + DIRECT = "direct" ) func UDPAddr(m *ice.Message, host, port string) *net.UDPAddr { diff --git a/base/web/html/html.go b/base/web/html/html.go index fee9e9f6..56023315 100644 --- a/base/web/html/html.go +++ b/base/web/html/html.go @@ -65,11 +65,14 @@ const ( DISPLAY = "display" TEXT = "text" + PLUG = "plug" TEXTAREA = "textarea" PASSWORD = "password" SELECT = "select" BUTTON = "button" + PLUGIN_STORY_JSON = "/plugin/story/json.js" + VIEW = "view" INPUT = "input" VALUE = "value" diff --git a/base/web/serve.go b/base/web/serve.go index e9a064d8..8f303151 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -26,7 +26,7 @@ import ( func _serve_address(m *ice.Message) string { return HostPort(m, tcp.LOCALHOST, m.Option(tcp.PORT)) } func _serve_start(m *ice.Message) { kit.If(m.Option(aaa.USERNAME), func() { - aaa.UserRoot(m, m.Option(aaa.USERNICK), m.Option(aaa.USERNAME), "", ice.DEV, m.Option(aaa.LANGUAGE)) + aaa.UserRoot(m, "", m.Option(aaa.USERNAME), m.Option(aaa.USERNICK), m.Option(aaa.LANGUAGE)) }) kit.If(m.Option(tcp.PORT) == tcp.RANDOM, func() { m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT)) }) cli.NodeInfo(m, kit.Select(kit.Split(ice.Info.Hostname, nfs.PT)[0], m.Option(tcp.NODENAME)), SERVER) diff --git a/base/web/stream.go b/base/web/stream.go index 4e2354b1..74f74dc4 100644 --- a/base/web/stream.go +++ b/base/web/stream.go @@ -23,6 +23,9 @@ func init() { Index.MergeCommands(ice.Commands{ STREAM: {Name: "stream hash daemon auto", Help: "推送流", Actions: ice.MergeActions(ice.Actions{ ONLINE: {Hand: func(m *ice.Message, arg ...string) { + if m.Option(ice.MSG_DAEMON) == "" { + return + } mdb.HashCreate(m, SPACE, m.Option(ice.MSG_SPACE), ctx.INDEX, m.Option(ice.MSG_INDEX), mdb.SHORT, cli.DAEMON, mdb.FIELD, mdb.Config(m, mdb.FIELDS)) mdb.HashCreate(_stream_subkey(m), ParseUA(m)) mdb.HashSelect(m) diff --git a/core/chat/message.css b/core/chat/message.css index abf82261..fdd29f28 100644 --- a/core/chat/message.css +++ b/core/chat/message.css @@ -31,8 +31,10 @@ fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list> fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.send div.container { display:flex; flex-direction:column; align-items:flex-end; } fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.text div.content { white-space:pre; padding:var(--input-padding) var(--button-padding); } fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content div.item.text.path>input { width:var(--input-width); } -fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.xterm.story>form.option>div.item.hash input { width:var(--input-width); } -fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.iframe.story>form.option>div.item.hash input { width:var(--input-width); } +fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.xterm>form.option>div.item.hash input { width:var(--input-width); } +fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.iframe>form.option>div.item.hash input { width:var(--input-width); } +fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.user>form.option>div.item.username input { width:var(--form-width); } +fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story>div.action>div.item.chat.icons { display:none; } fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content { box-shadow:var(--box-shadow); } fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content:hover { box-shadow:var(--notice-box-shadow); } fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item>div.container>div.content { display:flex; align-items:center; border-radius:var(--plugin-radius); min-height:var(--header-height); width:fit-content; } diff --git a/core/chat/message.go b/core/chat/message.go index fb6672e6..42050bf1 100644 --- a/core/chat/message.go +++ b/core/chat/message.go @@ -10,6 +10,7 @@ import ( "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" + "shylinux.com/x/icebergs/base/web/html" kit "shylinux.com/x/toolkits" ) @@ -19,36 +20,41 @@ func init() { Index.MergeCommands(ice.Commands{ MESSAGE: {Name: "message", Help: "聊天", Icon: "Messages.png", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - messageCreate(m, web.DREAM, "usr/icons/Launchpad.png") - messageCreate(m, cli.SYSTEM, "usr/icons/System Settings.png") - messageInsert(m, cli.SYSTEM, mdb.TYPE, "text", mdb.NAME, cli.RUNTIME, mdb.TEXT, m.Cmdx(cli.RUNTIME), ctx.DISPLAY, "/plugin/story/json.js") + MessageCreate(m, aaa.APPLY, "usr/icons/Mail.png") + MessageCreate(m, web.DREAM, "usr/icons/Launchpad.png") + MessageCreate(m, cli.SYSTEM, "usr/icons/System Settings.png") + MessageInsert(m, cli.SYSTEM, mdb.TYPE, html.TEXT, mdb.NAME, cli.RUNTIME, mdb.TEXT, m.Cmdx(cli.RUNTIME), ctx.DISPLAY, html.PLUGIN_STORY_JSON) }}, - mdb.CREATE: {Name: "create type=tech,void title icons target", Hand: func(m *ice.Message, arg ...string) { + mdb.CREATE: {Name: "create type*=tech,void title icons target zone", Hand: func(m *ice.Message, arg ...string) { if strings.HasPrefix(m.Option(web.TARGET), "from.") { m.Option(web.TARGET, strings.Replace(m.Option(web.TARGET), "from", m.Option(ice.FROM_SPACE), 1)) } - mdb.ZoneCreate(m, kit.Simple(arg, web.TARGET, m.Option(web.TARGET), mdb.ZONE, kit.Select(kit.Hashs(mdb.UNIQ), m.Option(web.TARGET)))) + if m.OptionDefault(mdb.ZONE, m.Option(web.TARGET)) == "" { + m.Option(mdb.ZONE, kit.Hashs(mdb.UNIQ)) + } + mdb.ZoneCreate(m, kit.Simple(arg, web.TARGET, m.Option(web.TARGET), mdb.ZONE, m.Option(mdb.ZONE))) }}, mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) { - mdb.ZoneInsert(m, append(arg, "direct", tcp.SEND, aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.AVATAR, m.Option(ice.MSG_AVATAR))) - kit.If(mdb.HashSelectField(m, arg[0], web.TARGET), func(p string) { m.Cmd(web.SPACE, p, MESSAGE, tcp.RECV, arg[1:]) }) + mdb.ZoneInsert(m, kit.Simple(arg[0], tcp.DIRECT, tcp.SEND, arg[1:], aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.AVATAR, m.Option(ice.MSG_AVATAR))) mdb.HashSelectUpdate(m, arg[0], func(value ice.Map) { kit.Value(value, mdb.TIME, m.Time()) }) web.StreamPushRefreshConfirm(m, m.Trans("refresh for new message ", "刷新列表查看新消息 ")) }}, + tcp.SEND: {Hand: func(m *ice.Message, arg ...string) { + m.Cmd("", mdb.INSERT, arg, tcp.DIRECT, tcp.SEND) + kit.If(mdb.HashSelectField(m, arg[0], web.TARGET), func(p string) { m.Cmd(web.SPACE, p, MESSAGE, tcp.RECV, arg[1:]) }) + }}, tcp.RECV: {Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) { - mdb.ZoneInsert(m, kit.Simple(mdb.ZONE, m.Option(ice.FROM_SPACE), arg, "direct", tcp.RECV, aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.AVATAR, m.Option(ice.MSG_AVATAR))) + m.Cmd("", mdb.INSERT, m.Option(ice.FROM_SPACE), arg, tcp.DIRECT, tcp.RECV) mdb.HashSelectUpdate(m, m.Option(ice.FROM_SPACE), func(value ice.Map) { kit.Value(value, web.TARGET, m.Option(ice.FROM_SPACE)) }) - mdb.HashSelectUpdate(m, m.Option(ice.FROM_SPACE), func(value ice.Map) { kit.Value(value, mdb.TIME, m.Time()) }) - web.StreamPushRefreshConfirm(m, m.Trans("refresh for new message ", "刷新列表查看新消息 ")) }}, web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { if ice.Info.Important { - messageInsert(m, web.DREAM, mdb.TYPE, "plug", ctx.INDEX, IFRAME, ctx.ARGS, web.S(m.Option(mdb.NAME))) + MessageInsert(m, web.DREAM, mdb.TYPE, html.PLUG, ctx.INDEX, IFRAME, ctx.ARGS, web.S(m.Option(mdb.NAME))) } }}, web.OPEN: {Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.MergePod(m.Option(web.TARGET))) }}, ctx.COMMAND: {Hand: func(m *ice.Message, arg ...string) { - if m.Option("direct") == "recv" { + if m.Option(tcp.DIRECT) == tcp.RECV { m.Cmdy(web.Space(m, m.Option(web.TARGET)), ctx.COMMAND, arg[0]).ProcessField(ctx.ACTION, ctx.RUN, m.Option(web.TARGET), arg[0]) } else { m.Cmdy(ctx.COMMAND, arg[0]).ProcessField(ctx.ACTION, ctx.RUN, "", arg[0]) @@ -61,9 +67,10 @@ func init() { )), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { mdb.ZoneSelect(m.Display("").Spawn(), arg...).Table(func(value ice.Maps) { - if kit.IsIn(m.Option(ice.MSG_USERROLE), value[mdb.TYPE], aaa.TECH, aaa.ROOT) { - m.PushRecord(value, mdb.Config(m, mdb.FIELD)) + if !kit.IsIn(m.Option(ice.MSG_USERROLE), value[mdb.TYPE], aaa.TECH, aaa.ROOT) { + return } + m.PushRecord(value, mdb.Config(m, mdb.FIELD)) if value[web.TARGET] == "" { m.PushButton(mdb.REMOVE) } else { @@ -77,11 +84,9 @@ func init() { }}, }) } -func messageCreate(m *ice.Message, zone, icons string) { - kit.Value(m.Target().Configs[m.CommandKey()].Value, kit.Keys(mdb.HASH, zone, mdb.META), kit.Dict( - mdb.TIME, m.Time(), mdb.TYPE, aaa.TECH, mdb.ZONE, zone, mdb.ICONS, icons, - )) +func MessageCreate(m *ice.Message, zone, icons string) { + m.Cmd(MESSAGE, mdb.CREATE, mdb.TYPE, aaa.TECH, mdb.ICONS, icons, mdb.ZONE, zone) } -func messageInsert(m *ice.Message, zone string, arg ...string) { - mdb.ZoneInsert(m, kit.Simple(mdb.ZONE, zone, arg, "direct", tcp.RECV, aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.AVATAR, m.Option(ice.MSG_AVATAR))) +func MessageInsert(m *ice.Message, zone string, arg ...string) { + m.Cmd(MESSAGE, mdb.INSERT, zone, tcp.DIRECT, tcp.RECV, arg) } diff --git a/core/chat/message.js b/core/chat/message.js index 8d7d30da..4983a61d 100644 --- a/core/chat/message.js +++ b/core/chat/message.js @@ -59,10 +59,12 @@ Volcanos(chat.ONIMPORT, { can.page.Append(can, can.ui.message, [{view: [[html.ITEM, mdb.TIME], "", time]}]) } can.page.Append(can, can.ui.message, [{view: [[html.ITEM, value.direct, value.type]], list: [ - {img: value.direct == "recv"? ( - can.misc.Resource(can, (can.base.isIn(value.avatar, can.db.zone.zone, mdb.TYPE)? "": value.avatar)||can.db.zone.icons||"usr/icons/Messages.png") - ): can.user.info.avatar}, - {view: html.CONTAINER, list: [{text: [value.usernick, "", nfs.FROM]}, can.onfigure[value.type||"text"](can, value)]}, + {img: can.misc.Resource(can, value.direct == "recv"? ( + (can.base.isIn(value.avatar, can.db.zone.zone, mdb.TYPE)? "": value.avatar)||can.db.zone.icons||"usr/icons/Messages.png" + ): (can.user.info.avatar)||"usr/icons/Messages.png")}, + {view: html.CONTAINER, list: [{text: [ + value.direct == "recv"? value.usernick||can.db.zone.title||can.db.zone.zone: value.usernick||value.username + , "", nfs.FROM]}, can.onfigure[value.type||"text"](can, value)]}, ]}]) }), can.onappend._status(can, msg.Option(ice.MSG_STATUS)), can.onimport.layout(can) if (can.Status(mdb.TOTAL) > can.db.zone.id) { can.onimport._request(can) } @@ -74,7 +76,7 @@ Volcanos(chat.ONIMPORT, { }) }, _insert: function(can, args) { - can.runAction(event, mdb.INSERT, [can.db.hash].concat(args), function() { + can.runAction(event, tcp.SEND, [can.db.hash].concat(args), function() { can.onimport._request(can) }) }, @@ -137,6 +139,7 @@ Volcanos(chat.ONFIGURE, { can.base.isIn(_list[0], "ops", "dev") && (list.pop(), _list.shift()) value._space = list.concat(_list).join(".").replaceAll("..", ".") value._commands = {direct: value.direct, target: can.db.zone.target} + value.title = value.name can.onappend.plugin(can, value, function(sub) { sub.onexport.output = function() { sub.onimport.size(sub, height, width) can.page.style(can, target, html.HEIGHT, sub._target.offsetHeight+2, html.WIDTH, sub._target.offsetWidth) diff --git a/core/chat/oauth/client.go b/core/chat/oauth/client.go index 7490d4b5..747e119f 100644 --- a/core/chat/oauth/client.go +++ b/core/chat/oauth/client.go @@ -95,12 +95,11 @@ func (s Client) Auth(m *ice.Message, arg ...string) { func (s Client) User(m *ice.Message, arg ...string) { if res := s.Get(m, m.Option(mdb.HASH), m.Option(USERS_URL), arg...); res != nil { m.Options(res).Cmd(aaa.USER, mdb.CREATE, - aaa.USERNICK, m.Option(kit.Select("full_name", m.Option(NICK_KEY))), - aaa.USERNAME, m.Option(aaa.USERNAME, m.Option(kit.Select(aaa.USERNAME, m.Option(USER_KEY)))), - aaa.AVATAR, m.Option(aaa.AVATAR_URL), aaa.USERROLE, kit.Select(aaa.VOID, aaa.TECH, m.Option("is_admin") == ice.TRUE), - aaa.USERZONE, m.Option(web.DOMAIN), - m.OptionSimple(aaa.EMAIL, aaa.LANGUAGE)) + aaa.USERNAME, m.Option(aaa.USERNAME, m.Option(kit.Select(aaa.USERNAME, m.Option(USER_KEY)))), + aaa.USERNICK, m.Option(kit.Select("full_name", m.Option(NICK_KEY))), + aaa.USERZONE, m.Option(web.DOMAIN), aaa.AVATAR, m.Option(aaa.AVATAR_URL), + m.OptionSimple(aaa.LANGUAGE, aaa.EMAIL)) } } func (s Client) Orgs(m *ice.Message, arg ...string) {} diff --git a/misc/lark/sso.go b/misc/lark/sso.go index 0458089b..ce2ac803 100644 --- a/misc/lark/sso.go +++ b/misc/lark/sso.go @@ -28,7 +28,7 @@ func init() { msg := m.Cmd(web.SPIDE, LARK, "/open-apis/authen/v1/access_token", "grant_type", "authorization_code", cli.CODE, m.Option(cli.CODE), "app_access_token", m.Cmdx(APP, TOKEN, appid)) msg = m.Cmd(EMPLOYEE, appid, m.Option(aaa.USERNAME, msg.Append("data.open_id"))) - m.Cmd(aaa.USER, mdb.CREATE, m.Option(aaa.USERNAME), "", msg.Append(mdb.NAME), LARK, kit.Select(aaa.VOID, aaa.TECH, msg.Append("is_tenant_manager") == ice.TRUE)) + m.Cmd(aaa.USER, mdb.CREATE, kit.Select(aaa.VOID, aaa.TECH, msg.Append("is_tenant_manager") == ice.TRUE), m.Option(aaa.USERNAME), "", "", LARK) m.Cmd(aaa.USER, mdb.MODIFY, aaa.AVATAR, msg.Append("avatar_url"), aaa.GENDER, kit.Select("女", "男", msg.Append(aaa.GENDER) == "1"), msg.AppendSimple(aaa.MOBILE, aaa.EMAIL, aaa.CITY, aaa.COUNTRY)) m.RenderRedirect(m.MergeLink(kit.Select(home, m.Option(cli.BACK)), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(aaa.USERNAME)))) diff --git a/misc/wx/login.go b/misc/wx/login.go index 8cd13dca..455f2106 100644 --- a/misc/wx/login.go +++ b/misc/wx/login.go @@ -89,7 +89,7 @@ func init() { }}, aaa.USER: {Help: "用户", Hand: func(m *ice.Message, arg ...string) { if m.Cmd(aaa.USER, m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))).Length() == 0 { - m.Cmd(aaa.USER, mdb.CREATE, aaa.USERNICK, "", m.OptionSimple(aaa.USERNAME)) + m.Cmd(aaa.USER, mdb.CREATE, aaa.USERROLE, aaa.VOID, m.OptionSimple(aaa.USERNAME)) } m.Cmd(aaa.USER, mdb.MODIFY, m.OptionSimple(aaa.USERNAME), aaa.USERNICK, m.Option("nickName"), aaa.USERZONE, WX, aaa.AVATAR, m.Option("avatarUrl"), aaa.GENDER, kit.Select("女", "男", m.Option(aaa.GENDER) == "1"),