76 lines
2.0 KiB
JavaScript
76 lines
2.0 KiB
JavaScript
import bcrypt from 'bcrypt';
|
|
import pg from 'pg';
|
|
import inquirer from 'inquirer';
|
|
|
|
const { Pool } = pg;
|
|
import { config as loadEnv } from 'dotenv';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { dirname, resolve as resolvePath } from 'node:path';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
|
|
loadEnv({ path: resolvePath(__dirname, '../.env') });
|
|
|
|
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: Number(process.env.DB_PORT) || 5432,
|
|
});
|
|
|
|
async function promptUser() {
|
|
return inquirer.prompt([
|
|
{
|
|
type: 'input',
|
|
name: 'username',
|
|
message: 'Enter username:',
|
|
validate: (input) => input.length >= 3 || 'Username must be at least 3 characters long',
|
|
},
|
|
{
|
|
type: 'password',
|
|
name: 'password',
|
|
message: 'Enter password:',
|
|
mask: '*',
|
|
validate: (input) => input.length >= 8 || 'Password must be at least 8 characters long',
|
|
},
|
|
{
|
|
type: 'password',
|
|
name: 'confirmPassword',
|
|
message: 'Confirm password:',
|
|
mask: '*',
|
|
validate: (input, answers) => input === answers.password || 'Passwords do not match',
|
|
},
|
|
]);
|
|
}
|
|
|
|
async function addUser() {
|
|
try {
|
|
const { username, password } = await promptUser();
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
if (error.code) console.error('Error code:', error.code);
|
|
} finally {
|
|
await pool.end();
|
|
}
|
|
}
|
|
|
|
addUser();
|