コード例 #1
0
        // 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.");
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
            }
        }