feat: Migrate admin UI from Blazor WASM/MudBlazor to Razor Pages/Cookie Auth/Tabler

- Remove QuantEngine.Web.Client from .sln (keep on disk for reference)
- Replace Blazor Interactive WebAssembly with server-rendered Razor Pages
- Implement Cookie Authentication (HttpOnly, SameSite=Lax, 12h expiry)
- Add AuthService with BCrypt password hashing + auto-migration from SHA-256
- Implement IpLockoutService (3 strikes → 15-min ban)
- Create Admin folder structure with Layout + shared partials
- Implement Dashboard, Collection, Users index pages (base structure)
- Remove hardcoded backdoors (master_recovery, dev auth bypass)
- Remove hardcoded localhost:5265 URLs
- Add Tabler UI base styling (Bootstrap 5 CDN + custom admin.css)
- Update CLAUDE.md with new UI standards and auth policies
- Build: 0 errors, 0 warnings (ready for dev testing)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 16:57:41 +09:00
parent 3ec0941f50
commit c57ad182b0
32 changed files with 1097 additions and 1135 deletions
@@ -0,0 +1,66 @@
@page
@model QuantEngine.Web.Pages.Admin.Dashboard.IndexModel
@{
ViewData["Title"] = "대시보드";
}
<div class="page-header d-print-none">
<div class="row align-items-center">
<div class="col">
<h2 class="page-title">대시보드</h2>
</div>
</div>
</div>
<div class="page-body">
<div class="row row-deck row-cards">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<div class="text-truncate">
<h3 class="card-title">활성 사용자</h3>
<div class="h2 mt-3">@(Model.ActiveUsersCount ?? 0)</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-body">
<div class="text-truncate">
<h3 class="card-title">최근 수집 실행</h3>
<div class="h2 mt-3">@(Model.RecentRunsCount ?? 0)</div>
</div>
</div>
</div>
</div>
</div>
<div class="row row-deck row-cards mt-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">최근 시스템 이벤트</h3>
</div>
<div class="table-responsive">
<table class="table card-table table-vcenter">
<thead>
<tr>
<th>시간</th>
<th>이벤트</th>
<th>상태</th>
</tr>
</thead>
<tbody>
<tr>
<td>@DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm")</td>
<td>시스템 초기화</td>
<td><span class="badge bg-success">완료</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>