monkeytype/backend/server.js

98 lines
2.7 KiB
JavaScript
Raw Normal View History

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") });
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
2021-06-07 00:32:37 +08:00
const { MongoClient } = require("mongodb");
const cors = require("cors");
const admin = require("firebase-admin");
const helmet = require("helmet");
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");
const { Stats } = require("./models/stats");
// 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
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
2021-06-04 02:05:35 +08:00
// MIDDLEWARE & SETUP
const app = express();
2021-06-07 00:32:37 +08:00
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(cors());
app.use(helmet());
const port = process.env.PORT || "5005";
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);
async function authenticateToken(req, res, next) {
const authHeader = req.headers["authorization"];
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;
next();
}
}
2021-05-20 06:39:18 +08:00
// NON-ROUTE FUNCTIONS
2021-06-04 02:05:35 +08:00
2021-05-15 10:45:55 +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-05-26 03:25:02 +08:00
// API
2021-05-20 06:39:18 +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 || {});
});