#!/usr/bin/env node 'use strict'; // 관리자 계정 관리: node scripts/admin.js grant | revoke | create [password] | list | bootstrap // bootstrap (v1.5.11→v1.6.31): 관리자 admin 을 "무작위 1회 비밀번호" 로 만든다(고정 admin/admin 폐지)(이미 있으면 그대로). 다른 방식으로 설치해 관리자 비밀번호를 모르는 서버에서 쓴다 — 첫 로그인 뒤 비밀번호 변경이 강제된다 const auth = require('../lib/auth'); const crypto = require('crypto'); const [cmd, id, name, pw] = process.argv.slice(2); try { if (cmd === 'grant') console.log(auth.setRole(id, 'admin')); else if (cmd === 'revoke') console.log(auth.setRole(id, 'user')); else if (cmd === 'create') { const password = pw || crypto.randomBytes(9).toString('base64url'); const u = auth.createUser({ id, password, name: name || id, role: 'admin' }); console.log(JSON.stringify({ ...u, password }, null, 1)); } else if (cmd === 'list') console.table(auth.listUsers()); else if (cmd === 'bootstrap') { const r = auth.bootstrapAdmin('cli'); console.log(r.created ? `관리자 ${auth.BOOTSTRAP_ID} 를 만들었습니다. 1회용 비밀번호(다시 표시되지 않음): ${r.password} — 첫 로그인 뒤 비밀번호 변경 필요 (v1.6.31: 고정 비밀번호 admin 은 쓰지 않습니다)` : `관리자 ${auth.BOOTSTRAP_ID} 가 이미 있습니다`); } else { console.log('usage: admin.js grant | revoke | create [password] | list | bootstrap'); process.exit(1); } } catch (e) { console.error(e.message); process.exit(1); }