public void PropertyGetter_ReturnsExpectedParameter(string property, string name, OpenIddictParameter value)
        {
            // Arrange
            var response = new OpenIddictResponse();

            response.SetParameter(name, value);

            // Act and assert
            Assert.Equal(value.Value, typeof(OpenIddictResponse).GetProperty(property).GetValue(response));
        }
示例#2
0
 public void IsNullOrEmpty_ReturnsTrueForUndefinedValues()
 {
     // Arrange, act and assert
     Assert.True(OpenIddictParameter.IsNullOrEmpty(new OpenIddictParameter(default(JsonElement))));
 }
示例#3
0
    private HttpRequestMessage CreateRequestMessage(OpenIddictRequest request, HttpMethod method, Uri uri)
    {
        // Note: a dictionary is deliberately not used here to allow multiple parameters with the
        // same name to be specified. While initially not allowed by the core OAuth2 specification,
        // this is required for derived drafts like the OAuth2 token exchange specification.
        var parameters = new List <KeyValuePair <string?, string?> >();

        foreach (var parameter in request.GetParameters())
        {
            // If the parameter is null or empty, send an empty value.
            if (OpenIddictParameter.IsNullOrEmpty(parameter.Value))
            {
                parameters.Add(new KeyValuePair <string?, string?>(parameter.Key, string.Empty));

                continue;
            }

            var values = (string?[]?)parameter.Value;
            if (values is null || values.Length == 0)
            {
                continue;
            }

            foreach (var value in values)
            {
                parameters.Add(new KeyValuePair <string?, string?>(parameter.Key, value));
            }
        }

        if (method == HttpMethod.Get && parameters.Count != 0)
        {
            var builder = new StringBuilder();

            foreach (var parameter in parameters)
            {
                if (string.IsNullOrEmpty(parameter.Key))
                {
                    continue;
                }

                if (builder.Length != 0)
                {
                    builder.Append('&');
                }

                builder.Append(UrlEncoder.Default.Encode(parameter.Key));

                if (!string.IsNullOrEmpty(parameter.Value))
                {
                    builder.Append('=');
                    builder.Append(UrlEncoder.Default.Encode(parameter.Value));
                }
            }

            if (!uri.IsAbsoluteUri)
            {
                uri = new Uri(HttpClient.BaseAddress !, uri);
            }

            uri = new UriBuilder(uri)
            {
                Query = builder.ToString()
            }.Uri;
        }

        var message = new HttpRequestMessage(method, uri);

        if (method != HttpMethod.Get)
        {
            message.Content = new FormUrlEncodedContent(parameters);
        }

        return(message);
    }
示例#4
0
        public void PropertySetter_AddsExpectedParameter(string property, string name, OpenIddictParameter value)
        {
            // Arrange
            var request = new OpenIddictRequest();

            // Act
            typeof(OpenIddictRequest).GetProperty(property).SetValue(request, value.Value);

            // Assert
            Assert.Equal(value, request.GetParameter(name));
        }