public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (HttpMethods.IsPost(context.HttpContext.Request.Method))
            {
                var acmeRequest = _requestProvider.GetRequest();
                var acmeHeader  = _requestProvider.GetHeader();
                await _validationService.ValidateRequestAsync(acmeRequest, acmeHeader,
                                                              context.HttpContext.Request.GetDisplayUrl(), context.HttpContext.RequestAborted);
            }

            await next();
        }
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext is null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            var acmeHeader = _requestProvider.GetHeader();

            bindingContext.Result = ModelBindingResult.Success(acmeHeader);

            return(Task.CompletedTask);
        }
        public async Task <Account> FromRequestAsync(CancellationToken cancellationToken)
        {
            var requestHeader = _requestProvider.GetHeader();

            if (string.IsNullOrEmpty(requestHeader.Kid))
            {
                throw new MalformedRequestException("Kid header is missing");
            }

            //TODO: Get accountId from Kid?
            var accountId = requestHeader.GetAccountId();
            var account   = await LoadAcountAsync(accountId, cancellationToken);

            ValidateAccount(account);

            return(account !);
        }