-
Notifications
You must be signed in to change notification settings - Fork 3
/
PullRequest.cs
67 lines (64 loc) · 2.81 KB
/
PullRequest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using System.Security.Cryptography;
using ProjectFunctions.Models;
using JiraDevOpsIntegrationFunctions;
using JiraDevOpsIntegrationFunctions.Models;
using System.Text;
namespace ProjectFunctions
{
public static class PullRequest
{
[FunctionName("PullRequest")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
ILogger log, Binder binder, [Table("PRDetail")] IAsyncCollector<PRDetail> PullRequestDetail,
[ServiceBus("prupdated", Connection = "AzureWebJobsServiceBus")] IAsyncCollector<PRInfo> topic)
{
dynamic data;
string RequestID;
GroupPrefix prefix;
try
{
data = JObject.Parse(await new StreamReader(req.Body).ReadToEndAsync());
RequestID = data["resource"]["pullRequestId"];
string RowKey = data.resourceContainers.project.id;
string PartitionKey = data.resourceContainers.project.baseUrl;
string source = data.resource.sourceRefName;
string target = data.resource.targetRefName;
string repoID = data.resource.repository.id;
string PRID = data.resource.pullRequestId;
source = source.Replace("refs/heads/", "");
target = target.Replace("refs/heads/", "");
if (string.IsNullOrEmpty(RequestID))
{
return new NotFoundResult();
}
prefix = binder.Bind<GroupPrefix>(new TableAttribute("GroupPrefix", PartitionKey.Replace("https://","").Replace("/"," "), RowKey));
if (prefix == null)
{
return new NotFoundResult();
}
string token = Utilities.GetToken(64);
string hashedToken = Utilities.GetHashedToken(token);
if (data.eventType == "git.pullrequest.created")
{
await PullRequestDetail.AddAsync(new PRDetail { PartitionKey = prefix.Prefix, RowKey = RequestID, JiraReleasedId = "", HashedToken = hashedToken });
}
await topic.AddAsync(new PRInfo() { Prefix = prefix.Prefix, PRId = RequestID, Source = source, Target = target, BaseURL = PartitionKey, RepoID = repoID, PullRequestID = PRID, Token = token });
}
catch
{
return new BadRequestResult();
}
return new OkResult();
}
}
}