update signutare
[CPE_learningsite] / CPE / CPE.App / CPE.App.Api / Controllers / ElucidatWebHookController.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Net.Http;
6 using CPE.App.Api.Helpers;
7 using CPE.App.Web.Models;
8 using System.Web;
9 using System.Web.Http;
10 using System.Text;
11 using System.Threading.Tasks;
12 using Newtonsoft.Json.Linq;
13 using Newtonsoft.Json;
14 using System.Web.Mvc;
15 using System.Diagnostics;
16 using System.Net.Http.Formatting;
17 using CPE.App.Web.Elucidat;
18 using CPE.App.Web.Helpers;
19
20 namespace CPE.App.Api.Controllers
21 {
22     public class ElucidatWebHookController : ApiController
23     {
24         private readonly JsonMediaTypeFormatter[] _jsonFormatters =
25 {
26             new JsonMediaTypeFormatter
27             {
28                 SerializerSettings = new JsonSerializerSettings
29                 {
30                     ContractResolver = new UnderscoreContractResolver(),
31                 }
32             }
33         };
34
35         // GET: api/ElucidatWebHook
36         public bool Get()
37         {
38             return true;
39         }
40
41         // POST: api/ElucidatWebHook
42         public async Task<HttpResponseMessage> Post()
43         {
44             if (!Request.Content.IsMimeMultipartContent())
45             {
46                 throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
47             }
48
49             string root = HttpContext.Current.Server.MapPath("~/App_Data");
50             var provider = new MultipartFormDataStreamProvider(root);
51
52             try
53             {
54                 await Request.Content.ReadAsMultipartAsync(provider);
55
56                 foreach (var key in provider.FormData.AllKeys)
57                 {
58                     foreach (var val in provider.FormData.GetValues(key))
59                     {
60                         if (val.IndexOf("release_code") >-1)
61                         {
62                             ReleaseModel release = (ReleaseModel)JsonConvert.DeserializeObject(val, typeof(ReleaseModel), _jsonFormatters[0].SerializerSettings);
63                             if (release.Project.Name.IndexOf("Template") < 0) {
64                                 if (release.ReleaseMode == "online-private")
65                                 {
66                                     var done = true;
67                                     if (release.LrsEndpoint == null)
68                                     {
69                                         done = ProjectConfigureHelper.ProjectConfiguration(release.Project.ProjectCode, release.ReleaseCode);
70                                     }
71                                     done = ReleaseDetailHelper.GetReleaseDescriptionDetails(release) && done;
72                                     if (!done)
73                                     {
74                                         Utilities.LogWrapper.Error("[ElucidatWebHookController][Post] Bad Release: ProjectCode={0} ReleaseCode={1}", release.Project.ProjectCode, release.ReleaseCode);
75
76                                         //send email to cpe that something went wrong capturing release description or updating lrs info
77                                         var result = SendEmailHelper.SendBadReleaseEmail(release);
78                                     }
79                                 }
80                             }                            
81                         }
82                     }
83                 }
84
85                 return Request.CreateResponse(HttpStatusCode.OK);
86             }
87             catch (System.Exception e)
88             {
89                 Utilities.LogWrapper.Error("[ElucidatWebHookController][Post] Unhandled exception: exception={0}", e.ToString());
90                 return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
91             }
92             
93         }
94
95     }
96 }