added try catches and jwt

This commit is contained in:
slawk0
2024-10-04 22:13:17 +02:00
parent 03892f0371
commit cb90cb3498
3 changed files with 71 additions and 9 deletions

View File

@@ -2,9 +2,28 @@ const jwt = require("jsonwebtoken");
const jwtSecret = process.env.JWT_SECRET;
function generateJwtToken(username) {
jwt.sign(username, jwtSecret, { expiresIn: "30d" });
try {
return jwt.sign(
{ username },
jwtSecret,
{ algorithm: "HS256" },
{ expiresIn: "30d" },
);
} catch (e) {
console.error("Failed to generate JWT token ", e);
}
}
function verifyJwtToken(token) {
try {
const decoded = jwt.verify(token, jwtSecret);
return decoded.username;
} catch (e) {
console.error("Failed to verify JWT token ", e);
}
}
module.exports = {
generateJwtToken,
verifyJwtToken,
};

View File

@@ -27,7 +27,8 @@ client
// Creating database tables
async function createTables() {
await client.query(`
try {
await client.query(`
CREATE TABLE IF NOT EXISTS accounts (
username VARCHAR(20),
password VARCHAR(128),
@@ -35,8 +36,12 @@ async function createTables() {
created_at VARCHAR(100)
);
`);
} catch (e) {
console.error("Failed to create accounts table ", e);
}
await client.query(`
try {
await client.query(`
CREATE TABLE IF NOT EXISTS messages (
sender_id VARCHAR(128),
receiver_id VARCHAR(128),
@@ -45,6 +50,9 @@ async function createTables() {
message_id SERIAL PRIMARY KEY
);
`);
} catch (e) {
console.error("Failed to create messages table ", e);
}
}
async function insertUser(username, password, user_id, created_at) {
@@ -52,7 +60,11 @@ async function insertUser(username, password, user_id, created_at) {
INSERT INTO accounts (username, password, user_id, created_at)
VALUES ($1, $2, $3, $4);
`;
client.query(query, [username, password, user_id, created_at]);
try {
client.query(query, [username, password, user_id, created_at]);
} catch (e) {
console.error("Failed to insert user ", e);
}
}
async function insertMessage(sender_id, receiver_id, message) {
@@ -61,7 +73,11 @@ async function insertMessage(sender_id, receiver_id, message) {
VALUES ($1, $2, $3)
RETURNING id;
`;
client.query(query, [sender_id, receiver_id, message]);
try {
client.query(query, [sender_id, receiver_id, message]);
} catch (e) {
console.error("Failed to insert message ", e);
}
}
async function checkUserExist(username) {
@@ -69,8 +85,13 @@ async function checkUserExist(username) {
SELECT COUNT(*) FROM accounts
WHERE username = $1;
`;
const result = await client.query(query, [username]);
return result.rows[0].count > 0;
try {
const result = await client.query(query, [username]);
return result.rows[0].count > 0;
} catch (e) {
console.error("Failed to check if user exist ", e);
}
}
async function changePassword(username, newPassword) {
@@ -79,7 +100,11 @@ async function changePassword(username, newPassword) {
SET password = $1
WHERE username = $2;
`;
client.query(query, [newPassword, username]);
try {
client.query(query, [newPassword, username]);
} catch (e) {
console.error("Failed to change password ", e);
}
}
module.exports = {
client,

View File

@@ -5,6 +5,7 @@ const app = express();
const cors = require("cors");
const server = createServer(app);
const io = new Server(server);
const bodyParser = require("body-parser");
require("dotenv").config();
const PORT = process.env.SERVER_PORT;
const {
@@ -15,6 +16,7 @@ const {
checkUserExist,
changePassword,
} = require("./db/db.js");
const { generateJwtToken } = require("./auth/jwt");
const corsOptions = {
origin: "http://localhost:5173",
@@ -24,8 +26,24 @@ const corsOptions = {
// Serve socket.io js
app.use("/socket.io", express.static("./node_modules/socket.io/client-dist/"));
app.use(cors(corsOptions));
app.use(bodyParser.json());
app.post("/api/auth/signup", async (req, res) => {
const username = req.body.username;
const password = req.body.password;
const exist = await checkUserExist(username);
if (exist) {
res.status(409).send("User already exist");
return;
}
const token = generateJwtToken(username);
res.cookie("token", token, {
maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days
httpOnly: true,
});
app.post("/api/auth/signup", (req, res) => {
res.status(200).send("Successfully signed up");
});