c57ad182b0
- 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>
36 lines
1.0 KiB
C#
36 lines
1.0 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using QuantEngine.Core.Interfaces;
|
|
using QuantEngine.Web.Services;
|
|
|
|
namespace QuantEngine.Web.Pages.Admin.Collection;
|
|
|
|
[Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)]
|
|
public class IndexModel : PageModel
|
|
{
|
|
private readonly ICollectionRepository _collectionRepository;
|
|
private readonly ILogger<IndexModel> _logger;
|
|
|
|
public List<CollectionRunRecord>? Runs { get; set; }
|
|
public string? Message { get; set; }
|
|
|
|
public IndexModel(ICollectionRepository collectionRepository, ILogger<IndexModel> logger)
|
|
{
|
|
_collectionRepository = collectionRepository;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task OnGetAsync()
|
|
{
|
|
try
|
|
{
|
|
Runs = await _collectionRepository.GetRecentRunsAsync(limit: 20);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Collection runs loading failed");
|
|
Message = "데이터 수집 현황을 불러올 수 없습니다.";
|
|
}
|
|
}
|
|
}
|