using Jellyfin.Plugin.MediaCleaner.Models; using Microsoft.AspNetCore.Mvc; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using System.Net.Http.Headers; using System; namespace Jellyfin.Plugin.MediaCleaner.Controllers; [Route("sonarr")] public class SonarrController : Controller { private static Configuration Configuration => Plugin.Instance!.Configuration; private readonly HttpClient _httpClient; public SonarrController(HttpClient httpClient) { _httpClient = httpClient; // Set the default request headers _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); _httpClient.DefaultRequestHeaders.Add("X-Api-Key", Configuration.SonarrAPIKey); } [HttpPost("testConnection")] public async Task TestConnection([FromBody] ConnectionTestRequest request) { if (request == null || string.IsNullOrWhiteSpace(request.Address) || string.IsNullOrWhiteSpace(request.ApiKey)) { return BadRequest("Address and ApiKey are required."); } var address = request.Address.Trim(); if (!address.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !address.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) { address = "http://" + address; } try { using var httpRequest = new HttpRequestMessage(HttpMethod.Get, address); httpRequest.Headers.Add("X-Api-Key", request.ApiKey); var response = await _httpClient.SendAsync(httpRequest).ConfigureAwait(false); return Ok(new { success = response.IsSuccessStatusCode }); } catch (HttpRequestException e) { return StatusCode(StatusCodes.Status502BadGateway, e.Message); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); } } }