mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-03-21 17:24:28 -05:00
style: make linting changes
This commit is contained in:
parent
e63adcd63f
commit
1c1e453213
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
10
src/cache.js
10
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, {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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}`);
|
||||
});
|
||||
|
||||
|
|
|
|||
23
src/util.js
23
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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user