diff --git a/ass.js b/ass.js index 863386f..38988d5 100755 --- a/ass.js +++ b/ass.js @@ -17,7 +17,7 @@ const useragent = require('express-useragent'); const rateLimit = require("express-rate-limit"); const fetch = require('node-fetch'); const marked = require('marked'); -const DateTime = require('luxon').DateTime; +const { DateTime } = require('luxon'); const { WebhookClient, MessageEmbed } = require('discord.js'); const OpenGraph = require('./ogp'); const Thumbnail = require('./thumbnails'); @@ -33,8 +33,8 @@ const ASS_LOGO = 'https://cdn.discordapp.com/icons/848274994375294986/8d339d4a2f const app = express(); // Configure filename and location settings -var users = {}; -var data = {}; +let users = {}; +let data = {}; //#endregion preStartup(); @@ -61,7 +61,7 @@ function preStartup() { log('Users & data read from filesystem'); // Monitor auth.json for changes (triggered by running 'npm run new-token') - fs.watch(path('auth.json'), { persistent: false }, (eventType, _filename) => eventType === 'change' && fs.readJson(path('auth.json')) + fs.watch(path('auth.json'), { persistent: false }, (eventType) => eventType === 'change' && fs.readJson(path('auth.json')) .then((json) => !(arrayEquals(Object.keys(users), Object.keys(json.users))) && (users = json.users) && log(`New token added: ${Object.keys(users)[Object.keys(users).length - 1]}`)) .catch(console.error)); @@ -199,15 +199,15 @@ function startup() { username: req.headers['x-ass-webhook-username'] || 'ass', avatarURL: req.headers['x-ass-webhook-avatar'] || ASS_LOGO, embeds: [embed] - }).then((_msg) => whc.destroy()); + }).then(() => whc.destroy()); } // Also update the users upload count if (!users[req.token]) { - let generator = () => generateId('random', 20, null); - let username = generator(); - while (Object.values(users).findIndex((user) => user.username == username) != -1) - username = generator(); + let generateUsername = () => generateId('random', 20, null); + let username = generateUsername(); + while (Object.values(users).findIndex((user) => user.username === username) !== -1) + username = generateUsername(); users[req.token] = { username, count: 0 }; } users[req.token].count += 1; @@ -226,7 +226,7 @@ function startup() { // View file app.get('/:resourceId', (req, res) => { - let resourceId = req.ass.resourceId; + let { resourceId } = req.ass; let fileData = data[resourceId]; let requiredItems = { @@ -259,7 +259,7 @@ function startup() { // Thumbnail response app.get('/:resourceId/thumbnail', (req, res) => { - let resourceId = req.ass.resourceId; + let { resourceId } = req.ass; // Read the file and send it to the client fs.readFile(path('uploads/thumbnails/', data[resourceId].thumbnail)) @@ -271,7 +271,7 @@ function startup() { // https://oembed.com/ // https://old.reddit.com/r/discordapp/comments/82p8i6/a_basic_tutorial_on_how_to_get_the_most_out_of/ app.get('/:resourceId/oembed.json', (req, res) => { - let resourceId = req.ass.resourceId; + let { resourceId } = req.ass; // Build the oEmbed object & send the response let { opengraph, mimetype } = data[resourceId]; @@ -287,7 +287,7 @@ function startup() { // Delete file app.get('/:resourceId/delete/:deleteId', (req, res) => { - let resourceId = req.ass.resourceId; + let { resourceId } = req.ass; let deleteId = escape(req.params.deleteId); let fileData = data[resourceId]; @@ -317,5 +317,5 @@ function getTrueHttp() { } function getTrueDomain(d = domain) { - return d.concat((port == 80 || port == 443 || isProxied) ? '' : `:${port}`); + return d.concat((port === 80 || port === 443 || isProxied) ? '' : `:${port}`); } diff --git a/generators/gfycat.js b/generators/gfycat.js index 8d4ceec..a344cba 100644 --- a/generators/gfycat.js +++ b/generators/gfycat.js @@ -5,7 +5,7 @@ const MIN_LENGTH = require('../setup').gfyIdSize; function genString(count = MIN_LENGTH) { let gfycat = ''; - for (i = 0; i < (count < MIN_LENGTH ? MIN_LENGTH : count); i++) + for (let i = 0; i < (count < MIN_LENGTH ? MIN_LENGTH : count); i++) gfycat += getWord(adjectives, '-'); return gfycat.concat(getWord(animals)); }; diff --git a/generators/token.js b/generators/token.js index 68997aa..9013025 100644 --- a/generators/token.js +++ b/generators/token.js @@ -17,7 +17,7 @@ if (require.main === module) { // Generate the user let username = process.argv[2] ? process.argv[2].replace(/[^\da-z_]/gi, '').substring(0, MAX_USERNAME) : randomGen({ length: 20 }); if (!auth.users) auth.users = {}; - if (Object.values(auth.users).findIndex((user) => user.username == username) != -1) { + if (Object.values(auth.users).findIndex((user) => user.username === username) !== -1) { console.log('Username already exists!'); process.exit(1); } diff --git a/generators/zws.js b/generators/zws.js index 7f5b73d..95d8563 100644 --- a/generators/zws.js +++ b/generators/zws.js @@ -1,3 +1,3 @@ const { randomBytes } = require('crypto'); const zeroWidthChars = ['\u200B', '\u200C', '\u200D', '\u2060']; -module.exports = ({ length }) => [...randomBytes(length)].map(byte => zeroWidthChars[+byte % zeroWidthChars.length]).join('').slice(1) + zeroWidthChars[0]; +module.exports = ({ length }) => [...randomBytes(length)].map(byte => zeroWidthChars[Number(byte) % zeroWidthChars.length]).join('').slice(1) + zeroWidthChars[0]; diff --git a/metrics.js b/metrics.js index 2b5b2c0..8bdd2a3 100644 --- a/metrics.js +++ b/metrics.js @@ -13,7 +13,7 @@ module.exports = () => { Object.values(data).forEach(({ token, size }) => { try { totalSize += size; - if (token == null) oldSize += size; + if (token === undefined) oldSize += size; else { if (!users[token].size) users[token].size = 0; users[token].size += size; diff --git a/setup.js b/setup.js index 7a5e34e..776f35b 100755 --- a/setup.js +++ b/setup.js @@ -1,5 +1,5 @@ // Default configuration -var config = { +const config = { host: '0.0.0.0', port: 40115, domain: 'upload.example.com', @@ -26,7 +26,7 @@ if (require.main === module) { try { let existingConfig = require('./config.json'); - Object.keys(existingConfig).forEach((key) => config.hasOwnProperty(key) && (config[key] = existingConfig[key])) + Object.keys(existingConfig).forEach((key) => Object.prototype.hasOwnProperty.call(config, key) && (config[key] = existingConfig[key])) } catch (ex) { console.log(ex) } // Disabled the annoying "prompt: " prefix and removes colours @@ -153,19 +153,16 @@ if (require.main === module) { } }; - function setup() { - log('<<< ass setup >>>\n'); - let results; - prompt.get(setupSchema) - .then((r) => results = r) - .then(() => log('\nPlease verify your information:\n\n' + Object.keys(results).map((result) => (` ${result}: ${results[result]}`)).join('\n') + '\n')) - .then(() => prompt.get(confirmSchema)) - .then(({ confirm }) => confirm ? fs.writeJson(path('config.json'), results, { spaces: 4 }) : process.exit(1)) - .then(() => log('\nConfig has been saved!')) - .catch((err) => console.error(err)); - } - - setup(); + log('<<< ass setup >>>\n'); + let results = {}; + prompt.get(setupSchema) + .then((r) => results = r) + .then(() => Object.keys(results).map((result) => (` ${result}: ${results[result]}`)).join('\n')) + .then((resultString) => log(`\nPlease verify your information:\n\n${resultString}\n`)) + .then(() => prompt.get(confirmSchema)) + .then(({ confirm }) => confirm ? fs.writeJson(path('config.json'), results, { spaces: 4 }) : process.exit(1)) + .then(() => log('\nConfig has been saved!')) + .catch((err) => console.error(err)); } module.exports = config; diff --git a/storage.js b/storage.js index 77a273e..e42afd7 100644 --- a/storage.js +++ b/storage.js @@ -15,7 +15,7 @@ const s3 = new aws.S3({ const uploadS3 = multer({ storage: multerS3({ - s3: s3, + s3, bucket: s3bucket, acl: 'public-read', key: (req, file, cb) => cb(null, req.randomId.concat(getSafeExt(file.mimetype))), @@ -31,10 +31,10 @@ const uploadLocal = multer({ storage: multer.diskStorage({ destination: !saveWithDate ? diskFilePath : (_req, _file, cb) => { // Get current month and year - let [month, _day, year] = new Date().toLocaleDateString("en-US").split("/"); + let [month, , year] = new Date().toLocaleDateString('en-US').split('/'); - // Add 0 before single digit months eg ( 6 turns into 06) - let folder = `${diskFilePath}/${year}-${("0" + month).slice(-2)}`; + // Add 0 before single digit months (6 turns into 06) + let folder = `${diskFilePath}/${year}-${`0${month}`.slice(-2)}`; // Create folder if it doesn't exist fs.ensureDirSync(folder); diff --git a/thumbnails.js b/thumbnails.js index e4dac1c..37cb09c 100644 --- a/thumbnails.js +++ b/thumbnails.js @@ -10,7 +10,7 @@ const THUMBNAIL_SIZE = 512; function getCommand(src, dest) { return shell([ - ffmpeg, '-y', '-v', process.env.NODE_ENV == 'production' ? 'error' : 'debug', + ffmpeg, '-y', '-v', process.env.NODE_ENV === 'production' ? 'error' : 'debug', '-i', src, '-ss', '00:00:01.000', '-frames:v', '1', diff --git a/utils.js b/utils.js index d0bb7cd..87ef485 100755 --- a/utils.js +++ b/utils.js @@ -24,20 +24,20 @@ module.exports = { log: console.log, path: (...paths) => Path.join(__dirname, ...paths), saveData: (data) => fs.writeJsonSync(Path.join(__dirname, 'data.json'), data, { spaces: 4 }), - verify: (req, users) => req.headers.authorization && users.hasOwnProperty(req.headers.authorization), + verify: (req, users) => req.headers.authorization && Object.prototype.hasOwnProperty.call(users, req.headers.authorization), generateToken: () => token(), generateId: (mode, length, gfyLength, originalName) => GENERATORS.has(mode) ? GENERATORS.get(mode)({ length, gfyLength }) : originalName, formatBytes: (bytes, decimals = 2) => { if (bytes === 0) return '0 Bytes'; let sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; let i = Math.floor(Math.log(bytes) / Math.log(1024)); - return parseFloat((bytes / Math.pow(1024, i)).toFixed(decimals < 0 ? 0 : decimals)) + ' ' + sizes[i]; + return parseFloat((bytes / Math.pow(1024, i)).toFixed(decimals < 0 ? 0 : decimals)).toString().concat(` ${sizes[i]}`); }, randomHexColour: () => { // From: https://www.geeksforgeeks.org/javascript-generate-random-hex-codes-color/ let letters = "0123456789ABCDEF"; let colour = '#'; - for (var i = 0; i < 6; i++) - colour += letters[(Math.floor(Math.random() * 16))]; + for (let i = 0; i < 6; i++) + colour += letters[(Math.floor(Math.random() * letters.length))]; return colour; }, arrayEquals: (arr1, arr2) => arr1.length === arr2.length && arr1.slice().sort().every((value, index) => value === arr2.slice().sort()[index]),