diff --git a/server/AyaNova/Controllers/ReportController.cs b/server/AyaNova/Controllers/ReportController.cs
index 17547cb6..7f5d9d9d 100644
--- a/server/AyaNova/Controllers/ReportController.cs
+++ b/server/AyaNova/Controllers/ReportController.cs
@@ -1,12 +1,13 @@
+using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
-using System.Linq;
using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Logging;
+using Microsoft.EntityFrameworkCore;
using AyaNova.Models;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz;
@@ -292,21 +293,21 @@ namespace AyaNova.Api.Controllers
return StatusCode(401, new ApiErrorResponse(ApiErrorCode.AUTHENTICATION_FAILED));
}
- if (!Authorized.HasModifyRole(DownloadUser.Roles, AyaType.Backup))//not technically modify but treating as such as a backup is very sensitive data
- {
- await Task.Delay(nFailedAuthDelay);//DOS protection
- return StatusCode(403, new ApiNotAuthorizedResponse());
- }
+ // if (!Authorized.HasModifyRole(DownloadUser.Roles, AyaType.Backup))//not technically modify but treating as such as a backup is very sensitive data
+ // {
+ // await Task.Delay(nFailedAuthDelay);//DOS protection
+ // return StatusCode(403, new ApiNotAuthorizedResponse());
+ // }
- if (!FileUtil.BackupFileExists(fileName))
+ if (!FileUtil.TemporaryFileExists(fileName))
{
await Task.Delay(nFailedAuthDelay);//fishing protection
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
}
- string mimetype = fileName.EndsWith("zip") ? "application/zip" : "application/octet-stream";
- var utilityFilePath = FileUtil.GetFullPathForBackupFile(fileName);
- await EventLogProcessor.LogEventToDatabaseAsync(new Event(DownloadUser.Id, 0, AyaType.NoType, AyaEvent.UtilityFileDownload, fileName), ct);
- return PhysicalFile(utilityFilePath, mimetype, fileName);
+
+ var FilePath = FileUtil.GetFullPathForTemporaryFile(fileName);
+ // await EventLogProcessor.LogEventToDatabaseAsync(new Event(DownloadUser.Id, 0, AyaType.NoType, AyaEvent.UtilityFileDownload, fileName), ct);
+ return PhysicalFile(FilePath, "application/pdf");
}
diff --git a/server/AyaNova/biz/JobsBiz.cs b/server/AyaNova/biz/JobsBiz.cs
index dd75984e..7dea8b06 100644
--- a/server/AyaNova/biz/JobsBiz.cs
+++ b/server/AyaNova/biz/JobsBiz.cs
@@ -209,7 +209,8 @@ namespace AyaNova.Biz
//JOB SWEEPER / AND USER COUNT CHECK
await CoreJobSweeper.DoWorkAsync();
-
+ //Clean temp folder
+ CoreJobTempFolderCleanup.DoWork();
log.LogDebug("Processing exclusive dynamic jobs");
diff --git a/server/AyaNova/generator/CoreJobTempFolderCleanup.cs b/server/AyaNova/generator/CoreJobTempFolderCleanup.cs
new file mode 100644
index 00000000..2570541c
--- /dev/null
+++ b/server/AyaNova/generator/CoreJobTempFolderCleanup.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Diagnostics;
+using Microsoft.Extensions.Logging;
+using AyaNova.Util;
+using AyaNova.Models;
+using Microsoft.EntityFrameworkCore;
+
+
+namespace AyaNova.Biz
+{
+ ///
+ /// called by Generator to keep temp folder squeaky clean
+ ///
+ internal static class CoreJobTempFolderCleanup
+ {
+ private static ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("CoreJobTempFolderCleanup");
+
+ private static DateTime _lastRun = DateTime.UtcNow;
+ private static TimeSpan tsRunEvery = new TimeSpan(0, 0, 1);//every this minutes run the cleanup task
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //
+ //
+ public static void DoWork()
+ {
+ if (DateUtil.IsAfterDuration(_lastRun, tsRunEvery))
+ {
+ log.LogTrace("Temp cleanup now");
+ FileUtil.CleanTemporaryFilesFolder(new TimeSpan(0,5,0));//erase any files found to be older than 5 minutes
+ var now = DateTime.UtcNow;
+ _lastRun = now;
+ }
+ }
+
+
+
+
+
+ /////////////////////////////////////////////////////////////////////
+
+ }//eoc
+}//eons
+
diff --git a/server/AyaNova/util/FileUtil.cs b/server/AyaNova/util/FileUtil.cs
index 8cefbb16..0e312849 100644
--- a/server/AyaNova/util/FileUtil.cs
+++ b/server/AyaNova/util/FileUtil.cs
@@ -71,6 +71,17 @@ namespace AyaNova.Util
#endregion folder ensurance
#region Temporary files handling
+
+ ///
+ /// Get a path combining supplied file name and backup files folder
+ ///
+ ///
+ internal static string GetFullPathForTemporaryFile(string fileName)
+ {
+ return Path.Combine(TemporaryFilesFolder, fileName);
+ }
+
+
///
/// Get backup file folder
///
@@ -96,6 +107,39 @@ namespace AyaNova.Util
}
}
+
+ ///
+ /// Confirm if a file exists in the temporary files folder
+ ///
+ /// name of temp folder file
+ /// duh!
+ internal static bool TemporaryFileExists(string fileName)
+ {
+ if (string.IsNullOrWhiteSpace(fileName))
+ return false;
+
+ var FilePath = GetFullPathForTemporaryFile(fileName);
+ return File.Exists(FilePath);
+
+ }
+
+ ///
+ /// Erase all files found to be older than age
+ ///
+ internal static void CleanTemporaryFilesFolder(TimeSpan age)
+ {
+ DateTime EraseIfOlderThan = DateTime.UtcNow - age;
+ System.IO.DirectoryInfo di = new DirectoryInfo(TemporaryFilesFolder);
+ foreach (FileInfo file in di.EnumerateFiles())
+ {
+ if (file.CreationTimeUtc < EraseIfOlderThan)
+ {
+ string s = "Erase, tora tora tora";
+ //file.Delete();
+ }
+ }
+ }
+
#endregion