1
0
forked from x/icebergs
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-03-02 14:57:03 +08:00
parent fbb1fe4413
commit 72bbad483a
13 changed files with 102 additions and 73 deletions

View File

@ -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,6 +86,7 @@ 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} })
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):
@ -91,9 +97,8 @@ func (s apply) List(m *ice.Message, arg ...string) *ice.Message {
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.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
}

View File

@ -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))
}

View File

@ -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 {

View File

@ -44,6 +44,7 @@ const (
UDP4 = "udp4"
SEND = "send"
RECV = "recv"
DIRECT = "direct"
)
func UDPAddr(m *ice.Message, host, port string) *net.UDPAddr {

View File

@ -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"

View File

@ -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)

View File

@ -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)

View File

@ -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; }

View File

@ -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)
}

View File

@ -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)

View File

@ -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) {}

View File

@ -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))))

View File

@ -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"),