const { Controller } = require('libflitter') class ReflectController extends Controller { static get services() { return [...super.services, 'routers', 'models', 'activity', 'Vue'] } async get_announcements(req, res, next) { const Announcement = this.models.get('system:Announcement') const announcements = await Announcement.find() const data = [] for ( const announcement of announcements ) { data.push(await announcement.to_api()) } return res.api(data) } async get_announcement(req, res, next) { const Announcement = this.models.get('system:Announcement') const announcement = await Announcement.findById(req.params.id) if ( !announcement ) return res.status(404) .message(req.T('api.announcement_not_found')) .api() return res.api(await announcement.to_api()) } async create_announcement(req, res, next) { const Announcement = this.models.get('system:Announcement') const required_fields = ['title', 'message', 'user_ids', 'group_ids', 'type'] for ( const field of required_fields ) { if ( !req.body[field] ) return res.status(400) .message(`${req.T('api.missing_field')} ${field}`) .api() } if ( !Array.isArray(req.body.user_ids) ) return res.status(400) .message(`${req.T('api.improper_field')} user_ids`) .api() if ( !Array.isArray(req.body.group_ids) ) return res.status(400) .message(`${req.T('api.improper_field')} group_ids`) .api() if ( !['email', 'login', 'banner'].includes(req.body.type) ) return res.status(400) .message(`${req.T('api.improper_field')} type`) .api() const announcement = new Announcement({ title: req.body.title, message: req.body.message, user_ids: req.body.user_ids, group_ids: req.body.group_ids, type: req.body.type, }) await announcement.save() await announcement.log_populate() return res.api(await announcement.to_api()) } async delete_announcement(req, res, next) { const Announcement = this.models.get('system:Announcement') const announcement = await Announcement.findById(req.params.id) if ( !announcement ) return res.status(404) .message(req.T('api.announcement_not_found')) .api() await announcement.delete() return res.api() } async show_login_message(req, res) { const LoginMessage = this.models.get('LoginMessage') const messages = await LoginMessage.for_user(req.user) const message = messages[0] return this.Vue.auth_message(res, { message: `

${message.title}

${message.message}`, next_destination: '/auth/login-message/dismiss', }) } async dismiss_login_message(req, res) { const LoginMessage = this.models.get('LoginMessage') const messages = await LoginMessage.for_user(req.user) const message = messages[0] await message.mark_seen() if ( req.trap.has_trap('login_message') ) await req.trap.end() return res.redirect(req.session?.auth?.flow || '/dash') } } module.exports = exports = ReflectController