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>(); }
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>(); }
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>(); }
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>(); }
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>(); }
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); }); }