From 1fdaaf5633acac887d45f99983a40dc2f4c28414 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 16 Sep 2019 22:05:03 -0600 Subject: [PATCH] Add 'write' access for post FSE + hasMessageConfAndAreaWrite() + MenuModule helpers: gotoMenuOrPrev(), gotoMenuOrShowMessage(). These will likely replace many other pieces of code soon. --- core/menu_module.js | 38 ++++++++++++++++++++++++++++++++++++++ core/message_area.js | 9 +++++++++ core/msg_area_post_fse.js | 26 +++++++++++++++++++++----- 3 files changed, 68 insertions(+), 5 deletions(-) diff --git a/core/menu_module.js b/core/menu_module.js index 95557e32..804065a7 100644 --- a/core/menu_module.js +++ b/core/menu_module.js @@ -259,6 +259,44 @@ exports.MenuModule = class MenuModule extends PluginModule { return this.client.menuStack.goto(name, options, cb); } + gotoMenuOrPrev(name, options, cb) { + this.client.menuStack.goto(name, options, err => { + if(!err) { + if(cb) { + return cb(null); + } + } + + return this.prevMenu(cb); + }); + } + + gotoMenuOrShowMessage(name, message, options, cb) { + if(!cb && _.isFunction(options)) { + cb = options; + options = {}; + } + + options = options || { clearScreen: true }; + + this.gotoMenu(name, options, err => { + if(err) { + if(options.clearScreen) { + this.client.term.rawWrite(ansi.resetScreen()); + } + + this.client.term.write(`${message}\n`); + return this.pausePrompt( () => { + return this.prevMenu(cb); + }); + } + + if(cb) { + return cb(null); + } + }); + } + reload(cb) { const prevMenu = this.client.menuStack.pop(); prevMenu.instance.leave(); diff --git a/core/message_area.js b/core/message_area.js index a0806bc0..579f1c9b 100644 --- a/core/message_area.js +++ b/core/message_area.js @@ -32,6 +32,7 @@ exports.getMessageAreaByTag = getMessageAreaByTag; exports.changeMessageConference = changeMessageConference; exports.changeMessageArea = changeMessageArea; exports.hasMessageConfAndAreaRead = hasMessageConfAndAreaRead; +exports.hasMessageConfAndAreaWrite = hasMessageConfAndAreaWrite; exports.filterMessageAreaTagsByReadACS = filterMessageAreaTagsByReadACS; exports.filterMessageListByReadACS = filterMessageListByReadACS; exports.tempChangeMessageConfAndArea = tempChangeMessageConfAndArea; @@ -410,6 +411,14 @@ function hasMessageConfAndAreaRead(client, areaOrTag) { return client.acs.hasMessageConfRead(conf) && client.acs.hasMessageAreaRead(areaOrTag); } +function hasMessageConfAndAreaWrite(client, areaOrTag) { + if(_.isString(areaOrTag)) { + areaOrTag = getMessageAreaByTag(areaOrTag) || {}; + } + const conf = getMessageConferenceByTag(areaOrTag.confTag); + return client.acs.hasMessageConfWrite(conf) && client.acs.hasMessageAreaWrite(areaOrTag); +} + function filterMessageAreaTagsByReadACS(client, areaTags) { if(!Array.isArray(areaTags)) { areaTags = [ areaTags ]; diff --git a/core/msg_area_post_fse.js b/core/msg_area_post_fse.js index 613cee04..f47717b2 100644 --- a/core/msg_area_post_fse.js +++ b/core/msg_area_post_fse.js @@ -4,6 +4,9 @@ const FullScreenEditorModule = require('./fse.js').FullScreenEditorModule; const persistMessage = require('./message_area.js').persistMessage; const UserProps = require('./user_property.js'); +const { + hasMessageConfAndAreaWrite, +} = require('./message_area.js'); const _ = require('lodash'); const async = require('async'); @@ -59,12 +62,25 @@ exports.getModule = class AreaPostFSEModule extends FullScreenEditorModule { } enter() { - if(_.isString(this.client.user.properties[UserProps.MessageAreaTag]) && - !_.isString(this.messageAreaTag)) - { - this.messageAreaTag = this.client.user.properties[UserProps.MessageAreaTag]; - } + this.messageAreaTag = + this.messageAreaTag || + this.client.user.getProperty(UserProps.MessageAreaTag); super.enter(); } + + initSequence() { + if(!hasMessageConfAndAreaWrite(this.client, this.messageAreaTag)) { + const noAcsMenu = + this.menuConfig.config.messageBasePostMessageNoAccess || + 'messageBasePostMessageNoAccess'; + + return this.gotoMenuOrShowMessage( + noAcsMenu, + 'You do not have the proper access to post here!', + ); + } + + super.initSequence(); + } }; \ No newline at end of file