tududi/backend/scripts/user-create.js
Chris 542be2c1e9
Fix bug 366 (#764)
* Optimize DB

* Clean up names

* fixup! Clean up names

* fixup! fixup! Clean up names
2026-01-07 18:18:07 +02:00

89 lines
2.6 KiB
JavaScript
Executable file

#!/usr/bin/env node
/**
* User Creation Script
* Creates a new user with email and password.
* If user exists, updated password.
* Usage: node user-create.js <email> <password> [is_admin]
*/
require('dotenv').config();
const {
createOrUpdateUser,
validateEmail,
validatePassword,
} = require('../modules/users/userService');
const { Role } = require('../models');
async function createUser() {
const [email, password, isAdminArg] = process.argv.slice(2);
if (!email || password === undefined) {
console.error(
'Usage: npm run user:create <email> <password> [is_admin]'
);
console.error(
'Example: npm run user:create admin@example.com mypassword123 true'
);
process.exit(1);
}
// Validate email
if (!validateEmail(email)) {
console.error('Invalid email format');
process.exit(1);
}
try {
const { User } = require('../models');
// Check if user exists to determine if we should validate password
const existingUser = await User.findOne({ where: { email } });
// Only validate password for new users
if (!existingUser && !validatePassword(password)) {
console.error('Password must be at least 6 characters long');
process.exit(1);
}
console.log(`Creating user with email: ${email}`);
const { user, created } = await createOrUpdateUser(email, password);
// Optionally grant admin role
const shouldBeAdmin = String(isAdminArg).toLowerCase() === 'true';
if (shouldBeAdmin) {
// Find or create role, and ensure is_admin is true
const [role, roleCreated] = await Role.findOrCreate({
where: { user_id: user.id },
defaults: { user_id: user.id, is_admin: true },
});
// Update to admin if role exists but is not admin
if (!roleCreated && !role.is_admin) {
role.is_admin = true;
await role.save();
}
}
if (!created) {
console.log('User exists, password updated');
} else {
console.log('User created successfully');
}
console.log(`Email: ${user.email}`);
console.log(`User ID: ${user.id}`);
console.log(`Created: ${user.created_at}`);
if (isAdminArg !== undefined) {
console.log(`Admin: ${shouldBeAdmin ? 'yes' : 'no'}`);
}
process.exit(0);
} catch (error) {
console.error('❌ Error creating user:', error.message);
process.exit(1);
}
}
createUser();