private void SourceData(
            BindingInfo bindingInfo,
            Type parameterType,
            IWebHookRequestMetadata requestMetadata)
        {
            if (requestMetadata == null)
            {
                return;
            }

            if (requestMetadata.UseHttpContextModelBinder &&
                _allowedTypes.Any(allowedType => parameterType.IsAssignableFrom(allowedType)))
            {
                bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey;
                bindingInfo.BinderType      = typeof(WebHookHttpContextModelBinder);
                bindingInfo.BindingSource   = BindingSource.Custom;
                return;
            }

            if (requestMetadata.BodyType == WebHookBodyType.Form)
            {
                bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey;
                bindingInfo.BindingSource   = BindingSource.Form;
                return;
            }

            bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey;
            bindingInfo.BindingSource   = BindingSource.Body;
        }
        /// <summary>
        /// Instantiates a new <see cref="WebHookVerifyMethodFilter"/> instance.
        /// </summary>
        /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
        /// <param name="requestMetadata">The collection of <see cref="IWebHookMetadata"/> services.</param>
        public WebHookVerifyBodyTypeFilter(ILoggerFactory loggerFactory, IWebHookRequestMetadata requestMetadata)
        {
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            if (requestMetadata == null)
            {
                throw new ArgumentNullException(nameof(requestMetadata));
            }

            _logger          = loggerFactory.CreateLogger <WebHookVerifyBodyTypeFilter>();
            _requestMetadata = requestMetadata;
        }
Пример #3
0
        private void SourceData(BindingInfo bindingInfo, IWebHookRequestMetadata requestMetadata)
        {
            if (requestMetadata == null)
            {
                return;
            }

            if (requestMetadata.BodyType == WebHookBodyType.Form)
            {
                bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey;
                bindingInfo.BindingSource   = BindingSource.Form;
                return;
            }

            bindingInfo.BinderModelName = WebHookErrorKeys.MessageKey;
            bindingInfo.BindingSource   = BindingSource.Body;
        }
Пример #4
0
        private void Apply(
            IWebHookBindingMetadata bindingMetadata,
            IWebHookRequestMetadata requestMetadata,
            ParameterModel parameter)
        {
            var bindingInfo = parameter.BindingInfo;

            if (bindingInfo?.BinderModelName != null ||
                bindingInfo?.BinderType != null ||
                bindingInfo?.BindingSource != null)
            {
                // User was explicit. Nothing to do.
                return;
            }

            if (bindingInfo == null)
            {
                bindingInfo = parameter.BindingInfo = new BindingInfo();
            }

            var parameterName = parameter.ParameterName;
            var parameterType = parameter.ParameterInfo.ParameterType;

            switch (parameterName.ToUpperInvariant())
            {
            case "ACTION":
            case "ACTIONS":
            case "ACTIONNAME":
            case "ACTIONNAMES":
                SourceEvent(bindingInfo, parameterType);
                break;

            case "DATA":
                SourceData(bindingInfo, requestMetadata);
                break;

            case "EVENT":
            case "EVENTS":
            case "EVENTNAME":
            case "EVENTNAMES":
                SourceEvent(bindingInfo, parameterType);
                break;

            case "ID":
                SourceId(bindingInfo, parameterType);
                break;

            case "RECEIVER":
            case "RECEIVERNAME":
                SourceReceiver(bindingInfo, parameterType);
                break;

            case "RECEIVERID":
                SourceId(bindingInfo, parameterType);
                break;

            case "WEBHOOKRECEIVER":
                SourceReceiver(bindingInfo, parameterType);
                break;

            default:
                // If additional parameters are configured and match, map them. If not, treat IFormCollection,
                // JContainer and XElement parameters as data. IsAssignableFrom(...) looks reversed because this
                // check is about model binding system support, not an actual assignment to the parameter.
                if (!TrySourceAdditionalParameter(bindingInfo, bindingMetadata, parameterName) &&
                    (typeof(IFormCollection).IsAssignableFrom(parameterType) ||
                     // ??? Any need to support simple JToken's? JContainer is the base for JArray and JObject.
                     typeof(JContainer).IsAssignableFrom(parameterType) ||
                     typeof(XElement).IsAssignableFrom(parameterType)))
                {
                    SourceData(bindingInfo, requestMetadata);
                }
                break;
            }
        }