Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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));
        }