2021-05-15 01:56:08 +08:00
|
|
|
const express = require("express");
|
2021-06-07 00:32:37 +08:00
|
|
|
const { config } = require("dotenv");
|
|
|
|
const path = require("path");
|
|
|
|
config({ path: path.join(__dirname, ".env") });
|
2021-05-15 01:56:08 +08:00
|
|
|
const bodyParser = require("body-parser");
|
|
|
|
const mongoose = require("mongoose");
|
2021-06-07 00:32:37 +08:00
|
|
|
const { MongoClient } = require("mongodb");
|
2021-06-01 11:47:58 +08:00
|
|
|
const cors = require("cors");
|
|
|
|
const admin = require("firebase-admin");
|
2021-06-03 23:19:27 +08:00
|
|
|
const helmet = require("helmet");
|
2021-05-21 02:38:58 +08:00
|
|
|
const { User } = require("./models/user");
|
2021-05-27 02:55:42 +08:00
|
|
|
const { Leaderboard } = require("./models/leaderboard");
|
2021-06-04 02:05:35 +08:00
|
|
|
const { BotCommand } = require("./models/bot-command");
|
2021-06-04 10:45:30 +08:00
|
|
|
const { Stats } = require("./models/stats");
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
// Firebase admin setup
|
|
|
|
//currently uses account key in functions to prevent repetition
|
2021-06-07 00:32:37 +08:00
|
|
|
const serviceAccount = require("./credentials/serviceAccountKey.json");
|
|
|
|
const { connectDB } = require("./init/mongodb");
|
2021-05-20 06:39:18 +08:00
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
admin.initializeApp({
|
|
|
|
credential: admin.credential.cert(serviceAccount),
|
|
|
|
});
|
2021-06-04 02:05:35 +08:00
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
// MIDDLEWARE & SETUP
|
2021-05-15 01:56:08 +08:00
|
|
|
const app = express();
|
2021-06-07 00:32:37 +08:00
|
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
app.use(express.json());
|
2021-06-01 11:47:58 +08:00
|
|
|
app.use(cors());
|
2021-06-03 23:19:27 +08:00
|
|
|
app.use(helmet());
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
const port = process.env.PORT || "5005";
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2021-06-07 00:32:37 +08:00
|
|
|
connectDB()
|
|
|
|
.then(() => {
|
|
|
|
app.listen(process.env.PORT, () => {
|
|
|
|
console.log(`listening on port ${process.env.PORT}`);
|
|
|
|
});
|
|
|
|
})
|
|
|
|
.catch((e) => {
|
|
|
|
console.log(e);
|
|
|
|
});
|
|
|
|
const authRouter = require("./api/routes/auth");
|
|
|
|
app.use("/auth", authRouter);
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
async function authenticateToken(req, res, next) {
|
2021-05-15 01:56:08 +08:00
|
|
|
const authHeader = req.headers["authorization"];
|
2021-06-01 11:47:58 +08:00
|
|
|
const token = await admin
|
|
|
|
.auth()
|
|
|
|
.verifyIdToken(req.headers.authorization.split(" ")[1]);
|
|
|
|
if (token == null) {
|
|
|
|
return res.sendStatus(401);
|
|
|
|
} else {
|
|
|
|
req.name = token.name;
|
|
|
|
req.uid = token.user_id;
|
2021-05-15 01:56:08 +08:00
|
|
|
next();
|
2021-06-01 11:47:58 +08:00
|
|
|
}
|
2021-05-15 01:56:08 +08:00
|
|
|
}
|
|
|
|
|
2021-05-20 06:39:18 +08:00
|
|
|
// NON-ROUTE FUNCTIONS
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2021-06-04 02:05:35 +08:00
|
|
|
|
2021-05-15 10:45:55 +08:00
|
|
|
|
2021-06-07 20:52:06 +08:00
|
|
|
//
|
|
|
|
// async function stripAndSave(uid, obj) {
|
|
|
|
// if (obj.bailedOut === false) delete obj.bailedOut;
|
|
|
|
// if (obj.blindMode === false) delete obj.blindMode;
|
|
|
|
// if (obj.difficulty === "normal") delete obj.difficulty;
|
|
|
|
// if (obj.funbox === "none") delete obj.funbox;
|
|
|
|
// //stripping english causes issues in result filtering; this line:
|
|
|
|
// //let langFilter = ResultFilters.getFilter("language", result.language);
|
|
|
|
// //returns false if language isn't defined in result
|
|
|
|
// //if (obj.language === "english") delete obj.language;
|
|
|
|
// if (obj.numbers === false) delete obj.numbers;
|
|
|
|
// if (obj.punctuation === false) delete obj.punctuation;
|
|
|
|
|
|
|
|
// await User.findOne({ uid: uid }, (err, user) => {
|
|
|
|
// user.results.push(obj);
|
|
|
|
// user.save();
|
|
|
|
// });
|
|
|
|
// }
|
2021-05-15 10:45:55 +08:00
|
|
|
|
2021-06-07 20:52:06 +08:00
|
|
|
|
2021-05-26 03:25:02 +08:00
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
// API
|
2021-05-20 06:39:18 +08:00
|
|
|
|
2021-06-07 20:52:06 +08:00
|
|
|
|
2021-05-22 23:15:58 +08:00
|
|
|
|
2021-05-27 02:55:42 +08:00
|
|
|
|
|
|
|
|
2021-06-05 07:41:16 +08:00
|
|
|
// BOT API
|
|
|
|
// Might want to move this to a seperate file and add some sort of middleware that can send error if the user is not found
|
|
|
|
|
2021-06-07 01:26:12 +08:00
|
|
|
app.use(function (e, req, res, next) {
|
|
|
|
console.log("Error", e);
|
|
|
|
return res.status(e.status || 500).json(e || {});
|
2021-05-15 01:56:08 +08:00
|
|
|
});
|