private async Task ValidateAuthentication(ServerInfo server, ConnectionMode connectionMode, ConnectionOptions options, CancellationToken cancellationToken) { _logger.Debug("Validating saved authentication"); var url = server.GetAddress(connectionMode); var headers = new HttpHeaders(); headers.SetAccessToken(server.AccessToken); var request = new HttpRequest { CancellationToken = cancellationToken, Method = "GET", RequestHeaders = headers, Url = url + "/emby/system/info?format=json" }; try { using (var stream = await _httpClient.SendAsync(request).ConfigureAwait(false)) { var systemInfo = JsonSerializer.DeserializeFromStream<SystemInfo>(stream); server.ImportInfo(systemInfo); } if (!string.IsNullOrEmpty(server.UserId)) { request.Url = url + "/mediabrowser/users/" + server.UserId + "?format=json"; using (var stream = await _httpClient.SendAsync(request).ConfigureAwait(false)) { var localUser = JsonSerializer.DeserializeFromStream<UserDto>(stream); SaveUserInfoIntoCredentials(server, localUser); OnLocalUserSignIn(options, localUser); } } } catch (OperationCanceledException) { throw; } catch (Exception ex) { // Already logged at a lower level server.UserId = null; server.AccessToken = null; } }
public async Task<ConnectionResult> Connect(string address, CancellationToken cancellationToken = default(CancellationToken)) { address = NormalizeAddress(address); var publicInfo = await TryConnect(address, 15000, cancellationToken).ConfigureAwait(false); if (publicInfo == null) { return new ConnectionResult { State = ConnectionState.Unavailable, ConnectUser = ConnectUser }; } var server = new ServerInfo { ManualAddress = address, LastConnectionMode = ConnectionMode.Manual }; server.ImportInfo(publicInfo); return await Connect(server, cancellationToken).ConfigureAwait(false); }
private async Task OnSuccessfulConnection(ServerInfo server, ConnectionOptions options, PublicSystemInfo systemInfo, ConnectionResult result, ConnectionMode connectionMode, CancellationToken cancellationToken) { server.ImportInfo(systemInfo); var credentials = await _credentialProvider.GetServerCredentials().ConfigureAwait(false); if (!string.IsNullOrWhiteSpace(credentials.ConnectAccessToken)) { await EnsureConnectUser(credentials, cancellationToken).ConfigureAwait(false); if (!string.IsNullOrWhiteSpace(server.ExchangeToken)) { await AddAuthenticationInfoFromConnect(server, connectionMode, credentials, cancellationToken).ConfigureAwait(false); } } if (!string.IsNullOrWhiteSpace(server.AccessToken)) { await ValidateAuthentication(server, connectionMode, options, cancellationToken).ConfigureAwait(false); } credentials.AddOrUpdateServer(server); if (options.UpdateDateLastAccessed) { server.DateLastAccessed = DateTime.UtcNow; } server.LastConnectionMode = connectionMode; await _credentialProvider.SaveServerCredentials(credentials).ConfigureAwait(false); result.ApiClient = GetOrAddApiClient(server, connectionMode); result.State = string.IsNullOrEmpty(server.AccessToken) ? ConnectionState.ServerSignIn : ConnectionState.SignedIn; ((ApiClient)result.ApiClient).EnableAutomaticNetworking(server, connectionMode, _networkConnectivity); if (result.State == ConnectionState.SignedIn) { AfterConnected(result.ApiClient, options); } CurrentApiClient = result.ApiClient; result.Servers.Add(server); if (Connected != null) { Connected(this, new GenericEventArgs<ConnectionResult>(result)); } }