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:
zzabisagent-lab
2026-10-26 11:02:58 +00:00
co-authored by Claude Fable 5.1
parent 9ca4cee341
commit c7aea8d419
295 changed files with 90146 additions and 0 deletions
+15
View File
@@ -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); }