Added testing

This commit is contained in:
Joe-Dowd
2020-04-01 21:04:04 +01:00
parent 1bff019a64
commit 5369d48eae
23 changed files with 1388 additions and 517 deletions

82
src/app.js Normal file
View File

@@ -0,0 +1,82 @@
var express = require('express');
// Create a service (the app object is just a callback).
var app = express();
var config = require('./config.js');
// Middleware
var corsMiddleware = require('./middleware/cors.js');
var loggerMiddleware = require('./middleware/logger.js');
// Routes
var getVideoSponsorTimes = require('./routes/getVideoSponsorTimes.js');
var submitSponsorTimes = require('./routes/submitSponsorTimes.js');
var voteOnSponsorTime = require('./routes/voteOnSponsorTime.js');
var viewedVideoSponsorTime = require('./routes/viewedVideoSponsorTime.js');
var setUsername = require('./routes/setUsername.js');
var getUsername = require('./routes/getUsername.js');
var shadowBanUser = require('./routes/shadowBanUser.js');
var addUserAsVIP = require('./routes/addUserAsVIP.js');
var getSavedTimeForUser = require('./routes/getSavedTimeForUser.js');
var getViewsForUser = require('./routes/getViewsForUser.js');
var getTopUsers = require('./routes/getTopUsers.js');
var getTotalStats = require('./routes/getTotalStats.js');
var getDaysSavedFormatted = require('./routes/getDaysSavedFormatted.js');
//setup CORS correctly
app.use(corsMiddleware);
app.use(loggerMiddleware);
//add the get function
app.get('/api/getVideoSponsorTimes', getVideoSponsorTimes);
//add the post function
app.get('/api/postVideoSponsorTimes', submitSponsorTimes);
app.post('/api/postVideoSponsorTimes', submitSponsorTimes);
//voting endpoint
app.get('/api/voteOnSponsorTime', voteOnSponsorTime);
app.post('/api/voteOnSponsorTime', voteOnSponsorTime);
//Endpoint when a sponsorTime is used up
app.get('/api/viewedVideoSponsorTime', viewedVideoSponsorTime);
app.post('/api/viewedVideoSponsorTime', viewedVideoSponsorTime);
//To set your username for the stats view
app.post('/api/setUsername', setUsername);
//get what username this user has
app.get('/api/getUsername', getUsername);
//Endpoint used to hide a certain user's data
app.post('/api/shadowBanUser', shadowBanUser);
//Endpoint used to make a user a VIP user with special privileges
app.post('/api/addUserAsVIP', addUserAsVIP);
//Gets all the views added up for one userID
//Useful to see how much one user has contributed
app.get('/api/getViewsForUser', getViewsForUser);
//Gets all the saved time added up (views * sponsor length) for one userID
//Useful to see how much one user has contributed
//In minutes
app.get('/api/getSavedTimeForUser', getSavedTimeForUser);
app.get('/api/getTopUsers', getTopUsers);
//send out totals
//send the total submissions, total views and total minutes saved
app.get('/api/getTotalStats', getTotalStats);
//send out a formatted time saved total
app.get('/api/getdayssavedformatted', getDaysSavedFormatted);
app.get('/database.db', function (req, res) {
res.sendfile("./databases/sponsortimes.db", { root: __dirname });
});
// Create an HTTP service.
module.exports = function createServer (callback) {
return app.listen(config.port, callback);
}

12
src/config.js Normal file
View File

@@ -0,0 +1,12 @@
var fs = require('fs');
var config = undefined;
// Check to see if launched in test mode
if (process.env.npm_lifecycle_script === 'node test.js') {
config = JSON.parse(fs.readFileSync('test.json'));
} else {
config = JSON.parse(fs.readFileSync('config.json'));
}
module.exports = config;

View File

@@ -1,6 +1,6 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var Sqlite3 = require('better-sqlite3');
var fs = require('fs');
let options = {
readonly: config.readOnly
@@ -9,6 +9,11 @@ let options = {
var db = new Sqlite3(config.db, options);
var privateDB = new Sqlite3(config.privateDB, options);
if (config.createDatabaseIfNotExist && !config.readOnly) {
if (fs.existsSync(config.dbSchema)) db.exec(fs.readFileSync(config.dbSchema).toString());
if (fs.existsSync(config.privateDBSchema)) privateDB.exec(fs.readFileSync(config.privateDBSchema).toString());
}
// Enable WAL mode checkpoint number
if (!config.readOnly && config.mode === "production") {
db.exec("PRAGMA journal_mode=WAL;");

View File

@@ -1,5 +1,5 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
module.exports = function logger (req, res, next) {
(config.mode === "development") && console.log('Request recieved: ' + req.url);

View File

@@ -1,5 +1,5 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var db = require('../databases/databases.js').db;
var getHash = require('../utils/getHash.js');

View File

@@ -1,5 +1,5 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var databases = require('../databases/databases.js');
var db = databases.db;

View File

@@ -1,6 +1,5 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var db = require('../databases/databases.js').db;
var getHash = require('../utils/getHash.js');

View File

@@ -1,5 +1,4 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var databases = require('../databases/databases.js');
var db = databases.db;

View File

@@ -1,5 +1,4 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var databases = require('../databases/databases.js');
var db = databases.db;

View File

@@ -1,5 +1,5 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
var getHash = require('../utils/getHash.js');
var getIP = require('../utils/getIP.js');
@@ -99,6 +99,7 @@ module.exports = async function voteOnSponsorTime(req, res) {
err && console.log(err);
return;
}
console.log(config.test);
request.post(config.discordReportChannelWebhookURL, {
json: {

View File

@@ -1,6 +1,8 @@
var crypto = require('crypto');
module.exports = function (value, times=5000) {
if (times <= 0) return "";
for (let i = 0; i < times; i++) {
let hashCreator = crypto.createHash('sha256');
value = hashCreator.update(value).digest('hex');

View File

@@ -1,5 +1,4 @@
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json'));
var config = require('../config.js');
// YouTube API
const YouTubeAPI = require("youtube-api");