import * as express from "express"; import * as bodyparser from "body-parser"; import { isAuthenticated, performLogin } from "./security/auth"; const baseRouter = express.Router(); const authRouter = express.Router(); authRouter.use(bodyparser.json()); authRouter.use(async (req, res, next) => { if ("token" in req.body || req.get("token")) { const token = req.body.token || req.get("token"); // Check if were authenticated const auth = await isAuthenticated(token); if (auth) next(); else res.send({ error: "401", data: {}, }); } else { res.send({ error: "401", data: {}, }); } }); authRouter.get("/class/:id/topTen", async (req, res) => { if (!req.params) { res.send({ error: "400", data: { msg: "No class specified", }, }); return; } console.log("Stub: /auth/class/:id/topTen"); // TODO: Implement res.send({ error: "0", data: { topTen: [{ username: "User1", level: 5, score: 200, }, { username: "User2", level: 4, score: 100, }], } }); }); authRouter.get("/level/:id/vocab", async (req, res) => { if (!req.params) { res.send({ error: "400", data: { msg: "No level specified", }, }); return; } console.log("Stub: /auth/level/:id/vocab"); // TODO: Implement res.send({ error: "0", data: { vocab: [{ german: ["Wein"], hint: "Worte auf '-um' sind meistens NeutrUM", type: 0, latin: { grundform: "Vinum", genitiv: "Vini", genus: "Neutrum" }, id: 0 }], } }); }); const app = express(); app.use(bodyparser.json()); app.use((req, res, next) => { // TODO: Change this to our domain res.append("Access-Control-Allow-Origin", "*"); res.append("Access-Control-Allow-Headers", "Content-Type,Token"); if (res.method === "OPTIONS") { // TODO: Send 200 res.end(); } else { next(); } }); app.use("/auth", authRouter); app.get("/health", (req, res) => { res.send({ error: "0", data: { msg: "lol", }, }); }); app.post("/login", async (req, res) => { const { body } = req; console.log("Stub: /login"); // Check if all arguments were sent if (!body || !body.hasOwnProperty("username") || !body.hasOwnProperty("hash")) { res.send({ error: "400", data: { msg: "Username or password not specified", }, }); return; } // Try to log the user in const userData = await performLogin(body.username, body.hash) .catch((err) => { // If anything was wrong, just tell the client res.send({ error: "1", data: { msg: "Username or password is wrong", }, }); }); res.send({ error: "0", data: userData, }); }); app.listen(8080, () => { console.log("Starting on port 8080"); });