aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCody Robibero <cody@robibe.ro>2022-04-09 08:45:13 -0600
committerJoshua Boniface <joshua@boniface.me>2022-04-17 15:45:11 -0400
commit7424f0ca8cef9ca1850420a5f3a5761ce764680b (patch)
tree95ee84b9476f6d233f88b00e12d863cd76ea791a
parent834fe85185ffcd4cd1fbf0447e658d6d77b9e10a (diff)
Merge pull request #7561 from DMouse10462/named-config-api-fix
Fix NamedConfiguration API Generation (cherry picked from commit d7c548f3dbb74c03903cd9bb86ab3af33e295d15) Signed-off-by: Joshua Boniface <joshua@boniface.me>
-rw-r--r--Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs6
-rw-r--r--Jellyfin.Api/Controllers/ConfigurationController.cs10
-rw-r--r--Jellyfin.Server/Filters/AdditionalModelFilter.cs19
-rw-r--r--MediaBrowser.Common/Configuration/IConfigurationManager.cs6
4 files changed, 36 insertions, 5 deletions
diff --git a/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs b/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs
index 19fe0b108..2a4a8fb13 100644
--- a/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs
+++ b/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs
@@ -399,6 +399,12 @@ namespace Emby.Server.Implementations.AppBase
}
/// <inheritdoc />
+ public ConfigurationStore[] GetConfigurationStores()
+ {
+ return _configurationStores;
+ }
+
+ /// <inheritdoc />
public Type GetConfigurationType(string key)
{
return GetConfigurationStore(key)
diff --git a/Jellyfin.Api/Controllers/ConfigurationController.cs b/Jellyfin.Api/Controllers/ConfigurationController.cs
index 60529e990..464fadc06 100644
--- a/Jellyfin.Api/Controllers/ConfigurationController.cs
+++ b/Jellyfin.Api/Controllers/ConfigurationController.cs
@@ -86,21 +86,23 @@ namespace Jellyfin.Api.Controllers
/// Updates named configuration.
/// </summary>
/// <param name="key">Configuration key.</param>
+ /// <param name="configuration">Configuration.</param>
/// <response code="204">Named configuration updated.</response>
/// <returns>Update status.</returns>
[HttpPost("Configuration/{key}")]
[Authorize(Policy = Policies.RequiresElevation)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
- public async Task<ActionResult> UpdateNamedConfiguration([FromRoute, Required] string key)
+ public ActionResult UpdateNamedConfiguration([FromRoute, Required] string key, [FromBody, Required] JsonDocument configuration)
{
var configurationType = _configurationManager.GetConfigurationType(key);
- var configuration = await JsonSerializer.DeserializeAsync(Request.Body, configurationType, _serializerOptions).ConfigureAwait(false);
- if (configuration == null)
+ var deserializedConfiguration = configuration.Deserialize(configurationType, _serializerOptions);
+
+ if (deserializedConfiguration == null)
{
throw new ArgumentException("Body doesn't contain a valid configuration");
}
- _configurationManager.SaveConfiguration(key, configuration);
+ _configurationManager.SaveConfiguration(key, deserializedConfiguration);
return NoContent();
}
diff --git a/Jellyfin.Server/Filters/AdditionalModelFilter.cs b/Jellyfin.Server/Filters/AdditionalModelFilter.cs
index 87a59e0b4..44e5b0d1e 100644
--- a/Jellyfin.Server/Filters/AdditionalModelFilter.cs
+++ b/Jellyfin.Server/Filters/AdditionalModelFilter.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Plugins;
+using MediaBrowser.Common.Plugins;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.ApiClient;
using MediaBrowser.Model.Entities;
@@ -14,6 +15,17 @@ namespace Jellyfin.Server.Filters
/// </summary>
public class AdditionalModelFilter : IDocumentFilter
{
+ private readonly IServerConfigurationManager _serverConfigurationManager;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AdditionalModelFilter"/> class.
+ /// </summary>
+ /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>
+ public AdditionalModelFilter(IServerConfigurationManager serverConfigurationManager)
+ {
+ _serverConfigurationManager = serverConfigurationManager;
+ }
+
/// <inheritdoc />
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
@@ -29,6 +41,11 @@ namespace Jellyfin.Server.Filters
context.SchemaGenerator.GenerateSchema(typeof(SessionMessageType), context.SchemaRepository);
context.SchemaGenerator.GenerateSchema(typeof(ServerDiscoveryInfo), context.SchemaRepository);
+
+ foreach (var configuration in _serverConfigurationManager.GetConfigurationStores())
+ {
+ context.SchemaGenerator.GenerateSchema(configuration.ConfigurationType, context.SchemaRepository);
+ }
}
}
}
diff --git a/MediaBrowser.Common/Configuration/IConfigurationManager.cs b/MediaBrowser.Common/Configuration/IConfigurationManager.cs
index fc63d9350..e6696a571 100644
--- a/MediaBrowser.Common/Configuration/IConfigurationManager.cs
+++ b/MediaBrowser.Common/Configuration/IConfigurationManager.cs
@@ -61,6 +61,12 @@ namespace MediaBrowser.Common.Configuration
object GetConfiguration(string key);
/// <summary>
+ /// Gets the array of coniguration stores.
+ /// </summary>
+ /// <returns>Array of ConfigurationStore.</returns>
+ ConfigurationStore[] GetConfigurationStores();
+
+ /// <summary>
/// Gets the type of the configuration.
/// </summary>
/// <param name="key">The key.</param>