// Kyoo - A portable and vast media library solution. // Copyright (c) Kyoo. // // See AUTHORS.md and LICENSE file in the project root for full license information. // // Kyoo is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // Kyoo is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Kyoo. If not, see . using System; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models.Attributes; using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Abstractions.Models.Permissions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using static Kyoo.Abstractions.Models.Utils.Constants; namespace Kyoo.Core.Api { /// /// An API to retrieve or edit configuration settings /// [Route("configuration")] [Route("config", Order = AlternativeRoute)] [ApiController] [PartialPermission("Configuration", Group = Group.Admin)] [ApiDefinition("Configuration", Group = AdminGroup)] public class ConfigurationApi : Controller { /// /// The configuration manager used to retrieve and edit configuration values (while being type safe). /// private readonly IConfigurationManager _manager; /// /// Create a new using the given configuration. /// /// The configuration manager used to retrieve and edit configuration values public ConfigurationApi(IConfigurationManager manager) { _manager = manager; } /// /// Get config value /// /// /// Retrieve a configuration's value from it's slug. /// /// The permission to retrieve. You can use ':' or "__" to get a child value. /// The associate value or list of values. /// Return the configuration value or the list of configurations /// No configuration exists for the given slug [HttpGet("{slug}")] [PartialPermission(Kind.Read)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public ActionResult GetConfiguration(string slug) { try { return _manager.GetValue(slug); } catch (ItemNotFoundException) { return NotFound(); } } /// /// Edit config /// /// /// Edit a configuration's value from it's slug. /// /// The permission to edit. You can use ':' or "__" to get a child value. /// The new value of the configuration /// The edited value. /// Return the edited value /// No configuration exists for the given slug [HttpPut("{slug}")] [PartialPermission(Kind.Write)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task> EditConfiguration(string slug, [FromBody] object newValue) { try { await _manager.EditValue(slug, newValue); return newValue; } catch (ItemNotFoundException) { return NotFound(); } catch (ArgumentException ex) { return BadRequest(ex.Message); } } } }