Files
VitPress-CMS/server/bootstrap.mjs
T
2026-06-08 22:50:18 +08:00

50 lines
1.5 KiB
JavaScript

import { db, migrate, setSetting } from "./db.mjs";
import { hashPassword } from "./security.mjs";
const defaultAdminEmail = process.env.CMS_ADMIN_EMAIL || "admin@example.com";
const defaultAdminPassword = process.env.CMS_ADMIN_PASSWORD || "admin123456";
function seedAdmin() {
const admin = db.prepare("SELECT id FROM users WHERE role = 'system_admin' LIMIT 1").get();
if (admin) return;
db.prepare(`
INSERT INTO users (email, password_hash, name, role, email_verified)
VALUES (?, ?, ?, 'system_admin', 1)
`).run(defaultAdminEmail, hashPassword(defaultAdminPassword), "Administrator");
}
function seedSettings() {
const seeds = {
"site.title": "VitePress-CMS",
"auth.allow_email_login": "true",
"auth.allow_github_login": "true",
"auth.allow_registration": "false",
"smtp.host": "",
"smtp.port": "587",
"smtp.username": "",
"smtp.password": "",
"smtp.sender_email": "",
"github.api_base_url": "https://api.github.com",
"github.web_base_url": "https://github.com",
"github.oauth_client_id": "",
"github.oauth_client_secret": "",
};
Object.entries(seeds).forEach(([key, value]) => {
const existing = db.prepare("SELECT key FROM system_settings WHERE key = ?").get(key);
if (!existing) {
setSetting(key, value, key.includes("secret") || key.includes("password"));
}
});
}
export function bootstrap() {
migrate();
seedAdmin();
seedSettings();
console.log(`Initial admin: ${defaultAdminEmail}`);
}