diff --git a/LiMan.Api/Controllers/FilesaveController.cs b/LiMan.Api/Controllers/FilesaveController.cs index fedf218..bcc0a32 100644 --- a/LiMan.Api/Controllers/FilesaveController.cs +++ b/LiMan.Api/Controllers/FilesaveController.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Threading.Tasks; -using Core; +using Core; using LiMan.APi.Data; using LiMan.DB.DBModels; using Microsoft.AspNetCore.Hosting; @@ -11,6 +6,12 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using NLog; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Threading.Tasks; namespace LiMan.APi.Controllers { @@ -21,14 +22,20 @@ namespace LiMan.APi.Controllers [Route("api/filesave")] public class FilesaveController : ControllerBase { - private readonly IWebHostEnvironment env; - private readonly ILogger logger; + #region Private Fields + private static IConfiguration _configuration; /// - /// Dataservice x accesso DB + /// Classe per logging /// - protected ApiDataService dataService { get; set; } + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); + + private readonly IWebHostEnvironment env; + + #endregion Private Fields + + #region Public Constructors /// /// Init generico @@ -37,15 +44,132 @@ namespace LiMan.APi.Controllers /// /// /// - public FilesaveController(IConfiguration configuration, ApiDataService DataService, IWebHostEnvironment env, ILogger logger) + public FilesaveController(IConfiguration configuration, ApiDataService DataService, IWebHostEnvironment env) { dataService = DataService; _configuration = configuration; this.env = env; - this.logger = logger; - logger.LogInformation("Avviata classe FilesaveController"); + Log.Info("Avviata classe FilesaveController"); } + #endregion Public Constructors + + #region Protected Properties + + /// + /// Dataservice x accesso DB + /// + protected ApiDataService dataService { get; set; } + + #endregion Protected Properties + + #region Public Methods + + /// + /// Richiesta di registrazione ticket supporto + /// + /// + /// + /// + // POST api/files/list/1 + [HttpPost("list/{id}")] + public async Task> list(int id, [FromBody] SupportRequest CurrRequest) + { + List result = new List(); + // controllo valori + if (CurrRequest.IsValid) + { + // cerco i files dato ticket + result = await dataService.FileGetFilt(id); + await dataService.recordCall(CurrRequest.CodInst, CurrRequest.CodApp, $"POST:api/files/list:{id}"); + } + return result; + } + + /// + /// Caricamento file effettivo via POST + /// + /// TicketId x riferimento + /// Elenco files da caricare + /// + [HttpPost()] + public async Task>> PostFiles([FromForm] int ticketId, [FromForm] IEnumerable files) + { + // max 10 files + var maxAllowedFiles = 10; + // max 50 mb + long maxFileSize = 1024 * 1024 * 50; + var filesProcessed = 0; + string ticketDir = $"T{ticketId:000000000}"; + var resourcePath = new Uri($"{Request.Scheme}://{Request.Host}/api/filesave/list/{ticketId}"); + List uploadResults = new(); + string fileDir = env.ContentRootPath; + string relDir = env.EnvironmentName; + + foreach (var file in files) + { + var uploadResult = new UploadResult(); + string trustedFileNameForFileStorage; + var untrustedFileName = file.FileName; + uploadResult.FileName = untrustedFileName; + var trustedFileNameForDisplay = WebUtility.HtmlEncode(untrustedFileName); + + if (filesProcessed < maxAllowedFiles) + { + if (file.Length == 0) + { + Log.Info($"{trustedFileNameForDisplay} length is 0 (Err: 1)"); + uploadResult.ErrorCode = 1; + } + else if (file.Length > maxFileSize) + { + Log.Info($"{trustedFileNameForDisplay} of {file.Length} bytes is larger than the limit of {maxFileSize} bytes (Err: 2)"); + uploadResult.ErrorCode = 2; + } + else + { + try + { + DateTime oggi = DateTime.Today; + trustedFileNameForFileStorage = Path.GetRandomFileName(); + relDir = _configuration["FileShare"]; + fileDir = Path.Combine(relDir, ticketDir); + if (!Directory.Exists(fileDir)) + { + Directory.CreateDirectory(fileDir); + } + var path = Path.Combine(fileDir, trustedFileNameForFileStorage); + + await using FileStream fs = new(path, FileMode.Create); + await file.CopyToAsync(fs); + + Log.Info($"{trustedFileNameForDisplay} saved at {path}"); + uploadResult.Uploaded = true; + uploadResult.StoredFileName = trustedFileNameForFileStorage; + } + catch (IOException ex) + { + Log.Error($"{trustedFileNameForDisplay} error on upload (Err: 3): {ex.Message}"); + uploadResult.ErrorCode = 3; + } + } + + filesProcessed++; + } + else + { + Log.Info($"{trustedFileNameForDisplay} not uploaded because the request exceeded the allowed {maxAllowedFiles} of files (Err: 4)"); + uploadResult.ErrorCode = 4; + } + + uploadResults.Add(uploadResult); + } + // salvo su DB + var fatto = dataService.FileAdd(ticketId, ticketDir, uploadResults); + Log.Info($"Ticket: {ticketId} | dir: {ticketDir} | {uploadResults.Count} files"); + + return new CreatedResult(resourcePath, uploadResults); + } /// /// Caricamento file effettivo via POST @@ -72,12 +196,12 @@ namespace LiMan.APi.Controllers if (file.Length == 0) { - logger.LogInformation("{FileName} length is 0 (Err: 1)", trustedFileNameForDisplay); + Log.Info($"{trustedFileNameForDisplay} length is 0 (Err: 1)"); uploadResult.ErrorCode = 1; } else if (file.Length > maxFileSize) { - logger.LogInformation("{FileName} of {Length} bytes is larger than the limit of {Limit} bytes (Err: 2)", trustedFileNameForDisplay, file.Length, maxFileSize); + Log.Info($"{trustedFileNameForDisplay} of {file.Length} bytes is larger than the limit of {maxFileSize} bytes (Err: 2)"); uploadResult.ErrorCode = 2; } else @@ -97,13 +221,13 @@ namespace LiMan.APi.Controllers await using FileStream fs = new(path, FileMode.Create); await file.CopyToAsync(fs); - logger.LogInformation("{FileName} saved at {Path}", trustedFileNameForDisplay, path); + Log.Info($"{trustedFileNameForDisplay} saved at {path}"); uploadResult.Uploaded = true; uploadResult.StoredFileName = trustedFileNameForFileStorage; } catch (IOException ex) { - logger.LogError("{FileName} error on upload (Err: 3): {Message}", trustedFileNameForDisplay, ex.Message); + Log.Error($"{trustedFileNameForDisplay} error on upload (Err: 3): {ex.Message}"); uploadResult.ErrorCode = 3; } } @@ -111,112 +235,11 @@ namespace LiMan.APi.Controllers uploadResults.Add(uploadResult); // salvo su DB var fatto = dataService.FileAdd(ticketId, ticketDir, uploadResults); + Log.Info($"Ticket: {ticketId} | dir: {ticketDir} | {uploadResults.Count} files"); return new CreatedResult(resourcePath, uploadResult); } - /// - /// Caricamento file effettivo via POST - /// - /// TicketId x riferimento - /// Elenco files da caricare - /// - [HttpPost()] - public async Task>> PostFiles([FromForm] int ticketId, [FromForm] IEnumerable files) - { - // max 5 files - var maxAllowedFiles = 10; - // max 50 mb - long maxFileSize = 1024 * 1024 * 50; - var filesProcessed = 0; - string ticketDir = $"T{ticketId:000000000}"; - var resourcePath = new Uri($"{Request.Scheme}://{Request.Host}/api/filesave/list/{ticketId}"); - List uploadResults = new(); - string fileDir = env.ContentRootPath; - string relDir = env.EnvironmentName; - - foreach (var file in files) - { - var uploadResult = new UploadResult(); - string trustedFileNameForFileStorage; - var untrustedFileName = file.FileName; - uploadResult.FileName = untrustedFileName; - var trustedFileNameForDisplay = WebUtility.HtmlEncode(untrustedFileName); - - if (filesProcessed < maxAllowedFiles) - { - if (file.Length == 0) - { - logger.LogInformation("{FileName} length is 0 (Err: 1)", trustedFileNameForDisplay); - uploadResult.ErrorCode = 1; - } - else if (file.Length > maxFileSize) - { - logger.LogInformation("{FileName} of {Length} bytes is larger than the limit of {Limit} bytes (Err: 2)", trustedFileNameForDisplay, file.Length, maxFileSize); - uploadResult.ErrorCode = 2; - } - else - { - try - { - DateTime oggi = DateTime.Today; - trustedFileNameForFileStorage = Path.GetRandomFileName(); - relDir = _configuration["FileShare"]; - fileDir = Path.Combine(relDir, ticketDir); - if (!Directory.Exists(fileDir)) - { - Directory.CreateDirectory(fileDir); - } - var path = Path.Combine(fileDir, trustedFileNameForFileStorage); - - await using FileStream fs = new(path, FileMode.Create); - await file.CopyToAsync(fs); - - logger.LogInformation("{FileName} saved at {Path}", trustedFileNameForDisplay, path); - uploadResult.Uploaded = true; - uploadResult.StoredFileName = trustedFileNameForFileStorage; - } - catch (IOException ex) - { - logger.LogError("{FileName} error on upload (Err: 3): {Message}", trustedFileNameForDisplay, ex.Message); - uploadResult.ErrorCode = 3; - } - } - - filesProcessed++; - } - else - { - logger.LogInformation("{FileName} not uploaded because the request exceeded the allowed {Count} of files (Err: 4)", trustedFileNameForDisplay, maxAllowedFiles); - uploadResult.ErrorCode = 4; - } - - uploadResults.Add(uploadResult); - } - // salvo su DB - var fatto = dataService.FileAdd(ticketId, ticketDir, uploadResults); - - return new CreatedResult(resourcePath, uploadResults); - } - - - /// - /// Richiesta di registrazione ticket supporto - /// - /// Obj Richiesta - // POST api/files/list/1 - [HttpPost("list/{id}")] - public async Task> list(int id, [FromBody] SupportRequest CurrRequest) - { - List result = new List(); - // controllo valori - if (CurrRequest.IsValid) - { - // cerco i files dato ticket - result = await dataService.FileGetFilt(id); - await dataService.recordCall(CurrRequest.CodInst, CurrRequest.CodApp, $"POST:api/files/list:{id}"); - } - return result; - } + #endregion Public Methods } -} +} \ No newline at end of file diff --git a/LiMan.Api/Controllers/TicketController.cs b/LiMan.Api/Controllers/TicketController.cs index 0965b08..d876543 100644 --- a/LiMan.Api/Controllers/TicketController.cs +++ b/LiMan.Api/Controllers/TicketController.cs @@ -3,6 +3,7 @@ using LiMan.APi.Data; using LiMan.DB.DTO; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using NLog; using System; using System.Collections.Generic; @@ -86,6 +87,7 @@ namespace LiMan.APi.Controllers // restituisco richieste aperte var rawResult= await dataService.TicketByCliente(CurrRequest.CodInst, CurrRequest.CodApp, CurrRequest.MasterKey, 1); result = rawResult.FirstOrDefault(); + Log.Info($"Ticket generated: {result.IdxTicket} | CI: {CurrRequest.CodInst} | CA: {CurrRequest.CodApp}"); await dataService.recordCall(CurrRequest.CodInst, CurrRequest.CodApp, $"POST:api/ticket/sendReq:{CurrRequest.MasterKey}"); return result; } diff --git a/LiMan.Api/LiMan.APi.xml b/LiMan.Api/LiMan.APi.xml index 64f14e3..deb42da 100644 --- a/LiMan.Api/LiMan.APi.xml +++ b/LiMan.Api/LiMan.APi.xml @@ -98,12 +98,12 @@ Controller caricamento file - + - Dataservice x accesso DB + Classe per logging - + Init generico @@ -112,12 +112,17 @@ - + - Caricamento file effettivo via POST + Dataservice x accesso DB - TicketId x riferimento - Elenco files da caricare + + + + Richiesta di registrazione ticket supporto + + + @@ -128,11 +133,13 @@ Elenco files da caricare - + - Richiesta di registrazione ticket supporto + Caricamento file effettivo via POST - Obj Richiesta + TicketId x riferimento + Elenco files da caricare + diff --git a/LiMan.UI/LiMan.UI.csproj b/LiMan.UI/LiMan.UI.csproj index bb72afd..6d5e0b6 100644 --- a/LiMan.UI/LiMan.UI.csproj +++ b/LiMan.UI/LiMan.UI.csproj @@ -2,7 +2,7 @@ net5.0 - 1.1.2202.0414 + 1.1.2202.0415 LiMan.UI LiMan.UI diff --git a/LiMan.UI/Resources/ChangeLog.html b/LiMan.UI/Resources/ChangeLog.html index c4577de..98df7b4 100644 --- a/LiMan.UI/Resources/ChangeLog.html +++ b/LiMan.UI/Resources/ChangeLog.html @@ -1,6 +1,6 @@ License Manager -

Versione: 1.1.2202.0414

+

Versione: 1.1.2202.0415


Note di rilascio:
    diff --git a/LiMan.UI/Resources/VersNum.txt b/LiMan.UI/Resources/VersNum.txt index 41ce8b4..d800794 100644 --- a/LiMan.UI/Resources/VersNum.txt +++ b/LiMan.UI/Resources/VersNum.txt @@ -1 +1 @@ -1.1.2202.0414 +1.1.2202.0415 diff --git a/LiMan.UI/Resources/manifest.xml b/LiMan.UI/Resources/manifest.xml index 67341d8..c5bd112 100644 --- a/LiMan.UI/Resources/manifest.xml +++ b/LiMan.UI/Resources/manifest.xml @@ -1,6 +1,6 @@ - 1.1.2202.0414 + 1.1.2202.0415 https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/LiMan.UI.zip https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/ChangeLog.html false