< Summary - Jellyfin

Information
Class: Jellyfin.Api.Controllers.QuickConnectController
Assembly: Jellyfin.Api
File(s): /srv/git/jellyfin/Jellyfin.Api/Controllers/QuickConnectController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 21
Coverable lines: 21
Total lines: 121
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 1/23/2026 - 12:11:06 AM Line coverage: 0% (0/11) Total lines: 1291/29/2026 - 12:13:32 AM Line coverage: 0% (0/11) Total lines: 1193/9/2026 - 12:13:09 AM Line coverage: 0% (0/11) Total lines: 1204/19/2026 - 12:14:27 AM Line coverage: 0% (0/21) Total lines: 1204/27/2026 - 12:15:04 AM Line coverage: 0% (0/21) Total lines: 121

Coverage delta

Coverage delta 1 -1

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetQuickConnectEnabled()100%210%
InitiateQuickConnect()100%210%
GetQuickConnectState(...)100%210%
AuthorizeQuickConnect()100%210%

File(s)

/srv/git/jellyfin/Jellyfin.Api/Controllers/QuickConnectController.cs

#LineLine coverage
 1using System;
 2using System.ComponentModel.DataAnnotations;
 3using System.Threading.Tasks;
 4using Jellyfin.Api.Helpers;
 5using MediaBrowser.Common.Extensions;
 6using MediaBrowser.Controller.Authentication;
 7using MediaBrowser.Controller.Net;
 8using MediaBrowser.Controller.QuickConnect;
 9using MediaBrowser.Model.QuickConnect;
 10using Microsoft.AspNetCore.Authorization;
 11using Microsoft.AspNetCore.Http;
 12using Microsoft.AspNetCore.Mvc;
 13
 14namespace Jellyfin.Api.Controllers;
 15
 16/// <summary>
 17/// Quick connect controller.
 18/// </summary>
 19[Tags("Authentication")]
 20public class QuickConnectController : BaseJellyfinApiController
 21{
 22    private readonly IQuickConnect _quickConnect;
 23    private readonly IAuthorizationContext _authContext;
 24
 25    /// <summary>
 26    /// Initializes a new instance of the <see cref="QuickConnectController"/> class.
 27    /// </summary>
 28    /// <param name="quickConnect">Instance of the <see cref="IQuickConnect"/> interface.</param>
 29    /// <param name="authContext">Instance of the <see cref="IAuthorizationContext"/> interface.</param>
 030    public QuickConnectController(IQuickConnect quickConnect, IAuthorizationContext authContext)
 31    {
 032        _quickConnect = quickConnect;
 033        _authContext = authContext;
 034    }
 35
 36    /// <summary>
 37    /// Gets the current quick connect state.
 38    /// </summary>
 39    /// <response code="200">Quick connect state returned.</response>
 40    /// <returns>Whether Quick Connect is enabled on the server or not.</returns>
 41    [HttpGet("Enabled")]
 42    [ProducesResponseType(StatusCodes.Status200OK)]
 43    public ActionResult<bool> GetQuickConnectEnabled()
 44    {
 045        return _quickConnect.IsEnabled;
 46    }
 47
 48    /// <summary>
 49    /// Initiate a new quick connect request.
 50    /// </summary>
 51    /// <response code="200">Quick connect request successfully created.</response>
 52    /// <response code="401">Quick connect is not active on this server.</response>
 53    /// <returns>A <see cref="QuickConnectResult"/> with a secret and code for future use or an error message.</returns>
 54    [HttpPost("Initiate")]
 55    [ProducesResponseType(StatusCodes.Status200OK)]
 56    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
 57    public async Task<ActionResult<QuickConnectResult>> InitiateQuickConnect()
 58    {
 59        try
 60        {
 061            var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
 062            return _quickConnect.TryConnect(auth);
 63        }
 064        catch (AuthenticationException)
 65        {
 066            return Unauthorized("Quick connect is disabled");
 67        }
 068    }
 69
 70    /// <summary>
 71    /// Attempts to retrieve authentication information.
 72    /// </summary>
 73    /// <param name="secret">Secret previously returned from the Initiate endpoint.</param>
 74    /// <response code="200">Quick connect result returned.</response>
 75    /// <response code="404">Unknown quick connect secret.</response>
 76    /// <returns>An updated <see cref="QuickConnectResult"/>.</returns>
 77    [HttpGet("Connect")]
 78    [ProducesResponseType(StatusCodes.Status200OK)]
 79    [ProducesResponseType(StatusCodes.Status404NotFound)]
 80    public ActionResult<QuickConnectResult> GetQuickConnectState([FromQuery, Required] string secret)
 81    {
 82        try
 83        {
 084            return _quickConnect.CheckRequestStatus(secret);
 85        }
 086        catch (ResourceNotFoundException)
 87        {
 088            return NotFound("Unknown secret");
 89        }
 090        catch (AuthenticationException)
 91        {
 092            return Unauthorized("Quick connect is disabled");
 93        }
 094    }
 95
 96    /// <summary>
 97    /// Authorizes a pending quick connect request.
 98    /// </summary>
 99    /// <param name="code">Quick connect code to authorize.</param>
 100    /// <param name="userId">The user the authorize. Access to the requested user is required.</param>
 101    /// <response code="200">Quick connect result authorized successfully.</response>
 102    /// <response code="403">Unknown user id.</response>
 103    /// <returns>Boolean indicating if the authorization was successful.</returns>
 104    [HttpPost("Authorize")]
 105    [Authorize]
 106    [ProducesResponseType(StatusCodes.Status200OK)]
 107    [ProducesResponseType(StatusCodes.Status403Forbidden)]
 108    public async Task<ActionResult<bool>> AuthorizeQuickConnect([FromQuery, Required] string code, [FromQuery] Guid? use
 109    {
 0110        userId = RequestHelpers.GetUserId(User, userId);
 111
 112        try
 113        {
 0114            return await _quickConnect.AuthorizeRequest(userId.Value, code).ConfigureAwait(false);
 115        }
 0116        catch (AuthenticationException)
 117        {
 0118            return Unauthorized("Quick connect is disabled");
 119        }
 0120    }
 121}