diff --git a/Emby.Dlna/Configuration/DlnaOptions.cs b/Emby.Dlna/Configuration/DlnaOptions.cs
index 91fac4bef5..e95a878c67 100644
--- a/Emby.Dlna/Configuration/DlnaOptions.cs
+++ b/Emby.Dlna/Configuration/DlnaOptions.cs
@@ -13,7 +13,7 @@ namespace Emby.Dlna.Configuration
public DlnaOptions()
{
EnablePlayTo = true;
- EnableServer = true;
+ EnableServer = false;
BlastAliveMessages = true;
SendOnlyMatchedHost = true;
ClientDiscoveryIntervalSeconds = 60;
diff --git a/Jellyfin.Api/Attributes/DlnaEnabledAttribute.cs b/Jellyfin.Api/Attributes/DlnaEnabledAttribute.cs
new file mode 100644
index 0000000000..d3a6ac9c81
--- /dev/null
+++ b/Jellyfin.Api/Attributes/DlnaEnabledAttribute.cs
@@ -0,0 +1,25 @@
+using Emby.Dlna;
+using MediaBrowser.Controller.Configuration;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Jellyfin.Api.Attributes;
+
+///
+public sealed class DlnaEnabledAttribute : ActionFilterAttribute
+{
+ ///
+ public override void OnActionExecuting(ActionExecutingContext context)
+ {
+ var serverConfigurationManager = context.HttpContext.RequestServices.GetRequiredService();
+
+ var enabled = serverConfigurationManager.GetDlnaConfiguration().EnableServer;
+
+ if (!enabled)
+ {
+ context.Result = new StatusCodeResult(StatusCodes.Status503ServiceUnavailable);
+ }
+ }
+}
diff --git a/Jellyfin.Api/Controllers/DlnaServerController.cs b/Jellyfin.Api/Controllers/DlnaServerController.cs
index b1c576c330..401c0197ac 100644
--- a/Jellyfin.Api/Controllers/DlnaServerController.cs
+++ b/Jellyfin.Api/Controllers/DlnaServerController.cs
@@ -20,6 +20,7 @@ namespace Jellyfin.Api.Controllers
/// Dlna Server Controller.
///
[Route("Dlna")]
+ [DlnaEnabled]
[Authorize(Policy = Policies.AnonymousLanAccessPolicy)]
public class DlnaServerController : BaseJellyfinApiController
{
@@ -55,15 +56,10 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public ActionResult GetDescriptionXml([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- var url = GetAbsoluteUri();
- var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase));
- var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers, serverId, serverAddress);
- return Ok(xml);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ var url = GetAbsoluteUri();
+ var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase));
+ var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers, serverId, serverAddress);
+ return Ok(xml);
}
///
@@ -83,12 +79,7 @@ namespace Jellyfin.Api.Controllers
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetContentDirectory([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return Ok(_contentDirectory.GetServiceXml());
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return Ok(_contentDirectory.GetServiceXml());
}
///
@@ -108,12 +99,7 @@ namespace Jellyfin.Api.Controllers
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetMediaReceiverRegistrar([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return Ok(_mediaReceiverRegistrar.GetServiceXml());
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return Ok(_mediaReceiverRegistrar.GetServiceXml());
}
///
@@ -133,12 +119,7 @@ namespace Jellyfin.Api.Controllers
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetConnectionManager([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return Ok(_connectionManager.GetServiceXml());
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return Ok(_connectionManager.GetServiceXml());
}
///
@@ -155,12 +136,7 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public async Task> ProcessContentDirectoryControlRequest([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return await ProcessControlRequestInternalAsync(serverId, Request.Body, _contentDirectory).ConfigureAwait(false);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return await ProcessControlRequestInternalAsync(serverId, Request.Body, _contentDirectory).ConfigureAwait(false);
}
///
@@ -177,12 +153,7 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public async Task> ProcessConnectionManagerControlRequest([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return await ProcessControlRequestInternalAsync(serverId, Request.Body, _connectionManager).ConfigureAwait(false);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return await ProcessControlRequestInternalAsync(serverId, Request.Body, _connectionManager).ConfigureAwait(false);
}
///
@@ -199,12 +170,7 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public async Task> ProcessMediaReceiverRegistrarControlRequest([FromRoute, Required] string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return await ProcessControlRequestInternalAsync(serverId, Request.Body, _mediaReceiverRegistrar).ConfigureAwait(false);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return await ProcessControlRequestInternalAsync(serverId, Request.Body, _mediaReceiverRegistrar).ConfigureAwait(false);
}
///
@@ -224,12 +190,7 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public ActionResult ProcessMediaReceiverRegistrarEventRequest(string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return ProcessEventRequest(_mediaReceiverRegistrar);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return ProcessEventRequest(_mediaReceiverRegistrar);
}
///
@@ -249,12 +210,7 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public ActionResult ProcessContentDirectoryEventRequest(string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return ProcessEventRequest(_contentDirectory);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return ProcessEventRequest(_contentDirectory);
}
///
@@ -274,12 +230,7 @@ namespace Jellyfin.Api.Controllers
[ProducesFile(MediaTypeNames.Text.Xml)]
public ActionResult ProcessConnectionManagerEventRequest(string serverId)
{
- if (DlnaEntryPoint.Enabled)
- {
- return ProcessEventRequest(_connectionManager);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return ProcessEventRequest(_connectionManager);
}
///
@@ -299,12 +250,7 @@ namespace Jellyfin.Api.Controllers
[ProducesImageFile]
public ActionResult GetIconId([FromRoute, Required] string serverId, [FromRoute, Required] string fileName)
{
- if (DlnaEntryPoint.Enabled)
- {
- return GetIconInternal(fileName);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return GetIconInternal(fileName);
}
///
@@ -322,12 +268,7 @@ namespace Jellyfin.Api.Controllers
[ProducesImageFile]
public ActionResult GetIcon([FromRoute, Required] string fileName)
{
- if (DlnaEntryPoint.Enabled)
- {
- return GetIconInternal(fileName);
- }
-
- return StatusCode(StatusCodes.Status503ServiceUnavailable);
+ return GetIconInternal(fileName);
}
private ActionResult GetIconInternal(string fileName)