From 1c1e4532138334e4e84641f085f0a67eca8eb00e Mon Sep 17 00:00:00 2001 From: William Oldham Date: Mon, 20 Jan 2025 12:13:47 +0000 Subject: [PATCH] style: make linting changes --- public/assets/js/account.js | 8 ++-- public/assets/js/docssidebarhandler.js | 2 +- public/assets/js/header-handler.js | 17 +++---- public/assets/js/miieditor.js | 22 ++++----- public/assets/js/progress-charts.js | 6 +-- public/assets/js/reset-password.js | 4 +- public/assets/js/upgrade.js | 20 ++++---- src/cache.js | 10 ++-- src/database.js | 2 +- src/middleware/redirect.js | 2 +- src/middleware/render-data.js | 4 +- src/routes/account.js | 28 +++++------ src/routes/blog.js | 22 ++++----- src/routes/docs.js | 14 +++--- src/routes/home.js | 10 ++-- src/routes/progress.js | 6 +-- src/server.js | 66 +++++++++++++------------- src/stripe.js | 20 ++++---- src/util.js | 23 +++++---- 19 files changed, 141 insertions(+), 145 deletions(-) diff --git a/public/assets/js/account.js b/public/assets/js/account.js index 6c8e360..7d42c68 100644 --- a/public/assets/js/account.js +++ b/public/assets/js/account.js @@ -7,7 +7,7 @@ editSettingsModalButtonClose?.addEventListener('click', () => { editSettingsModal.classList.add('hidden'); }); -document.addEventListener('click', event => { +document.addEventListener('click', (event) => { if (event.target.classList.contains('edit')) { event.preventDefault(); @@ -15,7 +15,7 @@ document.addEventListener('click', event => { } }); -serverSelectionSaveButton.addEventListener('click', event => { +serverSelectionSaveButton.addEventListener('click', (event) => { event.preventDefault(); const checkedInput = updateServerEnvironmentForm.querySelector('input:checked'); @@ -35,7 +35,7 @@ serverSelectionSaveButton.addEventListener('click', event => { }) }) .then(response => response.json()) - .then(json => { + .then((json) => { if (!json.error) { // TODO - Make this prettier alert('Saved server environment'); @@ -44,7 +44,7 @@ serverSelectionSaveButton.addEventListener('click', event => { alert('Failed to server environment'); } }) - .catch(error => { + .catch((error) => { console.log(error); // TODO - Make this prettier alert('Failed to server environment'); diff --git a/public/assets/js/docssidebarhandler.js b/public/assets/js/docssidebarhandler.js index b602fc4..f6b565d 100644 --- a/public/assets/js/docssidebarhandler.js +++ b/public/assets/js/docssidebarhandler.js @@ -1,6 +1,6 @@ const openSidebarBtn = document.querySelector('#openSidebar'); const content = document.querySelector('div.content'); -openSidebarBtn.addEventListener('click', function() { +openSidebarBtn.addEventListener('click', function () { const sidebar = document.querySelector('.sidebar'); sidebar.classList.toggle('open'); content.classList.toggle('open-sidebar'); diff --git a/public/assets/js/header-handler.js b/public/assets/js/header-handler.js index 5bccda6..4797ec2 100644 --- a/public/assets/js/header-handler.js +++ b/public/assets/js/header-handler.js @@ -1,5 +1,3 @@ -/* eslint-disable no-undef, no-unused-vars */ - const header = document.querySelector('header'); const dropdownButtonWrapper = document.querySelector('.dropdown-button-wrapper'); const dropdown = document.querySelector('header div.dropdown'); @@ -68,10 +66,9 @@ dropdownAnchors.forEach((a) => { }); }); - // make the header background transparent if near the top of the page function makeHeaderBackgroundTransparent() { - if(window.pageYOffset < 100) { + if (window.pageYOffset < 100) { header.classList.add('transparent'); } else { header.classList.remove('transparent'); @@ -83,7 +80,7 @@ window.addEventListener('scroll', () => { }); desktopDropdownBtns.forEach((btn) => { - [ 'click', 'mouseover' ].forEach((event) => { + ['click', 'mouseover'].forEach((event) => { btn.addEventListener(event, () => { const id = btn.id.replace('-button', ''); navbarDropdownHandler(id); @@ -114,7 +111,7 @@ dropdown.addEventListener('mouseleave', (e) => { }); // Account widget handler -const userWidgetToggle = document.querySelector('.user-widget-toggle') ; +const userWidgetToggle = document.querySelector('.user-widget-toggle'); const userWidget = document.querySelector('.user-widget'); // Open widget on click, close locale dropdown @@ -159,7 +156,7 @@ localeOptionsList.forEach((option) => { // close all dropdowns on scroll document.addEventListener('scroll', () => { - localeDropdownOptions.forEach((el) => el.classList.remove('active')); + localeDropdownOptions.forEach(el => el.classList.remove('active')); localeDropdownToggle.classList.remove('active'); userWidget?.classList.remove('active'); @@ -180,9 +177,9 @@ document.addEventListener('click', (e) => { if ( userWidget == targetElement || - userWidget?.contains(targetElement) || - userWidgetToggle == targetElement || - userWidgetToggle?.contains(targetElement) + userWidget?.contains(targetElement) || + userWidgetToggle == targetElement || + userWidgetToggle?.contains(targetElement) ) { found = true; localeDropdownToggle.classList.remove('active'); diff --git a/public/assets/js/miieditor.js b/public/assets/js/miieditor.js index d44c7c8..6cd8e94 100644 --- a/public/assets/js/miieditor.js +++ b/public/assets/js/miieditor.js @@ -62,12 +62,12 @@ function initializeMiiData(encodedUserMiiData) { console.log('grabbing rendered miis for later use'); const miiStudioNeutralUrl = mii.studioUrl({ width: 512, - bgColor: '13173300', + bgColor: '13173300' }); const miiStudioSorrowUrl = mii.studioUrl({ width: 512, bgColor: '13173300', - expression: 'sorrow', + expression: 'sorrow' }); document.querySelector('.mii-comparison img.old-mii').src = miiStudioNeutralUrl; document.querySelector('.mii-comparison.confirmed img.old-mii').src = miiStudioSorrowUrl; @@ -118,12 +118,12 @@ function renderMii(heightOverride, buildOverride) { baldMiiFaceImg.src = baldMii.studioUrl({ width: 512, bgColor: '13173300', - type: 'face_only', + type: 'face_only' }); miiFaceImg.src = mii.studioUrl({ width: 512, bgColor: '13173300', - type: 'face_only', + type: 'face_only' }); miiBodyImg.src = mii.studioAssetUrlBody(); } @@ -174,7 +174,7 @@ function renderMii(heightOverride, buildOverride) { if (!heightOverride && !buildOverride) { const faceMiiStudioUrl = mii.studioUrl({ width: 512, - bgColor: '13173300', + bgColor: '13173300' }); const faceMiiStudioSmileUrl = mii.studioUrl({ @@ -280,7 +280,7 @@ document 'mustacheType', 'moleEnabled', 'gender', - 'favoriteColor', + 'favoriteColor' ].forEach((prop) => { const el = document.querySelector(`#${prop}${mii[prop]}`); if (el) { @@ -326,7 +326,7 @@ console.log('[info] preselected value for disableSharing'); 'height', 'build', 'miiName', - 'creatorName', + 'creatorName' ].forEach((prop) => { document.querySelector(`#${prop}`).value = mii[prop]; document.querySelector(`#${prop}`).defaultValue = mii[prop]; @@ -390,10 +390,10 @@ function openTab(e, tabType) { // Here we bind all of the functions to the corresponding buttons document.querySelectorAll('.tabs button.tabbtn').forEach((el) => { - el.addEventListener('click', (e) => openTab(e, 'tab')); + el.addEventListener('click', e => openTab(e, 'tab')); }); document.querySelectorAll('.subtabs button.subtabbtn').forEach((el) => { - el.addEventListener('click', (e) => openTab(e, 'subtab')); + el.addEventListener('click', e => openTab(e, 'subtab')); }); // SUBPAGES @@ -487,10 +487,10 @@ document mii: { name: mii.miiName, primary: 'Y', - data: miiData, + data: miiData } }) - }) .then(({ status }) => { + }).then(({ status }) => { // TODO - Make this prettier alert('Mii has been updated. It may take some time for the cached image on the website to update'); diff --git a/public/assets/js/progress-charts.js b/public/assets/js/progress-charts.js index 6313d34..1bc8733 100644 --- a/public/assets/js/progress-charts.js +++ b/public/assets/js/progress-charts.js @@ -1,6 +1,6 @@ -/* eslint-disable no-undef */ -document.querySelectorAll('.feature-list-wrapper').forEach(progressListElement => { +/* global Chart -- chart.js */ +document.querySelectorAll('.feature-list-wrapper').forEach((progressListElement) => { // Find and generate all relevant data const percentageOverride = progressListElement.querySelector('canvas.percentage-chart').dataset.percentageoverride; const allFeatureNodes = progressListElement.querySelectorAll('.feature'); @@ -12,7 +12,7 @@ document.querySelectorAll('.feature-list-wrapper').forEach(progressListElement = const remainingPercentage = 100 - progressPercentage; // Set inner paragraph - progressListElement.querySelectorAll('.percentage-label').forEach(p => { + progressListElement.querySelectorAll('.percentage-label').forEach((p) => { if (progressPercentage === 0) { p.innerText = progressPercentage.toString() + '%'; } else { diff --git a/public/assets/js/reset-password.js b/public/assets/js/reset-password.js index 5b58f4f..f36cf6f 100644 --- a/public/assets/js/reset-password.js +++ b/public/assets/js/reset-password.js @@ -9,7 +9,7 @@ document.querySelector('form').addEventListener('submit', function (event) { method: 'POST', headers: { 'Accept': 'application/json', - 'Content-Type': 'application/json', + 'Content-Type': 'application/json' }, body: JSON.stringify({ password: passwordInput.value, @@ -18,7 +18,7 @@ document.querySelector('form').addEventListener('submit', function (event) { }) }) .then(response => response.json()) - .then(body => { + .then((body) => { if (body.error) { alert(`Error: ${body.error}. TODO: red error message thing`); } else { diff --git a/public/assets/js/upgrade.js b/public/assets/js/upgrade.js index 104acbb..7e19175 100644 --- a/public/assets/js/upgrade.js +++ b/public/assets/js/upgrade.js @@ -3,13 +3,13 @@ const buttons = { unsubModal: { show: document.getElementById('unsubModalShowButton'), close: document.getElementById('unsubModalCloseButton'), - confirm: document.getElementById('unsubModalConfirmButton'), + confirm: document.getElementById('unsubModalConfirmButton') }, switchTierModal: { show: document.getElementById('switchTierShowButton'), close: document.getElementById('switchTierCloseButton'), - confirm: document.getElementById('switchTierConfirmButton'), - }, + confirm: document.getElementById('switchTierConfirmButton') + } }; const currentTierID = document.querySelector('form').dataset.currentTier || undefined; @@ -52,7 +52,7 @@ if (currentTierElement) { } // If a tier is selected, conditionally enable the submit button. -document.querySelector('form').addEventListener('change', function(e) { +document.querySelector('form').addEventListener('change', function (e) { e.preventDefault(); // If the selected tier is the current tier, set the button to disabled. Else we enable the button @@ -60,7 +60,7 @@ document.querySelector('form').addEventListener('change', function(e) { }); // handle the submit button -buttons.submit.addEventListener('click', function(e) { +buttons.submit.addEventListener('click', function (e) { e.preventDefault(); // If the user is already subscribed to another tier, we show the confirm modal, else if this is a new subscription we submit the form. @@ -77,7 +77,7 @@ buttons.submit.addEventListener('click', function(e) { } }); -buttons.unsubModal.show.addEventListener('click', function(e) { +buttons.unsubModal.show.addEventListener('click', function (e) { e.preventDefault(); const tierNameSpan = document.querySelector('#unsub .modal-caption span'); @@ -87,27 +87,27 @@ buttons.unsubModal.show.addEventListener('click', function(e) { document.body.classList.add('modal-open'); document.querySelector('.modal-wrapper#unsub').classList.remove('hidden'); }); -buttons.unsubModal.close.addEventListener('click', function(e) { +buttons.unsubModal.close.addEventListener('click', function (e) { e.preventDefault(); // Hide the unsubscribe modal document.body.classList.remove('modal-open'); document.querySelector('.modal-wrapper#unsub').classList.add('hidden'); }); -buttons.unsubModal.confirm.addEventListener('click', function(e) { +buttons.unsubModal.confirm.addEventListener('click', function (e) { e.preventDefault(); submitForm(true); }); -buttons.switchTierModal.close.addEventListener('click', function(e) { +buttons.switchTierModal.close.addEventListener('click', function (e) { e.preventDefault(); // Hide the switch tier modal document.body.classList.remove('modal-open'); document.querySelector('.modal-wrapper#switchtier').classList.add('hidden'); }); -buttons.switchTierModal.confirm.addEventListener('click', function(e) { +buttons.switchTierModal.confirm.addEventListener('click', function (e) { e.preventDefault(); submitForm(false); diff --git a/src/cache.js b/src/cache.js index 68f8838..1389d56 100644 --- a/src/cache.js +++ b/src/cache.js @@ -1,11 +1,11 @@ const { GraphQLClient, gql } = require('graphql-request'); const Stripe = require('stripe'); -const logger = require('./logger'); const config = require('../config.json'); +const logger = require('./logger'); const github = new GraphQLClient('https://api.github.com/graphql', { headers: { - Authorization: `bearer ${config.github.graphql_token}`, + Authorization: `bearer ${config.github.graphql_token}` } }); @@ -82,7 +82,7 @@ let stripeDonationCache = { sections: [] }; -async function getGitHubProjectsV2(after='') { +async function getGitHubProjectsV2(after = '') { let projects = []; const data = await github.request(getProjectsV2GQL, { @@ -94,7 +94,7 @@ async function getGitHubProjectsV2(after='') { projects.push({ id: node.id, title: node.title, - url: node.repositories.nodes[0]?.url, + url: node.repositories.nodes[0]?.url }); } @@ -108,7 +108,7 @@ async function getGitHubProjectsV2(after='') { return projects; } -async function getGitHubProjectsV2Fields(id, after='') { +async function getGitHubProjectsV2Fields(id, after = '') { let fields = []; const data = await github.request(getProjectsV2FieldsGQL, { diff --git a/src/database.js b/src/database.js index 751b649..fe1b070 100644 --- a/src/database.js +++ b/src/database.js @@ -1,6 +1,6 @@ const mongoose = require('mongoose'); -const PNIDSchema = require('./schema/pnid'); const config = require('../config.json'); +const PNIDSchema = require('./schema/pnid'); const accountServerConfig = config.database.account; const { connection_string, options } = accountServerConfig; diff --git a/src/middleware/redirect.js b/src/middleware/redirect.js index d1e5d38..6aa9de5 100644 --- a/src/middleware/redirect.js +++ b/src/middleware/redirect.js @@ -2,7 +2,7 @@ async function redirectMiddleware(request, response, next) { if (request.path.startsWith('/account/logout')) { return next(); } - + if (request.method === 'POST') { request.redirect = request.body.redirect?.startsWith('/') ? request.body.redirect : null; } diff --git a/src/middleware/render-data.js b/src/middleware/render-data.js index e518285..94c62df 100644 --- a/src/middleware/render-data.js +++ b/src/middleware/render-data.js @@ -1,6 +1,6 @@ +const fs = require('fs'); const util = require('../util'); const database = require('../database'); -const fs = require('fs'); const localeFileNames = fs.readdirSync(`${__dirname}/../../locales`); async function renderDataMiddleware(request, response, next) { @@ -16,7 +16,7 @@ async function renderDataMiddleware(request, response, next) { const reqLocale = request.cookies.preferredLocale || request.locale.toString(); const locale = util.getLocale(reqLocale); - let localeList = localeFileNames.map(locale => { + let localeList = localeFileNames.map((locale) => { const code = locale.replace('.json', '').replace('_', '-'); // Check if it's a real language code, or a custom one diff --git a/src/routes/account.js b/src/routes/account.js index bff830f..aea3a8c 100644 --- a/src/routes/account.js +++ b/src/routes/account.js @@ -1,5 +1,5 @@ -const express = require('express'); const crypto = require('crypto'); +const express = require('express'); const DiscordOauth2 = require('discord-oauth2'); const Stripe = require('stripe'); const { REST: DiscordRest } = require('@discordjs/rest'); @@ -11,7 +11,7 @@ const util = require('../util'); const { handleStripeEvent } = require('../stripe'); const logger = require('../logger'); const config = require('../../config.json'); -const editorJSON = require('../json/miieditor.json'); +const editorJSON = require('../json/miieditor.json'); const { Router } = express; @@ -60,7 +60,7 @@ router.get('/', requireLoginMiddleware, async (request, response) => { // If no Discord account linked, generate an auth URL const discordAuthURL = discordOAuth.generateAuthUrl({ scope: ['identify', 'guilds'], - state: crypto.randomBytes(16).toString('hex'), + state: crypto.randomBytes(16).toString('hex') }); renderData.discordAuthURL = discordAuthURL; @@ -155,8 +155,8 @@ router.get('/forgot-password', async (request, response) => { const renderData = { input: request.cookies.input, success_message: request.cookies.success_message, - error_message: request.cookies.error_message, - } + error_message: request.cookies.error_message + }; response.clearCookie('input', { domain: '.pretendo.network' }); @@ -172,7 +172,7 @@ router.post('/forgot-password', async (request, response) => { await util.forgotPassword({ input, hCaptchaResponse - }) + }); response.clearCookie('input', { domain: '.pretendo.network' }); @@ -201,9 +201,9 @@ router.get('/connect/discord', requireLoginMiddleware, async (request, response) tokens = await discordOAuth.tokenRequest({ code: request.query.code, scope: 'identify guilds', - grantType: 'authorization_code', + grantType: 'authorization_code' }); - } catch (error) { + } catch (ignored) { response.cookie('error_message', 'Invalid Discord authorization code. Please try again', { domain: '.pretendo.network' }); return response.redirect('/account'); } @@ -291,7 +291,7 @@ router.get('/upgrade', requireLoginMiddleware, async (request, response) => { renderData.tiers = products .filter(product => product.active) .sort((a, b) => +a.metadata.tier_level - +b.metadata.tier_level) - .map(product => { + .map((product) => { const price = prices.find(price => price.id === product.default_price); const perks = []; @@ -309,7 +309,7 @@ router.get('/upgrade', requireLoginMiddleware, async (request, response) => { name: product.name, description: product.description, perks, - price: (price.unit_amount / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }), + price: (price.unit_amount / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }) }; }); @@ -358,8 +358,8 @@ router.post('/stripe/checkout/:priceId', requireLoginMiddleware, async (request, line_items: [ { price: priceId, - quantity: 1, - }, + quantity: 1 + } ], customer: customer.id, mode: 'subscription', @@ -391,9 +391,9 @@ router.post('/stripe/unsubscribe', requireLoginMiddleware, async (request, respo const updateData = { 'connections.stripe.subscription_id': null, - 'connections.stripe.price_id': null, + 'connections.stripe.price_id': null, 'connections.stripe.tier_level': 0, - 'connections.stripe.tier_name': null, + 'connections.stripe.tier_name': null }; if (pnid.get('access_level') < 2) { diff --git a/src/routes/blog.js b/src/routes/blog.js index 2e80238..cadb59a 100644 --- a/src/routes/blog.js +++ b/src/routes/blog.js @@ -1,11 +1,11 @@ -const { Router } = require('express'); -const logger = require('../logger'); -const router = new Router(); - const fs = require('fs'); const path = require('path'); +const { Router } = require('express'); const { marked } = require('marked'); const matter = require('gray-matter'); +const logger = require('../logger'); + +const router = new Router(); const postList = () => { const files = fs.readdirSync('blogposts'); @@ -23,7 +23,7 @@ const postList = () => { const { data: postInfo } = matter(rawPost); return { slug, - postInfo, + postInfo }; }); @@ -35,7 +35,7 @@ const postList = () => { }; router.get('/', async (request, response) => { - const renderData = { + const renderData = { postList }; @@ -44,7 +44,6 @@ router.get('/', async (request, response) => { // RSS feed router.get('/feed.xml', async (request, response) => { - // Adds the pubDate and the cover_extension to the post array const posts = postList().map((post) => { post.postInfo.pubDate = new Date(post.postInfo.date).toUTCString(); @@ -60,10 +59,9 @@ router.get('/feed.xml', async (request, response) => { }); router.get('/:slug', async (request, response, next) => { - - const renderData = { + const renderData = { layout: 'blog-opengraph', - postList, + postList }; // Get the name of the post from the URL @@ -73,13 +71,13 @@ router.get('/:slug', async (request, response, next) => { let rawPost; try { rawPost = fs.readFileSync(path.join('blogposts', `${postName}.md`), 'utf-8'); - } catch(err) { + } catch (err) { logger.error(err); next(); return; } // Convert the post info into JSON and separate it and the content - // eslint-disable-next-line prefer-const + let { data: postInfo, content } = matter(rawPost); renderData.postInfo = postInfo; diff --git a/src/routes/docs.js b/src/routes/docs.js index 97277dc..6f5aeb6 100644 --- a/src/routes/docs.js +++ b/src/routes/docs.js @@ -13,7 +13,7 @@ router.get('/', async (request, response) => { router.get('/welcome', async (request, response) => { const renderData = { - currentPage: 'welcome', + currentPage: 'welcome' }; response.render('docs/welcome', renderData); @@ -21,7 +21,7 @@ router.get('/welcome', async (request, response) => { router.get('/install', async (request, response) => { const renderData = { - currentPage: 'install', + currentPage: 'install' }; response.render('docs/install', renderData); @@ -29,11 +29,11 @@ router.get('/install', async (request, response) => { router.get([ '/search', // TODO - Deprecate search page - '/errors', + '/errors' ], async (_request, response) => { const renderData = { errorList: JSON.stringify(errorList), - currentPage: 'errors', + currentPage: 'errors' }; response.render('docs/search', renderData); @@ -44,7 +44,7 @@ router.get('/error', async (_request, response) => { }); router.get('/:page', async (request, response, next) => { - const renderData = {}; + const renderData = {}; const locale = response.locals.localeString; const pageName = request.params.page; @@ -63,12 +63,12 @@ router.get('/:page', async (request, response, next) => { router.get([ '/errors/:errorCode', // TODO - Deprecate "errors" route - '/error/:errorCode', + '/error/:errorCode' ], async (request, response, next) => { const locale = response.locals.localeString; const error = request.params.errorCode; - const [ sysmodule, errorCode ] = error.split('-'); + const [sysmodule, errorCode] = error.split('-'); if (!errorCode) { return next(); diff --git a/src/routes/home.js b/src/routes/home.js index a86e5ad..c5eaac8 100644 --- a/src/routes/home.js +++ b/src/routes/home.js @@ -1,10 +1,10 @@ const { Router } = require('express'); -const router = new Router(); - const { getGithubProjectsCache } = require('../cache'); +const router = new Router(); + router.get('/', async (request, response) => { - const renderData = {}; + const renderData = {}; const githubProjectsCache = await getGithubProjectsCache(); @@ -48,7 +48,7 @@ router.get('/', async (request, response) => { }; // Calculates individual completion percentages and progress states - githubProjectsCache.sections.forEach(section => { + githubProjectsCache.sections.forEach((section) => { const { todo, in_progress, done } = section.cards; // Calculates the completion percentage of the project, and sums it to the total @@ -57,7 +57,7 @@ router.get('/', async (request, response) => { const sectionTitle = `${section.title} [${Math.floor(sectionCompletionPercentage * 100)}%]`; - switch(sectionCompletionPercentage) { + switch (sectionCompletionPercentage) { case 0: totalProgress.cards.todo.push(sectionTitle); break; diff --git a/src/routes/progress.js b/src/routes/progress.js index 1de949e..9e43225 100644 --- a/src/routes/progress.js +++ b/src/routes/progress.js @@ -1,10 +1,10 @@ const { Router } = require('express'); -const router = new Router(); - const { getGithubProjectsCache, getStripeDonationCache } = require('../cache'); +const router = new Router(); + router.get('/', async (request, response) => { - const renderData = { + const renderData = { progressLists: await getGithubProjectsCache(), donationCache: await getStripeDonationCache() }; diff --git a/src/server.js b/src/server.js index 04c714b..a0c023c 100644 --- a/src/server.js +++ b/src/server.js @@ -8,55 +8,58 @@ const handlebars = require('express-handlebars'); const morgan = require('morgan'); const expressLocale = require('express-locale'); const cookieParser = require('cookie-parser'); -//const Stripe = require('stripe'); +// const Stripe = require('stripe'); +const config = require('../config.json'); const redirectMiddleware = require('./middleware/redirect'); const renderDataMiddleware = require('./middleware/render-data'); const database = require('./database'); -const util = require('./util'); const logger = require('./logger'); -const config = require('../config.json'); const { http: { port } } = config; const app = express(); -//const stripe = new Stripe(config.stripe.secret_key); +// const stripe = new Stripe(config.stripe.secret_key); logger.info('Setting up Middleware'); app.use(morgan('dev')); -//app.use(express.json()); -app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } })); +// app.use(express.json()); +app.use(express.json({ + verify: (req, res, buf) => { + req.rawBody = buf; + } +})); app.use(express.urlencoded({ extended: true })); app.use(cookieParser()); app.use(expressLocale({ - 'priority': ['cookie', 'accept-language', 'map', 'default'], + priority: ['cookie', 'accept-language', 'map', 'default'], cookie: { name: 'preferredLocale' }, // Map unavailable regions to available locales from the same language map: { /* TODO: map more regions to the available locales */ - en: 'en-US', 'en-AU': 'en-US', 'en-CA': 'en-US', - ar: 'ar-AR', - ca: 'ca-ES', - cs: 'cs-CZ', - cn: 'zh-CN', - de: 'de-DE', - nl: 'nl-NL', - es: 'es-ES', - fr: 'fr-FR', 'fr-CA': 'fr-FR', 'fr-CH': 'fr-FR', - fi: 'fi-FI', - it: 'it-IT', 'it-CH': 'it-IT', - ja: 'ja-JP', - kk: 'kk-KZ', - ko: 'ko-KR', - nb: 'nb-NO', - no: 'nb-NO', - pl: 'pl-PL', - pt: 'pt-BR', - ro: 'ro-RO', - ru: 'ru-RU', - sr: 'sr-RS', - tr: 'tr-TR', - uk: 'uk-UA', + 'en': 'en-US', 'en-AU': 'en-US', 'en-CA': 'en-US', + 'ar': 'ar-AR', + 'ca': 'ca-ES', + 'cs': 'cs-CZ', + 'cn': 'zh-CN', + 'de': 'de-DE', + 'nl': 'nl-NL', + 'es': 'es-ES', + 'fr': 'fr-FR', 'fr-CA': 'fr-FR', 'fr-CH': 'fr-FR', + 'fi': 'fi-FI', + 'it': 'it-IT', 'it-CH': 'it-IT', + 'ja': 'ja-JP', + 'kk': 'kk-KZ', + 'ko': 'ko-KR', + 'nb': 'nb-NO', + 'no': 'nb-NO', + 'pl': 'pl-PL', + 'pt': 'pt-BR', + 'ro': 'ro-RO', + 'ru': 'ru-RU', + 'sr': 'sr-RS', + 'tr': 'tr-TR', + 'uk': 'uk-UA' }, allowed: [ 'en', 'en-US', 'en-GB', 'en-AU', 'en-CA', @@ -84,7 +87,7 @@ app.use(expressLocale({ 'uk', 'uk-UA', 'en@uwu' ], - 'default': 'en-US' + default: 'en-US' })); app.use(redirectMiddleware); app.use(renderDataMiddleware); @@ -117,7 +120,6 @@ logger.info('Creating 404 status handler'); // This works because it is the last router created // Meaning the request could not find a valid router app.use((request, response) => { - const fullUrl = util.fullUrl(request); response.render('404'); }); diff --git a/src/stripe.js b/src/stripe.js index eddb382..839bf6b 100644 --- a/src/stripe.js +++ b/src/stripe.js @@ -1,9 +1,9 @@ const Stripe = require('stripe'); +const config = require('../config.json'); const mailer = require('./mailer'); const util = require('./util'); const database = require('./database'); const logger = require('./logger'); -const config = require('../config.json'); const stripe = new Stripe(config.stripe.secret_key); @@ -95,12 +95,12 @@ async function handleStripeEvent(event) { if (subscription.status === 'canceled' && currentSubscriptionId && subscription.id !== currentSubscriptionId) { // Canceling old subscription, do nothing but update webhook date and remove Discord roles if (product.metadata.beta === 'true') { - util.removeDiscordMemberTesterRole(discordId).catch(error => { + util.removeDiscordMemberTesterRole(discordId).catch((error) => { logger.error(`Error removing user Discord tester role | ${customer.id}, ${discordId}, ${pid} | - ${error.message}`); }); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -123,7 +123,7 @@ async function handleStripeEvent(event) { 'connections.stripe.price_id': subscription.status === 'active' ? subscription.plan.id : null, 'connections.stripe.tier_level': subscription.status === 'active' ? Number(product.metadata.tier_level || 0) : 0, 'connections.stripe.tier_name': subscription.status === 'active' ? product.name : null, - 'connections.stripe.latest_webhook_timestamp': event.created, + 'connections.stripe.latest_webhook_timestamp': event.created }; if (product.metadata.beta === 'true') { @@ -133,7 +133,7 @@ async function handleStripeEvent(event) { updateData.server_access_level = 'test'; } - util.assignDiscordMemberTesterRole(discordId).catch(error => { + util.assignDiscordMemberTesterRole(discordId).catch((error) => { logger.error(`Error assigning user Discord tester role | ${customer.id}, ${discordId}, ${pid} | - ${error.message}`); }); } else { @@ -144,7 +144,7 @@ async function handleStripeEvent(event) { updateData.server_access_level = 'prod'; } - util.removeDiscordMemberTesterRole(discordId).catch(error => { + util.removeDiscordMemberTesterRole(discordId).catch((error) => { logger.error(`Error removing user Discord tester role | ${customer.id}, ${discordId}, ${pid} | - ${error.message}`); }); } @@ -188,7 +188,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.assignDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.assignDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error assigning user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -215,7 +215,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -242,7 +242,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); @@ -269,7 +269,7 @@ async function handleStripeEvent(event) { logger.error(`Error sending email | ${customer.id}, ${customer.email}, ${pid} | - ${error.message}`); } - util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch(error => { + util.removeDiscordMemberSupporterRole(discordId, product.metadata.discord_role_id).catch((error) => { logger.error(`Error removing user Discord supporter role | ${customer.id}, ${discordId}, ${pid}, ${product.metadata.discord_role_id} | - ${error.message}`); }); diff --git a/src/util.js b/src/util.js index 0059311..48e0da4 100644 --- a/src/util.js +++ b/src/util.js @@ -1,13 +1,13 @@ const path = require('path'); +const crypto = require('crypto'); const fs = require('fs-extra'); const got = require('got'); -const crypto = require('crypto'); const { marked } = require('marked'); const { REST: DiscordRest } = require('@discordjs/rest'); const { Routes: DiscordRoutes } = require('discord-api-types/v10'); const merge = require('lodash.merge'); -const logger = require('./logger'); const config = require('../config.json'); +const logger = require('./logger'); const baseLocale = require(`${__dirname}/../locales/en_US.json`); const discordRest = new DiscordRest({ version: '10' }).setToken(config.discord.bot_token); @@ -34,14 +34,13 @@ function getLocale(locale) { } function getRawDocs(locale, subpath, pageName) { - const localePath = path.join(__dirname, '../docs', locale.replace('-', '_'), subpath, `${pageName}.md`); const defaultPath = path.join(__dirname, '../docs', 'en_US', subpath, `${pageName}.md`); if (fs.existsSync(localePath)) { return { content: parseDocs(fs.readFileSync(localePath, 'utf8')), - MDLocale: locale, + MDLocale: locale }; } else if (fs.existsSync(defaultPath)) { return { @@ -77,7 +76,7 @@ function apiGetRequest(path, headers) { responseType: 'json', throwHttpErrors: false, https: { - rejectUnauthorized: false, // Needed for self-signed certificates on localhost testing + rejectUnauthorized: false // Needed for self-signed certificates on localhost testing }, headers }); @@ -88,7 +87,7 @@ function apiPostRequest(path, headers, json) { responseType: 'json', throwHttpErrors: false, https: { - rejectUnauthorized: false, // Needed for self-signed certificates on localhost testing + rejectUnauthorized: false // Needed for self-signed certificates on localhost testing }, headers, json @@ -99,7 +98,7 @@ function apiDeleteRequest(path, headers, json) { return got.delete(`${config.api_base}${path}`, { throwHttpErrors: false, https: { - rejectUnauthorized: false, // Needed for self-signed certificates on localhost testing + rejectUnauthorized: false // Needed for self-signed certificates on localhost testing }, headers, json @@ -162,9 +161,9 @@ async function refreshLogin(request, response) { request.cookies.token_type = tokens.token_type; } -async function getUserAccountData(request, response, fromRetry=false) { +async function getUserAccountData(request, response, fromRetry = false) { const apiResponse = await apiGetRequest('/v1/user', { - 'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}` + Authorization: `${request.cookies.token_type} ${request.cookies.access_token}` }); if (apiResponse.statusCode !== 200 && fromRetry === true) { @@ -180,9 +179,9 @@ async function getUserAccountData(request, response, fromRetry=false) { return apiResponse.body; } -async function updateDiscordConnection(discordUser, request, response, fromRetry=false) { +async function updateDiscordConnection(discordUser, request, response, fromRetry = false) { const apiResponse = await apiPostRequest('/v1/connections/add/discord', { - 'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}` + Authorization: `${request.cookies.token_type} ${request.cookies.access_token}` }, { data: { id: discordUser.id @@ -202,7 +201,7 @@ async function updateDiscordConnection(discordUser, request, response, fromRetry async function removeDiscordConnection(request, response, fromRetry = false) { const apiResponse = await apiDeleteRequest('/v1/connections/remove/discord', { - 'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}` + Authorization: `${request.cookies.token_type} ${request.cookies.access_token}` }); if (apiResponse.statusCode !== 200 && fromRetry === true) {