From 9562766320e56b4f7ec098eb2855011cf6adce25 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Jul 2026 16:02:58 +0900 Subject: [PATCH] Seed ACS test login accounts --- docs/ACS-login-404-analysis.md | 4 +++ migrations/005_seed_test_users.sql | 48 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 migrations/005_seed_test_users.sql diff --git a/docs/ACS-login-404-analysis.md b/docs/ACS-login-404-analysis.md index 49d7614..7f4ec17 100644 --- a/docs/ACS-login-404-analysis.md +++ b/docs/ACS-login-404-analysis.md @@ -63,3 +63,7 @@ Node 서버에 Auth API를 추가했다. 2026-07-14 사용자가 `a/1`로 운영 URL에서 다시 로그인 시도했으나 404가 재현되었다. 판단: 운영 서버가 아직 Auth API 추가 코드로 재배포되지 않은 상태다. 로컬 변경분을 원격 저장소에 push하고 Coolify 재배포가 완료된 뒤 다시 테스트해야 한다. + +2026-07-14 Auth API 커밋 배포 후 `POST /api/auth/login` 응답이 404에서 500으로 변경되었다. + +판단: 라우터는 배포에 반영되었고, 남은 문제는 운영 DB의 사용자 seed 또는 로그인 처리 중 DB 상태 문제로 좁혀졌다. 다음 배포부터 테스트 계정이 자동 보장되도록 `migrations/005_seed_test_users.sql`을 추가한다. diff --git a/migrations/005_seed_test_users.sql b/migrations/005_seed_test_users.sql new file mode 100644 index 0000000..4c60f1d --- /dev/null +++ b/migrations/005_seed_test_users.sql @@ -0,0 +1,48 @@ +-- Ensure baseline ACS test accounts exist in the Node/PostgreSQL deployment. +-- Passwords: +-- admin/security/host = ChangeMe123! +-- a/s/h = 1 + +WITH upserted AS ( + INSERT INTO users ( + created_at, + updated_at, + username, + password_hash, + full_name, + email, + department, + must_change_password, + enabled, + locked + ) + VALUES + (now(), now(), 'admin', '$2a$12$7FBM5I4IOmKQHmBbAm2AAu3HQ3FvOkazzuBk1Hnd.gr68UekEusEa', 'Admin', 'admin@itcenter.local', 'IT Ops', TRUE, TRUE, FALSE), + (now(), now(), 'security', '$2a$12$7FBM5I4IOmKQHmBbAm2AAu3HQ3FvOkazzuBk1Hnd.gr68UekEusEa', 'Security', 'security@itcenter.local', 'Security', TRUE, TRUE, FALSE), + (now(), now(), 'host', '$2a$12$7FBM5I4IOmKQHmBbAm2AAu3HQ3FvOkazzuBk1Hnd.gr68UekEusEa', 'Host', 'host@itcenter.local', 'Dev Team', TRUE, TRUE, FALSE), + (now(), now(), 'a', '$2a$12$aQ84.8Z4w/9GLG4gJkBu7OAHU3v9/BR5ESLimxpnETZ.pxnzylgkW', 'Admin', 'a@itcenter.local', 'IT Ops', FALSE, TRUE, FALSE), + (now(), now(), 's', '$2a$12$aQ84.8Z4w/9GLG4gJkBu7OAHU3v9/BR5ESLimxpnETZ.pxnzylgkW', 'Security', 's@itcenter.local', 'Security', FALSE, TRUE, FALSE), + (now(), now(), 'h', '$2a$12$aQ84.8Z4w/9GLG4gJkBu7OAHU3v9/BR5ESLimxpnETZ.pxnzylgkW', 'Host', 'h@itcenter.local', 'Dev Team', FALSE, TRUE, FALSE) + ON CONFLICT (username) DO UPDATE + SET updated_at = now(), + password_hash = EXCLUDED.password_hash, + full_name = EXCLUDED.full_name, + email = EXCLUDED.email, + department = EXCLUDED.department, + must_change_password = EXCLUDED.must_change_password, + enabled = TRUE, + locked = FALSE + RETURNING id, username +) +DELETE FROM user_roles +WHERE user_id IN (SELECT id FROM upserted); + +INSERT INTO user_roles (user_id, role) +SELECT id, role +FROM ( + SELECT id, 'ADMIN' AS role FROM users WHERE username IN ('admin', 'a') + UNION ALL + SELECT id, 'SECURITY' AS role FROM users WHERE username IN ('security', 's') + UNION ALL + SELECT id, 'HOST' AS role FROM users WHERE username IN ('host', 'h') +) seeded_roles;