/// <summary>
        /// Initializes static members of the <see cref="TestConstants"/> class.
        /// </summary>
        static TestConstants()
        {
#if OBA_DEV_ALEC
            string environmentName = "oba-dev-alec";
            ConfigFileName = environmentName + ".config";
#endif
#if OBA_DEV_SHARAD
            string environmentName = "oba-dev-sharad";
            ConfigFileName = environmentName + ".config";
#endif
#if OBA_PPE
            string environmentName = "oba-ppe";
            ConfigFileName = environmentName + ".config";
#endif
#if OBA_PROD
            string environmentName = "oba-prod";
            ConfigFileName = environmentName + ".config";
#endif

            // use the fsr to read values that are not secrets
            var fsr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + ConfigFileName);

            EmbeddedSocialAdminUserHandle = fsr.ReadValue("EmbeddedSocialAdminUserHandle");
            EmbeddedSocialAppKey          = fsr.ReadValue("EmbeddedSocialAppKey");
            EmbeddedSocialUri             = new Uri(fsr.ReadValue("EmbeddedSocialUri"));

            AADOBAAppId    = fsr.ReadValue("AADOBAAppId");
            AADOBAHomePage = fsr.ReadValue("AADOBAHomePage");
            AADTenantId    = fsr.ReadValue("AADTenantId");

            KeyVaultUri       = fsr.ReadValue("KeyVaultUri");
            OBACertThumbprint = fsr.ReadValue("OBACertThumbprint");
            OBARegionsListUri = fsr.ReadValue("OBARegionsListUri");

            // use the kvr to read secrets
            ICertificateHelper cert     = new CertificateHelper(OBACertThumbprint, AADOBAAppId, StoreLocation.CurrentUser);
            IKeyVaultClient    kvClient = new AzureKeyVaultClient(cert);
            var log = new Log(LogDestination.Debug, Log.DefaultCategoryName);
            var kv  = new KV(log, AADOBAAppId, KeyVaultUri, OBACertThumbprint, StoreLocation.CurrentUser, kvClient);
            var kvr = new KVSettingsReader(fsr, kv);

            AzureStorageConnectionString = kvr.ReadValueAsync("AzureStorageConnectionString").Result;
            OBAApiKey                  = kvr.ReadValueAsync("OBAApiKey").Result;
            SendGridEmailAddr          = kvr.ReadValueAsync("SendGridEmailAddr").Result;
            SendGridKey                = kvr.ReadValueAsync("SendGridKey").Result;
            ServiceBusConnectionString = kvr.ReadValueAsync("ServiceBusConnectionString").Result;

            // Obtain an AAD token using a cert from the local store for the current user
            AADSettings       aadSettings = new AADSettings(TestConstants.AADTenantId, TestConstants.AADOBAAppId, TestConstants.AADOBAHomePage, TestConstants.OBACertThumbprint);
            CertificateHelper certHelper  = new CertificateHelper(TestConstants.OBACertThumbprint, TestConstants.AADOBAAppId, StoreLocation.CurrentUser);
            EmbeddedSocialAADToken = certHelper.GetAccessToken(aadSettings.Authority, aadSettings.AppUri).Result;
        }
        /// <summary>
        /// Actual OBAService code is invoked here
        /// </summary>
        /// <param name="cancellationToken">token that represents a cancel</param>
        /// <returns>task that runs OBAService</returns>
        private async Task RunAsync(CancellationToken cancellationToken)
        {
            bool            enableAzureSettingsReaderTracing = false;
            ISettingsReader settingsReader = new AzureSettingsReader(enableAzureSettingsReaderTracing);

            // use the normal azure settings reader to fetch the OBA app id, the OBA cert, and the key vault uri
            string aadAppId          = settingsReader.ReadValue("AADOBAAppId");
            string obaCertThumbprint = settingsReader.ReadValue("OBACertThumbprint");
            string keyVaultUri       = settingsReader.ReadValue("KeyVaultUri");

            // create a key vault settings reader to read secrets
            ICertificateHelper certHelper = new CertificateHelper(obaCertThumbprint, aadAppId, StoreLocation.LocalMachine);
            IKeyVaultClient    kvClient   = new AzureKeyVaultClient(certHelper);
            var log = new Log(LogDestination.Debug, Log.DefaultCategoryName);
            var kv  = new KV(log, aadAppId, keyVaultUri, obaCertThumbprint, StoreLocation.LocalMachine, kvClient);
            var kvr = new KVSettingsReader(settingsReader, kv);

            // get all the settings
            string azureStorageConnectionString = await kvr.ReadValueAsync("AzureStorageConnectionString");

            string obaApiKey = await kvr.ReadValueAsync("OBAApiKey");

            string obaRegionsListUri = await kvr.ReadValueAsync("OBARegionsListUri");

            Uri    embeddedSocialUri    = new Uri(await kvr.ReadValueAsync("EmbeddedSocialUri"));
            string embeddedSocialAppKey = await kvr.ReadValueAsync("EmbeddedSocialAppKey");

            string embeddedSocialAdminUserHandle = await kvr.ReadValueAsync("EmbeddedSocialAdminUserHandle");

            string aadTenantId = await kvr.ReadValueAsync("AADTenantId");

            string aadAppHomePage = await kvr.ReadValueAsync("AADOBAHomePage");

            string sendGridEmailAddr = await kvr.ReadValueAsync("SendGridEmailAddr");

            string sendGridKey = await kvr.ReadValueAsync("SendGridKey");

            while (!cancellationToken.IsCancellationRequested)
            {
                // create a runId
                string runId = RunId.GenerateRunId();

                // setup email
                Email email = new Email();
                email.To = new List <string>()
                {
                    sendGridEmailAddr
                };
                email.Add(runId);
                email.Add(embeddedSocialUri);

                try
                {
                    // obtain an AAD token using a cert from the local store for the current user
                    AADSettings aadSettings            = new AADSettings(aadTenantId, aadAppId, aadAppHomePage, obaCertThumbprint);
                    string      embeddedSocialAADToken = await certHelper.GetAccessToken(aadSettings.Authority, aadSettings.AppUri);

                    // create all the managers
                    OBADownload.DownloadManager            downloadManager = new OBADownload.DownloadManager(azureStorageConnectionString, runId, obaApiKey, obaRegionsListUri);
                    Diff.DiffManager                       diffManager     = new Diff.DiffManager(azureStorageConnectionString, runId);
                    PublishToEmbeddedSocial.PublishManager publishManager  = new PublishToEmbeddedSocial.PublishManager(azureStorageConnectionString, runId, embeddedSocialUri, embeddedSocialAppKey, embeddedSocialAADToken, embeddedSocialAdminUserHandle);

                    // initialize storage
                    await downloadManager.InitializeStorage();

                    await diffManager.InitializeStorage();

                    await publishManager.InitializeStorage();

                    // download routes and stops from OBA servers
                    await downloadManager.DownloadAndStore();

                    // add download metadata to email
                    StorageManager downloadMetadataManager = new StorageManager(azureStorageConnectionString, TableNames.TableType.DownloadMetadata, runId);
                    IEnumerable <DownloadMetadataEntity> downloadMetadata = downloadMetadataManager.DownloadMetadataStore.Get(runId);
                    email.Add(downloadMetadata);

                    // compare downloaded data to previously published data
                    await diffManager.DiffAndStore();

                    // add diff metadata to email
                    StorageManager diffMetadataManager            = new StorageManager(azureStorageConnectionString, TableNames.TableType.DiffMetadata, runId);
                    IEnumerable <DiffMetadataEntity> diffMetadata = diffMetadataManager.DiffMetadataStore.Get(runId);
                    email.Add(diffMetadata);

                    // publish changes to Embedded Social
                    await publishManager.PublishAndStore();

                    // add publish metadata to email
                    StorageManager publishMetadataManager = new StorageManager(azureStorageConnectionString, TableNames.TableType.PublishMetadata, runId);
                    IEnumerable <PublishMetadataEntity> publishMetadata = publishMetadataManager.PublishMetadataStore.Get(runId);
                    email.Add(publishMetadata);
                }
                catch (Exception e)
                {
                    // add the exception to email
                    email.Add(e);

                    // record it in diagnostic logs
                    Alerts.Error(e);
                }

                // remove the OBA key from the email
                email.RemoveString(obaApiKey);

                // send the email
                await email.Send(sendGridKey);

                // sleep for 24 hours
                await Task.Delay(1000 * 60 * 60 * 24);
            }
        }
示例#3
0
 public GraphService(IOptions <AADSettings> optionsAccessor)
 {
     aadSettings = optionsAccessor.Value;
 }