feat: initialize VitePress CMS

This commit is contained in:
Coldsmile_7
2026-06-05 23:21:41 +08:00
commit 928f742d5e
45 changed files with 8214 additions and 0 deletions

47
server/bootstrap.mjs Normal file
View File

@@ -0,0 +1,47 @@
import { db, getSetting, 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]) => {
if (getSetting(key, undefined) === undefined) {
setSetting(key, value, key.includes("secret") || key.includes("password"));
}
});
}
export function bootstrap() {
migrate();
seedAdmin();
seedSettings();
console.log(`Initial admin: ${defaultAdminEmail}`);
}