72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
/**
|
|
* Password Migration Script
|
|
* Updates existing users to have password fields
|
|
*/
|
|
|
|
const mongoose = require('mongoose');
|
|
const bcrypt = require('bcryptjs');
|
|
const Player = require('../models/Player');
|
|
const logger = require('../utils/logger');
|
|
require('dotenv').config();
|
|
|
|
async function migratePasswords() {
|
|
try {
|
|
// Connect to database
|
|
await mongoose.connect(process.env.MONGODB_URI);
|
|
logger.info('Connected to database for password migration');
|
|
|
|
// Find all users without passwords
|
|
const usersWithoutPasswords = await Player.find({
|
|
password: { $exists: false }
|
|
});
|
|
|
|
logger.info(`Found ${usersWithoutPasswords.length} users without passwords`);
|
|
|
|
if (usersWithoutPasswords.length === 0) {
|
|
logger.info('No users need password migration');
|
|
return;
|
|
}
|
|
|
|
// Update each user with a default password
|
|
for (const user of usersWithoutPasswords) {
|
|
// Generate a default password (you might want to use a different approach)
|
|
const defaultPassword = 'tempPassword123!';
|
|
const salt = await bcrypt.genSalt(10);
|
|
const hashedPassword = await bcrypt.hash(defaultPassword, salt);
|
|
|
|
await Player.updateOne(
|
|
{ _id: user._id },
|
|
{
|
|
$set: {
|
|
password: hashedPassword,
|
|
'stats.lastLogin': new Date()
|
|
}
|
|
}
|
|
);
|
|
|
|
logger.info(`Migrated user: ${user.email} with default password`);
|
|
}
|
|
|
|
logger.info('Password migration completed successfully');
|
|
|
|
// Output the default password for users to change
|
|
console.log('\n=== MIGRATION COMPLETE ===');
|
|
console.log(`Updated ${usersWithoutPasswords.length} users`);
|
|
console.log('Default password for all migrated users: tempPassword123!');
|
|
console.log('Users should change their password after first login\n');
|
|
|
|
} catch (error) {
|
|
logger.error('Password migration error:', error);
|
|
console.error('Migration failed:', error);
|
|
} finally {
|
|
await mongoose.disconnect();
|
|
}
|
|
}
|
|
|
|
// Run the migration
|
|
if (require.main === module) {
|
|
migratePasswords();
|
|
}
|
|
|
|
module.exports = migratePasswords;
|