From 9e7ad678b054749452e5683d6c8dfbe52bef3786 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 14 Oct 2023 17:11:46 -0500 Subject: [PATCH] Add api endpoint to generate the required login cookie Co-Authored-By: ta264 --- .../AuthenticationController.cs | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/Radarr.Api.V3/Authentication/AuthenticationController.cs b/src/Radarr.Api.V3/Authentication/AuthenticationController.cs index bfc060882..166a4ff9a 100644 --- a/src/Radarr.Api.V3/Authentication/AuthenticationController.cs +++ b/src/Radarr.Api.V3/Authentication/AuthenticationController.cs @@ -1,7 +1,13 @@ using System.Collections.Generic; +using System.Net; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Notifications.Plex.PlexTv; using Radarr.Http; +using Radarr.Http.Authentication.Plex; namespace Radarr.Api.V3.Authentication { @@ -9,10 +15,14 @@ namespace Radarr.Api.V3.Authentication public class AuthenticationController : Controller { private readonly IPlexTvService _plex; + private readonly IConfigService _configService; + private readonly IConfigFileProvider _configFileProvider; - public AuthenticationController(IPlexTvService plex) + public AuthenticationController(IPlexTvService plex, IConfigService configService, IConfigFileProvider configFileProvider) { _plex = plex; + _configService = configService; + _configFileProvider = configFileProvider; } [HttpGet("plex/resources")] @@ -20,5 +30,32 @@ namespace Radarr.Api.V3.Authentication { return _plex.GetResources(accessToken); } + + [HttpGet("cookie")] + public async Task GetCookie() + { + var authType = _configFileProvider.AuthenticationMethod; + + var claims = new List + { + new Claim("user", "Anonymous"), + new Claim("AuthType", authType.ToString()) + }; + + if (authType == NzbDrone.Core.Authentication.AuthenticationType.Plex) + { + var claimType = _configService.PlexRequireOwner ? PlexConstants.ServerOwnedClaim : PlexConstants.ServerAccessClaim; + claims.Add(new Claim(claimType, _configService.PlexAuthServer)); + } + + var properties = new AuthenticationProperties + { + IsPersistent = true + }; + + await HttpContext.SignInAsync(authType.ToString(), new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookies", "user", "identifier")), properties); + + return StatusCode((int)HttpStatusCode.OK); + } } }