Ejemplo n.º 1
0
        public override async Task Invoke(HttpContext context)
        {
            var request = context.Request;

            if (request.Headers.TryGetValue(AuthHeader.Authorization.ToString(), out var value))
            {
                var firstAuthHeader = value.FirstOrDefault();
                if (firstAuthHeader != null)
                {
                    if (firstAuthHeader.StartsWith(AuthHeader.Basic.ToString(), StringComparison.OrdinalIgnoreCase))
                    {
                        var userNamePassword = Encoding.UTF8.GetString(Convert.FromBase64String(firstAuthHeader.Replace(AuthHeader.Basic.ToString(), "",
                                                                                                                        StringComparison.OrdinalIgnoreCase))).Split(':');
                        var userName = userNamePassword.ElementAt(0);
                        var password = userNamePassword.ElementAt(1);
                        if (string.Equals(userName, "test", StringComparison.CurrentCultureIgnoreCase) &&
                            password == "password")
                        {
                            context.Items.Add("username", userName);
                            await NextMiddleware.Invoke(context);

                            return;
                        }
                    }
                }
            }

            context.Response.StatusCode = 401;
            context.Response.Headers.Add("WWW-Authenticate", AuthHeader.Basic.ToString());
        }
Ejemplo n.º 2
0
        public async Task InvokeAsync(TestCtx parameter, NextMiddleware next, CancellationToken cancellationToken)
        {
            parameter.ExecutedMiddlewaresCount++;

            parameter.Msg += "Before_" + nameof(Middleware1);

            await next();

            parameter.Msg += "After_" + nameof(Middleware1);
        }
Ejemplo n.º 3
0
        public async Task InvokeAsync(SomeContext parameter, NextMiddleware next, CancellationToken cancellationToken)
        {
            _logger.LogInformation("before SubdomainDetectMiddleware next");

            // imagine complex logic for detecting which subdomain should process this

            parameter.Response.Type = SubDomainType.Subdomain1;

            await next();

            _logger.LogInformation("after SubdomainDetectMiddleware next");
        }
 protected middleware_context()
 {
     Env = new InMemoryCommunicationContext
     {
         PipelineData =
         {
             PipelineStage    = new PipelineStage()
             {
                 CurrentState = PipelineContinuation.Continue
             }
         }
     };
     Next = new NextMiddleware(() => NextCalled = true);
 }
        /// <summary>
        /// Invokes middleware.
        /// </summary>
        /// <param name="parameter">Pipeline parameter.</param>
        /// <param name="next">Next middleware.</param>
        /// <param name="cancellationToken">Cancellation token.</param>
        public Task InvokeAsync(SomeContext parameter, NextMiddleware next, CancellationToken cancellationToken)
        {
            foreach (var doc in parameter.Request.Documents)
            {
                parameter.Response.Documents.Add(new Subdomain1Document
                {
                    FileName       = doc.FileName,
                    FileId         = doc.FileId,
                    AdditionalInfo = "some additional data"
                });
            }

            return(next());
        }
Ejemplo n.º 6
0
        public async Task InvokeAsync(SomeContext parameter, NextMiddleware next, CancellationToken cancellationToken)
        {
            _logger.LogInformation("before PreconditionCheckMiddleware next");

            if (parameter.Request is null)
            {
                // also can supply additional error message ...

                parameter.Response.IsValid = false;

                return;
            }

            await next();

            _logger.LogInformation("after PreconditionCheckMiddleware next");
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Invokes middleware.
        /// </summary>
        /// <param name="parameter">Pipeline parameter.</param>
        /// <param name="next">Next middleware.</param>
        /// <param name="cancellationToken">Cancellation token.</param>
        public async Task InvokeAsync(SomeContext parameter, NextMiddleware next, CancellationToken cancellationToken)
        {
            var sw = new Stopwatch();

            sw.Start();

            try
            {
                await next();
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Exception!");
            }
            finally
            {
                sw.Stop();
                _logger.LogInformation("Pipeline time {Time}", sw.ElapsedMilliseconds);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Execute configured pipeline.
        /// </summary>
        /// <param name="parameter">Pipeline parameter.</param>
        /// <param name="cancellationToken">Cancellation token.</param>
        public Task ExecuteAsync(TParameter parameter, CancellationToken cancellationToken = default)
        {
            if (_pipelineComponents.Count == 0)
            {
                return(Task.CompletedTask);
            }

            var            index = 0;
            NextMiddleware next  = _completedMiddleware;

            next = () =>
            {
                var type = _pipelineComponents[index];

                index++;
                if (index == _pipelineComponents.Count)
                {
                    next = _completedMiddleware; // final action
                }

                if (type.NextMiddlewareType is not null)
                {
                    var typedMiddleware = (IMiddleware <TParameter>)ActivatorUtilities.CreateInstance(_serviceProvider, type.NextMiddlewareType);

                    return(typedMiddleware.InvokeAsync(parameter, next, cancellationToken));
                }

                if (type.NextFunc is not null)
                {
                    return(type.NextFunc(_serviceProvider, (_, _) => next())(parameter, cancellationToken));
                }

                throw new InvalidOperationException("Invalid pipeline component. No middleware or delegate supplied.");
            };

            return(next());
        }