diff --git a/core/acs_parser.js b/core/acs_parser.js index 3025f654..6e32cb06 100644 --- a/core/acs_parser.js +++ b/core/acs_parser.js @@ -847,6 +847,8 @@ function peg$parse(input, options) { const client = options.client; const user = options.client.user; + const UserProps = require('./user_property.js'); + const moment = require('moment'); function checkAccess(acsCode, value) { @@ -863,7 +865,7 @@ function peg$parse(input, options) { value = [ value ]; } - const userAccountStatus = parseInt(user.properties.account_status, 10); + const userAccountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); return value.map(n => parseInt(n, 10)).includes(userAccountStatus); }, EC : function isEncoding() { @@ -888,15 +890,15 @@ function peg$parse(input, options) { return value.map(n => parseInt(n, 10)).includes(client.node); }, NP : function numberOfPosts() { - const postCount = parseInt(user.properties.post_count, 10) || 0; + const postCount = user.getPropertyAsNumber(UserProps.PostCount) || 0; return !isNaN(value) && postCount >= value; }, NC : function numberOfCalls() { - const loginCount = parseInt(user.properties.login_count, 10); + const loginCount = user.getPropertyAsNumber(UserProps.LoginCount); return !isNaN(value) && loginCount >= value; }, AA : function accountAge() { - const accountCreated = moment(user.properties.account_created); + const accountCreated = moment(user.getProperty(UserProps.AccountCreated)); const now = moment(); const daysOld = accountCreated.diff(moment(), 'days'); return !isNaN(value) && @@ -905,36 +907,36 @@ function peg$parse(input, options) { daysOld >= value; }, BU : function bytesUploaded() { - const bytesUp = parseInt(user.properties.ul_total_bytes, 10) || 0; + const bytesUp = user.getPropertyAsNumber(UserProps.FileUlTotalBytes) || 0; return !isNaN(value) && bytesUp >= value; }, UP : function uploads() { - const uls = parseInt(user.properties.ul_total_count, 10) || 0; + const uls = user.getPropertyAsNumber(UserProps.FileUlTotalCount) || 0; return !isNaN(value) && uls >= value; }, BD : function bytesDownloaded() { - const bytesDown = parseInt(user.properties.dl_total_bytes, 10) || 0; + const bytesDown = user.getPropertyAsNumber(UserProps.FileDlTotalBytes) || 0; return !isNaN(value) && bytesDown >= value; }, DL : function downloads() { - const dls = parseInt(user.properties.dl_total_count, 10) || 0; + const dls = user.getPropertyAsNumber(UserProps.FileDlTotalCount) || 0; return !isNaN(value) && dls >= value; }, NR : function uploadDownloadRatioGreaterThan() { - const ulCount = parseInt(user.properties.ul_total_count, 10) || 0; - const dlCount = parseInt(user.properties.dl_total_count, 10) || 0; + const ulCount = user.getPropertyAsNumber(UserProps.FileUlTotalCount) || 0; + const dlCount = user.getPropertyAsNumber(UserProps.FileDlTotalCount) || 0; const ratio = ~~((ulCount / dlCount) * 100); return !isNaN(value) && ratio >= value; }, KR : function uploadDownloadByteRatioGreaterThan() { - const ulBytes = parseInt(user.properties.ul_total_bytes, 10) || 0; - const dlBytes = parseInt(user.properties.dl_total_bytes, 10) || 0; + const ulBytes = user.getPropertyAsNumber(UserProps.FileUlTotalBytes) || 0; + const dlBytes = user.getPropertyAsNumber(UserProps.FileDlTotalBytes) || 0; const ratio = ~~((ulBytes / dlBytes) * 100); return !isNaN(value) && ratio >= value; }, PC : function postCallRatio() { - const postCount = parseInt(user.properties.post_count, 10) || 0; - const loginCount = parseInt(user.properties.login_count, 10); + const postCount = user.getPropertyAsNumber(UserProps.PostCount) || 0; + const loginCount = user.getPropertyAsNumber(UserProps.LoginCount) || 0; const ratio = ~~((postCount / loginCount) * 100); return !isNaN(value) && ratio >= value; }, diff --git a/core/dropfile.js b/core/dropfile.js index 4c6a9c0b..a23c5c1c 100644 --- a/core/dropfile.js +++ b/core/dropfile.js @@ -85,6 +85,8 @@ module.exports = class DropFile { const prop = this.client.user.properties; const now = moment(); const secLevel = this.client.user.getLegacySecurityLevel().toString(); + const fullName = prop[UserProps.RealName] || this.client.user.username; + const bd = moment(prop[UserProp.Birthdate).format('MM/DD/YY'); // :TODO: fix time remaining // :TODO: fix default protocol -- user prop: transfer_protocol @@ -98,13 +100,13 @@ module.exports = class DropFile { 'Y', // "Printer Toggle - Y=On N=Off (Default to Y)" 'Y', // "Page Bell - Y=On N=Off (Default to Y)" 'Y', // "Caller Alarm - Y=On N=Off (Default to Y)" - prop.real_name || this.client.user.username, // "User Full Name" - prop.location || 'Anywhere', // "Calling From" + fullName, // "User Full Name" + prop[UserProps.Location]|| 'Anywhere', // "Calling From" '123-456-7890', // "Home Phone" '123-456-7890', // "Work/Data Phone" 'NOPE', // "Password" (Note: this is never given out or even stored plaintext) secLevel, // "Security Level" - prop.login_count.toString(), // "Total Times On" + prop[UserProps.LoginCount].toString(), // "Total Times On" now.format('MM/DD/YY'), // "Last Date Called" '15360', // "Seconds Remaining THIS call (for those that particular)" '256', // "Minutes Remaining THIS call" @@ -121,7 +123,7 @@ module.exports = class DropFile { '0', // "Total Downloads" '0', // "Daily Download "K" Total" '999999', // "Daily Download Max. "K" Limit" - moment(prop.birthdate).format('MM/DD/YY'), // "Caller's Birthdate" + bd, // "Caller's Birthdate" 'X:\\MAIN\\', // "Path to the MAIN directory (where User File is)" 'X:\\GEN\\', // "Path to the GEN directory" StatLog.getSystemStat('sysop_username'), // "Sysop's Name (name BBS refers to Sysop as)" @@ -142,7 +144,7 @@ module.exports = class DropFile { '0', // "Files d/led so far today" '0', // "Total "K" Bytes Uploaded" '0', // "Total "K" Bytes Downloaded" - prop.user_comment || 'None', // "User Comment" + prop[UserProps.UserComment] || 'None', // "User Comment" '0', // "Total Doors Opened" '0', // "Total Messages Left" diff --git a/core/fse.js b/core/fse.js index 3529935d..9ecf3bdd 100644 --- a/core/fse.js +++ b/core/fse.js @@ -480,7 +480,7 @@ exports.FullScreenEditorModule = exports.getModule = class FullScreenEditorModul } Events.emit(Events.getSystemEvents().UserPostMessage, { user : this.client.user, areaTag : this.message.areaTag }); - return StatLog.incrementUserStat(this.client.user, 'post_count', 1, cb); + return StatLog.incrementUserStat(this.client.user, UserProps.MessagePostCount, 1, cb); } redrawFooter(options, cb) { diff --git a/core/predefined_mci.js b/core/predefined_mci.js index 1622bd03..c83f8353 100644 --- a/core/predefined_mci.js +++ b/core/predefined_mci.js @@ -81,18 +81,18 @@ const PREDEFINED_MCI_GENERATORS = { UN : function userName(client) { return client.user.username; }, UI : function userId(client) { return client.user.userId.toString(); }, UG : function groups(client) { return _.values(client.user.groups).join(', '); }, - UR : function realName(client) { return userStatAsString(client, 'real_name', ''); }, - LO : function location(client) { return userStatAsString(client, 'location', ''); }, + UR : function realName(client) { return userStatAsString(client, UserProps.RealName, ''); }, + LO : function location(client) { return userStatAsString(client, UserProps.Location, ''); }, UA : function age(client) { return client.user.getAge().toString(); }, BD : function birthdate(client) { // iNiQUiTY return moment(client.user.properties[UserProps.Birthdate]).format(client.currentTheme.helpers.getDateFormat()); }, - US : function sex(client) { return userStatAsString(client, 'sex', ''); }, - UE : function emailAddres(client) { return userStatAsString(client, 'email_address', ''); }, - UW : function webAddress(client) { return userStatAsString(client, 'web_address', ''); }, - UF : function affils(client) { return userStatAsString(client, 'affiliation', ''); }, - UT : function themeId(client) { return userStatAsString(client, 'theme_id', ''); }, - UC : function loginCount(client) { return userStatAsString(client, 'login_count', 0); }, + US : function sex(client) { return userStatAsString(client, UserProps.Sex, ''); }, + UE : function emailAddres(client) { return userStatAsString(client, UserProps.EmailAddress, ''); }, + UW : function webAddress(client) { return userStatAsString(client, UserProps.WebAddress, ''); }, + UF : function affils(client) { return userStatAsString(client, UserProps.Affiliations, ''); }, + UT : function themeId(client) { return userStatAsString(client, UserProps.ThemeId, ''); }, + UC : function loginCount(client) { return userStatAsString(client, UserProps.LoginCount, 0); }, ND : function connectedNode(client) { return client.node.toString(); }, IP : function clientIpAddress(client) { return client.remoteAddress.replace(/^::ffff:/, ''); }, // convert any :ffff: IPv4's to 32bit version ST : function serverName(client) { return client.session.serverName; }, @@ -100,28 +100,28 @@ const PREDEFINED_MCI_GENERATORS = { const activeFilter = FileBaseFilters.getActiveFilter(client); return activeFilter ? activeFilter.name : '(Unknown)'; }, - DN : function userNumDownloads(client) { return userStatAsString(client, 'dl_total_count', 0); }, // Obv/2 + DN : function userNumDownloads(client) { return userStatAsString(client, UserProps.FileDlTotalCount, 0); }, // Obv/2 DK : function userByteDownload(client) { // Obv/2 uses DK=downloaded Kbytes - const byteSize = StatLog.getUserStatNum(client.user, 'dl_total_bytes'); + const byteSize = StatLog.getUserStatNum(client.user, UserProps.FileDlTotalBytes); return formatByteSize(byteSize, true); // true=withAbbr }, - UP : function userNumUploads(client) { return userStatAsString(client, 'ul_total_count', 0); }, // Obv/2 + UP : function userNumUploads(client) { return userStatAsString(client, UserProps.FileUlTotalCount, 0); }, // Obv/2 UK : function userByteUpload(client) { // Obv/2 uses UK=uploaded Kbytes - const byteSize = StatLog.getUserStatNum(client.user, 'ul_total_bytes'); + const byteSize = StatLog.getUserStatNum(client.user, UserProps.FileUlTotalBytes); return formatByteSize(byteSize, true); // true=withAbbr }, NR : function userUpDownRatio(client) { // Obv/2 - return getUserRatio(client, 'ul_total_count', 'dl_total_count'); + return getUserRatio(client, UserProps.FileUlTotalCount, UserProps.FileDlTotalCount); }, KR : function userUpDownByteRatio(client) { // Obv/2 uses KR=upload/download Kbyte ratio - return getUserRatio(client, 'ul_total_bytes', 'dl_total_bytes'); + return getUserRatio(client, UserProps.FileUlTotalBytes, UserProps.FileDlTotalBytes); }, MS : function accountCreatedclient(client) { return moment(client.user.properties[UserProps.AccountCreated]).format(client.currentTheme.helpers.getDateFormat()); }, - PS : function userPostCount(client) { return userStatAsString(client, 'post_count', 0); }, - PC : function userPostCallRatio(client) { return getUserRatio(client, 'post_count', 'login_count'); }, + PS : function userPostCount(client) { return userStatAsString(client, UserProps.MessagePostCount, 0); }, + PC : function userPostCallRatio(client) { return getUserRatio(client, UserProps.MessagePostCount, UserProps.LoginCount); }, MD : function currentMenuDescription(client) { return _.has(client, 'currentMenuModule.menuConfig.desc') ? client.currentMenuModule.menuConfig.desc : ''; diff --git a/core/user_property.js b/core/user_property.js index 3c2f4f12..7f2bf6c5 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -26,6 +26,7 @@ module.exports = { AccountCreated : 'account_created', LastLoginTs : 'last_login_timestamp', LoginCount : 'login_count', + UserComment : 'user_comment', // NYI DownloadQueue : 'dl_queue', // download_queue.js @@ -40,8 +41,13 @@ module.exports = { FileBaseFilters : 'file_base_filters', FileBaseFilterActiveUuid : 'file_base_filter_active_uuid', FileBaseLastViewedId : 'user_file_base_last_viewed', + FileDlTotalCount : 'dl_total_count', + FileUlTotalCount : 'ul_total_count', + FileDlTotalBytes : 'dl_total_bytes', + FileUlTotalBytes : 'ul_total_bytes', MessageConfTag : 'message_conf_tag', MessageAreaTag : 'message_area_tag', + MessagePostCount : 'post_count', }; diff --git a/misc/acs_parser.pegjs b/misc/acs_parser.pegjs index 4c9bc37b..ed6089ba 100644 --- a/misc/acs_parser.pegjs +++ b/misc/acs_parser.pegjs @@ -3,6 +3,8 @@ const client = options.client; const user = options.client.user; + const UserProps = require('./user_property.js'); + const moment = require('moment'); function checkAccess(acsCode, value) { @@ -19,7 +21,7 @@ value = [ value ]; } - const userAccountStatus = parseInt(user.properties.account_status, 10); + const userAccountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); return value.map(n => parseInt(n, 10)).includes(userAccountStatus); }, EC : function isEncoding() { @@ -44,15 +46,15 @@ return value.map(n => parseInt(n, 10)).includes(client.node); }, NP : function numberOfPosts() { - const postCount = parseInt(user.properties.post_count, 10) || 0; + const postCount = user.getPropertyAsNumber(UserProps.PostCount) || 0; return !isNaN(value) && postCount >= value; }, NC : function numberOfCalls() { - const loginCount = parseInt(user.properties.login_count, 10); + const loginCount = user.getPropertyAsNumber(UserProps.LoginCount); return !isNaN(value) && loginCount >= value; }, AA : function accountAge() { - const accountCreated = moment(user.properties.account_created); + const accountCreated = moment(user.getProperty(UserProps.AccountCreated)); const now = moment(); const daysOld = accountCreated.diff(moment(), 'days'); return !isNaN(value) && @@ -61,36 +63,36 @@ daysOld >= value; }, BU : function bytesUploaded() { - const bytesUp = parseInt(user.properties.ul_total_bytes, 10) || 0; + const bytesUp = user.getPropertyAsNumber(UserProps.FileUlTotalBytes) || 0; return !isNaN(value) && bytesUp >= value; }, UP : function uploads() { - const uls = parseInt(user.properties.ul_total_count, 10) || 0; + const uls = user.getPropertyAsNumber(UserProps.FileUlTotalCount) || 0; return !isNaN(value) && uls >= value; }, BD : function bytesDownloaded() { - const bytesDown = parseInt(user.properties.dl_total_bytes, 10) || 0; + const bytesDown = user.getPropertyAsNumber(UserProps.FileDlTotalBytes) || 0; return !isNaN(value) && bytesDown >= value; }, DL : function downloads() { - const dls = parseInt(user.properties.dl_total_count, 10) || 0; + const dls = user.getPropertyAsNumber(UserProps.FileDlTotalCount) || 0; return !isNaN(value) && dls >= value; }, NR : function uploadDownloadRatioGreaterThan() { - const ulCount = parseInt(user.properties.ul_total_count, 10) || 0; - const dlCount = parseInt(user.properties.dl_total_count, 10) || 0; + const ulCount = user.getPropertyAsNumber(UserProps.FileUlTotalCount) || 0; + const dlCount = user.getPropertyAsNumber(UserProps.FileDlTotalCount) || 0; const ratio = ~~((ulCount / dlCount) * 100); return !isNaN(value) && ratio >= value; }, KR : function uploadDownloadByteRatioGreaterThan() { - const ulBytes = parseInt(user.properties.ul_total_bytes, 10) || 0; - const dlBytes = parseInt(user.properties.dl_total_bytes, 10) || 0; + const ulBytes = user.getPropertyAsNumber(UserProps.FileUlTotalBytes) || 0; + const dlBytes = user.getPropertyAsNumber(UserProps.FileDlTotalBytes) || 0; const ratio = ~~((ulBytes / dlBytes) * 100); return !isNaN(value) && ratio >= value; }, PC : function postCallRatio() { - const postCount = parseInt(user.properties.post_count, 10) || 0; - const loginCount = parseInt(user.properties.login_count, 10); + const postCount = user.getPropertyAsNumber(UserProps.PostCount) || 0; + const loginCount = user.getPropertyAsNumber(UserProps.LoginCount) || 0; const ratio = ~~((postCount / loginCount) * 100); return !isNaN(value) && ratio >= value; },