aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/QuickConnectController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Api/Controllers/QuickConnectController.cs')
-rw-r--r--Jellyfin.Api/Controllers/QuickConnectController.cs203
1 files changed, 101 insertions, 102 deletions
diff --git a/Jellyfin.Api/Controllers/QuickConnectController.cs b/Jellyfin.Api/Controllers/QuickConnectController.cs
index 6dbcdae22..ce58725c3 100644
--- a/Jellyfin.Api/Controllers/QuickConnectController.cs
+++ b/Jellyfin.Api/Controllers/QuickConnectController.cs
@@ -13,126 +13,125 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
-namespace Jellyfin.Api.Controllers
+namespace Jellyfin.Api.Controllers;
+
+/// <summary>
+/// Quick connect controller.
+/// </summary>
+public class QuickConnectController : BaseJellyfinApiController
{
+ private readonly IQuickConnect _quickConnect;
+ private readonly IAuthorizationContext _authContext;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="QuickConnectController"/> class.
+ /// </summary>
+ /// <param name="quickConnect">Instance of the <see cref="IQuickConnect"/> interface.</param>
+ /// <param name="authContext">Instance of the <see cref="IAuthorizationContext"/> interface.</param>
+ public QuickConnectController(IQuickConnect quickConnect, IAuthorizationContext authContext)
+ {
+ _quickConnect = quickConnect;
+ _authContext = authContext;
+ }
+
/// <summary>
- /// Quick connect controller.
+ /// Gets the current quick connect state.
/// </summary>
- public class QuickConnectController : BaseJellyfinApiController
+ /// <response code="200">Quick connect state returned.</response>
+ /// <returns>Whether Quick Connect is enabled on the server or not.</returns>
+ [HttpGet("Enabled")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ public ActionResult<bool> GetQuickConnectEnabled()
{
- private readonly IQuickConnect _quickConnect;
- private readonly IAuthorizationContext _authContext;
+ return _quickConnect.IsEnabled;
+ }
- /// <summary>
- /// Initializes a new instance of the <see cref="QuickConnectController"/> class.
- /// </summary>
- /// <param name="quickConnect">Instance of the <see cref="IQuickConnect"/> interface.</param>
- /// <param name="authContext">Instance of the <see cref="IAuthorizationContext"/> interface.</param>
- public QuickConnectController(IQuickConnect quickConnect, IAuthorizationContext authContext)
+ /// <summary>
+ /// Initiate a new quick connect request.
+ /// </summary>
+ /// <response code="200">Quick connect request successfully created.</response>
+ /// <response code="401">Quick connect is not active on this server.</response>
+ /// <returns>A <see cref="QuickConnectResult"/> with a secret and code for future use or an error message.</returns>
+ [HttpPost("Initiate")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ public async Task<ActionResult<QuickConnectResult>> InitiateQuickConnect()
+ {
+ try
{
- _quickConnect = quickConnect;
- _authContext = authContext;
+ var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
+ return _quickConnect.TryConnect(auth);
}
-
- /// <summary>
- /// Gets the current quick connect state.
- /// </summary>
- /// <response code="200">Quick connect state returned.</response>
- /// <returns>Whether Quick Connect is enabled on the server or not.</returns>
- [HttpGet("Enabled")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public ActionResult<bool> GetQuickConnectEnabled()
+ catch (AuthenticationException)
{
- return _quickConnect.IsEnabled;
+ return Unauthorized("Quick connect is disabled");
}
+ }
+
+ /// <summary>
+ /// Old version of <see cref="InitiateQuickConnect" /> using a GET method.
+ /// Still available to avoid breaking compatibility.
+ /// </summary>
+ /// <returns>The result of <see cref="InitiateQuickConnect" />.</returns>
+ [Obsolete("Use POST request instead")]
+ [HttpGet("Initiate")]
+ [ApiExplorerSettings(IgnoreApi = true)]
+ public Task<ActionResult<QuickConnectResult>> InitiateQuickConnectLegacy() => InitiateQuickConnect();
- /// <summary>
- /// Initiate a new quick connect request.
- /// </summary>
- /// <response code="200">Quick connect request successfully created.</response>
- /// <response code="401">Quick connect is not active on this server.</response>
- /// <returns>A <see cref="QuickConnectResult"/> with a secret and code for future use or an error message.</returns>
- [HttpPost("Initiate")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task<ActionResult<QuickConnectResult>> InitiateQuickConnect()
+ /// <summary>
+ /// Attempts to retrieve authentication information.
+ /// </summary>
+ /// <param name="secret">Secret previously returned from the Initiate endpoint.</param>
+ /// <response code="200">Quick connect result returned.</response>
+ /// <response code="404">Unknown quick connect secret.</response>
+ /// <returns>An updated <see cref="QuickConnectResult"/>.</returns>
+ [HttpGet("Connect")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
+ public ActionResult<QuickConnectResult> GetQuickConnectState([FromQuery, Required] string secret)
+ {
+ try
+ {
+ return _quickConnect.CheckRequestStatus(secret);
+ }
+ catch (ResourceNotFoundException)
+ {
+ return NotFound("Unknown secret");
+ }
+ catch (AuthenticationException)
{
- try
- {
- var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
- return _quickConnect.TryConnect(auth);
- }
- catch (AuthenticationException)
- {
- return Unauthorized("Quick connect is disabled");
- }
+ return Unauthorized("Quick connect is disabled");
}
+ }
- /// <summary>
- /// Old version of <see cref="InitiateQuickConnect" /> using a GET method.
- /// Still available to avoid breaking compatibility.
- /// </summary>
- /// <returns>The result of <see cref="InitiateQuickConnect" />.</returns>
- [Obsolete("Use POST request instead")]
- [HttpGet("Initiate")]
- [ApiExplorerSettings(IgnoreApi = true)]
- public Task<ActionResult<QuickConnectResult>> InitiateQuickConnectLegacy() => InitiateQuickConnect();
+ /// <summary>
+ /// Authorizes a pending quick connect request.
+ /// </summary>
+ /// <param name="code">Quick connect code to authorize.</param>
+ /// <param name="userId">The user the authorize. Access to the requested user is required.</param>
+ /// <response code="200">Quick connect result authorized successfully.</response>
+ /// <response code="403">Unknown user id.</response>
+ /// <returns>Boolean indicating if the authorization was successful.</returns>
+ [HttpPost("Authorize")]
+ [Authorize(Policy = Policies.DefaultAuthorization)]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status403Forbidden)]
+ public async Task<ActionResult<bool>> AuthorizeQuickConnect([FromQuery, Required] string code, [FromQuery] Guid? userId = null)
+ {
+ var currentUserId = User.GetUserId();
+ var actualUserId = userId ?? currentUserId;
- /// <summary>
- /// Attempts to retrieve authentication information.
- /// </summary>
- /// <param name="secret">Secret previously returned from the Initiate endpoint.</param>
- /// <response code="200">Quick connect result returned.</response>
- /// <response code="404">Unknown quick connect secret.</response>
- /// <returns>An updated <see cref="QuickConnectResult"/>.</returns>
- [HttpGet("Connect")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status404NotFound)]
- public ActionResult<QuickConnectResult> GetQuickConnectState([FromQuery, Required] string secret)
+ if (actualUserId.Equals(default) || (!userId.Equals(currentUserId) && !User.IsInRole(UserRoles.Administrator)))
{
- try
- {
- return _quickConnect.CheckRequestStatus(secret);
- }
- catch (ResourceNotFoundException)
- {
- return NotFound("Unknown secret");
- }
- catch (AuthenticationException)
- {
- return Unauthorized("Quick connect is disabled");
- }
+ return Forbid("Unknown user id");
}
- /// <summary>
- /// Authorizes a pending quick connect request.
- /// </summary>
- /// <param name="code">Quick connect code to authorize.</param>
- /// <param name="userId">The user the authorize. Access to the requested user is required.</param>
- /// <response code="200">Quick connect result authorized successfully.</response>
- /// <response code="403">Unknown user id.</response>
- /// <returns>Boolean indicating if the authorization was successful.</returns>
- [HttpPost("Authorize")]
- [Authorize(Policy = Policies.DefaultAuthorization)]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status403Forbidden)]
- public async Task<ActionResult<bool>> AuthorizeQuickConnect([FromQuery, Required] string code, [FromQuery] Guid? userId = null)
+ try
{
- var currentUserId = User.GetUserId();
- var actualUserId = userId ?? currentUserId;
-
- if (actualUserId.Equals(default) || (!userId.Equals(currentUserId) && !User.IsInRole(UserRoles.Administrator)))
- {
- return Forbid("Unknown user id");
- }
-
- try
- {
- return await _quickConnect.AuthorizeRequest(actualUserId, code).ConfigureAwait(false);
- }
- catch (AuthenticationException)
- {
- return Unauthorized("Quick connect is disabled");
- }
+ return await _quickConnect.AuthorizeRequest(actualUserId, code).ConfigureAwait(false);
+ }
+ catch (AuthenticationException)
+ {
+ return Unauthorized("Quick connect is disabled");
}
}
}