using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using CPE.App.Api.Helpers; using CPE.App.Web.Models; using System.Web; using System.Web.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.Web.Mvc; using System.Diagnostics; using System.Net.Http.Formatting; using CPE.App.Web.Elucidat; using CPE.App.Web.Helpers; namespace CPE.App.Api.Controllers { public class ElucidatWebHookController : ApiController { private readonly JsonMediaTypeFormatter[] _jsonFormatters = { new JsonMediaTypeFormatter { SerializerSettings = new JsonSerializerSettings { ContractResolver = new UnderscoreContractResolver(), } } }; // GET: api/ElucidatWebHook public bool Get() { return true; } // POST: api/ElucidatWebHook public async Task Post() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root = HttpContext.Current.Server.MapPath("~/App_Data"); var provider = new MultipartFormDataStreamProvider(root); try { await Request.Content.ReadAsMultipartAsync(provider); foreach (var key in provider.FormData.AllKeys) { foreach (var val in provider.FormData.GetValues(key)) { if (val.IndexOf("release_code") >-1) { ReleaseModel release = (ReleaseModel)JsonConvert.DeserializeObject(val, typeof(ReleaseModel), _jsonFormatters[0].SerializerSettings); if (release.Project.Name.IndexOf("Template") < 0) { if (release.ReleaseMode == "online-private") { var done = true; if (release.LrsEndpoint == null) { done = ProjectConfigureHelper.ProjectConfiguration(release.Project.ProjectCode, release.ReleaseCode); } done = ReleaseDetailHelper.GetReleaseDescriptionDetails(release) && done; if (!done) { Utilities.LogWrapper.Error("[ElucidatWebHookController][Post] Bad Release: ProjectCode={0} ReleaseCode={1}", release.Project.ProjectCode, release.ReleaseCode); //send email to cpe that something went wrong capturing release description or updating lrs info var result = SendEmailHelper.SendBadReleaseEmail(release); } } } } } } return Request.CreateResponse(HttpStatusCode.OK); } catch (System.Exception e) { Utilities.LogWrapper.Error("[ElucidatWebHookController][Post] Unhandled exception: exception={0}", e.ToString()); return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); } } } }