From f98dac9178f7b9868be2cc42bc66c762a7a79435 Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro Date: Sun, 14 Sep 2025 00:34:53 -0300 Subject: [PATCH] fix: token --- src/BCards.Web/Controllers/AdminController.cs | 29 ++++----- src/BCards.Web/Views/Admin/Dashboard.cshtml | 59 +------------------ 2 files changed, 13 insertions(+), 75 deletions(-) diff --git a/src/BCards.Web/Controllers/AdminController.cs b/src/BCards.Web/Controllers/AdminController.cs index 0bc48d1..325b1ac 100644 --- a/src/BCards.Web/Controllers/AdminController.cs +++ b/src/BCards.Web/Controllers/AdminController.cs @@ -313,12 +313,7 @@ public class AdminController : Controller await _userPageService.CreatePageAsync(userPage); _logger.LogInformation("Page created successfully!"); - // Generate preview token for development - var previewToken = await _moderationService.GeneratePreviewTokenAsync(userPage.Id); - var previewUrl = $"{Request.Scheme}://{Request.Host}/page/{userPage.Category}/{userPage.Slug}?preview={previewToken}"; - userPage.PreviewToken = previewToken; - userPage.PreviewTokenExpiry = DateTime.UtcNow.AddHours(4); - await _userPageService.UpdatePageAsync(userPage); + // Token será gerado apenas quando usuário clicar "Testar Página" TempData["Success"] = "Página criada com sucesso! Use o botão 'Enviar para Moderação' quando estiver pronta."; } @@ -370,19 +365,17 @@ public class AdminController : Controller existingPage.ModerationAttempts = existingPage.ModerationAttempts; await _userPageService.UpdatePageAsync(existingPage); - - // Generate new preview token - var previewToken = await _moderationService.GeneratePreviewTokenAsync(existingPage.Id); - var previewUrl = $"{Request.Scheme}://{Request.Host}/page/{existingPage.Category}/{existingPage.Slug}?preview={previewToken}"; - + + // Token será gerado apenas quando usuário clicar "Testar Página" + // Send email to user await _emailService.SendModerationStatusAsync( - user.Email, - user.Name, - existingPage.DisplayName, - "pending", - null, - previewUrl); + user.Email, + user.Name, + existingPage.DisplayName, + "pending", + null, + null); // previewUrl não é mais necessário - token será gerado no clique TempData["Success"] = "Página atualizada! Teste e envie para moderação."; } @@ -1023,7 +1016,7 @@ public class AdminController : Controller success = true, previewToken = newToken, message = "Preview gerado com sucesso!", - expiresAt = DateTime.UtcNow.AddHours(4).ToString("yyyy-MM-dd HH:mm:ss") + expiresAt = DateTime.UtcNow.AddMinutes(5).ToString("yyyy-MM-dd HH:mm:ss") }); } catch (Exception ex) diff --git a/src/BCards.Web/Views/Admin/Dashboard.cshtml b/src/BCards.Web/Views/Admin/Dashboard.cshtml index dd15285..364083a 100644 --- a/src/BCards.Web/Views/Admin/Dashboard.cshtml +++ b/src/BCards.Web/Views/Admin/Dashboard.cshtml @@ -374,52 +374,6 @@ } }); - // Sistema de auto-refresh para tokens de preview - let refreshInterval; - let activePreviewPages = new Map(); // pageId -> {category, slug, windowRef} - - // Iniciar auto-refresh a cada 4 minutos - function startAutoRefresh() { - if (refreshInterval) clearInterval(refreshInterval); - refreshInterval = setInterval(async () => { - if (activePreviewPages.size > 0) { - console.log(`Auto-refreshing ${activePreviewPages.size} active preview tokens...`); - for (const [pageId, pageData] of activePreviewPages) { - if (!pageData.windowRef.closed) { - await refreshPageToken(pageId, pageData); - } else { - // Aba fechada, remover do tracking - activePreviewPages.delete(pageId); - } - } - } - }, 4 * 60 * 1000); // 4 minutos - } - - async function refreshPageToken(pageId, pageData) { - try { - // Usar o endpoint específico para refresh ao invés de generate - const response = await fetch(`/Admin/RefreshPreviewToken/${pageId}`, { - method: 'POST', - headers: { 'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value } - }); - const result = await response.json(); - if (result.success) { - // Atualizar URL da aba existente - const newUrl = `${window.location.origin}/page/${pageData.category}/${pageData.slug}?preview=${result.previewToken}`; - pageData.windowRef.location.href = newUrl; - console.log(`Token refreshed for page ${pageId}: ${result.previewToken}`); - } else { - console.warn(`Failed to refresh token for page ${pageId}: ${result.message}`); - } - } catch (error) { - console.error(`Failed to refresh token for page ${pageId}:`, error); - } - } - - // Iniciar auto-refresh quando a página carrega - startAutoRefresh(); - // Funções existentes (submitForModeration, openPreview, etc.) async function openPreview(pageId) { const button = event.target.closest('button'); @@ -437,20 +391,11 @@ // Delay de 500ms para garantir commit no MongoDB await new Promise(resolve => setTimeout(resolve, 500)); - // Abrir nova aba e adicionar ao tracking - const previewWindow = window.open( + // Abrir nova aba + window.open( `${window.location.origin}/page/${category}/${slug}?preview=${result.previewToken}`, `preview_${pageId}` // Nome único para a aba ); - - // Adicionar ao tracking para auto-refresh - activePreviewPages.set(pageId, { - category: category, - slug: slug, - windowRef: previewWindow - }); - - console.log(`Page ${pageId} added to active preview tracking`); } else { showToast(result.message || 'Erro ao gerar preview', 'error'); }