75 lines
1.7 KiB
JavaScript
75 lines
1.7 KiB
JavaScript
const express = require("express");
|
|
const path = require("path");
|
|
const bcrypt = require("bcrypt");
|
|
const { createToken } = require("../utils/jwt");
|
|
const { authenticateToken } = require("../middleware/auth");
|
|
|
|
let router = express.Router();
|
|
|
|
module.exports = (app, db) => {
|
|
router.get("/", (_, res) => {
|
|
res.sendFile(path.join(__dirname, "../public/dashboard.html"));
|
|
});
|
|
|
|
router.get("/login", (_, res) => {
|
|
res.sendFile(path.join(__dirname, "../public/login.html"));
|
|
});
|
|
|
|
router.post("/api/login", async (req, res) => {
|
|
const { email, password } = req.body;
|
|
|
|
try {
|
|
const [rows] = await db.query(
|
|
"SELECT * FROM users WHERE email = ?",
|
|
[email],
|
|
);
|
|
const user = rows[0];
|
|
const isMatch = await bcrypt.compare(
|
|
password,
|
|
user?.password || "!@#",
|
|
);
|
|
|
|
if (!user || !isMatch) {
|
|
return res
|
|
.status(401)
|
|
.json({ message: "Invalid email or password" });
|
|
}
|
|
|
|
const token = createToken({
|
|
id: user.id,
|
|
email: user.email,
|
|
name: user.name,
|
|
});
|
|
return res
|
|
.status(200)
|
|
.json({ token, user: { name: user.name, email: user.email } });
|
|
} catch (err) {
|
|
console.error("Login error:", err);
|
|
return res.status(500).json({ message: "Internal Server Error" });
|
|
}
|
|
});
|
|
|
|
router.get("/api/profile", authenticateToken, async (req, res) => {
|
|
const userId = req.user?.id;
|
|
|
|
try {
|
|
const [rows] = await db.query("SELECT * FROM users WHERE id = ?", [
|
|
userId,
|
|
]);
|
|
const user = rows[0];
|
|
|
|
return res.status(200).json({
|
|
user: {
|
|
name: user.name,
|
|
confirm_count: user.confirm_count,
|
|
},
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
return res.status(500).json({ message: "Internal Server Error" });
|
|
}
|
|
});
|
|
|
|
app.use("/", router);
|
|
};
|