/// <summary> /// Gets an <see cref="IHealthVaultSodaConnection"/> used to connect to HealthVault. /// </summary> /// <param name="configuration">Configuration required for authenticating the connection</param> /// <returns>Connection object to be used by the Client classes</returns> /// <exception cref="InvalidOperationException"> /// If <see cref="GetOrCreateSodaConnection"/> has been called already with a different MasterApplicationId. /// </exception> public IHealthVaultSodaConnection GetOrCreateSodaConnection(HealthVaultConfiguration configuration) { lock (_connectionLock) { if (_cachedConnection != null) { ValidateConfiguration(_cachedConnection.Configuration, configuration); return(_cachedConnection); } var missingProperties = new List <string>(); Guid masterApplicationId = configuration.MasterApplicationId; if (masterApplicationId == Guid.Empty) { missingProperties.Add(nameof(configuration.MasterApplicationId)); } if (missingProperties.Count > 0) { string requiredPropertiesString = string.Join(", ", missingProperties); throw new InvalidOperationException(Resources.MissingRequiredProperties.FormatResource(requiredPropertiesString)); } Ioc.Container.Configure(c => c.ExportInstance(configuration).As <HealthVaultConfiguration>()); HealthVaultSodaConnection newConnection = Ioc.Get <HealthVaultSodaConnection>(); _cachedConnection = newConnection; return(newConnection); } }
public void TestInitialize() { Ioc.Container = new DependencyInjectionContainer(); _subServiceLocator = Substitute.For <IServiceLocator>(); _subHealthWebRequestClient = Substitute.For <IHealthWebRequestClient>(); _subLocalObjectStore = Substitute.For <ILocalObjectStore>(); _subShellAuthService = Substitute.For <IShellAuthService>(); _subMessageHandlerFactory = Substitute.For <IMessageHandlerFactory>(); _subClientSessionCredentialClient = Substitute.For <IClientSessionCredentialClient>(); _healthVaultConfiguration = new HealthVaultConfiguration { MasterApplicationId = s_masterApplicationId, DefaultHealthVaultUrl = new Uri("https://platform2.healthvault.com/platform/"), DefaultHealthVaultShellUrl = new Uri("https://account.healthvault.com") }; _subServiceLocator.GetInstance <HealthVaultConfiguration>().Returns(_healthVaultConfiguration); _subServiceLocator.GetInstance <IHealthWebRequestClient>().Returns(_subHealthWebRequestClient); _subServiceLocator.GetInstance <SdkTelemetryInformation>().Returns(new SdkTelemetryInformation { FileVersion = "1.0.0.0" }); _subServiceLocator.GetInstance <ICryptographer>().Returns(new Cryptographer()); _subServiceLocator.GetInstance <IHealthServiceResponseParser>().Returns(new HealthServiceResponseParser()); Ioc.Container.RegisterTransient <IPersonClient, PersonClient>(); }
internal static HealthRecordView CreateFromXml(XPathNavigator nav, HealthVaultConfiguration configuration) { HealthRecordView view = new HealthRecordView(configuration); XPathNodeIterator sectionsIterator = nav.Select("section"); foreach (XPathNavigator sectionNav in sectionsIterator) { switch (sectionNav.Value) { case "core": view.Sections |= ThingSections.Core; break; case "audits": view.Sections |= ThingSections.Audits; break; case "blobpayload": view.Sections |= ThingSections.BlobPayload; break; case "effectivepermissions": view.Sections |= ThingSections.EffectivePermissions; break; case "tags": view.Sections |= ThingSections.Tags; break; case "digitalsignatures": view.Sections |= ThingSections.Signature; break; } } XPathNodeIterator xmlTransformsIterator = nav.Select("xml"); foreach (XPathNavigator xmlTransformNav in xmlTransformsIterator) { string transformName = xmlTransformNav.Value; if (transformName.Length == 0) { view.Sections |= ThingSections.Xml; } else { view.TransformsToApply.Add(transformName); } } XPathNodeIterator typeFormatIterator = nav.Select("type-version-format"); foreach (XPathNavigator typeFormatNav in typeFormatIterator) { Guid typeFormat = new Guid(typeFormatNav.Value); view.TypeVersionFormat.Add(typeFormat); } return(view); }
internal static ThingQuery CreateFromXml(XPathNavigator nav, HealthVaultConfiguration configuration) { ThingQuery filter = new ThingQuery(); XPathNavigator groupNav = nav.SelectSingleNode("group"); string name = groupNav.GetAttribute("name", string.Empty); if (!string.IsNullOrEmpty(name)) { filter.Name = name; } string maxString = groupNav.GetAttribute("max", string.Empty); filter.MaxItemsReturned = TryGetXmlInt32Value(maxString); string maxFullString = groupNav.GetAttribute("max-full", string.Empty); filter.MaxFullItemsReturnedPerRequest = TryGetXmlInt32Value(maxFullString); XPathNodeIterator thingIdIterator = groupNav.Select("id"); foreach (XPathNavigator thingIdNav in thingIdIterator) { string versionStamp = thingIdNav.GetAttribute("version-stamp", string.Empty); filter.ItemKeys.Add( new ThingKey( new Guid(thingIdNav.Value), new Guid(versionStamp))); } XPathNodeIterator clientIdIterator = groupNav.Select("client-thing-id"); foreach (XPathNavigator clientIdNav in clientIdIterator) { filter.ClientItemIds.Add(clientIdNav.Value); } ParseOrderByClauses(groupNav, filter); XPathNavigator filterNav = groupNav.SelectSingleNode("filter"); ParseFilterNavValue(filterNav, filter); XPathNavigator currentVersionNav = groupNav.SelectSingleNode("current-version-only"); if (currentVersionNav != null) { filter.CurrentVersionOnly = currentVersionNav.ValueAsBoolean; } XPathNavigator viewNav = groupNav.SelectSingleNode("format"); filter.View = HealthRecordView.CreateFromXml(viewNav, configuration); return(filter); }
/// <summary> /// Gets the HealthVault client service URL for /// the configured default instance of the HealthVault web-service, /// from the application or web configuration file. /// </summary> /// <remarks> /// This property is based on the "HealthVaultUrl" configuration /// value with the path modified to the appropriate handler. /// </remarks> public static Uri GetHealthClientServiceUrl(this HealthVaultConfiguration configuration) { if (configuration.DefaultHealthVaultUrl != null) { return(new Uri(configuration.DefaultHealthVaultUrl, "hvclientservice.ashx")); } return(null); }
private static void ValidateConfiguration(HealthVaultConfiguration currentConfiguration, HealthVaultConfiguration configuration) { if (currentConfiguration.MasterApplicationId != configuration.MasterApplicationId) { throw new InvalidOperationException(Resources.CannotAuthWithDifferentMasterApplicationId.FormatResource( nameof(GetOrCreateSodaConnection), currentConfiguration.MasterApplicationId, configuration.MasterApplicationId)); } }
public RequestMessageCreator( IConnectionInternal connectionInternal, IServiceLocator serviceLocator) { _connectionInternal = connectionInternal; _healthVaultConfiguration = serviceLocator.GetInstance <HealthVaultConfiguration>(); _telemetryInformation = serviceLocator.GetInstance <SdkTelemetryInformation>(); _cryptographer = serviceLocator.GetInstance <ICryptographer>(); }
private static HealthVaultConfiguration GetPpeConfiguration() { var configuration = new HealthVaultConfiguration { MasterApplicationId = Guid.Parse("cf0cb893-d411-495c-b66f-9d72b4fd2b97"), DefaultHealthVaultShellUrl = new Uri("https://account.healthvault-ppe.com"), DefaultHealthVaultUrl = new Uri("https://platform.healthvault-ppe.com/platform") }; return(configuration); }
private async void Connect_OnClick(object sender, RoutedEventArgs e) { OutputBlock.Text = "Connecting..."; var configuration = new HealthVaultConfiguration { MasterApplicationId = Guid.Parse("d6318dff-5352-4a10-a140-6c82c6536a3b") }; _connection = HealthVaultConnectionFactory.Current.GetOrCreateSodaConnection(configuration); await _connection.AuthenticateAsync(); OutputBlock.Text = "Connected."; }
public void WhenCalledWithDifferentMasterAppId_ThenInvalidOperationExceptionThrown() { var config1 = CreateConfig(); var config2 = new HealthVaultConfiguration { MasterApplicationId = new Guid("e2bab95d-cbb4-497e-ac2a-122d53a04b7a") }; HealthVaultConnectionFactoryInternal healthVaultConnectionFactoryInternal = new HealthVaultConnectionFactoryInternal(); IHealthVaultSodaConnection connection = healthVaultConnectionFactoryInternal.GetOrCreateSodaConnection(config1); healthVaultConnectionFactoryInternal.GetOrCreateSodaConnection(config2); }
private async void Connect_OnClicked(object sender, EventArgs e) { OutputLabel.Text = "Connecting..."; var configuration = new HealthVaultConfiguration { MasterApplicationId = Guid.Parse("d6318dff-5352-4a10-a140-6c82c6536a3b") }; _connection = HealthVaultConnectionFactory.Current.GetOrCreateSodaConnection(configuration); await _connection.AuthenticateAsync(); _thingClient = _connection.CreateThingClient(); ConnectedButtons.IsVisible = true; OutputLabel.Text = "Connected."; }
private async void Connect_OnClick(object sender, RoutedEventArgs e) { OutputBlock.Text = "Connecting..."; var configuration = new HealthVaultConfiguration { MasterApplicationId = Guid.Parse(AppId) }; _connection = HealthVaultConnectionFactory.Current.GetOrCreateSodaConnection(configuration); HealthVaultConnectionFactory.ThingTypeRegistrar.RegisterApplicationSpecificHandler( applicationId: AppId, subtypeTag: CustomDataTypeSubtypeTag, applicationSpecificHandlerClass: typeof(CustomDataType)); await _connection.AuthenticateAsync(); OutputBlock.Text = "Connected."; }
public HealthRecordView(HealthVaultConfiguration configuration) { _configuration = configuration; }
public ShellAuthService(IBrowserAuthBroker browserAuthBroker, HealthVaultConfiguration clientHealthVaultConfiguration) { _browserAuthBroker = browserAuthBroker; _clientHealthVaultConfiguration = clientHealthVaultConfiguration; }
public void TestInitialize() { _subBrowserAuthBroker = Substitute.For <IBrowserAuthBroker>(); _healthVaultConfiguration = new HealthVaultConfiguration(); }
/// <summary> /// This internal constructor is used to allow custom configurations to be set for testing purposes /// </summary> /// <param name="configuration">a custom configuration</param> internal ThingQuery(HealthVaultConfiguration configuration) { _configuration = configuration; _typeIds = new TypeList(View, configuration.UseLegacyTypeVersionSupport); }
public HealthWebRequestClient(HealthVaultConfiguration config, IHttpClientFactory httpClientFactory) { _configuration = config; _httpClientFactory = httpClientFactory; }