9819d8db0b
continuous-integration/drone/push Build is failing
- implemented /notifications page with overdue/upcoming alerts - Fixed sidebar scrolling in collapsed mode - Moved notification button to sidebar footer - Enhanced Achievements page with streak stats and tooltips - Improved XP history to show task titles - Added missing translations (en/de) - Removed top bar header - Fixed Docker environment routing
75 lines
2.9 KiB
TypeScript
75 lines
2.9 KiB
TypeScript
|
|
import { storage } from "../server/storage";
|
|
import { scrypt, randomBytes } from "crypto";
|
|
import { promisify } from "util";
|
|
|
|
const scryptAsync = promisify(scrypt);
|
|
|
|
async function hashPassword(password: string) {
|
|
const salt = randomBytes(16).toString("hex");
|
|
const buf = (await scryptAsync(password, salt, 64)) as Buffer;
|
|
return `${buf.toString("hex")}.${salt}`;
|
|
}
|
|
|
|
async function run() {
|
|
try {
|
|
console.log("🔍 Checking for 'admin' user...");
|
|
let user = await storage.getUserByUsername("admin");
|
|
|
|
const password = "admin";
|
|
console.log(`🔐 Hashing password '${password}'...`);
|
|
const hashedPassword = await hashPassword(password);
|
|
|
|
if (user) {
|
|
console.log(`✅ User 'admin' found (ID: ${user.id}). Updating credentials...`);
|
|
await storage.updateUser(user.id, {
|
|
password: hashedPassword,
|
|
role: 'admin',
|
|
isActive: true,
|
|
aiEnabled: true,
|
|
is2faEnabled: false
|
|
});
|
|
console.log("✅ Admin user updated successfully.");
|
|
} else {
|
|
console.log("⚠️ User 'admin' not found. Checking by email 'admin@example.com'...");
|
|
const emailUser = await storage.getUserByEmail("admin@example.com");
|
|
|
|
if (emailUser) {
|
|
console.log(`✅ User found by email (ID: ${emailUser.id}). Updating to username 'admin'...`);
|
|
await storage.updateUser(emailUser.id, {
|
|
username: "admin",
|
|
password: hashedPassword,
|
|
role: "admin",
|
|
isActive: true,
|
|
aiEnabled: true,
|
|
showOnLeaderboard: false,
|
|
isSearchable: false
|
|
});
|
|
console.log("✅ Admin user updated/renamed successfully.");
|
|
} else {
|
|
console.log("🆕 Creating new 'admin' user...");
|
|
await storage.createUser({
|
|
username: "admin",
|
|
email: "admin@example.com",
|
|
password: hashedPassword,
|
|
role: "admin",
|
|
isActive: true,
|
|
showOnLeaderboard: false,
|
|
isSearchable: false,
|
|
// aiEnabled defaults to true in schema/storage if omitted in Insert,
|
|
// but depending on implementation might need it.
|
|
// Storage implementation handles defaults if not provided?
|
|
// Let's pass defaults we know are safe.
|
|
} as any); // cast as any to avoid strict InsertUser type mismatches if interfaces drift
|
|
console.log("✅ Admin user created successfully.");
|
|
}
|
|
}
|
|
process.exit(0);
|
|
} catch (e) {
|
|
console.error("❌ Failed to create/update admin user:", e);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
run();
|