Untitled
unknown
javascript
2 years ago
2.4 kB
7
Indexable
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const bcrypt = require("bcrypt");
const crypto = require("crypto");
const jwt = require("jsonwebtoken");
const { register } = require("module");
// const jwtSecret = "secretkey";
const app = express();
const port = process.env.PORT || 5500;
const users = [];
app.use(bodyParser.json()); // support json encoded bodies
app.post("/register", async (req, res) => {
try {
const existingUser = users.find(
(user) => user.username === req.body.username
);
if (existingUser) {
return res.status(409).send("User already exists");
}
const userSecretKey = generateSecretKey();
const hashedPassword = await bcrypt.hash(req.body.password, 10);
const user = {
username: req.body.username,
password: hashedPassword,
secretKey: userSecretKey,
};
users.push(user);
const token = jwt.sign({ username: user.username }, user.secretKey);
res.status(201).json({ token });
} catch (error) {
console.error(error);
res.status(500).send("Something went wrong");
}
});
app.get("/account", (req, res) => {
// return array users
res.send(users);
});
app.post("/login", async (req, res) => {
try {
const user = users.find((user) => user.username === req.body.username);
if (!user) {
return res.status(401).send("User not found");
}
const validPassword = await bcrypt.compare(
req.body.password,
user.password
);
if (!validPassword) {
return res.status(401).send("Invalid password");
}
// Generate a JWT token for the authenticated user
const token = jwt.sign({ username: user.username }, user.secretKey);
res.status(200).json({ token });
} catch (error) {
console.error(error);
res.status(500).send("Something went wrong");
}
});
app.use(express.static("public"));
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
function generateSecretKey() {
const secretKey = crypto.randomBytes(32).toString("hex");
return secretKey;
}
// Client-side code for HTML forms
Editor is loading...