Ariweb Suite 0.1.1 기반: 공통 라이브러리(db·http·세션·작업 엔진·할당/예약·알림·감사·보관소), 포털 뼈대, Webmaker/AriMail 도입 소스와 manifest
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
9ca4cee341
commit
c7aea8d419
@@ -0,0 +1,15 @@
|
||||
#!/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); }
|
||||
Reference in New Issue
Block a user