private IActionResult GetChallengeResponse(
            IWebHookGetHeadRequestMetadata getHeadRequestMetadata,
            string receiverName,
            HttpRequest request,
            RouteData routeData)
        {
            // Get the 'challenge' parameter from the request URI.
            if (!request.Query.TryGetValue(getHeadRequestMetadata.ChallengeQueryParameterName, out var challenge))
            {
                Logger.LogInformation($"{getHeadRequestMetadata.ChallengeQueryParameterName} not found in query parameters!");
                return(new BadRequestObjectResult($"{getHeadRequestMetadata.ChallengeQueryParameterName} not found in query parameters!"));
            }


            Logger.LogInformation(
                403,
                "Received a GET request for the '{ReceiverName}' WebHook receiver -- returning challenge response.",
                receiverName);

            // Echo the challenge back to the caller.
            return(new ContentResult
            {
                Content = challenge,
            });
        }
        private IActionResult GetChallengeResponse(
            IWebHookGetHeadRequestMetadata getHeadRequestMetadata,
            string receiverName,
            HttpRequest request,
            RouteData routeData)
        {
            // Get the 'challenge' parameter from the request URI.
            var challenge = request.Query[getHeadRequestMetadata.ChallengeQueryParameterName];

            if (StringValues.IsNullOrEmpty(challenge))
            {
                Logger.LogError(
                    400,
                    "A '{ReceiverName}' WebHook verification request must contain a '{ParameterName}' query " +
                    "parameter.",
                    receiverName,
                    getHeadRequestMetadata.ChallengeQueryParameterName);

                var message = string.Format(
                    CultureInfo.CurrentCulture,
                    Resources.GetRequest_NoQueryParameter,
                    receiverName,
                    getHeadRequestMetadata.ChallengeQueryParameterName);
                var noChallenge = new BadRequestObjectResult(message);

                return(noChallenge);
            }

            // Echo the challenge back to the caller.
            return(new ContentResult
            {
                Content = challenge,
            });
        }
Esempio n. 3
0
        /// <summary>
        /// Instantiates a new <see cref="WebHookGetHeadRequestFilter"/> instance to short-circuit WebHook requests
        /// based on the given <paramref name="getHeadRequestMetadata"/>.
        /// </summary>
        /// <param name="configuration">
        /// The <see cref="IConfiguration"/> used to initialize <see cref="WebHookSecurityFilter.Configuration"/>.
        /// </param>
        /// <param name="hostingEnvironment">
        /// The <see cref="IHostEnvironment" /> used to initialize
        /// <see cref="WebHookSecurityFilter.HostingEnvironment"/>.
        /// </param>
        /// <param name="loggerFactory">
        /// The <see cref="ILoggerFactory"/> used to initialize <see cref="WebHookSecurityFilter.Logger"/>.
        /// </param>
        /// <param name="getHeadRequestMetadata">The receiver's <see cref="IWebHookGetHeadRequestMetadata"/>.</param>
        public WebHookGetHeadRequestFilter(
            IConfiguration configuration,
            IHostEnvironment hostingEnvironment,
            ILoggerFactory loggerFactory,
            IWebHookGetHeadRequestMetadata getHeadRequestMetadata)
            : base(configuration, hostingEnvironment, loggerFactory)
        {
            if (getHeadRequestMetadata == null)
            {
                throw new ArgumentNullException(nameof(getHeadRequestMetadata));
            }

            _getHeadRequestMetadata = getHeadRequestMetadata;
        }