mirror of
https://github.com/NuSkooler/enigma-bbs.git
synced 2025-06-05 04:07:23 +02:00
ACS changes in prep for checking from ie content servers such as NNTP
* ACS now takes subject { client, user } * ACS checks now consider client/user optional & checks fail (return false) if an object is not available
This commit is contained in:
parent
8d46a305c5
commit
046550842b
4 changed files with 124 additions and 44 deletions
|
@ -1,31 +1,35 @@
|
|||
|
||||
{
|
||||
const client = options.client;
|
||||
const user = options.client.user;
|
||||
|
||||
const UserProps = require('./user_property.js');
|
||||
const Log = require('./logger.js').log;
|
||||
|
||||
const _ = require('lodash');
|
||||
const moment = require('moment');
|
||||
|
||||
const client = _.get(options, 'subject.client');
|
||||
const user = _.get(options, 'subject.user');
|
||||
|
||||
function checkAccess(acsCode, value) {
|
||||
try {
|
||||
return {
|
||||
LC : function isLocalConnection() {
|
||||
return client.isLocal();
|
||||
return client && client.isLocal();
|
||||
},
|
||||
AG : function ageGreaterOrEqualThan() {
|
||||
return !isNaN(value) && user.getAge() >= value;
|
||||
return !isNaN(value) && user && user.getAge() >= value;
|
||||
},
|
||||
AS : function accountStatus() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
if(!Array.isArray(value)) {
|
||||
value = [ value ];
|
||||
}
|
||||
|
||||
const userAccountStatus = user.getPropertyAsNumber(UserProps.AccountStatus);
|
||||
return value.map(n => parseInt(n, 10)).includes(userAccountStatus);
|
||||
},
|
||||
EC : function isEncoding() {
|
||||
const encoding = client.term.outputEncoding.toLowerCase();
|
||||
const encoding = _.get(client, 'term.outputEncoding', '').toLowerCase();
|
||||
switch(value) {
|
||||
case 0 : return 'cp437' === encoding;
|
||||
case 1 : return 'utf-8' === encoding;
|
||||
|
@ -33,27 +37,41 @@
|
|||
}
|
||||
},
|
||||
GM : function isOneOfGroups() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
if(!Array.isArray(value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return value.some(groupName => user.isGroupMember(groupName));
|
||||
},
|
||||
NN : function isNode() {
|
||||
if(!client) {
|
||||
return false;
|
||||
}
|
||||
if(!Array.isArray(value)) {
|
||||
value = [ value ];
|
||||
}
|
||||
return value.map(n => parseInt(n, 10)).includes(client.node);
|
||||
},
|
||||
NP : function numberOfPosts() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const postCount = user.getPropertyAsNumber(UserProps.PostCount) || 0;
|
||||
return !isNaN(value) && postCount >= value;
|
||||
},
|
||||
NC : function numberOfCalls() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const loginCount = user.getPropertyAsNumber(UserProps.LoginCount);
|
||||
return !isNaN(value) && loginCount >= value;
|
||||
},
|
||||
AA : function accountAge() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const accountCreated = moment(user.getProperty(UserProps.AccountCreated));
|
||||
const now = moment();
|
||||
const daysOld = accountCreated.diff(moment(), 'days');
|
||||
|
@ -63,78 +81,98 @@
|
|||
daysOld >= value;
|
||||
},
|
||||
BU : function bytesUploaded() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const bytesUp = user.getPropertyAsNumber(UserProps.FileUlTotalBytes) || 0;
|
||||
return !isNaN(value) && bytesUp >= value;
|
||||
},
|
||||
UP : function uploads() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const uls = user.getPropertyAsNumber(UserProps.FileUlTotalCount) || 0;
|
||||
return !isNaN(value) && uls >= value;
|
||||
},
|
||||
BD : function bytesDownloaded() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const bytesDown = user.getPropertyAsNumber(UserProps.FileDlTotalBytes) || 0;
|
||||
return !isNaN(value) && bytesDown >= value;
|
||||
},
|
||||
DL : function downloads() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const dls = user.getPropertyAsNumber(UserProps.FileDlTotalCount) || 0;
|
||||
return !isNaN(value) && dls >= value;
|
||||
},
|
||||
NR : function uploadDownloadRatioGreaterThan() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
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() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
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() {
|
||||
PC : function postCallRatio() {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
const postCount = user.getPropertyAsNumber(UserProps.PostCount) || 0;
|
||||
const loginCount = user.getPropertyAsNumber(UserProps.LoginCount) || 0;
|
||||
const ratio = ~~((postCount / loginCount) * 100);
|
||||
return !isNaN(value) && ratio >= value;
|
||||
},
|
||||
SC : function isSecureConnection() {
|
||||
return client.session.isSecure;
|
||||
return _.get(client, 'session.isSecure', false);
|
||||
},
|
||||
ML : function minutesLeft() {
|
||||
// :TODO: implement me!
|
||||
return false;
|
||||
},
|
||||
TH : function termHeight() {
|
||||
return !isNaN(value) && client.term.termHeight >= value;
|
||||
return !isNaN(value) && _.get(client, 'term.termHeight', 0) >= value;
|
||||
},
|
||||
TM : function isOneOfThemes() {
|
||||
if(!Array.isArray(value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return value.includes(client.currentTheme.name);
|
||||
return value.includes(_.get(client, 'currentTheme.name'));
|
||||
},
|
||||
TT : function isOneOfTermTypes() {
|
||||
if(!Array.isArray(value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return value.includes(client.term.termType);
|
||||
return value.includes(_.get(client, 'term.termType'));
|
||||
},
|
||||
TW : function termWidth() {
|
||||
return !isNaN(value) && client.term.termWidth >= value;
|
||||
return !isNaN(value) && _.get(client, 'term.termWidth', 0) >= value;
|
||||
},
|
||||
ID : function isUserId(value) {
|
||||
if(!user) {
|
||||
return false;
|
||||
}
|
||||
if(!Array.isArray(value)) {
|
||||
value = [ value ];
|
||||
}
|
||||
|
||||
return value.map(n => parseInt(n, 10)).includes(user.userId);
|
||||
},
|
||||
WD : function isOneOfDayOfWeek() {
|
||||
if(!Array.isArray(value)) {
|
||||
value = [ value ];
|
||||
}
|
||||
|
||||
return value.map(n => parseInt(n, 10)).includes(new Date().getDay());
|
||||
},
|
||||
MM : function isMinutesPastMidnight() {
|
||||
|
@ -145,7 +183,9 @@
|
|||
}
|
||||
}[acsCode](value);
|
||||
} catch (e) {
|
||||
client.log.warn( { acsCode : acsCode, value : value }, 'Invalid ACS string!');
|
||||
const logger = _.get(client, 'log', Log);
|
||||
logger.warn( { acsCode : acsCode, value : value }, 'Invalid ACS string!');
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue