Пример #1
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            base.Configure(builder);

            builder.Services.AddOptions <ThresholdConfig>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.MaximumNumberOfThresholdRecipients      = GetIntSetting(configuration, "GraphUpdater:MaximumNumberOfThresholdRecipients", 10);
                settings.NumberOfThresholdViolationsToNotify     = GetIntSetting(configuration, "GraphUpdater:NumberOfThresholdViolationsToNotify", 3);
                settings.NumberOfThresholdViolationsFollowUps    = GetIntSetting(configuration, "GraphUpdater:NumberOfThresholdViolationsFollowUps", 3);
                settings.NumberOfThresholdViolationsToDisableJob = GetIntSetting(configuration, "GraphUpdater:NumberOfThresholdViolationsToDisableJob", 10);
            });

            builder.Services.AddSingleton <IThresholdConfig>(services =>
            {
                return(new ThresholdConfig
                       (
                           services.GetService <IOptions <ThresholdConfig> >().Value.MaximumNumberOfThresholdRecipients,
                           services.GetService <IOptions <ThresholdConfig> >().Value.NumberOfThresholdViolationsToNotify,
                           services.GetService <IOptions <ThresholdConfig> >().Value.NumberOfThresholdViolationsFollowUps,
                           services.GetService <IOptions <ThresholdConfig> >().Value.NumberOfThresholdViolationsToDisableJob
                       ));
            });

            builder.Services.AddSingleton <IMembershipDifferenceCalculator <AzureADUser>, MembershipDifferenceCalculator <AzureADUser> >()
            .AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProviderFromSecret(services.GetService <IOptions <GraphCredentials> >().Value)));
            })
            .AddSingleton <IGraphGroupRepository, GraphGroupRepository>()
            .AddSingleton <MessageCollector>()
            .AddSingleton <IDeltaCalculatorService, DeltaCalculatorService>()
            .AddSingleton <IGraphUpdaterService, GraphUpdaterService>()
            .AddSingleton <IServiceBusMessageService, ServiceBusMessageService>();
        }
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddOptions <GraphCredentials>().Configure <IConfiguration>((settings, configuration) =>
            {
                configuration.GetSection("graphCredentials").Bind(settings);
            });

            builder.Services.AddOptions <ServiceBusConfiguration>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.Namespace = configuration.GetValue <string>("differenceServiceBusNamespace");
                settings.QueueName = configuration.GetValue <string>("membershipQueueName");
            });

            builder.Services.AddOptions <LogAnalyticsSecret <LoggingRepository> >().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.WorkSpaceId = configuration.GetValue <string>("logAnalyticsCustomerId");
                settings.SharedKey   = configuration.GetValue <string>("logAnalyticsPrimarySharedKey");
                settings.Location    = nameof(SecurityGroup);
            });

            builder.Services.AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProvider(services.GetService <IOptions <GraphCredentials> >().Value)));
            })

            .AddSingleton <IMembershipServiceBusRepository, MembershipServiceBusRepository>((services) =>
            {
                var config = services.GetService <IOptions <ServiceBusConfiguration> >().Value;
                return(new MembershipServiceBusRepository(serviceBusNamespacePrefix: config.Namespace, queueName: config.QueueName));
            })
            .AddSingleton <IGraphGroupRepository, GraphGroupRepository>()
            .AddSingleton <SGMembershipCalculator>()
            .AddSingleton <ILogAnalyticsSecret <LoggingRepository> >(services => services.GetService <IOptions <LogAnalyticsSecret <LoggingRepository> > >().Value)
            .AddSingleton <ILoggingRepository, LoggingRepository>();
        }
Пример #3
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            base.Configure(builder);

            builder.Services.AddSingleton <IKeyVaultSecret <IJobTriggerService> >(services => new KeyVaultSecret <IJobTriggerService>(services.GetService <IOptions <GraphCredentials> >().Value.ClientId))
            .AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProviderFromSecret(services.GetService <IOptions <GraphCredentials> >().Value)));
            })
            .AddSingleton <IGraphGroupRepository, GraphGroupRepository>();

            builder.Services.AddSingleton <IServiceBusTopicsRepository>(new ServiceBusTopicsRepository(GetValueOrThrow("serviceBusConnectionString"), GetValueOrThrow("serviceBusSyncJobTopic")));
            builder.Services.AddSingleton <IJobTriggerService, JobTriggerService>();
        }
Пример #4
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            base.Configure(builder);
            builder.Services.AddOptions <GraphCredentials>().Configure <IConfiguration>((settings, configuration) =>
            {
                configuration.GetSection("graphCredentials").Bind(settings);
            });

            builder.Services.AddOptions <SyncJobRepoCredentials <SyncJobRepository> >().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.ConnectionString = configuration.GetValue <string>("jobsStorageAccountConnectionString");
                settings.TableName        = configuration.GetValue <string>("jobsTableName");
            });

            builder.Services.AddSingleton <IKeyVaultSecret <ISyncJobTopicService> >(services => new KeyVaultSecret <ISyncJobTopicService>(services.GetService <IOptions <GraphCredentials> >().Value.ClientId))
            .AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProvider(services.GetService <IOptions <GraphCredentials> >().Value)));
            })
            .AddSingleton <IEmailSenderRecipient>(services =>
            {
                var creds = services.GetService <IOptions <EmailSenderRecipient> >();
                return(new EmailSenderRecipient(creds.Value.SenderAddress, creds.Value.SenderPassword, creds.Value.SyncCompletedCCAddresses, creds.Value.SyncDisabledCCAddresses));
            })
            .AddSingleton <IGraphGroupRepository, GraphGroupRepository>();

            builder.Services.AddSingleton <ISyncJobRepository>(services =>
            {
                var creds = services.GetService <IOptions <SyncJobRepoCredentials <SyncJobRepository> > >();
                return(new SyncJobRepository(creds.Value.ConnectionString, creds.Value.TableName, services.GetService <ILoggingRepository>()));
            });
            builder.Services.AddSingleton <IServiceBusTopicsRepository>(new ServiceBusTopicsRepository(GetValueOrThrow("serviceBusConnectionString"), GetValueOrThrow("serviceBusSyncJobTopic")));
            builder.Services.AddSingleton <ISyncJobTopicService, SyncJobTopicsService>();
            builder.Services.AddSingleton <ILogAnalyticsSecret <LoggingRepository> >(new LogAnalyticsSecret <LoggingRepository>(GetValueOrThrow("logAnalyticsCustomerId"), GetValueOrThrow("logAnalyticsPrimarySharedKey"), nameof(JobTrigger)));
            builder.Services.AddSingleton <ILoggingRepository, LoggingRepository>();
            var graphCredentials = builder.Services.BuildServiceProvider().GetService <IOptions <GraphCredentials> >().Value;

            builder.Services.AddOptions <EmailSenderRecipient>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.SenderAddress           = configuration.GetValue <string>("senderAddress");
                settings.SenderPassword          = configuration.GetValue <string>("senderPassword");
                settings.SyncDisabledCCAddresses = configuration.GetValue <string>("syncDisabledCCEmailAddresses");
            });
            builder.Services.AddSingleton <IMailRepository>(services => new MailRepository(new GraphServiceClient(FunctionAppDI.CreateMailAuthProvider(graphCredentials)), services.GetService <ILocalizationRepository>()));
        }
        public override void Configure(IFunctionsHostBuilder builder)
        {
            base.Configure(builder);
            builder.Services.AddOptions <GraphCredentials>().Configure <IConfiguration>((settings, configuration) =>
            {
                configuration.GetSection("graphCredentials").Bind(settings);
            });

            builder.Services.AddSingleton <IKeyVaultSecret <ISyncJobTopicService> >(services => new KeyVaultSecret <ISyncJobTopicService>(services.GetService <IOptions <GraphCredentials> >().Value.ClientId))
            .AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProvider(services.GetService <IOptions <GraphCredentials> >().Value)));
            })
            .AddSingleton <IGraphGroupRepository, GraphGroupRepository>();

            builder.Services.AddSingleton <ISyncJobRepository>(new SyncJobRepository(GetValueOrThrow("jobsStorageAccountConnectionString"), GetValueOrThrow("jobsTableName")));
            builder.Services.AddSingleton <IServiceBusTopicsRepository>(new ServiceBusTopicsRepository(GetValueOrThrow("serviceBusConnectionString"), GetValueOrThrow("serviceBusSyncJobTopic")));
            builder.Services.AddSingleton <ISyncJobTopicService, SyncJobTopicsService>();
            builder.Services.AddSingleton <ILogAnalyticsSecret <LoggingRepository> >(new LogAnalyticsSecret <LoggingRepository>(GetValueOrThrow("logAnalyticsCustomerId"), GetValueOrThrow("logAnalyticsPrimarySharedKey"), nameof(JobTrigger)));
            builder.Services.AddSingleton <ILoggingRepository, LoggingRepository>();
        }
        public override void Configure(IFunctionsHostBuilder builder)
        {
            base.Configure(builder);

            builder.Services.AddOptions <ServiceBusConfiguration>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.Namespace = configuration.GetValue <string>("differenceServiceBusNamespace");
                settings.QueueName = configuration.GetValue <string>("membershipQueueName");
            });

            builder.Services.AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProviderFromSecret(services.GetService <IOptions <GraphCredentials> >().Value)));
            })
            .AddSingleton <IMembershipServiceBusRepository, MembershipServiceBusRepository>((services) =>
            {
                var config = services.GetService <IOptions <ServiceBusConfiguration> >().Value;
                return(new MembershipServiceBusRepository(serviceBusNamespacePrefix: config.Namespace, queueName: config.QueueName));
            })
            .AddSingleton <IGraphGroupRepository, GraphGroupRepository>()
            .AddSingleton <SGMembershipCalculator>();
        }
Пример #7
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddOptions <GraphCredentials>().Configure <IConfiguration>((settings, configuration) =>
            {
                configuration.GetSection("graphCredentials").Bind(settings);
            });

            builder.Services.AddOptions <SyncJobRepoCredentials>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.ConnectionString = configuration.GetValue <string>("jobsStorageAccountConnectionString");
                settings.TableName        = configuration.GetValue <string>("jobsTableName");
            });

            builder.Services.AddOptions <LogAnalyticsSecret <LoggingRepository> >().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.WorkSpaceId = configuration.GetValue <string>("logAnalyticsCustomerId");
                settings.SharedKey   = configuration.GetValue <string>("logAnalyticsPrimarySharedKey");
                settings.Location    = nameof(GraphUpdater);
            });

            builder.Services.AddSingleton <IMembershipDifferenceCalculator <AzureADUser>, MembershipDifferenceCalculator <AzureADUser> >()
            .AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProvider(services.GetService <IOptions <GraphCredentials> >().Value)));
            })

            .AddScoped <IGraphGroupRepository, GraphGroupRepository>()
            .AddSingleton <ISyncJobRepository>(services =>
            {
                var creds = services.GetService <IOptions <SyncJobRepoCredentials> >();
                return(new SyncJobRepository(creds.Value.ConnectionString, creds.Value.TableName));
            })
            .AddSingleton <ILogAnalyticsSecret <LoggingRepository> >(services => services.GetService <IOptions <LogAnalyticsSecret <LoggingRepository> > >().Value)
            .AddScoped <SessionMessageCollector>()
            .AddScoped <ILoggingRepository, LoggingRepository>()
            .AddScoped <IGraphUpdater, GraphUpdaterApplication>();
        }
Пример #8
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            base.Configure(builder);

            builder.Services.AddSingleton <IGraphServiceClient>(services =>
                                                                new GraphServiceClient(FunctionAppDI.CreateAuthProviderFromSecret(services.GetService <IOptions <GraphCredentials> >().Value)));

            builder.Services.AddSingleton <IGraphServiceAttemptsValue>(services =>
            {
                var parseMaxRetryAfterAttempts        = int.TryParse(GetValueOrThrow("maxRetryAfterAttempts"), out int maxRetryAfterAttempts);
                var parseMaxExceptionHandlingAttempts = int.TryParse(GetValueOrThrow("maxExceptionHandlingAttempts"), out int maxExceptionHandlingAttempts);
                if (!parseMaxRetryAfterAttempts || !parseMaxExceptionHandlingAttempts)
                {
                    maxRetryAfterAttempts        = 4;
                    maxExceptionHandlingAttempts = 2;
                }

                return(new GraphServiceAttemptsValue(maxRetryAfterAttempts, maxExceptionHandlingAttempts));
            });

            builder.Services.AddSingleton <IStorageAccountSecret>(services =>
                                                                  new StorageAccountSecret(GetValueOrThrow("storageAccountConnectionString")));

            builder.Services.AddScoped <IGraphUserRepository, GraphUserRepository>();
            builder.Services.AddScoped <IBlobClientFactory, BlobClientFactory>();
            builder.Services.AddScoped <IAzureUserReaderService, AzureUserReaderService>();
        }
Пример #9
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddOptions <GraphCredentials>().Configure <IConfiguration>((settings, configuration) =>
            {
                configuration.GetSection("graphCredentials").Bind(settings);
            });

            builder.Services.AddOptions <SyncJobRepoCredentials <SyncJobRepository> >().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.ConnectionString = configuration.GetValue <string>("jobsStorageAccountConnectionString");
                settings.TableName        = configuration.GetValue <string>("jobsTableName");
            });

            builder.Services.AddOptions <LogAnalyticsSecret <LoggingRepository> >().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.WorkSpaceId = configuration.GetValue <string>("logAnalyticsCustomerId");
                settings.SharedKey   = configuration.GetValue <string>("logAnalyticsPrimarySharedKey");
                settings.Location    = nameof(GraphUpdater);
            });

            builder.Services.AddSingleton <IMembershipDifferenceCalculator <AzureADUser>, MembershipDifferenceCalculator <AzureADUser> >()
            .AddSingleton <IGraphServiceClient>((services) =>
            {
                return(new GraphServiceClient(FunctionAppDI.CreateAuthProvider(services.GetService <IOptions <GraphCredentials> >().Value)));
            })
            .AddScoped <IGraphGroupRepository, GraphGroupRepository>()
            .AddSingleton <ISyncJobRepository>(services =>
            {
                var creds = services.GetService <IOptions <SyncJobRepoCredentials <SyncJobRepository> > >();
                return(new SyncJobRepository(creds.Value.ConnectionString, creds.Value.TableName, services.GetService <ILoggingRepository>()));
            })
            .AddSingleton <IEmailSenderRecipient>(services =>
            {
                var creds = services.GetService <IOptions <EmailSenderRecipient> >();
                return(new EmailSenderRecipient(creds.Value.SenderAddress, creds.Value.SenderPassword, creds.Value.SyncCompletedCCAddresses, creds.Value.SyncDisabledCCAddresses));
            })
            .AddSingleton <ILogAnalyticsSecret <LoggingRepository> >(services => services.GetService <IOptions <LogAnalyticsSecret <LoggingRepository> > >().Value)
            .AddScoped <SessionMessageCollector>()
            .AddScoped <ILoggingRepository, LoggingRepository>()
            .AddScoped <IGraphUpdater, GraphUpdaterApplication>();

            var graphCredentials = builder.Services.BuildServiceProvider().GetService <IOptions <GraphCredentials> >().Value;

            builder.Services.AddOptions <EmailSenderRecipient>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.SenderAddress            = configuration.GetValue <string>("senderAddress");
                settings.SenderPassword           = configuration.GetValue <string>("senderPassword");
                settings.SyncCompletedCCAddresses = configuration.GetValue <string>("syncCompletedCCEmailAddresses");
                settings.SyncDisabledCCAddresses  = configuration.GetValue <string>("syncDisabledCCEmailAddresses");
            });
            builder.Services.AddSingleton <IMailRepository>(services => new MailRepository(new GraphServiceClient(FunctionAppDI.CreateMailAuthProvider(graphCredentials)), services.GetService <ILocalizationRepository>()));
            builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
            builder.Services.Configure <RequestLocalizationOptions>(opts =>
            {
                var supportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en-US"),
                    new CultureInfo("es-ES"),
                    new CultureInfo("hi-IN")
                };
                opts.DefaultRequestCulture = new RequestCulture("en-US");
                opts.SupportedCultures     = supportedCultures;
                opts.SupportedUICultures   = supportedCultures;
            });
            builder.Services.AddSingleton <ILocalizationRepository, LocalizationRepository>();
        }
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
            builder.Services.Configure <RequestLocalizationOptions>(opts =>
            {
                var supportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en-US"),
                    new CultureInfo("es-ES"),
                    new CultureInfo("hi-IN")
                };
                opts.DefaultRequestCulture = new RequestCulture("en-US");
                opts.SupportedCultures     = supportedCultures;
                opts.SupportedUICultures   = supportedCultures;
            });

            builder.Services.AddOptions <DryRunValue>().Configure <IConfiguration>((settings, configuration) =>
            {
                if (!string.IsNullOrEmpty(DryRunSettingName))
                {
                    var checkParse = bool.TryParse(configuration[DryRunSettingName], out bool value);
                    if (checkParse)
                    {
                        settings.DryRunEnabled = value;
                    }
                }
            });

            builder.Services.AddSingleton <IDryRunValue>(services =>
            {
                return(new DryRunValue(services.GetService <IOptions <DryRunValue> >().Value.DryRunEnabled));
            });

            builder.Services.AddSingleton <ILocalizationRepository, LocalizationRepository>();

            builder.Services.AddSingleton <ILogAnalyticsSecret <LoggingRepository> >(new LogAnalyticsSecret <LoggingRepository>(GetValueOrThrow("logAnalyticsCustomerId"), GetValueOrThrow("logAnalyticsPrimarySharedKey"), FunctionName));
            builder.Services.AddSingleton <ILoggingRepository, LoggingRepository>();

            builder.Services.AddOptions <GMMResources>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.LearnMoreAboutGMMUrl = configuration.GetValue <string>("GMM:LearnMoreUrl");
            });

            builder.Services.AddSingleton <IGMMResources>(services =>
            {
                var creds = services.GetService <IOptions <GMMResources> >();
                return(new GMMResources(creds.Value.LearnMoreAboutGMMUrl));
            });

            builder.Services.AddOptions <GraphCredentials>().Configure <IConfiguration>((settings, configuration) => configuration.GetSection("graphCredentials").Bind(settings));

            builder.Services.AddOptions <EmailSenderRecipient>().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.SenderAddress            = configuration.GetValue <string>("senderAddress");
                settings.SenderPassword           = configuration.GetValue <string>("senderPassword");
                settings.SyncDisabledCCAddresses  = configuration.GetValue <string>("syncDisabledCCEmailAddresses");
                settings.SyncCompletedCCAddresses = configuration.GetValue <string>("syncCompletedCCEmailAddresses");
                settings.SupportEmailAddresses    = configuration.GetValue <string>("supportEmailAddresses");
            });

            builder.Services.AddSingleton <IEmailSenderRecipient>(services =>
            {
                var creds = services.GetService <IOptions <EmailSenderRecipient> >();
                return(new EmailSenderRecipient(
                           creds.Value.SenderAddress,
                           creds.Value.SenderPassword,
                           creds.Value.SyncCompletedCCAddresses,
                           creds.Value.SyncDisabledCCAddresses,
                           creds.Value.SupportEmailAddresses));
            });

            builder.Services.AddSingleton <IMailRepository>(services =>
                                                            new MailRepository(new GraphServiceClient(
                                                                                   FunctionAppDI.CreateMailAuthProvider(services.GetService <IOptions <GraphCredentials> >().Value)),
                                                                               services.GetService <ILocalizationRepository>(),
                                                                               services.GetService <ILoggingRepository>()));

            builder.Services.AddOptions <SyncJobRepoCredentials <SyncJobRepository> >().Configure <IConfiguration>((settings, configuration) =>
            {
                settings.ConnectionString = configuration.GetValue <string>("jobsStorageAccountConnectionString");
                settings.TableName        = configuration.GetValue <string>("jobsTableName");
            });

            builder.Services.AddSingleton <ISyncJobRepository>(services =>
            {
                var creds = services.GetService <IOptions <SyncJobRepoCredentials <SyncJobRepository> > >();
                return(new SyncJobRepository(creds.Value.ConnectionString, creds.Value.TableName, services.GetService <ILoggingRepository>()));
            });

            builder.Services.AddSingleton <TelemetryClient>(sp =>
            {
                var telemetryConfiguration = new TelemetryConfiguration();
                telemetryConfiguration.InstrumentationKey = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
                telemetryConfiguration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
                var tc = new TelemetryClient(telemetryConfiguration);
                tc.Context.Operation.Name = FunctionName;
                return(tc);
            });
        }