/// <summary> /// Called when a process requests authorization for the marked callback action. /// </summary> /// <param name="filterContext">The filter context, which encapsulates information for using <see cref="T:Revalee.Client.Mvc.CallbackActionAttribute" />.</param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="filterContext" /> parameter is null.</exception> public void OnAuthorization(AuthorizationFilterContext filterContext) { if (filterContext == null) { Debug.Fail("Revalee Error", $"Revalee::{nameof(AuthorizationFilterContext)} parameter of {nameof(OnAuthorization)} method of {nameof(CallbackActionAttribute)} is null"); throw new ArgumentNullException(nameof(filterContext)); } _revalee = (IRevaleeRegistrar)filterContext.HttpContext.RequestServices.GetService(typeof(IRevaleeRegistrar)); _callBackState = (ICallbackStateCache)filterContext.HttpContext.RequestServices.GetService(typeof(ICallbackStateCache)); if (filterContext.HttpContext == null || filterContext.HttpContext.Request == null || !_revalee.ValidateCallback(filterContext.HttpContext)) // (filterContext.HttpContext.Request)) { filterContext.Result = new UnauthorizedResult(); } }
public Task Invoke(HttpContext context) { try { TaskManifest _manifest = LoadedManifest(context).Result; if (context?.Request != null && _manifest != null) { var request = context.Request; RequestAnalysis analysis = _manifest.AnalyzeRequest(context.Request).Result; if (analysis.IsRecurringTask) { ConfiguredTask taskConfig; HttpStatusCode statusCode; if (_manifest.TryGetTask(analysis.TaskIdentifier, out taskConfig)) { if (request.Method == "POST") { if (_revalee.ValidateCallback(context)) { if (taskConfig.SetLastOccurrence(analysis.Occurrence)) { _manifest.Reschedule(taskConfig).Wait(); context.Items.Add(RouteKeys.IN_PROCESS_CONTEXT_KEY, BuildCallbackDetails(request, taskConfig.Identifier)); context.Request.Path = new PathString(taskConfig.Url.AbsolutePath); goto Continue; } else { statusCode = HttpStatusCode.Accepted; } } else { statusCode = HttpStatusCode.Unauthorized; } } else { if (request.Method == "GET" || request.Method == "HEAD") { if (request.Headers["Expect"] == "100-continue") { context.Response.StatusCode = (int)HttpStatusCode.Continue; goto Continue; } else { statusCode = HttpStatusCode.MethodNotAllowed; } } else { statusCode = HttpStatusCode.NotImplemented; } } } else { statusCode = HttpStatusCode.NoContent; } context.Response.StatusCode = (int)statusCode; return(context.Response.WriteAsync("")); } } } catch (Exception ex) { } Continue: return(_next(context)); }