38 lines
1.2 KiB
JavaScript
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) })
|