using DevExpress.Blazor.Reporting; using Lux.Report.Data.Services; using Lux.Report.Server.Components; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.FileProviders; using NLog; using NLog.Web; using System.Globalization; using System.Reflection; var builder = WebApplication.CreateBuilder(args); // recupero env corrente var env = builder.Environment; var logger = LogManager.Setup() .LoadConfigurationFromAppSettings() .GetCurrentClassLogger(); ConfigurationManager _config = builder.Configuration; var assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version?.ToString(); logger.Info($"Lux.Report.Server | Program.cs: startup | v.{assemblyVersion}"); logger.Info($"Current ASPNETCORE_ENVIRONMENT: {env.EnvironmentName}"); // Add services to the container. builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); // aggiungo servizi "interni" builder.Services.AddSingleton(); // aggiunta servizi DevExpress builder.Services.AddDevExpressServerSideBlazorReportViewer(); builder.Services.AddMvc(); builder.Services.AddDevExpressBlazorReporting(); // servizio x generazione report builder.Services.AddScoped(); // build applicazione var app = builder.Build(); // aggiunt base URL x routing corretto string baseUrl = _config.GetValue("ServerConf:BaseUrl") ?? ""; app.UsePathBase(baseUrl); logger.Info($"BaseUrl: {baseUrl}"); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); #if false // gestione "donwload implicito" dei pdf del report app.MapGet("/download-offer", (int id) => { string apiUrl = _config.GetValue("ServerConf:ApiBaseUrl") ?? "https://iis01.egalware.com/lux/srv/api"; string imgUrl = _config.GetValue("ServerConf:ImageUrl") ?? "image"; string dataUrl = _config.GetValue("ServerConf:DataUrl") ?? "report/offert"; string imgFullUrl = $"{apiUrl}/{imgUrl}/"; string dataFullUrl = $"{apiUrl}/{dataUrl}"; var report = new OfferReport(dataFullUrl, id); report.Parameters["pBasePath"].Value = imgFullUrl; using var ms = new MemoryStream(); report.ExportToPdf(ms); ms.Position = 0; string fName = $"Offert_{id:00000000}.pdf"; return Results.File( ms.ToArray(), "application/pdf", fName ); }); #endif // calcolo parametri base... string apiUrl = _config.GetValue("ServerConf:ApiBaseUrl") ?? "https://iis01.egalware.com/lux/srv/api"; string imgUrl = _config.GetValue("ServerConf:ImageUrl") ?? "image"; string dataUrl = _config.GetValue("ServerConf:DataUrl") ?? "report"; // calcolo valori specifici del report string imgFullUrl = $"{apiUrl}/{imgUrl}/"; app.MapGet("/download", async ( int? reqId, string? repType, string? selFile, IPdfReportService pdfService ) => { var missing = new List(); if (reqId is null) missing.Add(nameof(reqId)); if (string.IsNullOrWhiteSpace(repType)) missing.Add(nameof(repType)); if (string.IsNullOrWhiteSpace(selFile)) missing.Add(nameof(selFile)); if (missing.Count > 0) return Results.BadRequest(new { Missing = missing }); //string dataReportUrl = "offert"; // da recuperare dal DB string dataReportUrl = ""; switch (repType) { case "Offerta": dataReportUrl = "offert"; break; case "Ordine": dataReportUrl = "order"; break; case "Template": dataReportUrl = "template"; break; } string dataFullUrl = $"{apiUrl}/{dataUrl}/{dataReportUrl}"; var pdf = await pdfService.GeneratePdfAsync(reqId.Value, repType, selFile, imgFullUrl, dataFullUrl); return Results.File(pdf, "application/pdf"); }); // cultura IT... var supportedCultures = new[]{ new CultureInfo("it-IT") }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("it-IT"), SupportedCultures = supportedCultures, FallBackToParentCultures = false }); CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("it-IT"); // gestione fileshare x uploads: verifico da conf se sia linux o windows x file da accedere... if (_config["ServerConf:HostOs"] == "Win") { app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider(@"\\stor01\TEAM DRIVES\40_FileUpload\LuxUploads"), RequestPath = new PathString("/unsafe_uploads"), EnableDirectoryBrowsing = true //EnableDirectoryBrowsing = false }); } else { app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "unsafe_uploads")), RequestPath = new PathString("/unsafe_uploads"), EnableDirectoryBrowsing = true //EnableDirectoryBrowsing = false }); } app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.Run();