Compare commits

..

3 Commits

Author SHA1 Message Date
4ab4c615e9 Merge pull request 'dev' (#6) from dev into prod
Reviewed-on: #6
2026-02-16 11:21:06 +05:30
90d04d7a42 Merge pull request 'Improve URL config parsing and mail exception handling' (#5) from feature/portfolio-admin-auth into dev
Reviewed-on: #5
2026-02-16 11:19:29 +05:30
2d603e4fc6 Improve URL config parsing and mail exception handling
Refactor Program.cs to robustly parse and validate URLs from config, logging a warning if none are valid. Enhance MailService exception handling to log full exceptions and avoid interrupting OTP generation by swallowing mail send errors.
2026-02-16 11:18:46 +05:30
2 changed files with 21 additions and 11 deletions

View File

@ -33,14 +33,26 @@ Log.Logger = loggerConfiguration
.WriteTo.File("logs/portblog.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
var urls = builder.Configuration.GetSection("Urls");
var urlsSection = builder.Configuration.GetSection("Urls");
var urlsValue = urlsSection.Value;
if (!string.IsNullOrEmpty(urls.Value))
if (!string.IsNullOrWhiteSpace(urlsValue))
{
var allowedUrlsToUse = urls.Value.Split(',');
var allowedUrlsToUse = urlsValue
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Where(u => Uri.IsWellFormedUriString(u, UriKind.Absolute))
.ToArray();
if (allowedUrlsToUse.Length > 0)
{
builder.WebHost.UseUrls(allowedUrlsToUse);
}
else
{
// optionally log or throw depending on desired behavior
Log.Warning("Configured 'Urls' section was present but no valid URLs were found.");
}
}
var allowedCorsOrigins = builder.Configuration.GetSection("AllowedCorsOrigins");
string[] origins = [];

View File

@ -67,16 +67,14 @@ namespace PortBlog.API.Services
}
catch (Exception ex)
{
logger.LogCritical(
"Exception while sending mail from {FromEmail} ({Name}): {Exception}",
messageSendDto.FromEmail,
messageSendDto.Name,
ex.Message
);
// Log full exception and persist failed message. Do not rethrow to avoid causing a 500 from OTP generation
logger.LogCritical(ex, "Exception while sending mail from {FromEmail} ({Name}).", messageSendDto.FromEmail, messageSendDto.Name);
messageSendDto.SentStatus = (int)MailConstants.MailStatus.Failed;
mailRepository.AddMessage(messageEntity);
await mailRepository.SaveChangesAsync();
throw new Exception();
// swallow the exception so OTP generation continues; caller can inspect delivery status via message logs
return;
}
}
}