События cb.system на стороне сервера.
ready
Система онлайн, все переменные доступны.
cb.system.addListener('ready', callback)'wss:' + location.path
Событие соединения веб сокета
cb.system.addListener('wss:/myevent', (client, req) => {})rendernode
Событие рендера для каждого элемента. Если в переменную
detail.html вы запишите какую либо разметку, то результат рендера будет переопределен на эту разметку.cb.system.on('rendernode', detail => {
const {elem, LANG, getVideo, className, calmAttr, posterAttr} = detail
const {_item} = elem
if (_item === 'video') {
const {value, posters, duration, width, height, optimizedPoster, optimizedVideo} = getVideo(elem.video, LANG)
const {title} = elem
let html = `<section ${className(elem)}>
<video ${calmAttr(elem)} preload="none">
<source src="${value[0]}" ${posterAttr(posters[0])} width="${width[0]}" height="${height[0]}" media="(min-width: 481px)">`
if (optimizedVideo[0].name) {
const aspect = width[0] / height[0]
const height_m = 480 / aspect
html += `<source src="${optimizedVideo[0].name}" ${posterAttr(optimizedPoster[0].name)} width="480" height="${height_m}" media="(max-width: 480px)">`
}
html += `</video>
</section>
`
detail.html = html
}
})pageprivacychange
Событие изменения приватности страницы.
cb.system.on('pageprivacychange', (access, req) => {
console.log(access, req)
})sendEmail
Событие отправки эл. почты. В событии отправки письма переменная mode подключает одну из четырех папок: first-time, enter-by-code, password-restoration, security. Сам файл custom/emails/index.js подключается в init.js.
cb.system.on('sendEmail', async data => {
const {mode, email, lang, userAgent} = data
const folder = ROOT_CUSTOM + `/emails/auth/${mode}`
data.text = cb.system.textTolanguage(require(folder + '/text.json'), data.lang)
data.style = fs.readFileSync(folder + '/style.css')
data.emailkit = fs.readFileSync(ROOT_CUSTOM + '/emails/emailkit.css')
const html = await ejs.renderFile(folder + '/index.ejs', data, {async: true})
// Для теста закомментируйте строчки ниже и включите последние строчки
const {from, subject} = data.TEXT
const mailStatus = await cb.UserManager.sendMail({email, from, subject, html, attachments: []})
if (mailStatus !== 'ok') await cb.UserManager.deleteByEmail(email)
data.mailStatus = mailStatus
// Для теста mailStatus может принимать значения: ok, email_not_exists, auth_error
// data.mailStatus = 'ok'
// fs.writeFileSync(ROOT + '/test.html', html)
})События клиента (браузера)
clientOnline
Клиент подключился. В объекте data параметры браузера.
cb.system.on('clientOnline', (req, data) => {
console.log(data)
})clientOffline
Клиент отключился. В объекте data параметры браузера.
cb.system.on('clientOffline', (req, data) => {
console.log(data)
})События пользователя
userOnline
Авторизованный пользователь подключился.
cb.system.on('userOnline', (req, userId) => {
console.log(userId)
})userOffline
Авторизованный пользователь отключился.
cb.system.on('userOffline', (req, userId) => {
console.log(userId)
})logIn
Пользователь авторизовался
cb.system.on('logIn', (user) => {
console.log(user)
})logOut
Пользователь вышел из учетной записи
cb.system.on('logOut', (email) => {
console.log(email)
})beforeCreateUser
Событие срабатывает когда пользователь создается в системе до его записи в базу данных. Пример как добавить пользователя в группу, зная его эл. почту.
const adminGroup = ['savoon@yandex.ru', 'savoon@mail.ru']
cb.system.on('beforeCreateUser', doc => {
if (adminGroup.includes(doc.email) && doc._system.groups.indexOf('admin') === -1) {
doc._system.groups.push('admin')
}
})afterCreateUser
Событие срабатывает сразу после записи пользователя в базу данных.
cb.system.on('afterCreateUser', doc => {
console.log(doc._id)
})addGroup
Событие добавления пользователя в группу
cb.system.on('addGroup', user => {
console.log(user)
})removeGroup
Событие выхода пользователя из группы
cb.system.on('removeGroup', user => {
console.log(user)
})updatePassword
Событие обновления пароля
cb.system.on('updatePassword', (email, userAgent) => {
console.log(email, userAgent)
})unsuccessLogin
Событие неуспешной попытки авторизовать пользователя
cb.system.on('unsuccessLogin', (email, userAgent, options) => {
const {requestLimitFail, passwordCheckFail} = options
console.log(email, userAgent, requestLimitFail, passwordCheckFail)
})События сервисов
CMSProvideServices
Событие регистрации нового сервиса
cb.system.on('CMSProvideServices', (services, req) => {
if (cb.UserManager.hasAccessToService(req, 'chat')) {
services.push({
name: {
ru: 'Чат',
en: 'Chat',
zh: '聊天',
},
link: '/chat',
color: '#583f8a',
icon: '<svg viewBox="0 0 24 24">..</svg>',
})
}
})beforeCreateChat
Событие создания чата перед записью в базу данных
cb.system.on('beforeCreateChat', (doc) => {
console.log(doc)
})afterCreateChat
Событие создания чата после записи в базу данных
cb.system.on('afterCreateChat', (doc) => {
console.log(doc._id)
})