// https://codehollow.com/2017/02/azure-functions-time-trigger-cron-cheat-sheet/ public static async Task RunAsync([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context) { config = Configuration.InitializeConfiguration(config, context); KeyVaultExtensions.InitializeConfiguration(config); keyVaultClient = KeyVaultExtensions.GetInstance(); var tableStorageAccountConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.AzureWebjobsStorageKey); cloudTableClient = CloudTableClientExtensions.InitializeCloudTableClientAsync(cloudTableClient, tableStorageAccountConnectionString); var queueConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.ServiceBusConnectionString); queueClient = QueueClientExtensions.InitializeQueueClient(queueClient, queueConnectionString, "participants"); uint.TryParse(config["CascadiaGamersGroupId"], out var extraLifeGroupId); log.LogInformation($"Getting gamers: {DateTime.Now}"); var donorDriveClient = new DonorDriveClient(); var gamers = new List <ParticipantDto>(); //AutoMapper.Mapper.Map<List<ParticipantDto>>(await donorDriveClient.GetTeamParticipantsAsync(extraLifeGroupId)); log.LogInformation($"Retrieved: {gamers.Count()} gamers."); var participants = AutoMapper.Mapper.Map <List <ParticipantTableEntity> >(gamers); await TableStorageExtensions <ParticipantTableEntity> .WriteToTableStorageAsync(cloudTableClient, participants, "CascadiaGamersParticipants"); log.LogInformation($"Wrote to Table Storage values for: {gamers.Count()} participants."); await QueueExtensions <ParticipantTableEntity> .WriteToQueueAsync(queueClient, participants, "parcicipants"); log.LogInformation($"Wrote {gamers.Count()} participants to Service Bus to check for new donations."); log.LogInformation($"Writing to Sql Server values for: {gamers.Count()} participants."); var sqlConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.SqlConnectionString); await SqlExtensions <ParticipantTableEntity> .WriteParticipantsToSqlAsync(participants, sqlConnectionString); log.LogInformation($"Wrote to Sql Server values for: {gamers.Count()} participants."); }
public static async Task <ImmutableList <Prize> > Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req, ILogger log, ExecutionContext context) { log.LogInformation("GetWinners HTTP trigger function processed a request."); config = Configuration.InitializeConfiguration(config, context); KeyVaultExtensions.InitializeConfiguration(config); keyVaultClient = KeyVaultExtensions.GetInstance(); var sqlConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.SqlConnectionString); var prizes = await SqlExtensions <Prize> .GetWinnersFromSqlAsync(sqlConnectionString); var builder = ImmutableList.CreateBuilder <Prize>(); builder.AddRange(prizes); return(builder.ToImmutableList()); }
/// <summary> /// Add the production signing keys to IdentityServer /// /// For more details, see RFC 7518 JSON Web Algorithms (JWA) /// https://tools.ietf.org/html/rfc7518 /// /// Do notice that RSxxx and PSxxx all uses the same private key /// </summary> /// <param name="builder"></param> /// <param name="config"></param> /// <returns></returns> public static IIdentityServerBuilder AddProductionSigningCredential(this IIdentityServerBuilder builder, IConfiguration config) { Log.Information("Adding token signing credentials/keys"); // First we load the certificates (that contains the private keys) from Azure Key Vault var rsaCert = KeyVaultExtensions.LoadCertificate(config, "rsa"); var p256Cert = KeyVaultExtensions.LoadCertificate(config, "p256"); var p384Cert = KeyVaultExtensions.LoadCertificate(config, "p384"); var p521Cert = KeyVaultExtensions.LoadCertificate(config, "p521"); //Add RS256 (RSASSA-PKCS1-v1_5 using SHA-256) builder.AddSigningCredential(rsaCert, "RS256"); //Add RS384 (RSASSA-PKCS1-v1_5 using SHA-384) builder.AddSigningCredential(rsaCert, "RS384"); //Add RS512 (RSASSA-PKCS1-v1_5 using SHA-512) builder.AddSigningCredential(rsaCert, "RS512"); //Add PS256 (RSASSA-PSS using SHA-256 and MGF1 with SHA-256) builder.AddSigningCredential(rsaCert, SecurityAlgorithms.RsaSsaPssSha256); //Add PS384 (RSASSA-PSS using SHA-384 and MGF1 with SHA-384) builder.AddSigningCredential(rsaCert, SecurityAlgorithms.RsaSsaPssSha384); //Add PS512 (RSASSA-PSS using SHA-512 and MGF1 with SHA-512) builder.AddSigningCredential(rsaCert, SecurityAlgorithms.RsaSsaPssSha512); // Add ES256 (ECDSA using P-256 and SHA-256) builder.AddSigningCredential(GetECDsaPrivateKey(p256Cert), IdentityServerConstants.ECDsaSigningAlgorithm.ES256); // Add ES384 (ECDSA using P-384 and SHA-384) builder.AddSigningCredential(GetECDsaPrivateKey(p384Cert), IdentityServerConstants.ECDsaSigningAlgorithm.ES384); // Add ES512 (ECDSA using P-521 and SHA-512) builder.AddSigningCredential(GetECDsaPrivateKey(p521Cert), IdentityServerConstants.ECDsaSigningAlgorithm.ES512); return(builder); }
public static async Task RunAsync( [ServiceBusTrigger("participants", Connection = "AzureWebJobsServiceBus")] ParticipantTableEntity myQueueItem, ILogger log, ExecutionContext context) { config = Configuration.InitializeConfiguration(config, context); KeyVaultExtensions.InitializeConfiguration(config); keyVaultClient = KeyVaultExtensions.GetInstance(); logging = log; var tableStorageAccountConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.AzureWebjobsStorageKey); cloudTableClient = CloudTableClientExtensions.InitializeCloudTableClientAsync(cloudTableClient, tableStorageAccountConnectionString); logging.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem.DisplayName}"); var table = cloudTableClient.GetTableReference("CascadiaGamersParticipants"); var query = new TableQuery <ParticipantTableEntity>().Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, myQueueItem.RowKey));; Guid.TryParse(myQueueItem.RowKey, out var participantId); if (!participants.ContainsKey(participantId)) { await AddParticipantToCacheAsync(table, query); } table = cloudTableClient.GetTableReference("CascadiaGamersDonations"); var donationQuery = new TableQuery <DonationTableEntity>() .Where(TableQuery.GenerateFilterCondition("ParticipantId", QueryComparisons.Equal, myQueueItem.ParticipantId.ToString())); await AddDonationToCacheAsync(table, donationQuery, participants[participantId]); logging.LogInformation($"Getting donations for {myQueueItem.DisplayName} at: {DateTime.Now}"); var donorDriveClient = new DonorDriveClient(); var donations = await donorDriveClient.GetDonorParticipantsAsync(uint.Parse(myQueueItem.ParticipantId)); logging.LogInformation($"Retrieved {donations.Count()} donations for {myQueueItem.DisplayName} at: {DateTime.Now}"); var participantDto = participants[participantId]; var newDonations = new List <Donor>(); foreach (var donation in donations) { var donationid = participantDto.CreateGuidFromSHA256Hash(donation); if (!participantDto.Donations.ContainsKey(donationid)) { participantDto.Donations.Add(donationid, donation); newDonations.Add(donation); } } var donationsForTableStorage = AutoMapper.Mapper.Map <List <DonationTableEntity> >(donations); donationsForTableStorage.Select( d => { d.ParticipantUniqueIdentifier = participantDto.CreateGuidFromSHA256Hash().ToString(); return(d); } ).ToList(); logging.LogInformation($"Updating or Inserting {donationsForTableStorage.Count} donations for {myQueueItem.DisplayName} to Table Storage at: {DateTime.Now}"); await TableStorageExtensions <DonationTableEntity> .WriteToTableStorageAsync(cloudTableClient, donationsForTableStorage, "CascadiaGamersDonations"); logging.LogInformation($"Updating or Inserting {donationsForTableStorage.Count} donations for {myQueueItem.DisplayName} to Sql Server at: {DateTime.Now}"); var sqlConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.SqlConnectionString); await SqlExtensions <DonationTableEntity> .WriteDonationsToSqlAsync(donationsForTableStorage, sqlConnectionString); logging.LogInformation($"Completed upserting {donationsForTableStorage.Count} donations for {myQueueItem.DisplayName} to Sql Server at: {DateTime.Now}"); if (newDonations.Count() > 0) { var donationsForNewDonationsQueue = AutoMapper.Mapper.Map <List <DonationTableEntity> >(newDonations); var queueConnectionString = await KeyVaultExtensions.GetSecretAsync(Constants.KeyVaultConstants.ServiceBusConnectionString); var queueName = "newdonations"; queueClient = QueueClientExtensions.InitializeQueueClient(queueClient, queueConnectionString, queueName); logging.LogInformation($"Adding {donationsForNewDonationsQueue.Count} new donations for {myQueueItem.DisplayName} to Service Bus at: {DateTime.Now}"); await QueueExtensions <DonationTableEntity> .WriteToQueueAsync(queueClient, donationsForNewDonationsQueue, queueName); } }