public async Task <SsoResponse> Login([FromBody] LoginPost data) { try { var token = new PlexToken(data.Token); var(accessTier, loggedIn) = GetAccessTier(); if (!loggedIn) { accessTier = await _plexClient.GetAccessTier(serverIdentifier, token); } if (accessTier == AccessTier.Failure) { var loginFailureResponse = _authValidator.ValidateAuthenticationStatus(AccessTier.NoAccess, false, GetServiceName(), GetServiceUri(), string.Empty); Response.StatusCode = loginFailureResponse.Status; return(loginFailureResponse); } var user = await _plexClient.GetUserInfo(token); var claims = new List <Claim> { new Claim(Constants.AccessTierClaim, accessTier.ToString()), new Claim(Constants.AccessTokenClaim, token.Value), new Claim(Constants.ServerIdentifierClaim, serverIdentifier.Value), new Claim(Constants.UsernameClaim, user.Username), new Claim(Constants.EmailClaim, user.Email), new Claim(Constants.ThumbnailClaim, user.Thumbnail) }; var identity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme ); var authProperties = new AuthenticationProperties { AllowRefresh = true, IsPersistent = true }; await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), authProperties ); var response = _authValidator.ValidateAuthenticationStatus(accessTier, true, GetServiceName(), GetServiceUri(), user.Username); Response.StatusCode = response.Status; return(response); } catch (Exception e) { _logger.LogError("Failed to log user in", e); var unhandledErrorResponse = _authValidator.ValidateAuthenticationStatus(AccessTier.NoAccess, false, GetServiceName(), GetServiceUri(), string.Empty, true); Response.StatusCode = unhandledErrorResponse.Status; return(unhandledErrorResponse); } }
public async Task <SsoResponse> Login([FromBody] LoginPost data) { try { Identity.AccessToken = new AccessToken(data.Token); Identity.ServerIdentifier = _serverIdentifier; if (!Identity.IsAuthenticated) { Identity.AccessTier = await _plexClient.GetAccessTier(_serverIdentifier, Identity.AccessToken); } if (Identity.AccessTier == AccessTier.Failure) { Identity.AccessTier = AccessTier.NoAccess; Identity.IsAuthenticated = false; return(GetErrorResponse()); } var user = await _plexClient.GetUserInfo(Identity.AccessToken); Identity.Email = user.Email; Identity.Username = user.Username; Identity.Thumbnail = user.Thumbnail; Identity.IsAuthenticated = true; var identity = new ClaimsIdentity( Identity.AsClaims(), CookieAuthenticationDefaults.AuthenticationScheme ); var authProperties = new AuthenticationProperties { AllowRefresh = true, IsPersistent = true }; await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), authProperties ); var response = _authValidator.ValidateAuthenticationStatus(Identity, ServiceName, ServiceUri); Response.StatusCode = response.Status; return(response); } catch (Exception e) { _logger.LogError("Failed to log user in", e); Identity.AccessTier = AccessTier.NoAccess; Identity.IsAuthenticated = false; return(GetErrorResponse()); } }