Exemplo n.º 1
0
        public static async Task RunAsync(
            CloudTable marketplaceTable,
            IInstallationTokenProvider installationTokenProvider,
            ILogger logger,
            ExecutionContext context)
        {
            logger.LogInformation("MarketplaceSync starting");
            var jwt = installationTokenProvider.GenerateJWT(
                new InstallationTokenParameters
            {
                AppId = KnownGitHubs.AppId,
            },
                KnownEnvironmentVariables.APP_PRIVATE_KEY);
            var currentPlans = KnownGitHubs.Plans.Keys.Where(k => KnownGitHubs.Plans[k] == -1 || KnownGitHubs.Plans[k] >= KnownGitHubs.SmallestLimitPaidPlan);

            foreach (var planId in currentPlans)
            {
                var planRequest = new HttpRequestMessage(HttpMethod.Get, $"https://api.github.com/marketplace_listing/plans/{planId}/accounts?per_page=100");
                planRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", jwt);
                planRequest.Headers.Add("User-Agent", "ImgBot");
                planRequest.Headers.Add("Accept", "application/vnd.github.machine-man-preview+json");

                var planResponse = await HttpClient.SendAsync(planRequest);

                var planJson = await planResponse.Content.ReadAsStringAsync();

                Account[] accountsInPlan = new Account[0];
                try
                {
                    accountsInPlan = JsonConvert.DeserializeObject <Account[]>(planJson);
                }
                catch (Exception)
                {
                    logger.LogInformation("SerializationError:> " + planJson);
                }

                logger.LogInformation("MarketplaceSync found {NumPlans} for {PlanId}", accountsInPlan.Length, planId);

                foreach (var account in accountsInPlan)
                {
                    var row = new Common.TableModels.Marketplace(account.id, account.login)
                    {
                        AccountType = account.type,
                        PlanId      = account.marketplace_purchase.plan.id
                    };
                    await marketplaceTable.ExecuteAsync(TableOperation.InsertOrMerge(row));
                }
            }

            logger.LogInformation("MarketplaceSync finished");
        }
Exemplo n.º 2
0
        public static async Task RunAsync(
            CloudTable marketplaceTable,
            IInstallationTokenProvider installationTokenProvider,
            ILogger logger,
            ExecutionContext context)
        {
            logger.LogInformation("MarketplaceSync starting");
            var jwt = installationTokenProvider.GenerateJWT(
                new InstallationTokenParameters
            {
                AppId = KnownGitHubs.AppId,
            },
                File.OpenText(Path.Combine(context.FunctionDirectory, $"../{KnownGitHubs.AppPrivateKey}")));

            foreach (var planId in new[] { 1749, 1750 })
            {
                var planRequest = new HttpRequestMessage(HttpMethod.Get, $"https://api.github.com/marketplace_listing/plans/{planId}/accounts");
                planRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", jwt);
                planRequest.Headers.Add("User-Agent", "ImgBot");
                planRequest.Headers.Add("Accept", "application/vnd.github.machine-man-preview+json");

                var planResponse = await HttpClient.SendAsync(planRequest);

                var planJson = await planResponse.Content.ReadAsStringAsync();

                Account[] accountsInPlan = new Account[0];
                try
                {
                    accountsInPlan = JsonConvert.DeserializeObject <Account[]>(planJson);
                }
                catch (Exception)
                {
                    logger.LogInformation("SerializationError:> " + planJson);
                }

                logger.LogInformation("MarketplaceSync found {NumPlans} for {PlanId}", accountsInPlan.Length, planId);

                foreach (var account in accountsInPlan)
                {
                    var row = new Common.TableModels.Marketplace(account.id, account.login)
                    {
                        AccountType = account.type,
                        PlanId      = account.marketplace_purchase.plan.id
                    };
                    await marketplaceTable.ExecuteAsync(TableOperation.InsertOrMerge(row));
                }
            }

            logger.LogInformation("MarketplaceSync finished");
        }