/// <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>();
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        /// <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);
        }
Example #9
0
        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);
        }
Example #11
0
        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.";
        }
Example #12
0
        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.";
        }
Example #13
0
 public HealthRecordView(HealthVaultConfiguration configuration)
 {
     _configuration = configuration;
 }
Example #14
0
 public ShellAuthService(IBrowserAuthBroker browserAuthBroker, HealthVaultConfiguration clientHealthVaultConfiguration)
 {
     _browserAuthBroker = browserAuthBroker;
     _clientHealthVaultConfiguration = clientHealthVaultConfiguration;
 }
Example #15
0
 public void TestInitialize()
 {
     _subBrowserAuthBroker     = Substitute.For <IBrowserAuthBroker>();
     _healthVaultConfiguration = new HealthVaultConfiguration();
 }
Example #16
0
 /// <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;
 }