oa-ai/scripts/sync-emails-to-sites.js

38 lines
1.2 KiB
JavaScript

// 批量同步 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) })