Skip to content

Commit c58e801

Browse files
authored
Merge pull request #19 from StackTheCode/fix/mvcrefactor
mvc refactoring
2 parents b1bf6aa + 3f63e13 commit c58e801

File tree

4 files changed

+85
-61
lines changed

4 files changed

+85
-61
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const bcrypt = require("bcrypt");
2+
const jwt = require("jsonwebtoken");
3+
4+
const users = [];
5+
const tokenBlacklist = [];
6+
7+
const JWT_SECRET = process.env.JWT_SECRET || "your_jwt_secret";
8+
const JWT_EXPIRES_IN = "1h";
9+
10+
exports.registerUser = async (req, res) => {
11+
const { email, password } = req.body;
12+
if (users.find(user => user.email === email)) {
13+
return res.status(400).json({ message: "User already exists" });
14+
}
15+
const hash = await bcrypt.hash(password, 10);
16+
users.push({ email, password: hash });
17+
res.json({ message: "User registered" });
18+
}
19+
exports.loginUser = async (req, res) => {
20+
const { email, password } = req.body;
21+
const user = users.find((u) => u.email === email);
22+
if (!user) return res.status(400).json({ message: "Invalid credentials" });
23+
24+
const match = await bcrypt.compare(password, user.password);
25+
if (!match) return res.status(400).json({ message: "Invalid credentials" });
26+
27+
const token = jwt.sign({ email }, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
28+
res.json({ token });
29+
}
30+
exports.logoutUser = (req, res) => {
31+
const { token } = req.body;
32+
tokenBlacklist.push(token);
33+
res.json({ message: "Logged out" });
34+
}
35+
36+
exports.getUsers =() => users;
37+
38+
exports.getBlacklist =() => tokenBlacklist;

server/index.js

Lines changed: 11 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,23 @@
11
const express = require("express");
2-
require("dotenv").config();
3-
const bcrypt = require("bcrypt");
4-
const jwt = require("jsonwebtoken");
52
const cors = require("cors");
3+
require("dotenv").config();
4+
65
const app = express();
7-
app.use(express.json());
8-
app.use(cors());
96
const PORT = process.env.PORT || 3000;
107

11-
const users = [];
12-
const tokenBlacklist=[];
13-
14-
const JWT_SECRET = process.env.JWT_SECRET || "your_jwt_secret";
15-
const JWT_EXPIRES_IN = "1h";
16-
17-
app.post("/signup",async (req, res) => {
18-
const { email, password } = req.body;
19-
if (users.find(user => user.email === email)) {
20-
return res.status(400).json({ message: "User already exists" });}
21-
const hash = await bcrypt.hash(password, 10);
22-
users.push({ email, password: hash });
23-
res.json({ message: "User registered" });
24-
});
25-
26-
app.post("/login", async (req, res) => {
27-
const { email, password } = req.body;
28-
const user = users.find((u) => u.email === email);
29-
if (!user) return res.status(400).json({ message: "Invalid credentials" });
30-
31-
const match = await bcrypt.compare(password, user.password);
32-
if (!match) return res.status(400).json({ message: "Invalid credentials" });
33-
34-
const token = jwt.sign({ email }, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
35-
res.json({ token });
36-
});
37-
38-
function authMiddleware(req, res, next) {
39-
const auth = req.headers.authorization;
40-
if (!auth) return res.status(401).json({ message: "No token" });
41-
42-
const token = auth.split(" ")[1];
43-
if (tokenBlacklist.includes(token)) {
44-
return res.status(403).json({ message: "Logged out" });
45-
}
46-
47-
try {
48-
const payload = jwt.verify(token, JWT_SECRET);
49-
req.user = payload;
50-
next();
51-
} catch {
52-
res.status(403).json({ message: "Invalid token" });
53-
}
54-
}
55-
56-
57-
app.get("/me", authMiddleware, (req, res) => {
58-
res.json({ user: req.user });
59-
});
8+
// Middleware
9+
app.use(express.json());
10+
app.use(cors());
6011

61-
app.post("/logout", (req, res) => {
62-
const { token } = req.body;
63-
tokenBlacklist.push(token);
64-
res.json({ message: "Logged out" });
65-
});
12+
// Routes
13+
const authRoutes = require("./routes/authRoutes");
14+
app.use("/api/auth", authRoutes);
6615

16+
// Root
6717
app.get("/", (req, res) => {
68-
res.send("Collab Canvas server is running!");
18+
res.send("Collab Canvas server is running!");
6919
});
7020

7121
app.listen(PORT, () => {
72-
console.log(`Server listening on port ${PORT}`);
22+
console.log(`Server listening on port ${PORT}`);
7323
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const jwt = require("jsonwebtoken");
2+
const { getBlacklist } = require("../controllers/authController");
3+
4+
const JWT_SECRET = process.env.JWT_SECRET || "your_jwt_secret";
5+
6+
exports.authMiddleware = (req, res, next) => {
7+
const auth = req.headers.authorization;
8+
if (!auth) return res.status(401).json({ message: "No token" });
9+
10+
const token = auth.split(" ")[1];
11+
if (tokenBlacklist.includes(token)) {
12+
return res.status(403).json({ message: "Logged out" });
13+
}
14+
15+
try {
16+
const payload = jwt.verify(token, JWT_SECRET);
17+
req.user = payload;
18+
next();
19+
} catch {
20+
res.status(403).json({ message: "Invalid token" });
21+
}
22+
}
23+

server/routes/authRoutes.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const express = require("express");
2+
const router = express.Router();
3+
const { registerUser, loginUser, logoutUser } = require("../controllers/authController");
4+
const { authMiddleware } = require("../middleware/authMiddleware");
5+
6+
router.post("/signup", registerUser);
7+
router.post("/login", loginUser);
8+
router.post("/logout", logoutUser);
9+
router.get("/me", authMiddleware, (req, res) => {
10+
res.json({ user: req.user });
11+
});
12+
13+
module.exports = router;

0 commit comments

Comments
 (0)