added try catches and jwt
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user