diff --git a/gulpfile.js b/gulpfile.js index 56271790..36fab862 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,6 +1,8 @@ 'use strict'; const config = require(__dirname+'/config.js') + , { Binary } = require('mongodb') + , Permission = require(__dirname+'/helpers/permission.js') , Permissions = require(__dirname+'/helpers/permissions.js') , { hcaptcha, google } = require(__dirname+'/configs/secrets.js') , gulp = require('gulp') @@ -204,12 +206,47 @@ async function wipe() { await Posts.db.createIndex({ 'board': 1, 'reports.0': 1 }, { 'partialFilterExpression': { 'reports.0': { '$exists': true } } }) await Posts.db.createIndex({ 'globalreports.0': 1 }, { 'partialFilterExpression': { 'globalreports.0': { '$exists': true } } }) -//todo: insert roles to roles db + const ANON = new Permission() + ANON.setAll([ + Permissions.USE_MARKDOWN_PINKTEXT, Permissions.USE_MARKDOWN_GREENTEXT, Permissions.USE_MARKDOWN_BOLD, + Permissions.USE_MARKDOWN_UNDERLINE, Permissions.USE_MARKDOWN_STRIKETHROUGH, Permissions.USE_MARKDOWN_TITLE, + Permissions.USE_MARKDOWN_ITALIC, Permissions.USE_MARKDOWN_SPOILER, Permissions.USE_MARKDOWN_MONO, + Permissions.USE_MARKDOWN_CODE, Permissions.USE_MARKDOWN_DETECTED, Permissions.USE_MARKDOWN_LINK, + Permissions.USE_MARKDOWN_DICE, Permissions.USE_MARKDOWN_FORTUNE, Permissions.CREATE_BOARD, + Permissions.CREATE_ACCOUNT + ]); + const BOARD_STAFF = new Permission(ANON.base64) + BOARD_STAFF.setAll([ + Permissions.MANAGE_BOARD_GENERAL, Permissions.MANAGE_BOARD_BANS, Permissions.MANAGE_BOARD_LOGS, + ]); + const BOARD_OWNER = new Permission(BOARD_STAFF.base64) + BOARD_OWNER.setAll([ + Permissions.MANAGE_BOARD_OWNER, Permissions.MANAGE_BOARD_STAFF, Permissions.MANAGE_BOARD_CUSTOMISATION, + Permissions.MANAGE_BOARD_SETTINGS, + ]); + const GLOBAL_STAFF = new Permission(BOARD_OWNER.base64); + GLOBAL_STAFF.setAll([ + Permissions.MANAGE_GLOBAL_GENERAL, Permissions.MANAGE_GLOBAL_BANS, Permissions.MANAGE_GLOBAL_LOGS, Permissions.MANAGE_GLOBAL_NEWS, + Permissions.MANAGE_GLOBAL_BOARDS, Permissions.MANAGE_GLOBAL_SETTINGS, Permissions.MANAGE_BOARD_OWNER, Permissions.BYPASS_FILTERS, + Permissions.BYPASS_BANS, Permissions.BYPASS_SPAMCHECK, Permissions.BYPASS_RATELIMITS, + ]); + const ADMIN = new Permission(GLOBAL_STAFF.base64); + ADMIN.setAll([ + Permissions.MANAGE_GLOBAL_ACCOUNTS, Permissions.MANAGE_GLOBAL_ROLES, Permissions.VIEW_RAW_IP, + ]); + const ROOT = new Permission(); + ROOT.setAll(Permission.allPermissions); + await Roles.db.insertMany([ + { name: 'ANON', permissions: Binary(ANON.array) }, + { name: 'BOARD_STAFF', permissions: Binary(BOARD_STAFF.array) }, + { name: 'BOARD_OWNER', permissions: Binary(BOARD_OWNER.array) }, + { name: 'GLOBAL_STAFF', permissions: Binary(GLOBAL_STAFF.array) }, + { name: 'ADMIN', permissions: Binary(ADMIN.array) }, + { name: 'ROOT', permissions: Binary(ROOT.array) }, + ]); const randomPassword = randomBytes(20).toString('base64') - const rootPermission = new Permission(); - rootPermissions.set(Permissions.ROOT); - await Accounts.insertOne('admin', 'admin', randomPassword, rootPermission); + await Accounts.insertOne('admin', 'admin', randomPassword, ROOT); console.log('=====LOGIN DETAILS=====\nusername: admin\npassword:', randomPassword, '\n======================='); await db.collection('version').replaceOne({ diff --git a/helpers/rolemanager.js b/helpers/rolemanager.js index 22899266..2517a65a 100644 --- a/helpers/rolemanager.js +++ b/helpers/rolemanager.js @@ -37,53 +37,3 @@ module.exports = { roleNameMap: {}, load, }; - -//put in gulpfile/migration!! - -//const ANON = new Permission() -//ANON.setAll([ -// Permissions.USE_MARKDOWN_PINKTEXT, Permissions.USE_MARKDOWN_GREENTEXT, Permissions.USE_MARKDOWN_BOLD, -// Permissions.USE_MARKDOWN_UNDERLINE, Permissions.USE_MARKDOWN_STRIKETHROUGH, Permissions.USE_MARKDOWN_TITLE, -// Permissions.USE_MARKDOWN_ITALIC, Permissions.USE_MARKDOWN_SPOILER, Permissions.USE_MARKDOWN_MONO, -// Permissions.USE_MARKDOWN_CODE, Permissions.USE_MARKDOWN_DETECTED, Permissions.USE_MARKDOWN_LINK, -// Permissions.USE_MARKDOWN_DICE, Permissions.USE_MARKDOWN_FORTUNE, Permissions.CREATE_BOARD, -// Permissions.CREATE_ACCOUNT -//]); -// -//const BOARD_STAFF = new Permission(ANON.base64) -//BOARD_STAFF.setAll([ -// Permissions.MANAGE_BOARD_GENERAL, Permissions.MANAGE_BOARD_BANS, Permissions.MANAGE_BOARD_LOGS, -//]); -// -//const BOARD_OWNER = new Permission(BOARD_STAFF.base64) -//BOARD_OWNER.setAll([ -// Permissions.MANAGE_BOARD_OWNER, Permissions.MANAGE_BOARD_STAFF, Permissions.MANAGE_BOARD_CUSTOMISATION, -// Permissions.MANAGE_BOARD_SETTINGS, -//]); -// -//const GLOBAL_STAFF = new Permission(BOARD_OWNER.base64); -//GLOBAL_STAFF.setAll([ -// Permissions.MANAGE_GLOBAL_GENERAL, Permissions.MANAGE_GLOBAL_BANS, Permissions.MANAGE_GLOBAL_LOGS, Permissions.MANAGE_GLOBAL_NEWS, -// Permissions.MANAGE_GLOBAL_BOARDS, Permissions.MANAGE_GLOBAL_SETTINGS, Permissions.MANAGE_BOARD_OWNER, Permissions.BYPASS_FILTERS, -// Permissions.BYPASS_BANS, Permissions.BYPASS_SPAMCHECK, Permissions.BYPASS_RATELIMITS, -//]); -// -//const ADMIN = new Permission(GLOBAL_STAFF.base64); -//ADMIN.setAll([ -// Permissions.MANAGE_GLOBAL_ACCOUNTS, Permissions.MANAGE_GLOBAL_ROLES, Permissions.VIEW_RAW_IP, -//]); -// -//const ROOT = new Permission(); -//ROOT.setAll(Permission.allPermissions); -// -// if (roles.length === 0) { -// await Roles.db.insertMany([ -// { name: 'ANON', permission: Binary(ANON.array) }, -// { name: 'BOARD_STAFF', permission: Binary(BOARD_STAFF.array) }, -// { name: 'BOARD_OWNER', permission: Binary(BOARD_OWNER.array) }, -// { name: 'GLOBAL_STAFF', permission: Binary(GLOBAL_STAFF.array) }, -// { name: 'ADMIN', permission: Binary(ADMIN.array) }, -// { name: 'ROOT', permission: Binary(ROOT.array) }, -// ]); -// console.log((await Roles.find())) -// } diff --git a/migrations/0.4.0.js b/migrations/0.4.0.js index 84339b93..300656db 100644 --- a/migrations/0.4.0.js +++ b/migrations/0.4.0.js @@ -1,27 +1,66 @@ 'use strict'; -const roleManager = require(__dirname+'/../helpers/rolemanager.js') - , Permission = require(__dirname+'/../helpers/permission.js') +const Permission = require(__dirname+'/../helpers/permission.js') , { Binary } = require('mongodb'); module.exports = async(db, redis) => { console.log('making db changes for permissions update'); console.log('setting new permission templates to replace old permission "levels"'); + const ANON = new Permission() + ANON.setAll([ + Permissions.USE_MARKDOWN_PINKTEXT, Permissions.USE_MARKDOWN_GREENTEXT, Permissions.USE_MARKDOWN_BOLD, + Permissions.USE_MARKDOWN_UNDERLINE, Permissions.USE_MARKDOWN_STRIKETHROUGH, Permissions.USE_MARKDOWN_TITLE, + Permissions.USE_MARKDOWN_ITALIC, Permissions.USE_MARKDOWN_SPOILER, Permissions.USE_MARKDOWN_MONO, + Permissions.USE_MARKDOWN_CODE, Permissions.USE_MARKDOWN_DETECTED, Permissions.USE_MARKDOWN_LINK, + Permissions.USE_MARKDOWN_DICE, Permissions.USE_MARKDOWN_FORTUNE, Permissions.CREATE_BOARD, + Permissions.CREATE_ACCOUNT + ]); + const BOARD_STAFF = new Permission(ANON.base64) + BOARD_STAFF.setAll([ + Permissions.MANAGE_BOARD_GENERAL, Permissions.MANAGE_BOARD_BANS, Permissions.MANAGE_BOARD_LOGS, + ]); + const BOARD_OWNER = new Permission(BOARD_STAFF.base64) + BOARD_OWNER.setAll([ + Permissions.MANAGE_BOARD_OWNER, Permissions.MANAGE_BOARD_STAFF, Permissions.MANAGE_BOARD_CUSTOMISATION, + Permissions.MANAGE_BOARD_SETTINGS, + ]); + const GLOBAL_STAFF = new Permission(BOARD_OWNER.base64); + GLOBAL_STAFF.setAll([ + Permissions.MANAGE_GLOBAL_GENERAL, Permissions.MANAGE_GLOBAL_BANS, Permissions.MANAGE_GLOBAL_LOGS, Permissions.MANAGE_GLOBAL_NEWS, + Permissions.MANAGE_GLOBAL_BOARDS, Permissions.MANAGE_GLOBAL_SETTINGS, Permissions.MANAGE_BOARD_OWNER, Permissions.BYPASS_FILTERS, + Permissions.BYPASS_BANS, Permissions.BYPASS_SPAMCHECK, Permissions.BYPASS_RATELIMITS, + ]); + const ADMIN = new Permission(GLOBAL_STAFF.base64); + ADMIN.setAll([ + Permissions.MANAGE_GLOBAL_ACCOUNTS, Permissions.MANAGE_GLOBAL_ROLES, Permissions.VIEW_RAW_IP, + ]); + const ROOT = new Permission(); + ROOT.setAll(Permission.allPermissions); + await db.collection('roles').deleteMany({}); + await db.collection('roles').insertMany([ + { name: 'ANON', permissions: Binary(ANON.array) }, + { name: 'BOARD_STAFF', permissions: Binary(BOARD_STAFF.array) }, + { name: 'BOARD_OWNER', permissions: Binary(BOARD_OWNER.array) }, + { name: 'GLOBAL_STAFF', permissions: Binary(GLOBAL_STAFF.array) }, + { name: 'ADMIN', permissions: Binary(ADMIN.array) }, + { name: 'ROOT', permissions: Binary(ROOT.array) }, + ]); + await db.collection('accounts').updateMany({ authLevel: 0 }, { '$set': { - 'permissions': Binary(roleManager.roles.ROOT.array), + 'permissions': Binary(ROOT.array), }, }); await db.collection('accounts').updateMany({ authLevel: 1 }, { '$set': { - 'permissions': Binary(roleManager.roles.GLOBAL_STAFF.array), + 'permissions': Binary(GLOBAL_STAFF.array), }, }); //not doing 2 and 3 anymore, since they were a weird, ugly part of the old "levels" system. //they can be added back manually by editing global perms if desired await db.collection('accounts').updateMany({ authLevel: { $gte: 2 } }, { //gte2, to get 2, 3, and 4. '$set': { - 'permissions': Binary(roleManager.roles.ANON.array), + 'permissions': Binary(ANON.array), }, }); console.log('renaming account modBoards->staffBoards'); @@ -51,14 +90,14 @@ module.exports = async(db, redis) => { const bulkWrites = allBoards.map(board => { const staffObject = board.settings.moderators.reduce((acc, mod) => { acc[mod] = { - permissions: Binary(roleManager.roles.BOARD_STAFF.array), + permissions: Binary(BOARD_STAFF.array), addedDate: new Date(), }; return acc; }, {}); //add add the BO to staff staffObject[board.owner] = { - permissions: Binary(roleManager.roles.BOARD_OWNER.array), + permissions: Binary(BOARD_OWNER.array), addedDate: new Date(), } return {