diff --git a/API/Controllers/SettingsController.cs b/API/Controllers/SettingsController.cs index 33565af56..7ceb0443a 100644 --- a/API/Controllers/SettingsController.cs +++ b/API/Controllers/SettingsController.cs @@ -8,6 +8,7 @@ using API.Entities.Enums; using API.Extensions; using API.Helpers.Converters; using API.Interfaces; +using Kavita.Common; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; @@ -34,7 +35,9 @@ namespace API.Controllers [HttpGet("")] public async Task> GetSettings() { - return Ok(await _unitOfWork.SettingsRepository.GetSettingsDtoAsync()); + var settingsDto = await _unitOfWork.SettingsRepository.GetSettingsDtoAsync(); + settingsDto.Port = Configuration.GetPort(Program.GetAppSettingFilename()); + return Ok(settingsDto); } [Authorize(Policy = "RequireAdminRole")] @@ -76,7 +79,8 @@ namespace API.Controllers if (setting.Key == ServerSettingKey.Port && updateSettingsDto.Port + "" != setting.Value) { setting.Value = updateSettingsDto.Port + ""; - Environment.SetEnvironmentVariable("KAVITA_PORT", setting.Value); + // Port is managed in appSetting.json + Configuration.UpdatePort(Program.GetAppSettingFilename(), updateSettingsDto.Port); _unitOfWork.SettingsRepository.Update(setting); } diff --git a/API/Data/Seed.cs b/API/Data/Seed.cs index ad0c09236..a80cba4bd 100644 --- a/API/Data/Seed.cs +++ b/API/Data/Seed.cs @@ -41,7 +41,7 @@ namespace API.Data //new () {Key = ServerSettingKey.LoggingLevel, Value = "Information"}, new () {Key = ServerSettingKey.TaskBackup, Value = "weekly"}, new () {Key = ServerSettingKey.BackupDirectory, Value = Path.GetFullPath(Path.Join(Directory.GetCurrentDirectory(), "backups/"))}, - new () {Key = ServerSettingKey.Port, Value = "5000"}, + //new () {Key = ServerSettingKey.Port, Value = "5000"}, // TODO: Remove ServerSettingKey }; foreach (var defaultSetting in defaultSettings) diff --git a/API/Program.cs b/API/Program.cs index da444974e..8b43951a1 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -20,13 +20,13 @@ namespace API { public class Program { - private static readonly int HttpPort = 5000; + private static int HttpPort; protected Program() { } - private static string GetAppSettingFilename() + public static string GetAppSettingFilename() { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var isDevelopment = environment == Environments.Development; @@ -46,6 +46,9 @@ namespace API var base64 = Convert.ToBase64String(rBytes).Replace("/", ""); Configuration.UpdateJwtToken(GetAppSettingFilename(), base64); } + + // Get HttpPort from Config + HttpPort = Configuration.GetPort(GetAppSettingFilename()); var host = CreateHostBuilder(args).Build(); diff --git a/API/appsettings.Development.json b/API/appsettings.Development.json index 4dd015431..119a1eb46 100644 --- a/API/appsettings.Development.json +++ b/API/appsettings.Development.json @@ -17,5 +17,6 @@ "FileSizeLimitBytes": 0, "MaxRollingFiles": 0 } - } + }, + "Port": 5000 } diff --git a/Kavita.Common/Configuration.cs b/Kavita.Common/Configuration.cs index 02a01c9d8..46b23cf77 100644 --- a/Kavita.Common/Configuration.cs +++ b/Kavita.Common/Configuration.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Text.Json; +using Kavita.Common.EnvironmentInfo; namespace Kavita.Common { @@ -28,6 +29,7 @@ namespace Kavita.Common return false; } + public static bool UpdateJwtToken(string filePath, string token) { @@ -42,5 +44,50 @@ namespace Kavita.Common return false; } } + + public static bool UpdatePort(string filePath, int port) + { + if (new OsInfo(Array.Empty()).IsDocker) + { + return true; + } + + try + { + var currentPort = GetPort(filePath); + var json = File.ReadAllText(filePath).Replace("\"Port\": " + currentPort, "\"Port\": " + port); + File.WriteAllText(filePath, json); + return true; + } + catch (Exception) + { + return false; + } + } + + public static int GetPort(string filePath) + { + const int defaultPort = 5000; + if (new OsInfo(Array.Empty()).IsDocker) + { + return defaultPort; + } + + try { + var json = File.ReadAllText(filePath); + var jsonObj = JsonSerializer.Deserialize(json); + const string key = "Port"; + + if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) + { + return tokenElement.GetInt32(); + } + } + catch (Exception ex) { + Console.WriteLine("Error writing app settings: " + ex.Message); + } + + return defaultPort; + } } } \ No newline at end of file diff --git a/build.sh b/build.sh index 043cb559f..d32da32dc 100644 --- a/build.sh +++ b/build.sh @@ -15,6 +15,7 @@ ProgressEnd() UpdateVersionNumber() { + # TODO: Enhance this to increment version number in KavitaCommon.csproj if [ "$KAVITAVERSION" != "" ]; then echo "Updating Version Info" sed -i'' -e "s/[0-9.*]\+<\/AssemblyVersion>/$KAVITAVERSION<\/AssemblyVersion>/g" src/Directory.Build.props @@ -31,7 +32,7 @@ Build() slnFile=Kavita.sln - dotnet clean $slnFile -c Debug + #dotnet clean $slnFile -c Debug dotnet clean $slnFile -c Release if [[ -z "$RID" ]];