public async Task <TautulliToken> GetTautulliToken(PlexToken plexToken) { var request = new HttpRequestMessage(HttpMethod.Post, _configurationService.GetTautulliUrl() + "/auth/signin"); request.Content = new StringContent($"username=&password=&token={plexToken.Value}&remember_me=1", Encoding.UTF8, "application/x-www-form-urlencoded"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("User-Agent", "PlexSSO/2"); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); var tautulliResponse = JsonSerializer.Deserialize <TautulliTokenResponse>(json, new JsonSerializerOptions { AllowTrailingCommas = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, PropertyNameCaseInsensitive = true }); return(string.IsNullOrWhiteSpace(tautulliResponse.Token) || tautulliResponse.Status != "success" ? null : new TautulliToken(tautulliResponse.UUID, tautulliResponse.Token)); }
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 <OmbiToken> GetOmbiToken(PlexToken plexToken) { var request = new HttpRequestMessage(HttpMethod.Post, _configurationService.GetOmbiUrl() + "/api/v1/token/plextoken"); request.Content = new StringContent($"{{\"plexToken\":\"{plexToken.Value}\"}}", Encoding.UTF8, "application/json"); request.Headers.Add("Accept", "application/json"); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); var ombiResponse = JsonSerializer.Deserialize <OmbiTokenResponse>(json, new JsonSerializerOptions { AllowTrailingCommas = true, PropertyNamingPolicy = new SnakeCaseNamingPolicy(), PropertyNameCaseInsensitive = true }); return(string.IsNullOrWhiteSpace(ombiResponse.AccessToken) ? null : new OmbiToken(ombiResponse.AccessToken)); }