sp-dev-fx-webparts/samples/react-realtime-incidentdash.../backend/O365Clinic.Function.Webhooks/Startup.cs

93 lines
3.8 KiB
C#

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using O365Clinic.Function.Webhooks.Interfaces;
using O365Clinic.Function.Webhooks.Models;
using O365Clinic.Function.Webhooks.Services;
using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
[assembly: FunctionsStartup(typeof(O365Clinic.Function.Webhooks.Startup))]
namespace O365Clinic.Function.Webhooks
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var config = builder.GetContext().Configuration;
var azureFunctionSettings = new AzureFunctionSettings();
config.Bind(azureFunctionSettings);
// Add our configuration class
builder.Services.AddSingleton(options => { return azureFunctionSettings; });
builder.Services.AddSingleton<ISharePointService, SharePointService>();
builder.Services.AddSingleton<INotificationService, NotificationService>();
builder.Services.AddSingleton<IGraphService, GraphService>();
////Register the code page provider
//Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
//// Add and configure PnP Core SDK
//builder.Services.AddPnPCore(options =>
//{
// // Load the certificate to use
// X509Certificate2 cert = LoadCertificate(azureFunctionSettings);
// // Disable telemetry because of mixed versions on AppInsights dependencies
// options.DisableTelemetry = true;
// // Configure an authentication provider with certificate (Required for app only)
// var authProvider = new X509CertificateAuthenticationProvider(
// azureFunctionSettings.ClientId,
// azureFunctionSettings.TenantId,
// cert
// );
// // And set it as default
// options.DefaultAuthenticationProvider = authProvider;
// // Add a default configuration with the site configured in app settings
// options.Sites.Add("Default",
// new PnPCoreSiteOptions
// {
// SiteUrl = azureFunctionSettings.SiteUrl,
// AuthenticationProvider = authProvider
// });
//});
}
private static X509Certificate2 LoadCertificate(AzureFunctionSettings azureFunctionSettings)
{
// Will only be populated correctly when running in the Azure Function host
string certBase64Encoded = Environment.GetEnvironmentVariable("CertificateFromKeyVault", EnvironmentVariableTarget.Process);
if (!string.IsNullOrEmpty(certBase64Encoded))
{
// Azure Function flow
return new X509Certificate2(Convert.FromBase64String(certBase64Encoded),
"",
X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.MachineKeySet |
X509KeyStorageFlags.EphemeralKeySet);
}
else
{
// Local flow
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var certificateCollection = store.Certificates.Find(X509FindType.FindByThumbprint, azureFunctionSettings.CertificateThumbprint, false);
store.Close();
return certificateCollection.First();
}
}
}
}