diff --git a/src/BCards.Web/Middleware/PageStatusMiddleware.cs b/src/BCards.Web/Middleware/PageStatusMiddleware.cs index 6fed42e..381b16d 100644 --- a/src/BCards.Web/Middleware/PageStatusMiddleware.cs +++ b/src/BCards.Web/Middleware/PageStatusMiddleware.cs @@ -60,16 +60,42 @@ public class PageStatusMiddleware case PageStatus.Rejected: // Páginas em desenvolvimento/moderação requerem preview token var previewToken = context.Request.Query["preview"].FirstOrDefault(); - if (string.IsNullOrEmpty(previewToken) || - string.IsNullOrEmpty(page.PreviewToken) || - previewToken != page.PreviewToken || - page.PreviewTokenExpiry < DateTime.UtcNow) + + _logger.LogInformation($"Page {category}/{slug} (Status: {page.Status}) - Token provided: {!string.IsNullOrEmpty(previewToken)}, Page token: {!string.IsNullOrEmpty(page.PreviewToken)}, Expiry: {page.PreviewTokenExpiry}"); + + if (string.IsNullOrEmpty(previewToken)) { - _logger.LogInformation($"Page {category}/{slug} requires valid preview token"); + _logger.LogInformation($"Page {category}/{slug} requires preview token - no token provided"); context.Response.StatusCode = 404; await context.Response.WriteAsync("Página em desenvolvimento. Acesso restrito."); return; } + + if (string.IsNullOrEmpty(page.PreviewToken)) + { + _logger.LogWarning($"Page {category}/{slug} has no preview token set in database"); + context.Response.StatusCode = 404; + await context.Response.WriteAsync("Página em desenvolvimento. Acesso restrito."); + return; + } + + if (previewToken != page.PreviewToken) + { + _logger.LogInformation($"Page {category}/{slug} preview token mismatch - provided: {previewToken}, expected: {page.PreviewToken}"); + context.Response.StatusCode = 404; + await context.Response.WriteAsync("Página em desenvolvimento. Acesso restrito."); + return; + } + + if (page.PreviewTokenExpiry < DateTime.UtcNow) + { + _logger.LogInformation($"Page {category}/{slug} preview token expired at {page.PreviewTokenExpiry} (now: {DateTime.UtcNow})"); + context.Response.StatusCode = 404; + await context.Response.WriteAsync("Token de preview expirado. Gere um novo token no painel."); + return; + } + + _logger.LogInformation($"Page {category}/{slug} preview token validated successfully"); break; case PageStatus.Active: diff --git a/src/BCards.Web/Program.cs b/src/BCards.Web/Program.cs index dd1a386..b9c9bf4 100644 --- a/src/BCards.Web/Program.cs +++ b/src/BCards.Web/Program.cs @@ -564,8 +564,8 @@ app.UseAuthorization(); app.UseMiddleware(); app.UseMiddleware(); app.UseMiddleware(); -app.UseMiddleware(); app.UseMiddleware(); +app.UseMiddleware(); app.UseMiddleware(); if (app.Environment.IsDevelopment()) diff --git a/src/BCards.Web/Services/ThemeService.cs b/src/BCards.Web/Services/ThemeService.cs index e889504..3f56a68 100644 --- a/src/BCards.Web/Services/ThemeService.cs +++ b/src/BCards.Web/Services/ThemeService.cs @@ -1,4 +1,5 @@ using BCards.Web.Models; +using MongoDB.Bson; using MongoDB.Driver; using System.Text; @@ -265,6 +266,7 @@ public class ThemeService : IThemeService { new PageTheme { + Id = ObjectId.GenerateNewId().ToString(), Name = "Minimalista", PrimaryColor = "#2563eb", SecondaryColor = "#1d4ed8", @@ -275,6 +277,7 @@ public class ThemeService : IThemeService }, new PageTheme { + Id = ObjectId.GenerateNewId().ToString(), Name = "Dark Mode", PrimaryColor = "#10b981", SecondaryColor = "#059669", @@ -285,6 +288,7 @@ public class ThemeService : IThemeService }, new PageTheme { + Id = ObjectId.GenerateNewId().ToString(), Name = "Natureza", PrimaryColor = "#16a34a", SecondaryColor = "#15803d", @@ -296,6 +300,7 @@ public class ThemeService : IThemeService }, new PageTheme { + Id = ObjectId.GenerateNewId().ToString(), Name = "Corporativo", PrimaryColor = "#1e40af", SecondaryColor = "#1e3a8a", @@ -306,6 +311,7 @@ public class ThemeService : IThemeService }, new PageTheme { + Id = ObjectId.GenerateNewId().ToString(), Name = "Vibrante", PrimaryColor = "#dc2626", SecondaryColor = "#b91c1c", @@ -326,6 +332,7 @@ public class ThemeService : IThemeService { return new PageTheme { + Id = ObjectId.GenerateNewId().ToString(), Name = "Padrão", PrimaryColor = "#2563eb", SecondaryColor = "#1d4ed8", diff --git a/src/BCards.Web/Views/Admin/ManagePage.cshtml b/src/BCards.Web/Views/Admin/ManagePage.cshtml index 65c435f..e29ee07 100644 --- a/src/BCards.Web/Views/Admin/ManagePage.cshtml +++ b/src/BCards.Web/Views/Admin/ManagePage.cshtml @@ -572,13 +572,13 @@