Ejemplo n.º 1
0
    public async Task <IActionResult> PromoteAsync(string id)
    {
        if (String.IsNullOrEmpty(id))
        {
            return(NotFound());
        }

        var stack = await _stackRepository.GetByIdAsync(id);

        if (stack == null || !CanAccessOrganization(stack.OrganizationId))
        {
            return(NotFound());
        }

        if (!await _billingManager.HasPremiumFeaturesAsync(stack.OrganizationId))
        {
            return(PlanLimitReached("Promote to External is a premium feature used to promote an error stack to an external system. Please upgrade your plan to enable this feature."));
        }

        var promotedProjectHooks = (await _webHookRepository.GetByProjectIdAsync(stack.ProjectId)).Documents.Where(p => p.EventTypes.Contains(WebHookRepository.EventTypes.StackPromoted)).ToList();

        if (!promotedProjectHooks.Any())
        {
            return(NotImplemented("No promoted web hooks are configured for this project. Please add a promoted web hook to use this feature."));
        }

        foreach (var hook in promotedProjectHooks)
        {
            var context = new WebHookDataContext(hook.Version, stack, isNew: stack.TotalOccurrences == 1, isRegression: stack.Status == StackStatus.Regressed);
            await _webHookNotificationQueue.EnqueueAsync(new WebHookNotification {
                OrganizationId = stack.OrganizationId,
                ProjectId      = stack.ProjectId,
                WebHookId      = hook.Id,
                Url            = hook.Url,
                Type           = WebHookType.General,
                Data           = await _webHookDataPluginManager.CreateFromStackAsync(context)
            });
        }

        return(Ok());
    }
Ejemplo n.º 2
0
        protected override async Task <PermissionResult> CanAddAsync(WebHook value)
        {
            if (String.IsNullOrEmpty(value.Url) || value.EventTypes.Length == 0)
            {
                return(PermissionResult.Deny);
            }

            if (String.IsNullOrEmpty(value.ProjectId) && String.IsNullOrEmpty(value.OrganizationId))
            {
                return(PermissionResult.Deny);
            }

            if (!String.IsNullOrEmpty(value.OrganizationId) && !IsInOrganization(value.OrganizationId))
            {
                return(PermissionResult.DenyWithMessage("Invalid organization id specified."));
            }

            Project project = null;

            if (!String.IsNullOrEmpty(value.ProjectId))
            {
                project = await GetProjectAsync(value.ProjectId);

                if (project == null)
                {
                    return(PermissionResult.DenyWithMessage("Invalid project id specified."));
                }

                value.OrganizationId = project.OrganizationId;
            }

            if (!await _billingManager.HasPremiumFeaturesAsync(project != null ? project.OrganizationId : value.OrganizationId))
            {
                return(PermissionResult.DenyWithPlanLimitReached("Please upgrade your plan to add integrations."));
            }

            return(PermissionResult.Allow);
        }