static async Task <TaskManifest> LoadManifest(HttpContext context, IRevaleeClientRecurringSettings recurringConfig, IRevaleeRegistrar revalee, IOptions <RevaleeOptions> option) { TaskManifest manifest = null; if (recurringConfig == null || !recurringConfig.TaskModel.Any()) { manifest = new TaskManifest(revalee, context, option); } else { manifest = new TaskManifest(revalee, context, option, recurringConfig); if (!manifest.IsEmpty) { await manifest.Start(); } } return(manifest); }
internal static async Task PrepareManifest(HttpContext context, IRevaleeClientRecurringSettings recurringConfig, IRevaleeRegistrar revalee, IOptions <RevaleeOptions> option) { _manifest = await LoadManifest(context, recurringConfig, revalee, option); }
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)); }