Files
duplicati/Duplicati/WebserverCore/Endpoints/V1/SystemInfo.cs
T
Kenneth Skovhede f49359eaf3 Removed use of Environment.OSVersion which is now deprecated.
Fallback to getting Windows version with `cmd /v ver`, which should be supported way back to DOS v6.
2024-09-18 16:02:01 +02:00

74 lines
3.9 KiB
C#

using System.Globalization;
using Duplicati.Library.RestAPI;
using Duplicati.Server;
using Duplicati.WebserverCore.Abstractions;
using Microsoft.AspNetCore.Mvc;
namespace Duplicati.WebserverCore.Endpoints.V1;
public class SystemInfo : IEndpointV1
{
public static void Map(RouteGroupBuilder group)
{
group.MapGet("/systeminfo", ([FromServices] ILanguageService languageService) => Execute(languageService.GetLanguage())).RequireAuthorization();
group.MapGet("/systeminfo/filtergroups", () => ExecuteFilterGroups()).RequireAuthorization();
}
private static Dto.SystemInfoDto Execute(CultureInfo? browserlanguage)
{
browserlanguage ??= CultureInfo.InvariantCulture;
return new Dto.SystemInfoDto()
{
APIVersion = 1,
PasswordPlaceholder = FIXMEGlobal.PASSWORD_PLACEHOLDER,
ServerVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString(),
ServerVersionName = License.VersionNumbers.Version,
ServerVersionType = Library.AutoUpdater.UpdaterManager.SelfVersion.ReleaseType,
StartedBy = FIXMEGlobal.Origin,
DefaultUpdateChannel = Library.AutoUpdater.AutoUpdateSettings.DefaultUpdateChannel.ToString(),
DefaultUsageReportLevel = Library.UsageReporter.Reporter.DefaultReportLevel,
ServerTime = DateTime.Now,
OSType = OperatingSystem.IsWindows() ? "Windows" : OperatingSystem.IsLinux() ? "Linux" : OperatingSystem.IsMacOS() ? "MacOS" : "Unknown",
OSVersion = Library.UsageReporter.OSInfoHelper.PlatformString,
DirectorySeparator = Path.DirectorySeparatorChar,
PathSeparator = Path.PathSeparator,
CaseSensitiveFilesystem = Library.Utility.Utility.IsFSCaseSensitive,
MachineName = Environment.MachineName,
PackageTypeId = Library.AutoUpdater.UpdaterManager.PackageTypeId,
UserName = OperatingSystem.IsWindows() ? System.Security.Principal.WindowsIdentity.GetCurrent().Name : Environment.UserName,
NewLine = Environment.NewLine,
CLRVersion = Environment.Version.ToString(),
Options = Server.Serializable.ServerSettings.Options,
CompressionModules = Server.Serializable.ServerSettings.CompressionModules,
EncryptionModules = Server.Serializable.ServerSettings.EncryptionModules,
BackendModules = Server.Serializable.ServerSettings.BackendModules,
GenericModules = Server.Serializable.ServerSettings.GenericModules,
WebModules = Server.Serializable.ServerSettings.WebModules,
ConnectionModules = Server.Serializable.ServerSettings.ConnectionModules,
ServerModules = Server.Serializable.ServerSettings.ServerModules,
UsingAlternateUpdateURLs = Library.AutoUpdater.AutoUpdateSettings.UsesAlternateURLs,
LogLevels = Enum.GetNames(typeof(Library.Logging.LogMessageType)),
SpecialFolders = SpecialFolders.Nodes.Select(n => new Dto.SystemInfoDto.SpecialFolderDto { ID = n.id, Path = n.resolvedpath }),
BrowserLocale = new Dto.SystemInfoDto.LocaleDto()
{
Code = browserlanguage.Name,
EnglishName = browserlanguage.EnglishName,
DisplayName = browserlanguage.NativeName
},
SupportedLocales = Library.Localization.LocalizationService.SupportedCultures
.Select(x => new Dto.SystemInfoDto.LocaleDto
{
Code = x,
EnglishName = new CultureInfo(x).EnglishName,
DisplayName = new CultureInfo(x).NativeName
}),
BrowserLocaleSupported = Library.Localization.LocalizationService.isCultureSupported(browserlanguage)
};
}
private static object ExecuteFilterGroups()
=> new { FilterGroups = Library.Utility.FilterGroups.GetFilterStringMap() };
}