fix: token
All checks were successful
BCards Deployment Pipeline / Run Tests (push) Successful in 4s
BCards Deployment Pipeline / PR Validation (push) Has been skipped
BCards Deployment Pipeline / Build and Push Image (push) Successful in 15m52s
BCards Deployment Pipeline / Deploy to Production (ARM - OCI) (push) Successful in 2m20s
BCards Deployment Pipeline / Deploy to Staging (x86 - Local) (push) Has been skipped
BCards Deployment Pipeline / Cleanup Old Resources (push) Has been skipped
BCards Deployment Pipeline / Deployment Summary (push) Successful in 0s
All checks were successful
BCards Deployment Pipeline / Run Tests (push) Successful in 4s
BCards Deployment Pipeline / PR Validation (push) Has been skipped
BCards Deployment Pipeline / Build and Push Image (push) Successful in 15m52s
BCards Deployment Pipeline / Deploy to Production (ARM - OCI) (push) Successful in 2m20s
BCards Deployment Pipeline / Deploy to Staging (x86 - Local) (push) Has been skipped
BCards Deployment Pipeline / Cleanup Old Resources (push) Has been skipped
BCards Deployment Pipeline / Deployment Summary (push) Successful in 0s
This commit is contained in:
parent
04f406f6bc
commit
f98dac9178
@ -313,12 +313,7 @@ public class AdminController : Controller
|
|||||||
await _userPageService.CreatePageAsync(userPage);
|
await _userPageService.CreatePageAsync(userPage);
|
||||||
_logger.LogInformation("Page created successfully!");
|
_logger.LogInformation("Page created successfully!");
|
||||||
|
|
||||||
// Generate preview token for development
|
// Token será gerado apenas quando usuário clicar "Testar Página"
|
||||||
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);
|
|
||||||
|
|
||||||
TempData["Success"] = "Página criada com sucesso! Use o botão 'Enviar para Moderação' quando estiver pronta.";
|
TempData["Success"] = "Página criada com sucesso! Use o botão 'Enviar para Moderação' quando estiver pronta.";
|
||||||
}
|
}
|
||||||
@ -371,9 +366,7 @@ public class AdminController : Controller
|
|||||||
|
|
||||||
await _userPageService.UpdatePageAsync(existingPage);
|
await _userPageService.UpdatePageAsync(existingPage);
|
||||||
|
|
||||||
// Generate new preview token
|
// Token será gerado apenas quando usuário clicar "Testar Página"
|
||||||
var previewToken = await _moderationService.GeneratePreviewTokenAsync(existingPage.Id);
|
|
||||||
var previewUrl = $"{Request.Scheme}://{Request.Host}/page/{existingPage.Category}/{existingPage.Slug}?preview={previewToken}";
|
|
||||||
|
|
||||||
// Send email to user
|
// Send email to user
|
||||||
await _emailService.SendModerationStatusAsync(
|
await _emailService.SendModerationStatusAsync(
|
||||||
@ -382,7 +375,7 @@ public class AdminController : Controller
|
|||||||
existingPage.DisplayName,
|
existingPage.DisplayName,
|
||||||
"pending",
|
"pending",
|
||||||
null,
|
null,
|
||||||
previewUrl);
|
null); // previewUrl não é mais necessário - token será gerado no clique
|
||||||
|
|
||||||
TempData["Success"] = "Página atualizada! Teste e envie para moderação.";
|
TempData["Success"] = "Página atualizada! Teste e envie para moderação.";
|
||||||
}
|
}
|
||||||
@ -1023,7 +1016,7 @@ public class AdminController : Controller
|
|||||||
success = true,
|
success = true,
|
||||||
previewToken = newToken,
|
previewToken = newToken,
|
||||||
message = "Preview gerado com sucesso!",
|
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)
|
catch (Exception ex)
|
||||||
|
|||||||
@ -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.)
|
// Funções existentes (submitForModeration, openPreview, etc.)
|
||||||
async function openPreview(pageId) {
|
async function openPreview(pageId) {
|
||||||
const button = event.target.closest('button');
|
const button = event.target.closest('button');
|
||||||
@ -437,20 +391,11 @@
|
|||||||
// Delay de 500ms para garantir commit no MongoDB
|
// Delay de 500ms para garantir commit no MongoDB
|
||||||
await new Promise(resolve => setTimeout(resolve, 500));
|
await new Promise(resolve => setTimeout(resolve, 500));
|
||||||
|
|
||||||
// Abrir nova aba e adicionar ao tracking
|
// Abrir nova aba
|
||||||
const previewWindow = window.open(
|
window.open(
|
||||||
`${window.location.origin}/page/${category}/${slug}?preview=${result.previewToken}`,
|
`${window.location.origin}/page/${category}/${slug}?preview=${result.previewToken}`,
|
||||||
`preview_${pageId}` // Nome único para a aba
|
`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 {
|
} else {
|
||||||
showToast(result.message || 'Erro ao gerar preview', 'error');
|
showToast(result.message || 'Erro ao gerar preview', 'error');
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user