103 lines
2.5 KiB
JavaScript
103 lines
2.5 KiB
JavaScript
require('dotenv').config({ path: '../.env' });
|
|
const bcrypt = require('bcrypt');
|
|
const { Pool } = require('pg');
|
|
const inquirer = require('inquirer');
|
|
|
|
// Log connection details for debugging (remove in production)
|
|
console.log('Attempting to connect with:', {
|
|
host: process.env.DB_HOST,
|
|
user: process.env.DB_USER,
|
|
database: process.env.DB_NAME,
|
|
port: process.env.DB_PORT
|
|
});
|
|
|
|
const pool = new Pool({
|
|
host: process.env.DB_HOST,
|
|
user: process.env.DB_USER,
|
|
password: process.env.DB_PASSWORD,
|
|
database: process.env.DB_NAME,
|
|
port: process.env.DB_PORT,
|
|
});
|
|
|
|
async function promptUser() {
|
|
const questions = [
|
|
{
|
|
type: 'input',
|
|
name: 'username',
|
|
message: 'Enter username:',
|
|
validate: (input) => {
|
|
if (input.length < 3) {
|
|
return 'Username must be at least 3 characters long';
|
|
}
|
|
return true;
|
|
}
|
|
},
|
|
{
|
|
type: 'password',
|
|
name: 'password',
|
|
message: 'Enter password:',
|
|
mask: '*',
|
|
validate: (input) => {
|
|
if (input.length < 8) {
|
|
return 'Password must be at least 8 characters long';
|
|
}
|
|
return true;
|
|
}
|
|
},
|
|
{
|
|
type: 'password',
|
|
name: 'confirmPassword',
|
|
message: 'Confirm password:',
|
|
mask: '*',
|
|
validate: (input, answers) => {
|
|
if (input !== answers.password) {
|
|
return 'Passwords do not match';
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
];
|
|
|
|
return inquirer.prompt(questions);
|
|
}
|
|
|
|
async function addUser() {
|
|
try {
|
|
// Get user input
|
|
const answers = await promptUser();
|
|
const { username, password } = answers;
|
|
|
|
// Hash password
|
|
const saltRounds = 10;
|
|
const hashedPassword = await bcrypt.hash(password, saltRounds);
|
|
|
|
// Check if user already exists
|
|
const checkResult = await pool.query(
|
|
'SELECT id FROM users WHERE username = $1',
|
|
[username]
|
|
);
|
|
|
|
if (checkResult.rows.length > 0) {
|
|
console.error('Error: Username already exists');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Insert new user
|
|
const result = await pool.query(
|
|
'INSERT INTO users (username, password) VALUES ($1, $2) RETURNING id',
|
|
[username, hashedPassword]
|
|
);
|
|
|
|
console.log(`User ${username} created successfully with id ${result.rows[0].id}`);
|
|
} catch (error) {
|
|
console.error('Error creating user:', error);
|
|
console.error('Error details:', error.message);
|
|
if (error.code) {
|
|
console.error('Error code:', error.code);
|
|
}
|
|
} finally {
|
|
await pool.end();
|
|
}
|
|
}
|
|
|
|
addUser();
|