mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Webserver - Add option to enable remote access
This commit is contained in:
parent
3367280576
commit
37b8c2c3e9
@ -33,7 +33,7 @@ public abstract class PluginEndPoint
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the full URL of the end point
|
/// Gets the full URL of the end point
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Url => $"{_pluginsHandler.ServerUrl}{_pluginsHandler.BaseRoute}/{PluginFeature.Plugin.Guid}/{Name}";
|
public string Url => $"/{_pluginsHandler.BaseRoute}/{PluginFeature.Plugin.Guid}/{Name}";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the plugin the end point is associated with
|
/// Gets the plugin the end point is associated with
|
||||||
|
|||||||
@ -96,9 +96,7 @@ public class PluginsHandler : IHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
#region Overrides of WebModuleBase
|
#region Overrides of WebModuleBase
|
||||||
|
|
||||||
internal string? ServerUrl { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a read only collection containing all current plugin end points
|
/// Gets a read only collection containing all current plugin end points
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -28,6 +28,7 @@ internal class WebServerService : IWebServerService, IDisposable
|
|||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly ICoreService _coreService;
|
private readonly ICoreService _coreService;
|
||||||
private readonly PluginSetting<bool> _webServerEnabledSetting;
|
private readonly PluginSetting<bool> _webServerEnabledSetting;
|
||||||
|
private readonly PluginSetting<bool> _webServerRemoteAccessSetting;
|
||||||
private readonly PluginSetting<int> _webServerPortSetting;
|
private readonly PluginSetting<int> _webServerPortSetting;
|
||||||
private readonly SemaphoreSlim _webserverSemaphore = new(1, 1);
|
private readonly SemaphoreSlim _webserverSemaphore = new(1, 1);
|
||||||
|
|
||||||
@ -45,9 +46,11 @@ internal class WebServerService : IWebServerService, IDisposable
|
|||||||
_controllers = new List<WebApiControllerRegistration>();
|
_controllers = new List<WebApiControllerRegistration>();
|
||||||
|
|
||||||
_webServerEnabledSetting = settingsService.GetSetting("WebServer.Enabled", true);
|
_webServerEnabledSetting = settingsService.GetSetting("WebServer.Enabled", true);
|
||||||
|
_webServerRemoteAccessSetting = settingsService.GetSetting("WebServer.RemoteAccess", false);
|
||||||
_webServerPortSetting = settingsService.GetSetting("WebServer.Port", 9696);
|
_webServerPortSetting = settingsService.GetSetting("WebServer.Port", 9696);
|
||||||
_webServerEnabledSetting.SettingChanged += WebServerEnabledSettingOnSettingChanged;
|
_webServerEnabledSetting.SettingChanged += WebServerSettingsOnSettingChanged;
|
||||||
_webServerPortSetting.SettingChanged += WebServerPortSettingOnSettingChanged;
|
_webServerRemoteAccessSetting.SettingChanged += WebServerSettingsOnSettingChanged;
|
||||||
|
_webServerPortSetting.SettingChanged += WebServerSettingsOnSettingChanged;
|
||||||
pluginManagementService.PluginFeatureDisabled += PluginManagementServiceOnPluginFeatureDisabled;
|
pluginManagementService.PluginFeatureDisabled += PluginManagementServiceOnPluginFeatureDisabled;
|
||||||
|
|
||||||
PluginsHandler = new PluginsHandler("plugins");
|
PluginsHandler = new PluginsHandler("plugins");
|
||||||
@ -75,12 +78,7 @@ internal class WebServerService : IWebServerService, IDisposable
|
|||||||
WebServerStarted?.Invoke(this, EventArgs.Empty);
|
WebServerStarted?.Invoke(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WebServerEnabledSettingOnSettingChanged(object? sender, EventArgs e)
|
private void WebServerSettingsOnSettingChanged(object? sender, EventArgs e)
|
||||||
{
|
|
||||||
_ = StartWebServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void WebServerPortSettingOnSettingChanged(object? sender, EventArgs e)
|
|
||||||
{
|
{
|
||||||
_ = StartWebServer();
|
_ = StartWebServer();
|
||||||
}
|
}
|
||||||
@ -102,7 +100,6 @@ internal class WebServerService : IWebServerService, IDisposable
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Server?.DisposeAsync();
|
Server?.DisposeAsync();
|
||||||
_webServerPortSetting.SettingChanged -= WebServerPortSettingOnSettingChanged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IServer? Server { get; private set; }
|
public IServer? Server { get; private set; }
|
||||||
@ -120,8 +117,6 @@ internal class WebServerService : IWebServerService, IDisposable
|
|||||||
OnWebServerStopped();
|
OnWebServerStopped();
|
||||||
Server = null;
|
Server = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginsHandler.ServerUrl = $"http://localhost:{_webServerPortSetting.Value}/";
|
|
||||||
|
|
||||||
LayoutBuilder serverLayout = Layout.Create()
|
LayoutBuilder serverLayout = Layout.Create()
|
||||||
.Add(PluginsHandler)
|
.Add(PluginsHandler)
|
||||||
@ -138,12 +133,12 @@ internal class WebServerService : IWebServerService, IDisposable
|
|||||||
|
|
||||||
IServer server = Host.Create()
|
IServer server = Host.Create()
|
||||||
.Handler(serverLayout.Build())
|
.Handler(serverLayout.Build())
|
||||||
.Bind(IPAddress.Loopback, (ushort) _webServerPortSetting.Value)
|
.Bind(_webServerRemoteAccessSetting.Value ? IPAddress.Any : IPAddress.Loopback, (ushort) _webServerPortSetting.Value)
|
||||||
.Defaults()
|
.Defaults()
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
// Store the URL in a webserver.txt file so that remote applications can find it
|
// 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;
|
return server;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -145,6 +145,22 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Border Classes="card-separator" />
|
<Border Classes="card-separator" />
|
||||||
|
|
||||||
|
<Grid RowDefinitions="*,*" ColumnDefinitions="*,Auto">
|
||||||
|
<StackPanel Grid.Column="0">
|
||||||
|
<TextBlock>Enable remote access</TextBlock>
|
||||||
|
<TextBlock Classes="subtitle" TextWrapping="Wrap">
|
||||||
|
By default the web server can only be accessed by applications running on your own computer, e.g. supported games.
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Classes="subtitle warning" TextWrapping="Wrap">
|
||||||
|
Enabling remote access allows you to access Artemis from other devices on your network, depending on your router even the outside world.
|
||||||
|
</TextBlock>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center">
|
||||||
|
<ToggleSwitch IsChecked="{CompiledBinding WebServerRemoteAccess.Value}" OnContent="Yes" OffContent="No" MinWidth="0" Margin="0 -10" />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
<Border Classes="card-separator" />
|
||||||
|
|
||||||
<Grid RowDefinitions="*,*" ColumnDefinitions="*,Auto">
|
<Grid RowDefinitions="*,*" ColumnDefinitions="*,Auto">
|
||||||
<StackPanel Grid.Column="0">
|
<StackPanel Grid.Column="0">
|
||||||
|
|||||||
@ -167,6 +167,7 @@ public class GeneralTabViewModel : RoutableScreen
|
|||||||
public PluginSetting<double> CoreRenderScale => _settingsService.GetSetting("Core.RenderScale", 0.5);
|
public PluginSetting<double> CoreRenderScale => _settingsService.GetSetting("Core.RenderScale", 0.5);
|
||||||
public PluginSetting<int> CoreTargetFrameRate => _settingsService.GetSetting("Core.TargetFrameRate", 30);
|
public PluginSetting<int> CoreTargetFrameRate => _settingsService.GetSetting("Core.TargetFrameRate", 30);
|
||||||
public PluginSetting<bool> WebServerEnabled => _settingsService.GetSetting("WebServer.Enabled", true);
|
public PluginSetting<bool> WebServerEnabled => _settingsService.GetSetting("WebServer.Enabled", true);
|
||||||
|
public PluginSetting<bool> WebServerRemoteAccess => _settingsService.GetSetting("WebServer.RemoteAccess", false);
|
||||||
public PluginSetting<int> WebServerPort => _settingsService.GetSetting("WebServer.Port", 9696);
|
public PluginSetting<int> WebServerPort => _settingsService.GetSetting("WebServer.Port", 9696);
|
||||||
|
|
||||||
private void ExecuteShowLogs()
|
private void ExecuteShowLogs()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user