/// <summary>
        /// Instantiates a new <see cref="WebHookVerifyMethodFilter"/> instance.
        /// </summary>
        /// <param name="bodyTypeMetadata">The <see cref="IWebHookBodyTypeMetadata"/>.</param>
        /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
        public WebHookVerifyBodyTypeFilter(IWebHookBodyTypeMetadata bodyTypeMetadata, ILoggerFactory loggerFactory)
        {
            if (bodyTypeMetadata == null)
            {
                throw new ArgumentNullException(nameof(bodyTypeMetadata));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            _bodyTypeMetadata = bodyTypeMetadata;
            _logger           = loggerFactory.CreateLogger <WebHookVerifyBodyTypeFilter>();
        }
Exemplo n.º 2
0
        private void SourceData(BindingInfo bindingInfo, IWebHookBodyTypeMetadata bodyTypeMetadata)
        {
            if (bodyTypeMetadata == null)
            {
                return;
            }

            if (bodyTypeMetadata.BodyType == WebHookBodyType.Form)
            {
                bindingInfo.BinderModelName = WebHookConstants.ModelStateBodyModelName;
                bindingInfo.BindingSource   = BindingSource.Form;
                return;
            }

            bindingInfo.BinderModelName = WebHookConstants.ModelStateBodyModelName;
            bindingInfo.BindingSource   = BindingSource.Body;
        }
    /// <summary>
    /// Ensure given <paramref name="bodyTypeMetadata"/> is valid.
    /// </summary>
    /// <param name="bodyTypeMetadata">
    /// An attribute that implements <see cref="IWebHookBodyTypeMetadata"/>.
    /// </param>
    protected void EnsureValidBodyTypeMetadata(IWebHookBodyTypeMetadata bodyTypeMetadata)
    {
        if (bodyTypeMetadata == null)
        {
            throw new ArgumentNullException(nameof(bodyTypeMetadata));
        }

        if (!bodyTypeMetadata.BodyType.HasValue)
        {
            return;
        }

        if (!Enum.IsDefined(typeof(WebHookBodyType), bodyTypeMetadata.BodyType.Value))
        {
            var message = string.Format(
                CultureInfo.CurrentCulture,
                Resources.General_InvalidEnumValue,
                typeof(WebHookBodyType),
                bodyTypeMetadata.BodyType.Value);
            throw new InvalidOperationException(message);
        }
    }
Exemplo n.º 4
0
        private void Apply(
            IWebHookBindingMetadata bindingMetadata,
            IWebHookBodyTypeMetadata bodyTypeMetadata,
            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, bodyTypeMetadata);
                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) ||
                     typeof(JToken).IsAssignableFrom(parameterType) ||
                     typeof(XElement).IsAssignableFrom(parameterType)))
                {
                    SourceData(bindingInfo, bodyTypeMetadata);
                }
                break;
            }
        }