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()); }
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); }