public async void PostToStride(string strideWebhook, string strideApiKey, StrideMessageModel payload) { try { var payloadJson = JsonConvert.SerializeObject(payload); _log.Info($"Payload JSON {payloadJson}"); _log.Info($"Stride Webhook URL {strideWebhook}"); using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", strideApiKey); var content = new StringContent(payloadJson, Encoding.UTF8, "application/json"); var response = await client.PostAsync(strideWebhook, content); response.EnsureSuccessStatusCode(); } } catch (Exception ex) { _log.Error(ex.Message, ex); } }
public void PostToStride(StrideMessageModel payload) { PostToStride(_strideWebhook, _strideApiKey, payload); }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); string channelUrl = req.Headers?.FirstOrDefault(h => h.Key.ToLowerInvariant() == "channelurl").Value?.FirstOrDefault(); string channelKey = req.Headers?.FirstOrDefault(h => h.Key.ToLowerInvariant() == "channelkey").Value?.FirstOrDefault(); if (string.IsNullOrWhiteSpace(channelUrl) || string.IsNullOrWhiteSpace(channelKey)) { channelUrl = KeyManager.GetSecret("StrideWebhookUrl"); channelKey = KeyManager.GetSecret("StrideAuthToken"); if (string.IsNullOrWhiteSpace(channelUrl) || string.IsNullOrWhiteSpace(channelKey)) { return(new BadRequestResult()); } } string requestBody = new StreamReader(await req.Content.ReadAsStreamAsync()).ReadToEnd(); var request = JsonConvert.DeserializeObject <VstsMessageModel>(requestBody); if (request.EventType.ToLowerInvariant() != "build.complete") { return(new OkObjectResult("")); } var buildSucceeded = request.Resource.Status.ToLowerInvariant() == "succeeded"; var triggeredByUser = request.Resource.Requests.FirstOrDefault() == null ? "Someone" : request.Resource.Requests.FirstOrDefault()?.RequestedFor?.DisplayName; var triggeredByUserImage = "https://avatarfiles.alphacoders.com/643/thumb-64385.png"; var buildDuration = Math.Round(request.Resource.FinishTime.Subtract(request.Resource.StartTime).TotalMinutes, 1); var strideService = new StrideService(log, channelUrl, channelKey); var model = new StrideMessageModel { Version = 1, Type = "doc", Content = new[] { new Content { Type = "applicationCard", Attrs = new Attrs { Details = new[] { new Detail { Lozenge = new Lozenge { Appearance = "default", Text = $"{buildDuration} minute(s)" } } }, Text = request.DetailedMessage.Text, Link = new Link { Url = $"https://dotcontrol.visualstudio.com/{request.ResourceContainers.Project.Id}/_build/index?buildId={request.Resource.Requests.FirstOrDefault()?.Id}&_a=summary" }, Collapsible = true, Title = new Title { Text = buildSucceeded ? $"{triggeredByUser} successfully triggered a build, hooray!" : $"{triggeredByUser} broke the build!", User = new User { Icon = new Icon { Url = triggeredByUserImage, Label = triggeredByUser } } }, Description = new Description { Text = request.DetailedMessage.Text }, Preview = new Link { Url = buildSucceeded ? _successImages[_randomizer.Next(_successImages.Length)] : _failedImages[_randomizer.Next(_failedImages.Length)] }, Context = new Context { Icon = new Icon { Url = "https://a3bf67a2345da5d6ee8b-6d37b1ee447a16ff81e1420be19ec8c3.ssl.cf5.rackcdn.com/vsts/vsts.png", Label = "VSTS" }, Text = $"{request.Resource.Definition.Name} {request.Resource.Status}" } } } } }; strideService.PostToStride(model); return(new OkObjectResult("")); }