コード例 #1
0
        static void Main(string[] args)
        {
            // Load configuration
            IConfiguration configuration = new ConfigurationBuilder()
                                           .AddEnvironmentVariables()
                                           .Build();

            string keyvault_endpoint = configuration["KEYVAULT_ENDPOINT"];

            if (!string.IsNullOrEmpty(keyvault_endpoint))
            {
                ConsoleWrite("Loading configuration from Azure Key Vault: " + keyvault_endpoint);
                var azureServiceTokenProvider = new AzureServiceTokenProvider();
                var keyVaultClient            = new KeyVaultClient(
                    new KeyVaultClient.AuthenticationCallback(
                        azureServiceTokenProvider.KeyVaultTokenCallback));

                configuration = new ConfigurationBuilder()
                                .AddConfiguration(configuration)
                                .AddAzureKeyVault(keyvault_endpoint, keyVaultClient, new DefaultKeyVaultSecretManager())
                                .Build();
            }

            IConfigurationSection generalConfig = configuration.GetSection("Settings");
            TimeZoneInfo          timeZone      = TimeZoneInfo.FindSystemTimeZoneById(generalConfig["TimeZone"]);

            string            dbConnectionString = configuration.GetConnectionString("InternalDatabase") ?? string.Empty;
            MongoDbConnection mongoDatabase      = new MongoDbConnection(dbConnectionString);

            ConsoleWrite($"Time zone for forms: {timeZone}");

            IConfigurationSection smtpConfig = configuration.GetSection("SMTP");
            SMTPConnectionDetails smtpInfo   = new SMTPConnectionDetails()
            {
                Host           = smtpConfig["hostname"],
                Port           = int.Parse(smtpConfig["port"]),
                Username       = smtpConfig["username"],
                Password       = smtpConfig["password"],
                ReplyToAddress = smtpConfig["replytoaddress"],
                FromAddress    = smtpConfig["fromaddress"]
            };

            // Start main loop
            while (true)
            {
                ConsoleWrite($"Checking for notifications to send...");
                ConsoleWrite($"> Loading schools...");
                MongoRepository <School> schoolRepo = new MongoRepository <School>(mongoDatabase);
                ConsoleWrite($"> Setting up notification handlers...");
                NotificationHandler notifications = new NotificationHandler();

                // Register notification handlers
                notifications.RegisterHandler(new EmailNotificationHandler(smtpInfo, timeZone, schoolRepo.GetAll()));

                ConsoleWrite($"> Checking for notifications...");
                // Connect to the DB and check for new submitted forms
                handleBatch <SubmittedPreKApplicationForm>(mongoDatabase, notifications);
                handleBatch <SubmittedGeneralRegistrationForm>(mongoDatabase, notifications);

                // Sleep
                ConsoleWrite($"Sleeping for {_sleepMinutes} minutes...");
                Task.Delay(_sleepMinutes * 60 * 1000).Wait();
            }
        }