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()