protected RuntimeContext GetRuntimeContext(IPrAnnotatorModel request) { string policyFilePath = System.Configuration.ConfigurationManager.AppSettings["policyFilePath"]; // macro expansion to permit multi-tenants string policyFile = policyFilePath.WithVar(request); // cache requires absolute path policyFile = System.Web.Hosting.HostingEnvironment.MapPath(policyFile); Debug.Assert(System.IO.File.Exists(policyFile)); // need a logger to show errors in config file (Catch 22) var logger = new AspNetEventLogger(request.EventId, LogLevel.Normal); var context = new RequestContext(request.TfsCollectionUri, request.TeamProject); var runtime = RuntimeContext.GetContext( () => policyFile, context, logger, (runtimeContext) => null, (runtimeContext) => null); if (runtime.HasErrors) { this.Log(runtime.Errors.Current); return(runtime); } return(runtime); }
public static void Register(HttpConfiguration config) { // Web API configuration and services // apply the filter to all Web API controllers var logger = new AspNetEventLogger("pre-request-parsing", GetDefaultLoggingLevel()); config.Filters.Add(new IdentityBasicAuthenticationAttribute(logger)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
[Authorize] // Require some form of authentication public HttpResponseMessage Post([FromBody] JObject payload) { var request = WorkItemRequest.Parse(payload); if (!request.IsValid) { Log(request.Error); return(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = request.Error }); } string policyFilePath = System.Configuration.ConfigurationManager.AppSettings["policyFilePath"]; // macro expansion to permit multi-tenants string policyFile = policyFilePath.WithVar(request); // cache requires absolute path policyFile = System.Web.Hosting.HostingEnvironment.MapPath(policyFile); Debug.Assert(System.IO.File.Exists(policyFile)); // need a logger to show errors in config file (Catch 22) var logger = new AspNetEventLogger(request.EventId, LogLevel.Normal); var context = new RequestContext(request.TfsCollectionUri, request.TeamProject); var runtime = RuntimeContext.GetContext( () => policyFile, context, logger, (runtimeContext) => new Core.Facade.WorkItemRepository(runtimeContext), (runtimeContext) => new Core.Script.ScriptLibrary(runtimeContext)); if (runtime.HasErrors) { Log(runtime.Errors.Current); return(new HttpResponseMessage(HttpStatusCode.InternalServerError) { ReasonPhrase = runtime.Errors.Current }); } try { using (EventProcessor eventProcessor = new EventProcessor(runtime)) { context.CurrentWorkItemId = request.WorkItemId; context.CurrentChangeType = request.ChangeType; var notification = context.Notification; logger.StartingProcessing(context, notification); var result = eventProcessor.ProcessEvent(context, notification); logger.ProcessingCompleted(result); if (result.StatusCode == 0) { return(new HttpResponseMessage(HttpStatusCode.OK)); } else { return(new HttpResponseMessage(HttpStatusCode.InternalServerError) { ReasonPhrase = result.StatusMessage }); } }//using } catch (Exception e) { logger.ProcessEventException(e); return(new HttpResponseMessage(HttpStatusCode.InternalServerError) { ReasonPhrase = e.Message }); }//try }