Files
Transcendence/srcs/backend/services/auth.js
T
2026-01-10 16:27:15 +01:00

61 lines
1.3 KiB
JavaScript

const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const {query} = require('../db');
async function login(username, password)
{
try
{
const result = await query
(
`SELECT id, password_hash FROM users WHERE username = $1`,
[username]
);
if (result.rows.length === 0)
return ({status: 401, data: {error: 'Invalid credentials'}});
const user = result.rows[0];
const match = await bcrypt.compare(password, user.password_hash);
if (!match)
return ({status: 401, data: {error: 'Invalid credentials'}});
const token = jwt.sign
(
{userId: user.id},
process.env.JWT_SECRET,
{expiresIn: '1h'}
);
return ({status: 200, data: {token}});
}
catch (err)
{
console.error(err);
return ({status: 500, data: {error: 'Server error'}});
}
};
async function register(username, password)
{
try
{
const password_hash = await bcrypt.hash(password, 10);
await query
(
`INSERT INTO users (username, password_hash) VALUES ($1, $2)`,
[username, password_hash]
);
return ({status: 201, data: {message: 'User created'}});
}
catch (err)
{
if (err.code === '23505')
return ({status: 409, data: {error: 'Username already exists'}});
console.error(err);
return ({status: 500, data: {error: 'Server error'}});
}
};
module.exports = {register, login};