diff --git a/src/Artemis.Core/Services/WebServer/EndPoints/PluginEndPoint.cs b/src/Artemis.Core/Services/WebServer/EndPoints/PluginEndPoint.cs index ccea68640..f621ade10 100644 --- a/src/Artemis.Core/Services/WebServer/EndPoints/PluginEndPoint.cs +++ b/src/Artemis.Core/Services/WebServer/EndPoints/PluginEndPoint.cs @@ -33,7 +33,7 @@ public abstract class PluginEndPoint /// /// Gets the full URL of the end point /// - public string Url => $"{_pluginsHandler.ServerUrl}{_pluginsHandler.BaseRoute}/{PluginFeature.Plugin.Guid}/{Name}"; + public string Url => $"/{_pluginsHandler.BaseRoute}/{PluginFeature.Plugin.Guid}/{Name}"; /// /// Gets the plugin the end point is associated with diff --git a/src/Artemis.Core/Services/WebServer/PluginsHandler.cs b/src/Artemis.Core/Services/WebServer/PluginsHandler.cs index 7327948d6..f7db246b5 100644 --- a/src/Artemis.Core/Services/WebServer/PluginsHandler.cs +++ b/src/Artemis.Core/Services/WebServer/PluginsHandler.cs @@ -96,9 +96,7 @@ public class PluginsHandler : IHandler } #region Overrides of WebModuleBase - - internal string? ServerUrl { get; set; } - + /// /// Gets a read only collection containing all current plugin end points /// diff --git a/src/Artemis.Core/Services/WebServer/WebServerService.cs b/src/Artemis.Core/Services/WebServer/WebServerService.cs index 9dbdfd283..8a132c8e6 100644 --- a/src/Artemis.Core/Services/WebServer/WebServerService.cs +++ b/src/Artemis.Core/Services/WebServer/WebServerService.cs @@ -28,6 +28,7 @@ internal class WebServerService : IWebServerService, IDisposable private readonly ILogger _logger; private readonly ICoreService _coreService; private readonly PluginSetting _webServerEnabledSetting; + private readonly PluginSetting _webServerRemoteAccessSetting; private readonly PluginSetting _webServerPortSetting; private readonly SemaphoreSlim _webserverSemaphore = new(1, 1); @@ -45,9 +46,11 @@ internal class WebServerService : IWebServerService, IDisposable _controllers = new List(); _webServerEnabledSetting = settingsService.GetSetting("WebServer.Enabled", true); + _webServerRemoteAccessSetting = settingsService.GetSetting("WebServer.RemoteAccess", false); _webServerPortSetting = settingsService.GetSetting("WebServer.Port", 9696); - _webServerEnabledSetting.SettingChanged += WebServerEnabledSettingOnSettingChanged; - _webServerPortSetting.SettingChanged += WebServerPortSettingOnSettingChanged; + _webServerEnabledSetting.SettingChanged += WebServerSettingsOnSettingChanged; + _webServerRemoteAccessSetting.SettingChanged += WebServerSettingsOnSettingChanged; + _webServerPortSetting.SettingChanged += WebServerSettingsOnSettingChanged; pluginManagementService.PluginFeatureDisabled += PluginManagementServiceOnPluginFeatureDisabled; PluginsHandler = new PluginsHandler("plugins"); @@ -75,12 +78,7 @@ internal class WebServerService : IWebServerService, IDisposable WebServerStarted?.Invoke(this, EventArgs.Empty); } - private void WebServerEnabledSettingOnSettingChanged(object? sender, EventArgs e) - { - _ = StartWebServer(); - } - - private void WebServerPortSettingOnSettingChanged(object? sender, EventArgs e) + private void WebServerSettingsOnSettingChanged(object? sender, EventArgs e) { _ = StartWebServer(); } @@ -102,7 +100,6 @@ internal class WebServerService : IWebServerService, IDisposable public void Dispose() { Server?.DisposeAsync(); - _webServerPortSetting.SettingChanged -= WebServerPortSettingOnSettingChanged; } public IServer? Server { get; private set; } @@ -120,8 +117,6 @@ internal class WebServerService : IWebServerService, IDisposable OnWebServerStopped(); Server = null; } - - PluginsHandler.ServerUrl = $"http://localhost:{_webServerPortSetting.Value}/"; LayoutBuilder serverLayout = Layout.Create() .Add(PluginsHandler) @@ -138,12 +133,12 @@ internal class WebServerService : IWebServerService, IDisposable IServer server = Host.Create() .Handler(serverLayout.Build()) - .Bind(IPAddress.Loopback, (ushort) _webServerPortSetting.Value) + .Bind(_webServerRemoteAccessSetting.Value ? IPAddress.Any : IPAddress.Loopback, (ushort) _webServerPortSetting.Value) .Defaults() .Build(); // Store the URL in a webserver.txt file so that remote applications can find it - await File.WriteAllTextAsync(Path.Combine(Constants.DataFolder, "webserver.txt"), PluginsHandler.ServerUrl); + await File.WriteAllTextAsync(Path.Combine(Constants.DataFolder, "webserver.txt"), $"http://localhost:{_webServerPortSetting.Value}/"); return server; } diff --git a/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabView.axaml b/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabView.axaml index c1ee681de..537a950b2 100644 --- a/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabView.axaml +++ b/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabView.axaml @@ -145,6 +145,22 @@ + + + + Enable remote access + + By default the web server can only be accessed by applications running on your own computer, e.g. supported games. + + + Enabling remote access allows you to access Artemis from other devices on your network, depending on your router even the outside world. + + + + + + + diff --git a/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabViewModel.cs b/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabViewModel.cs index 10ff14cc2..2605df33d 100644 --- a/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/Tabs/GeneralTabViewModel.cs @@ -167,6 +167,7 @@ public class GeneralTabViewModel : RoutableScreen public PluginSetting CoreRenderScale => _settingsService.GetSetting("Core.RenderScale", 0.5); public PluginSetting CoreTargetFrameRate => _settingsService.GetSetting("Core.TargetFrameRate", 30); public PluginSetting WebServerEnabled => _settingsService.GetSetting("WebServer.Enabled", true); + public PluginSetting WebServerRemoteAccess => _settingsService.GetSetting("WebServer.RemoteAccess", false); public PluginSetting WebServerPort => _settingsService.GetSetting("WebServer.Port", 9696); private void ExecuteShowLogs()