// 批量同步 LLDAP email → assets / issue 本地用户表 // 每次 OA 部署后自动执行,确保新服务器历史数据也能填充 const { exec } = require('child_process') const { promisify } = require('util') const e = promisify(exec) const SITES = [ { name: 'assets', db: process.env.ASSETS_DB_PATH || '/data/other-sites/assets/assets.db' }, { name: 'issue', db: process.env.ISSUE_DB_PATH || '/data/other-sites/issue/issue.db' }, ] async function main() { const r = await e( `docker exec lldap sqlite3 /data/users.db "SELECT user_id, email FROM users WHERE email != '';"` ) const lines = r.stdout.trim().split('\n').filter(Boolean) let synced = 0 for (const line of lines) { const [user, mail] = line.split('|') const su = user.replace(/'/g, "''") const sm = (mail || '').replace(/'/g, "''") for (const site of SITES) { try { await e( `sqlite3 "${site.db}" "UPDATE users SET email = '${sm}', updated_at = datetime('now', '+8 hours') WHERE username = '${su}';"` ) } catch {} } synced++ console.log(` ${user} → ${mail}`) } console.log(`已同步 ${synced} 个用户邮箱`) } main().catch(err => { console.error(err.message); process.exit(1) })