53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
const express = require("express");
 | 
						|
const path = require("path");
 | 
						|
const bcrypt = require("bcrypt");
 | 
						|
const { createToken } = require("../utils/jwt");
 | 
						|
 | 
						|
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" });
 | 
						|
		}
 | 
						|
	});
 | 
						|
 | 
						|
	app.use("/", router);
 | 
						|
};
 |