This commit is contained in:
2021-11-29 21:00:23 +00:00
parent b83c1faf89
commit 086a03a0cb
19 changed files with 161 additions and 146 deletions

8
.vscode/launch.json vendored
View File

@@ -52,10 +52,10 @@
// "AYANOVA_USE_URLS": "http://*:7575;", // "AYANOVA_USE_URLS": "http://*:7575;",
// //"AYANOVA_REPORT_RENDERING_TIMEOUT": "20000", // //"AYANOVA_REPORT_RENDERING_TIMEOUT": "20000",
// //"AYANOVA_REPORT_RENDERING_MAX_INSTANCES": "3", // //"AYANOVA_REPORT_RENDERING_MAX_INSTANCES": "3",
//"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", //"AYANOVA_ATTACHMENT_FILES_PATH": "c:\\temp\\RavenTestData\\userfiles",
"AYANOVA_FOLDER_USER_FILES":"%ProgramData%\\ayanova\\userfiles", "AYANOVA_ATTACHMENT_FILES_PATH":"%ProgramData%\\ayanova\\userfiles",
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_BACKUP_FILES_PATH": "c:\\temp\\RavenTestData\\backupfiles",
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", "AYANOVA_TEMP_FILES_PATH": "c:\\temp\\RavenTestData\\tempfiles",
// "AYANOVA_SERVER_TEST_MODE": "false", // "AYANOVA_SERVER_TEST_MODE": "false",
// "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", // "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
// "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-8", // "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-8",

View File

@@ -21,7 +21,7 @@ Sometimes 3rd party tools may log to the log file and we may need to restrict th
## Log path ## Log path
By default AyaNova logs to a "logs" folder situated below the folder where AyaNova is started. By default AyaNova logs to a `logs` folder in the location specified by [AYANOVA_DATA_PATH](ops-config-data-path.md) setting.
You can override this and set a custom log location by command line argument or by setting the "AYANOVA_LOG_PATH" environment variable. You can override this and set a custom log location by command line argument or by setting the "AYANOVA_LOG_PATH" environment variable.
Example command line log path parameter Example command line log path parameter

View File

@@ -18,7 +18,7 @@ The value specified should be a string containing a fully qualified file path to
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_BACKUP_PG_DUMP_PATH="/usr/lib/postgresql/14.1/bin/"` (not real) `ayanova.exe --AYANOVA_BACKUP_PG_DUMP_PATH="/usr/lib/postgresql/14.1/bin/"` (not real)
Example environment variable Example environment variable

View File

@@ -0,0 +1,44 @@
# DATA PATH SETTING
This setting controls where AyaNova stores it's data by default and is required to be present unless all other path related configuration settings are specified individually.
All data path configurations default to a location under the location specified by AYANOVA_DATA_PATH as follows:
- AYANOVA_BACKUP_FILES_PATH defaults to 'backup' folder inside AYANOVA_DATA_PATH
- AYANOVA_ATTACHMENT_FILES_PATH defaults to 'attachments' folder inside AYANOVA_DATA_PATH
- AYANOVA_TEMP_FILES_PATH defaults to 'temp' folder inside AYANOVA_DATA_PATH
- AYANOVA_LOG_PATH defaults to 'logs' folder inside AYANOVA_DATA_PATH
## Override individual locations
Each of the path related configuration settings can also be specified individually, any that are left out will default to the above settings.
## Default
On Windows computers that use the installer, the default location for this setting is set by the installer the 'ProgramData' folder. There is no default for other operating systems or manual installations.
## Overriding
AyaNova expects the data path to be provided by an environment variable or command line parameter named
`AYANOVA_DATA_PATH`
The value specified should be a string containing a fully qualified file path for the platform, for example:
`c:\ProgramData\ayanova`
Example command line parameter
`ayanova.exe --AYANOVA_DATA_PATH="/var/lib/ayanova"`
Example environment variable
Windows
`set "AYANOVA_DATA_PATH=c:\ProgramData\ayanova"`
Linux / MAC
`export AYANOVA_DATA_PATH="/var/lib/ayanova"`
If both a command line parameter and an environment variable are set the command line parameter takes precedence.

View File

@@ -14,7 +14,7 @@ AyaNova expects the connection string to be provided by an environment variable
Example command line parameter: Example command line parameter:
`dotnet run --AYANOVA_DB_CONNECTION="Server=localhost;Database=MyAyaNovaDB;"` `ayanova.exe --AYANOVA_DB_CONNECTION="Server=localhost;Database=MyAyaNovaDB;"`
Example environment variable: Example environment variable:

View File

@@ -41,7 +41,7 @@ or
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_DEFAULT_TRANSLATION="ES"` `ayanova.exe --AYANOVA_DEFAULT_TRANSLATION="ES"`
Example environment variable Example environment variable

View File

@@ -10,9 +10,10 @@ These values can all be specified as an environment variable or as a command lin
## FILE STORAGE LOCATIONS ## FILE STORAGE LOCATIONS
- [AYANOVA_FOLDER_BACKUP_FILES](ops-config-folder-backup-files.md) - [AYANOVA_DATA_PATH](ops-config-data-path.md)
- [AYANOVA_FOLDER_USER_FILES](ops-config-folder-user-files.md) - [AYANOVA_BACKUP_FILES_PATH](ops-config-folder-backup-files.md)
- [AYANOVA_FOLDER_TEMPORARY_SERVER_FILES](ops-config-folder-temporary-files.md) - [AYANOVA_ATTACHMENT_FILES_PATH](ops-config-folder-user-files.md)
- [AYANOVA_TEMP_FILES_PATH](ops-config-folder-temporary-files.md)
## BACKUP UTILITY "pg_dump" PATH ## BACKUP UTILITY "pg_dump" PATH
- [AYANOVA_BACKUP_PG_DUMP_PATH](ops-config-backup-pgdump-path.md) - [AYANOVA_BACKUP_PG_DUMP_PATH](ops-config-backup-pgdump-path.md)

View File

@@ -2,33 +2,33 @@
This setting controls where AyaNova stores backup and restore files used by the backup and restore features built into AyaNova. This setting controls where AyaNova stores backup and restore files used by the backup and restore features built into AyaNova.
Warning: this folder MUST NOT be the same location set for [AYANOVA_FOLDER_USER_FILES](ops-config-folder-user-files.md) or [AYANOVA_FOLDER_TEMPORARY_SERVER_FILES](ops-config-folder-temporary-files.md) or AyaNova will not start. Warning: this folder MUST NOT be the same location set for [AYANOVA_ATTACHMENT_FILES_PATH](ops-config-folder-user-files.md) or [AYANOVA_TEMP_FILES_PATH](ops-config-folder-temporary-files.md) or AyaNova will not start.
## Default ## Default
If no override is specified AyaNova will store backup files in a `backupfiles` folder in the AyaNova root folder where AyaNova is started from. If no override is specified AyaNova will store backup files in a `backup` folder in the location specified by [AYANOVA_DATA_PATH](ops-config-data-path.md) setting.
## Overriding ## Overriding
AyaNova expects the backup files folder path to be provided by an environment variable or command line parameter named AyaNova expects the backup files folder path to be provided by an environment variable or command line parameter named
`AYANOVA_FOLDER_BACKUP_FILES` `AYANOVA_BACKUP_FILES_PATH`
The value specified should be a string containing a fully qualified file path for the platform, for example: The value specified should be a string containing a fully qualified file path for the platform, for example:
`c:\data\ayanova\backupfiles` `c:\data\ayanova\backupfiles`
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_FOLDER_BACKUP_FILES="/var/lib/ayanova/backupfiles"` `ayanova.exe --AYANOVA_BACKUP_FILES_PATH="/var/lib/ayanova/backupfiles"`
Example environment variable Example environment variable
Windows Windows
`set "AYANOVA_FOLDER_BACKUP_FILES=c:\data\ayanova\backupfiles"` `set "AYANOVA_BACKUP_FILES_PATH=c:\data\ayanova\backupfiles"`
Linux / MAC Linux / MAC
`export AYANOVA_FOLDER_BACKUP_FILES="/var/lib/ayanova/backupfiles"` `export AYANOVA_BACKUP_FILES_PATH="/var/lib/ayanova/backupfiles"`
If both a command line parameter and an environment variable are set the command line parameter takes precedence. If both a command line parameter and an environment variable are set the command line parameter takes precedence.

View File

@@ -2,33 +2,33 @@
This setting controls where AyaNova stores files temporarily while servicing requests such as report generation etc. This setting controls where AyaNova stores files temporarily while servicing requests such as report generation etc.
Warning: this folder MUST NOT be the same location set for [AYANOVA_FOLDER_USER_FILES](ops-config-folder-user-files.md) or [AYANOVA_FOLDER_BACKUP_FILES](ops-config-folder-backup-files.md) or AyaNova will not start. Warning: this folder MUST NOT be the same location set for [AYANOVA_ATTACHMENT_FILES_PATH](ops-config-folder-user-files.md) or [AYANOVA_BACKUP_FILES_PATH](ops-config-folder-backup-files.md) or AyaNova will not start.
## Default ## Default
If no override is specified AyaNova will store temporary files in a `tempfiles` folder in the AyaNova root folder where AyaNova is started from. If no override is specified AyaNova will store temporary files in a `tempfiles` folder in the location specified by [AYANOVA_DATA_PATH](ops-config-data-path.md) setting.
## Overriding ## Overriding
AyaNova expects the temporary files folder path to be provided by an environment variable or command line parameter named AyaNova expects the temporary files folder path to be provided by an environment variable or command line parameter named
`AYANOVA_FOLDER_TEMPORARY_SERVER_FILES` `AYANOVA_TEMP_FILES_PATH`
The value specified should be a string containing a fully qualified file path for the platform, for example: The value specified should be a string containing a fully qualified file path for the platform, for example:
`c:\data\ayanova\tempfiles` `c:\data\ayanova\tempfiles`
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_FOLDER_TEMPORARY_SERVER_FILES="/var/lib/ayanova/tempfiles"` `ayanova.exe --AYANOVA_TEMP_FILES_PATH="/var/lib/ayanova/tempfiles"`
Example environment variable Example environment variable
Windows Windows
`set "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES=c:\data\ayanova\tempfiles"` `set "AYANOVA_TEMP_FILES_PATH=c:\data\ayanova\tempfiles"`
Linux / MAC Linux / MAC
`export AYANOVA_FOLDER_TEMPORARY_SERVER_FILES="/var/lib/ayanova/tempfiles"` `export AYANOVA_TEMP_FILES_PATH="/var/lib/ayanova/tempfiles"`
If both a command line parameter and an environment variable are set the command line parameter takes precedence. If both a command line parameter and an environment variable are set the command line parameter takes precedence.

View File

@@ -3,33 +3,33 @@
This setting controls where AyaNova stores user uploaded files used by features that allow file attachment or uploads. This setting controls where AyaNova stores user uploaded files used by features that allow file attachment or uploads.
AyaNova stores these files with random names in the folder specified. AyaNova stores these files with random names in the folder specified.
Warning: this folder MUST NOT be the same location set for [AYANOVA_FOLDER_BACKUP_FILES](ops-config-folder-backup-files.md) or [AYANOVA_FOLDER_TEMPORARY_SERVER_FILES](ops-config-folder-temporary-files.md) or AyaNova will not start. Warning: this folder MUST NOT be the same location set for [AYANOVA_BACKUP_FILES_PATH](ops-config-folder-backup-files.md) or [AYANOVA_TEMP_FILES_PATH](ops-config-folder-temporary-files.md) or AyaNova will not start.
## Default ## Default
If no override is specified AyaNova will store user files in a `userfiles` folder in the AyaNova root folder where AyaNova is started from. If no override is specified AyaNova will store user files in a `userfiles` folder in the location specified by [AYANOVA_DATA_PATH](ops-config-data-path.md) setting.
## Overriding ## Overriding
AyaNova expects the user files folder path to be provided by an environment variable or command line parameter named AyaNova expects the user files folder path to be provided by an environment variable or command line parameter named
`AYANOVA_FOLDER_USER_FILES` `AYANOVA_ATTACHMENT_FILES_PATH`
The value specified should be a string containing a fully qualified file path for the platform, for example: The value specified should be a string containing a fully qualified file path for the platform, for example:
`c:\data\ayanova\userfiles` `c:\data\ayanova\userfiles`
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_FOLDER_USER_FILES="/var/lib/ayanova/userfiles"` `ayanova.exe --AYANOVA_ATTACHMENT_FILES_PATH="/var/lib/ayanova/userfiles"`
Example environment variable Example environment variable
Windows Windows
`set "AYANOVA_FOLDER_USER_FILES=c:\data\ayanova\userfiles"` `set "AYANOVA_ATTACHMENT_FILES_PATH=c:\data\ayanova\userfiles"`
Linux / MAC Linux / MAC
`export AYANOVA_FOLDER_USER_FILES="/var/lib/ayanova/userfiles"` `export AYANOVA_ATTACHMENT_FILES_PATH="/var/lib/ayanova/userfiles"`
If both a command line parameter and an environment variable are set the command line parameter takes precedence. If both a command line parameter and an environment variable are set the command line parameter takes precedence.

View File

@@ -31,7 +31,7 @@ You should use the same precautions as for choosing any other password and ensur
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_JWT_SECRET="02847This_is_my_secret_key456576"` `ayanova.exe --AYANOVA_JWT_SECRET="02847This_is_my_secret_key456576"`
Example environment variable Example environment variable

View File

@@ -40,7 +40,7 @@ The value specified should be a string specifying the value as an integer, for e
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_REPORT_RENDERING_MAX_INSTANCES="5` `ayanova.exe --AYANOVA_REPORT_RENDERING_MAX_INSTANCES="5`
Example environment variable Example environment variable

View File

@@ -41,7 +41,7 @@ The value specified should be a string specifying the timeout in **milliseconds*
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_REPORT_RENDERING_TIMEOUT="30000` `ayanova.exe --AYANOVA_REPORT_RENDERING_TIMEOUT="30000`
Example environment variable Example environment variable

View File

@@ -20,7 +20,7 @@ The value specified should be a string used to temporarily override the super us
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_SET_SUPERUSER_PW="Th3RainInSpainFallsMainlyOnTh3Pla1n"` `ayanova.exe --AYANOVA_SET_SUPERUSER_PW="Th3RainInSpainFallsMainlyOnTh3Pla1n"`
Example environment variable Example environment variable

View File

@@ -21,7 +21,7 @@ The value specified should be a string of one or more semicolon separated values
Example command line parameter Example command line parameter
`dotnet run --AYANOVA_USE_URLS="http://*:5000"` `ayanova.exe --AYANOVA_USE_URLS="http://*:5000"`
Example environment variable Example environment variable

View File

@@ -184,9 +184,9 @@ namespace AyaNova.Api.Controllers
AYANOVA_USE_URLS = ServerBootConfig.AYANOVA_USE_URLS, AYANOVA_USE_URLS = ServerBootConfig.AYANOVA_USE_URLS,
AYANOVA_DB_CONNECTION = DbUtil.PasswordRedactedConnectionString(ServerBootConfig.AYANOVA_DB_CONNECTION), AYANOVA_DB_CONNECTION = DbUtil.PasswordRedactedConnectionString(ServerBootConfig.AYANOVA_DB_CONNECTION),
AYANOVA_REPORT_RENDERING_TIMEOUT = ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT, AYANOVA_REPORT_RENDERING_TIMEOUT = ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT,
AYANOVA_FOLDER_USER_FILES = ServerBootConfig.AYANOVA_FOLDER_USER_FILES, AYANOVA_ATTACHMENT_FILES_PATH = ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH,
AYANOVA_FOLDER_BACKUP_FILES = ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, AYANOVA_BACKUP_FILES_PATH = ServerBootConfig.AYANOVA_BACKUP_FILES_PATH,
AYANOVA_FOLDER_TEMPORARY_SERVER_FILES = ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES, AYANOVA_TEMP_FILES_PATH = ServerBootConfig.AYANOVA_TEMP_FILES_PATH,
AYANOVA_BACKUP_PG_DUMP_PATH = ServerBootConfig.AYANOVA_BACKUP_PG_DUMP_PATH, AYANOVA_BACKUP_PG_DUMP_PATH = ServerBootConfig.AYANOVA_BACKUP_PG_DUMP_PATH,
AYANOVA_LOG_PATH = ServerBootConfig.AYANOVA_LOG_PATH, AYANOVA_LOG_PATH = ServerBootConfig.AYANOVA_LOG_PATH,
AYANOVA_LOG_LEVEL = ServerBootConfig.AYANOVA_LOG_LEVEL, AYANOVA_LOG_LEVEL = ServerBootConfig.AYANOVA_LOG_LEVEL,

View File

@@ -217,22 +217,22 @@ namespace AyaNova
long UtilityFilesAvailableSpace = 0; long UtilityFilesAvailableSpace = 0;
try try
{ {
// Console.WriteLine($"##### program:about to call backupfilesdriveavailablespace, config is [{ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES}] ######"); // Console.WriteLine($"##### program:about to call backupfilesdriveavailablespace, config is [{ServerBootConfig.AYANOVA_BACKUP_FILES_PATH}] ######");
UtilityFilesAvailableSpace = new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)).AvailableFreeSpace; UtilityFilesAvailableSpace = new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH)).AvailableFreeSpace;
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.Error(ex, $"BOOT::FileUtil::UtilityFilesDriveAvailableSpace error getting available space from [{Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)}]"); logger.Error(ex, $"BOOT::FileUtil::UtilityFilesDriveAvailableSpace error getting available space from [{Path.GetPathRoot(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH)}]");
} }
long AttachmentFilesAvailableSpace = 0; long AttachmentFilesAvailableSpace = 0;
try try
{ {
AttachmentFilesAvailableSpace = new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_USER_FILES)).AvailableFreeSpace; AttachmentFilesAvailableSpace = new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH)).AvailableFreeSpace;
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.Error(ex, $"BOOT::FileUtil::AttachmentFilesDriveAvailableSpace error getting available space from [{Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_USER_FILES)}]"); logger.Error(ex, $"BOOT::FileUtil::AttachmentFilesDriveAvailableSpace error getting available space from [{Path.GetPathRoot(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH)}]");
} }

View File

@@ -31,34 +31,34 @@ namespace AyaNova.Util
{ {
// //UserFiles // //UserFiles
// if (string.IsNullOrWhiteSpace(ServerBootConfig.AYANOVA_FOLDER_USER_FILES)) // if (string.IsNullOrWhiteSpace(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH))
// ServerBootConfig.AYANOVA_FOLDER_USER_FILES = Path.Combine(contentRootPath, "userfiles"); // ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH = Path.Combine(contentRootPath, "userfiles");
// //BackupFiles // //BackupFiles
// if (ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES == null) // if (ServerBootConfig.AYANOVA_BACKUP_FILES_PATH == null)
// ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES = Path.Combine(contentRootPath, "backupfiles"); // ServerBootConfig.AYANOVA_BACKUP_FILES_PATH = Path.Combine(contentRootPath, "backupfiles");
// //Temporary system files (reports etc) // //Temporary system files (reports etc)
// if (ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES == null) // if (ServerBootConfig.AYANOVA_TEMP_FILES_PATH == null)
// ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES = Path.Combine(contentRootPath, "tempfiles"); // ServerBootConfig.AYANOVA_TEMP_FILES_PATH = Path.Combine(contentRootPath, "tempfiles");
//Prevent using the same folder for both //Prevent using the same folder for both
if ( if (
string.Equals(Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_USER_FILES), Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES), StringComparison.OrdinalIgnoreCase) || string.Equals(Path.GetFullPath(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH), Path.GetFullPath(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH), StringComparison.OrdinalIgnoreCase) ||
string.Equals(Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_USER_FILES), Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES), StringComparison.OrdinalIgnoreCase) || string.Equals(Path.GetFullPath(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH), Path.GetFullPath(ServerBootConfig.AYANOVA_TEMP_FILES_PATH), StringComparison.OrdinalIgnoreCase) ||
string.Equals(Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES), Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES), StringComparison.OrdinalIgnoreCase) string.Equals(Path.GetFullPath(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH), Path.GetFullPath(ServerBootConfig.AYANOVA_TEMP_FILES_PATH), StringComparison.OrdinalIgnoreCase)
) )
{ {
throw new System.NotSupportedException("E1040: The configuration settings AYANOVA_FOLDER_USER_FILES, AYANOVA_FOLDER_BACKUP_FILES and AYANOVA_FOLDER_TEMPORARY_SYSTEM_FILES must all be different locations"); throw new System.NotSupportedException("E1040: The configuration settings AYANOVA_ATTACHMENT_FILES_PATH, AYANOVA_BACKUP_FILES_PATH and AYANOVA_FOLDER_TEMPORARY_SYSTEM_FILES must all be different locations");
} }
EnsurePath(ServerBootConfig.AYANOVA_FOLDER_USER_FILES); EnsurePath(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH);
EnsurePath(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES); EnsurePath(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH);
EnsurePath(ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES); EnsurePath(ServerBootConfig.AYANOVA_TEMP_FILES_PATH);
} }
//create path if doesn't exist already //create path if doesn't exist already
@@ -90,7 +90,7 @@ namespace AyaNova.Util
{ {
get get
{ {
return ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES; return ServerBootConfig.AYANOVA_TEMP_FILES_PATH;
} }
} }
@@ -151,7 +151,7 @@ namespace AyaNova.Util
/// <returns></returns> /// <returns></returns>
internal static string GetFullPathForBackupFile(string fileName) internal static string GetFullPathForBackupFile(string fileName)
{ {
return Path.Combine(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, fileName); return Path.Combine(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH, fileName);
} }
@@ -163,7 +163,7 @@ namespace AyaNova.Util
// { // {
// get // get
// { // {
// return ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES; // return ServerBootConfig.AYANOVA_BACKUP_FILES_PATH;
// } // }
// } // }
@@ -197,7 +197,7 @@ namespace AyaNova.Util
BackupStatus statusReport = new BackupStatus(); BackupStatus statusReport = new BackupStatus();
try try
{ {
statusReport.AvailableFreeSpace = GetBytesReadable(new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)).AvailableFreeSpace); statusReport.AvailableFreeSpace = GetBytesReadable(new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH)).AvailableFreeSpace);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -206,7 +206,7 @@ namespace AyaNova.Util
log.LogError(ex, "FileUtil::BackupStatusReport error getting available space"); log.LogError(ex, "FileUtil::BackupStatusReport error getting available space");
} }
var backupFiles = Directory.EnumerateFiles(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, "*"); var backupFiles = Directory.EnumerateFiles(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH, "*");
foreach (string file in backupFiles.OrderByDescending(z => z)) foreach (string file in backupFiles.OrderByDescending(z => z))
{ {
@@ -246,7 +246,7 @@ namespace AyaNova.Util
internal static DateTime MostRecentAutomatedBackupFileDate() internal static DateTime MostRecentAutomatedBackupFileDate()
{ {
DateTime LastBackup = DateTime.MinValue; DateTime LastBackup = DateTime.MinValue;
foreach (string file in Directory.EnumerateFiles(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, "db-*.backup")) foreach (string file in Directory.EnumerateFiles(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH, "db-*.backup"))
{ {
var ThisFileTime = File.GetCreationTimeUtc(file); var ThisFileTime = File.GetCreationTimeUtc(file);
if (ThisFileTime > LastBackup) if (ThisFileTime > LastBackup)
@@ -298,7 +298,7 @@ namespace AyaNova.Util
name = Path.GetFileName(name);//ensure no directory shenanigans, only a file name is allowed name = Path.GetFileName(name);//ensure no directory shenanigans, only a file name is allowed
//remove the file completely //remove the file completely
var DeleteFilePath = Path.Combine(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, name); var DeleteFilePath = Path.Combine(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH, name);
if (File.Exists(DeleteFilePath)) if (File.Exists(DeleteFilePath))
{ {
//delete the temp file, it's already stored //delete the temp file, it's already stored
@@ -318,7 +318,7 @@ namespace AyaNova.Util
if (keepCount < 1) keepCount = 1; if (keepCount < 1) keepCount = 1;
//Database backups //Database backups
var BackupFileList = Directory.EnumerateFiles(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, "db-*.backup"); var BackupFileList = Directory.EnumerateFiles(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH, "db-*.backup");
if (BackupFileList.Count() > keepCount) if (BackupFileList.Count() > keepCount)
{ {
//sort, skip newest x (keepcount) delete the rest //sort, skip newest x (keepcount) delete the rest
@@ -331,7 +331,7 @@ namespace AyaNova.Util
} }
//Attachment backups //Attachment backups
BackupFileList = Directory.EnumerateFiles(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES, "at-*.zip"); BackupFileList = Directory.EnumerateFiles(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH, "at-*.zip");
if (BackupFileList.Count() > keepCount) if (BackupFileList.Count() > keepCount)
{ {
//sort, skip newest x (keepcount) delete the rest //sort, skip newest x (keepcount) delete the rest
@@ -347,10 +347,10 @@ namespace AyaNova.Util
internal static long BackupFilesDriveAvailableSpace() internal static long BackupFilesDriveAvailableSpace()
{ {
//Console.WriteLine("b fileutil:backupfilesdriveavailablespace, backupfilesfolder:", ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES); //Console.WriteLine("b fileutil:backupfilesdriveavailablespace, backupfilesfolder:", ServerBootConfig.AYANOVA_BACKUP_FILES_PATH);
//Console.WriteLine("fileutil:backupfilesdriveavailablespace, backupfilesfolder FULLPATH:", Path.GetFullPath(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)); //Console.WriteLine("fileutil:backupfilesdriveavailablespace, backupfilesfolder FULLPATH:", Path.GetFullPath(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH));
// Console.WriteLine("fileutil:backupfilesdriveavailablespace, backupfilesfolder PATHROOT:", Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)); // Console.WriteLine("fileutil:backupfilesdriveavailablespace, backupfilesfolder PATHROOT:", Path.GetPathRoot(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH));
return new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)).AvailableFreeSpace; return new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH)).AvailableFreeSpace;
} }
@@ -402,7 +402,7 @@ namespace AyaNova.Util
// { // {
// get // get
// { // {
// return ServerBootConfig.AYANOVA_FOLDER_USER_FILES; // return ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH;
// } // }
// } // }
@@ -417,7 +417,7 @@ namespace AyaNova.Util
{ {
get get
{ {
return Path.Combine(ServerBootConfig.AYANOVA_FOLDER_USER_FILES, NewRandomFileName); return Path.Combine(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH, NewRandomFileName);
} }
} }
@@ -486,7 +486,7 @@ namespace AyaNova.Util
/// <returns>Path without the file</returns> /// <returns>Path without the file</returns>
internal static string GetPermanentAttachmentPath(string hash) internal static string GetPermanentAttachmentPath(string hash)
{ {
return Path.Combine(ServerBootConfig.AYANOVA_FOLDER_USER_FILES, hash[0].ToString(), hash[1].ToString(), hash[2].ToString()); return Path.Combine(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH, hash[0].ToString(), hash[1].ToString(), hash[2].ToString());
} }
/// <summary> /// <summary>
@@ -496,7 +496,7 @@ namespace AyaNova.Util
/// <returns></returns> /// <returns></returns>
internal static string GetPermanentAttachmentFilePath(string hash) internal static string GetPermanentAttachmentFilePath(string hash)
{ {
return Path.Combine(ServerBootConfig.AYANOVA_FOLDER_USER_FILES, hash[0].ToString(), hash[1].ToString(), hash[2].ToString(), hash); return Path.Combine(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH, hash[0].ToString(), hash[1].ToString(), hash[2].ToString(), hash);
} }
@@ -554,7 +554,7 @@ namespace AyaNova.Util
/// </summary> /// </summary>
internal static void EraseEntireContentsOfAttachmentFilesFolder() internal static void EraseEntireContentsOfAttachmentFilesFolder()
{ {
System.IO.DirectoryInfo di = new DirectoryInfo(ServerBootConfig.AYANOVA_FOLDER_USER_FILES); System.IO.DirectoryInfo di = new DirectoryInfo(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH);
foreach (FileInfo file in di.EnumerateFiles()) foreach (FileInfo file in di.EnumerateFiles())
{ {
file.Delete(); file.Delete();
@@ -573,7 +573,7 @@ namespace AyaNova.Util
var AttachmentsBackupFile = $"{demandFileNamePrepend}at-{FileUtil.GetSafeDateFileName()}.zip";//presentation issue so don't use UTC for this one var AttachmentsBackupFile = $"{demandFileNamePrepend}at-{FileUtil.GetSafeDateFileName()}.zip";//presentation issue so don't use UTC for this one
AttachmentsBackupFile = GetFullPathForBackupFile(AttachmentsBackupFile); AttachmentsBackupFile = GetFullPathForBackupFile(AttachmentsBackupFile);
System.IO.Compression.ZipFile.CreateFromDirectory(ServerBootConfig.AYANOVA_FOLDER_USER_FILES, AttachmentsBackupFile); System.IO.Compression.ZipFile.CreateFromDirectory(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH, AttachmentsBackupFile);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -587,12 +587,12 @@ namespace AyaNova.Util
internal static long AttachmentFilesDriveAvailableSpace() internal static long AttachmentFilesDriveAvailableSpace()
{ {
return new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_FOLDER_USER_FILES)).AvailableFreeSpace; return new System.IO.DriveInfo(Path.GetPathRoot(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH)).AvailableFreeSpace;
} }
internal static IEnumerable<string> GetAllAttachmentFilePaths() internal static IEnumerable<string> GetAllAttachmentFilePaths()
{ {
return Directory.EnumerateFiles(ServerBootConfig.AYANOVA_FOLDER_USER_FILES, "*", SearchOption.AllDirectories); return Directory.EnumerateFiles(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH, "*", SearchOption.AllDirectories);
} }
@@ -710,7 +710,7 @@ namespace AyaNova.Util
/// <returns></returns> /// <returns></returns>
internal static FolderSizeInfo GetAttachmentFolderSizeInfo() internal static FolderSizeInfo GetAttachmentFolderSizeInfo()
{ {
return GetDirectorySize(new DirectoryInfo(ServerBootConfig.AYANOVA_FOLDER_USER_FILES)); return GetDirectorySize(new DirectoryInfo(ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH));
} }
/// <summary> /// <summary>
@@ -719,7 +719,7 @@ namespace AyaNova.Util
/// <returns></returns> /// <returns></returns>
internal static FolderSizeInfo GetBackupFolderSizeInfo() internal static FolderSizeInfo GetBackupFolderSizeInfo()
{ {
return GetDirectorySize(new DirectoryInfo(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES)); return GetDirectorySize(new DirectoryInfo(ServerBootConfig.AYANOVA_BACKUP_FILES_PATH));
} }

View File

@@ -70,9 +70,9 @@ namespace AyaNova.Util
internal static bool AYANOVA_PERMANENTLY_ERASE_DATABASE { get; set; } internal static bool AYANOVA_PERMANENTLY_ERASE_DATABASE { get; set; }
//FILE FOLDERS //FILE FOLDERS
internal static string AYANOVA_FOLDER_USER_FILES { get; set; } internal static string AYANOVA_ATTACHMENT_FILES_PATH { get; set; }
internal static string AYANOVA_FOLDER_BACKUP_FILES { get; set; } internal static string AYANOVA_BACKUP_FILES_PATH { get; set; }
internal static string AYANOVA_FOLDER_TEMPORARY_SERVER_FILES { get; set; } internal static string AYANOVA_TEMP_FILES_PATH { get; set; }
//BACKUP PG_DUMP PATH (IF NOT IN PATH ALREADY) //BACKUP PG_DUMP PATH (IF NOT IN PATH ALREADY)
internal static string AYANOVA_BACKUP_PG_DUMP_PATH { get; set; } internal static string AYANOVA_BACKUP_PG_DUMP_PATH { get; set; }
@@ -162,6 +162,9 @@ namespace AyaNova.Util
AYANOVA_JWT_SECRET = config.GetValue<string>("AYANOVA_JWT_SECRET"); AYANOVA_JWT_SECRET = config.GetValue<string>("AYANOVA_JWT_SECRET");
//backdoor back door password superuser reset
AYANOVA_SET_SUPERUSER_PW = config.GetValue<string>("AYANOVA_SET_SUPERUSER_PW");
//REPORT RENDERING PROCESS CONTROL //REPORT RENDERING PROCESS CONTROL
int? nTemp = config.GetValue<int?>("AYANOVA_REPORT_RENDERING_TIMEOUT"); int? nTemp = config.GetValue<int?>("AYANOVA_REPORT_RENDERING_TIMEOUT");
AYANOVA_REPORT_RENDERING_TIMEOUT = (null == nTemp) ? 30000 : (int)nTemp;//default is 30 seconds AYANOVA_REPORT_RENDERING_TIMEOUT = (null == nTemp) ? 30000 : (int)nTemp;//default is 30 seconds
@@ -180,79 +183,46 @@ namespace AyaNova.Util
//FOLDERS //FOLDERS
string DataFolderPath = ActualFullPath(config.GetValue<string>("AYANOVA_DATA_PATH"));
string LogPath = ActualFullPath(config.GetValue<string>("AYANOVA_LOG_PATH"));
string AttachmentFilesPath = ActualFullPath(config.GetValue<string>("AYANOVA_USER_FILES_PATH"));
string BackupFilesPath = ActualFullPath(config.GetValue<string>("AYANOVA_BACKUP_FILES_PATH"));
string TempFilesPath = ActualFullPath(config.GetValue<string>("AYANOVA_TEMP_FILES_PATH"));
AYANOVA_BACKUP_PG_DUMP_PATH = ActualFullPath(config.GetValue<string>("AYANOVA_BACKUP_PG_DUMP_PATH"));
//TODO: Implement system where one single data folder can be specified and AyaNova will use that and subfolders under it automatically if (string.IsNullOrWhiteSpace(DataFolderPath))
//but also it honours if specific overrides were set for alternative locations {
//change "folder" to "path" and update docs and everywhere it's mentioned //then they better have paths for *everything* specified
//AYANOVA_DATA_PATH <---this is used as "root" for all data paths automatically unless more specific if (string.IsNullOrWhiteSpace(LogPath))
string AyaPath = string.Empty; throw new System.ArgumentNullException("AYANOVA_LOG_PATH configuration setting missing and required");
if (string.IsNullOrWhiteSpace(AttachmentFilesPath))
throw new System.ArgumentNullException("AYANOVA_ATTACHMENT_FILES_PATH configuration setting missing and required");
if (string.IsNullOrWhiteSpace(BackupFilesPath))
throw new System.ArgumentNullException("AYANOVA_BACKUP_FILES_PATH configuration setting missing and required");
if (string.IsNullOrWhiteSpace(TempFilesPath))
throw new System.ArgumentNullException("AYANOVA_TEMP_FILES_PATH configuration setting missing and required");
//Log folder }
AyaPath = config.GetValue<string>("AYANOVA_LOG_PATH"); else
if (string.IsNullOrWhiteSpace(AyaPath)) {
throw new System.ArgumentNullException("AYANOVA_LOG_PATH configuration setting missing and required"); //set any unspecified paths to the defaults
AYANOVA_LOG_PATH = Path.GetFullPath(FileUtil.StringPathDecodeEnvironmentVariables(AYANOVA_LOG_PATH)); AYANOVA_LOG_PATH = (string.IsNullOrWhiteSpace(LogPath)) ? Path.Combine(DataFolderPath, "logs") : LogPath;
/* AYANOVA_ATTACHMENT_FILES_PATH = (string.IsNullOrWhiteSpace(AttachmentFilesPath)) ? Path.Combine(DataFolderPath, "attachments") : AttachmentFilesPath;
if (string.IsNullOrWhiteSpace(ServerBootConfig.AYANOVA_DB_CONNECTION)) AYANOVA_BACKUP_FILES_PATH = (string.IsNullOrWhiteSpace(BackupFilesPath)) ? Path.Combine(DataFolderPath, "backups") : BackupFilesPath;
{ AYANOVA_TEMP_FILES_PATH = (string.IsNullOrWhiteSpace(TempFilesPath)) ? Path.Combine(DataFolderPath, "temp") : TempFilesPath;
Console.WriteLine($"FAIL: AYANOVA_DB_CONNECTION configuration setting missing and required"); }
HaveAllCrticalConfigValues = false;
}
if (string.IsNullOrWhiteSpace(ServerBootConfig.AYANOVA_FOLDER_BACKUP_FILES))
{
Console.WriteLine($"FAIL: AYANOVA_FOLDER_BACKUP_FILES configuration setting missing and required");
HaveAllCrticalConfigValues = false;
}
if (string.IsNullOrWhiteSpace(ServerBootConfig.AYANOVA_FOLDER_USER_FILES))
{
Console.WriteLine($"FAIL: AYANOVA_FOLDER_USER_FILES configuration setting missing and required");
HaveAllCrticalConfigValues = false;
}
if (string.IsNullOrWhiteSpace(ServerBootConfig.AYANOVA_FOLDER_TEMPORARY_SERVER_FILES))
{
Console.WriteLine($"FAIL: AYANOVA_FOLDER_TEMPORARY_SERVER_FILES configuration setting missing and required");
HaveAllCrticalConfigValues = false;
}
*/
// if (string.IsNullOrWhiteSpace(AYANOVA_LOG_PATH))
// {
// //DEFAULT LOG PATH
// var currentDir = Directory.GetCurrentDirectory();
// AYANOVA_LOG_PATH = Path.Combine(currentDir, "logs");
// }
// else
// {
// AYANOVA_LOG_PATH = Path.Combine(AYANOVA_LOG_PATH, "logs");
// }
//(note, startup.cs ensures these folders exist via FileUtil because we need IHostingEnvironment)
//UserFiles
AYANOVA_FOLDER_USER_FILES = Path.GetFullPath(FileUtil.StringPathDecodeEnvironmentVariables(config.GetValue<string>("AYANOVA_FOLDER_USER_FILES")));
//BackupFiles
AYANOVA_FOLDER_BACKUP_FILES = Path.GetFullPath(FileUtil.StringPathDecodeEnvironmentVariables(config.GetValue<string>("AYANOVA_FOLDER_BACKUP_FILES")));
//TemporaryFiles
AYANOVA_FOLDER_TEMPORARY_SERVER_FILES = Path.GetFullPath(FileUtil.StringPathDecodeEnvironmentVariables(config.GetValue<string>("AYANOVA_FOLDER_TEMPORARY_SERVER_FILES")));
//pgdump backup utility path
AYANOVA_BACKUP_PG_DUMP_PATH = Path.GetFullPath(FileUtil.StringPathDecodeEnvironmentVariables(config.GetValue<string>("AYANOVA_BACKUP_PG_DUMP_PATH")));
//backdoor back door password superuser reset
AYANOVA_SET_SUPERUSER_PW = config.GetValue<string>("AYANOVA_SET_SUPERUSER_PW");
#endregion server BASICS #endregion server BASICS
} }
internal static string ActualFullPath(string p)
{
if (string.IsNullOrWhiteSpace(p))
return string.Empty;
return Path.GetFullPath(FileUtil.StringPathDecodeEnvironmentVariables(p));
}
//Fetch first url from list of urls (used by generator) //Fetch first url from list of urls (used by generator)
internal static string FirstOfAyaNovaUseUrls internal static string FirstOfAyaNovaUseUrls