Files

16 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
'use strict';
// 관리자 계정 관리: node scripts/admin.js grant <id> | revoke <id> | create <id> <name> [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 <id> | revoke <id> | create <id> <name> [password] | list | bootstrap'); process.exit(1); }
} catch (e) { console.error(e.message); process.exit(1); }