Ejemplo n.º 1
0
            private void Append(string value)
            {
                var tick = 0m;

                if (_firstTick.HasValue)
                {
                    tick = Environment.TickCount - _firstTick.Value;
                }
                else
                {
                    _firstTick = Environment.TickCount;
                }

                tick /= 1000m;

                _builder.Append('[')
                .AppendFormat(CultureInfo.InvariantCulture, "{0}", tick)
                .Append(", \"o\", \"").Append(JsonEncodedText.Encode(value)).AppendLine("\"]");
            }
Ejemplo n.º 2
0
        internal static void WriteDictionary <TProperty>(
            JsonValueConverter <TProperty> converter,
            JsonSerializerOptions options,
            ref WriteStackFrame current,
            Utf8JsonWriter writer)
        {
            if (converter == null)
            {
                return;
            }

            Debug.Assert(current.Enumerator != null);

            string    key;
            TProperty value;

            if (current.Enumerator is IEnumerator <KeyValuePair <string, TProperty> > enumerator)
            {
                // Avoid boxing for strongly-typed enumerators such as returned from IDictionary<string, TRuntimeProperty>
                value = enumerator.Current.Value;
                key   = enumerator.Current.Key;
            }
            else if (current.Enumerator is IEnumerator <KeyValuePair <string, object> > polymorphicEnumerator)
            {
                value = (TProperty)polymorphicEnumerator.Current.Value;
                key   = polymorphicEnumerator.Current.Key;
            }
            else
            {
                // Todo: support non-generic Dictionary here (IDictionaryEnumerator)
                throw new NotSupportedException();
            }

            if (value == null)
            {
                writer.WriteNull(key);
            }
            else
            {
                JsonEncodedText escapedKey = JsonEncodedText.Encode(key);
                converter.Write(escapedKey, value, writer);
            }
        }
Ejemplo n.º 3
0
        public void StructuredLoggingOptions()
        {
            using var ms = new MemoryStream();

            var sourceCodeHash = Guid.NewGuid().ToString();


            var loggerFactory = LoggerFactory.Create(x =>
            {
                x.SetMinimumLevel(LogLevel.Debug);
                x.AddZLoggerStream(ms, option =>
                {
                    var hashProp = JsonEncodedText.Encode("Hash");

                    option.EnableStructuredLogging    = true;
                    option.StructuredLoggingFormatter = (writer, info) =>
                    {
                        // Use default and add custom metadata
                        info.WriteToJsonWriter(writer);
                        writer.WriteString(hashProp, sourceCodeHash);
                    };
                });
            });
            var logger = loggerFactory.CreateLogger("test");

            logger.ZLogDebugWithPayload(new { tako = 100, yaki = "あいうえお" }, "FooBar{0} NanoNano{1}", 100, 200);

            loggerFactory.Dispose();

            using var sr = new StreamReader(new MemoryStream(ms.ToArray()), Encoding.UTF8);
            var json = sr.ReadLine();

            var doc = JsonDocument.Parse(json).RootElement;

            doc.GetProperty("Message").GetString().Should().Be("FooBar100 NanoNano200");
            var payload = doc.GetProperty("Payload");

            payload.GetProperty("tako").GetInt32().Should().Be(100);
            payload.GetProperty("yaki").GetString().Should().Be("あいうえお");

            doc.GetProperty("Hash").GetString().Should().Be(sourceCodeHash);
            doc.GetProperty("LogLevel").GetString().Should().Be("Debug");
        }
Ejemplo n.º 4
0
        /// <summary>Validates the presence and the type of a required member.</summary>
        /// <param name="utf8Name"></param>
        protected void CheckRequiredMemberAsNumber(JsonEncodedText utf8Name)
        {
            if (!TryGetValue(utf8Name, out var claim))
            {
                ThrowHelper.ThrowJwtDescriptorException_SecEventAttributeIsRequired(utf8Name);
            }

            if (!claim.Type.IsNumber())
            {
                ThrowHelper.ThrowJwtDescriptorException_SecEventAttributeMustBeOfType(utf8Name, new[] {
                    JwtValueKind.Int32,
                    JwtValueKind.Int64,
                    JwtValueKind.UInt32,
                    JwtValueKind.UInt64,
                    JwtValueKind.Float,
                    JwtValueKind.Double
                });
            }
        }
Ejemplo n.º 5
0
 public override void Write(JsonEncodedText propertyName, TValue value, Utf8JsonWriter writer)
 {
     if (TreatAsString)
     {
         writer.WriteString(propertyName, value.ToString());
     }
     else if (s_enumTypeCode == TypeCode.UInt64)
     {
         // Use the ulong converter to prevent conversion into a signed\long value.
         ulong ulongValue = Convert.ToUInt64(value);
         writer.WriteNumber(propertyName, ulongValue);
     }
     else
     {
         // long can hold the signed\unsigned values of other integer types.
         long longValue = Convert.ToInt64(value);
         writer.WriteNumber(propertyName, longValue);
     }
 }
Ejemplo n.º 6
0
        public void TestEncoding()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);


            Console.WriteLine(encoder.Encode("тест"));
            Console.WriteLine(JavaScriptEncoder.Default.Encode("тест"));
            JsonEncodedText text = JsonEncodedText.Encode("тест");

            Console.WriteLine(text.ToString());

            Console.WriteLine();

            // To find out source and target
            byte[]       bytes       = Encoding.UTF8.GetBytes(new char[] { '\u0442', '\u0435', '\u0441', '\u0442' });
            string       source      = Encoding.UTF8.GetString(bytes); //"\u0442\u0435\u0441\u0442"; //"Ðàáîòà â ãåðìàíèè";
            const string destination = "тест";                         //"Работа в германии";

            var decodedCyrillic = Encoding.GetEncoding(1251).GetString(bytes);

            Console.WriteLine(decodedCyrillic);

            foreach (var sourceEncoding in Encoding.GetEncodings())
            {
                bytes = sourceEncoding.GetEncoding().GetBytes(source);
                foreach (var targetEncoding in Encoding.GetEncodings())
                {
                    if (targetEncoding.GetEncoding().GetString(bytes) == destination)
                    {
                        Console.WriteLine("Source Encoding: {0} TargetEncoding: {1}", sourceEncoding.CodePage, targetEncoding.CodePage);
                    }
                }
            }

            // Result1: Source Encoding: 1252 TargetEncoding: 1251
            // Result2: Source Encoding: 28591 TargetEncoding: 1251
            // Result3: Source Encoding: 28605 TargetEncoding: 1251

            // The code for you to use
            //var decodedCyrillic = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1252).GetBytes(source));
            Console.WriteLine(decodedCyrillic);
            // Result: Работа в германии
        }
Ejemplo n.º 7
0
        public NamingPolicyRespectJsonStringEnumConverter(JsonNamingPolicy?namingPolicy, JavaScriptEncoder?encoder, bool serializeAsStrings)
        {
            this.serializeAsStrings = serializeAsStrings;
            namingPolicy ??= new AsIsNamingPolicy();

            var names  = Enum.GetNames(TypeToConvert);
            var values = Enum.GetValues(TypeToConvert);

            Debug.Assert(names.Length == values.Length);

            valuesToNames   = new Dictionary <T, JsonEncodedText>(names.Length);
            stringsToValues = new Dictionary <string, T>(names.Length);
            for (var i = 0; i < names.Length; i++)
            {
                var value = (T)values.GetValue(i) !;
                var name  = namingPolicy.ConvertName(names[i]);
                valuesToNames.Add(value, JsonEncodedText.Encode(name, encoder));
                stringsToValues.Add(name, value);
            }
        }
Ejemplo n.º 8
0
        public override void WriteTo()
        {
            var key = RsaJwk.GenerateKey(2048, true, SignatureAlgorithm.RsaSha256.Utf8Name);

            key.Kid = "kid-rsa";
            key.KeyOps.Add("sign");
            key.Use     = JwkUseNames.Sig.ToArray();
            key.X5t     = Base64Url.Decode("dGhpcyBpcyBhIFNIQTEgdGVzdCE");
            key.X5tS256 = Base64Url.Decode("dGhpcyBpcyBhIFNIQTI1NiB0ZXN0ISAgICAgICAgICAgIA");
            key.X5u     = "https://example.com";
            key.X5c.Add(Convert.FromBase64String("MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA=="));

            using (var bufferWriter = new PooledByteBufferWriter())
            {
                key.Serialize(bufferWriter);
                var json = Encoding.UTF8.GetString(bufferWriter.WrittenSpan.ToArray());

                Assert.Contains("\"kid\":\"kid-rsa\"", json);
                Assert.Contains("\"key_ops\":[\"sign\"]", json);
                Assert.Contains("\"use\":\"sig\"", json);
                Assert.Contains("\"x5t\":\"dGhpcyBpcyBhIFNIQTEgdGVzdCE\"", json);
                Assert.Contains("\"x5t#S256\":\"dGhpcyBpcyBhIFNIQTI1NiB0ZXN0ISAgICAgICAgICAgIA\"", json);
#if NETCOREAPP
                Assert.Contains("\"x5u\":\"" + JsonEncodedText.Encode("https://example.com", Constants.JsonEncoder) + "\"", json);
                Assert.Contains("\"x5c\":[\"" + JsonEncodedText.Encode("MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==", Constants.JsonEncoder) + "\"]", json);
#else
                Assert.Contains("\"x5u\":\"" + JsonEncodedText.Encode("https://example.com") + "\"", json);
                Assert.Contains("\"x5c\":[\"" + JsonEncodedText.Encode("MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==") + "\"]", json);
#endif

                Assert.Contains("\"e\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.E)) + "\"", json);
                Assert.Contains("\"n\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.N)) + "\"", json);
                Assert.Contains("\"d\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.D)) + "\"", json);

                Assert.Contains("\"dp\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.DP)) + "\"", json);
                Assert.Contains("\"dq\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.DQ)) + "\"", json);
                Assert.Contains("\"p\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.P)) + "\"", json);
                Assert.Contains("\"q\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.Q)) + "\"", json);
                Assert.Contains("\"qi\":\"" + Encoding.UTF8.GetString(Base64Url.Encode(key.QI)) + "\"", json);
            }
        }
Ejemplo n.º 9
0
        private async Task <Jwk[]> GetKeysAsync()
        {
            var keys = new List <Jwk>();

            await foreach (var keyProperties in _client.GetPropertiesOfKeysAsync())
            {
                var kvKey = await _client.GetKeyAsync(keyProperties.Name);

                Jwk?key = null;
                if (kvKey.Value.KeyType == KeyType.Oct)
                {
                    key = SymmetricJwk.FromByteArray(kvKey.Value.Key.K, false);
                }
                else if (kvKey.Value.KeyType == KeyType.Rsa || kvKey.Value.KeyType == KeyType.RsaHsm)
                {
                    key = RsaJwk.FromParameters(kvKey.Value.Key.ToRSA(true).ExportParameters(true), false);
                }
#if !NETFRAMEWORK
                else if (kvKey.Value.KeyType == KeyType.Ec || kvKey.Value.KeyType == KeyType.EcHsm)
                {
                    ECJwk.FromParameters(ConvertToECParameters(kvKey.Value), computeThumbprint: false);
                }
#endif

                if (!(key is null))
                {
                    key.Kid = JsonEncodedText.Encode(kvKey.Value.Key.Id);
                    if (kvKey.Value.Key.KeyOps != null)
                    {
                        foreach (var operation in kvKey.Value.Key.KeyOps)
                        {
                            key.KeyOps.Add(JsonEncodedText.Encode(operation.ToString()));
                        }
                    }

                    keys.Add(key);
                }
            }

            return(keys.ToArray());
        }
Ejemplo n.º 10
0
        public static IEnumerable <object[]> GetPropertiesToWrite()
        {
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("object"), new object()), "{\"object\":{}}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("array"), new List <object>()), "{\"array\":[]}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int64"), 1L), "{\"int64\":1}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int32"), 1), "{\"int32\":1}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int16"), (short)1), "{\"int16\":1}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("int8"), (byte)1), "{\"int8\":1}" });

#if NETCOREAPP2_1 || NETFRAMEWORK || NETSTANDARD
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.0f), "{\"float\":1}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.1f), "{\"float\":" + ((double)1.1f).ToString("G9", CultureInfo.InvariantCulture) + "}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.0d), "{\"double\":1}" });

            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.1d), "{\"double\":" + (1.1d).ToString("G17", CultureInfo.InvariantCulture) + "}" });
#else
            byte[] destination = new byte[256];
            Utf8Formatter.TryFormat(1.0f, destination, out int bytesWritten);
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.0f), "{\"float\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" });

            Utf8Formatter.TryFormat(1.1f, destination, out bytesWritten);
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("float"), 1.1f), "{\"float\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" });

            Utf8Formatter.TryFormat(1.0d, destination, out bytesWritten);
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.0d), "{\"double\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" });

            Utf8Formatter.TryFormat(1.1d, destination, out bytesWritten);
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("double"), 1.1d), "{\"double\":" + Encoding.UTF8.GetString(destination.AsSpan().Slice(0, bytesWritten)) + "}" });
#endif
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("string"), "hello"), "{\"string\":\"hello\"}" });

            //yield return new object[] { new JwtMember("utf8String", new[] { (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o' }), "{\"utf8String\":\"hello\"}" };
            yield return(new object[] { new JwtMember(JsonEncodedText.Encode("boolean"), true), "{\"boolean\":true}" });
        }
        private async Task InternalAsyncTask(LogEventInfo logEvent, CancellationToken cancellationToken)
        {
            InternalLogger.Debug("Sending one log event");
            using var sb = ZString.CreateUtf8StringBuilder();
            sb.Append("[{\"logs\": [");
            if (EscapeJson)
            {
                sb.Append("{\"timestamp\": ");
                sb.Append(new DateTimeOffset(logEvent.TimeStamp).ToUnixTimeMilliseconds());
                sb.Append(",\"message\": \"");
                sb.Append(JsonEncodedText.Encode(Layout.Render(logEvent)));
                sb.Append("\"}");
            }
            else
            {
                sb.Append(Layout.Render(logEvent));
            }
            sb.Append("]}]");

            await SendLogStringBuilder(sb, cancellationToken).ConfigureAwait(false);
        }
Ejemplo n.º 12
0
        public void Write_WithSomeMissingContent_Works()
        {
            var value = new ProblemDetails
            {
                Title  = "Not found",
                Type   = "https://tools.ietf.org/html/rfc7231#section-6.5.4",
                Status = 404,
            };
            var expected  = $"{{\"type\":\"{JsonEncodedText.Encode(value.Type)}\",\"title\":\"{value.Title}\",\"status\":{value.Status}}}";
            var converter = new ProblemDetailsJsonConverter();
            var stream    = new MemoryStream();

            using (var writer = new Utf8JsonWriter(stream))
            {
                converter.Write(writer, value, JsonSerializerOptions);
            }

            var actual = Encoding.UTF8.GetString(stream.ToArray());

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 13
0
        public void allows_custom_scalar_that_resolves_to_an_object()
        {
            var query = @"
            query SetsCustomScalarInput($input: JsonScalarReturningObject) {
              fieldWithCustomScalarInput(input: $input)
            }
            ";

            var expected = @"
            {
              ""fieldWithCustomScalarInput"": ""bear-cat, dog, bird""
            }
            ";

            var jsonInput        = @"{ ""stringProperty"": ""bear"", ""arrayProperty"": [""cat"", ""dog"", ""bird""] }";
            var jsonInputEncoded = JsonEncodedText.Encode(jsonInput);

            var inputs = $@"{{ ""input"": ""{jsonInputEncoded}"" }}".ToInputs();

            AssertQuerySuccess(query, expected, inputs);
        }
Ejemplo n.º 14
0
                public bool TryGetEntry(JsonEncodedText kid, [NotNullWhen(true)] out CacheEntry?entry)
                {
                    // Fast path. Try to avoid the lookup to the dictionary
                    // as we should only have 1 entry
                    if (LatestEntry.Key.Equals(kid))
                    {
                        entry = LatestEntry.Value;
                        goto Found;
                    }

                    if (Entries.TryGetValue(kid, out entry))
                    {
                        LatestEntry = new KeyValuePair <JsonEncodedText, CacheEntry>(kid, entry);
                        goto Found;
                    }

                    return(false);

Found:
                    return(true);
                }
Ejemplo n.º 15
0
        public EcdhKeyWrapper(ECJwk key, EncryptionAlgorithm encryptionAlgorithm, KeyManagementAlgorithm algorithm)
            : base(encryptionAlgorithm, algorithm)
        {
            Debug.Assert(key.SupportKeyManagement(algorithm));
            Debug.Assert(algorithm.Category == AlgorithmCategory.EllipticCurve);
            _key = key;
            if (algorithm.WrappedAlgorithm is null)
            {
                _algorithm      = encryptionAlgorithm.Name;
                _keySizeInBytes = encryptionAlgorithm.RequiredKeySizeInBytes;
            }
            else
            {
                _algorithm              = algorithm.Name;
                _keySizeInBytes         = algorithm.WrappedAlgorithm.RequiredKeySizeInBits >> 3;
                _keyManagementAlgorithm = algorithm.WrappedAlgorithm;
            }

            _algorithmNameLength = _algorithm.EncodedUtf8Bytes.Length;
            _hashAlgorithm       = GetHashAlgorithm(encryptionAlgorithm);
        }
Ejemplo n.º 16
0
        protected override Jwks GetKeysFromSource()
        {
            var keys = new List <Jwk>();

            foreach (var keyProperties in _client.GetPropertiesOfKeys())
            {
                var kvKey = _client.GetKey(keyProperties.Name);
                Jwk?key   = null;
                if (kvKey.Value.KeyType == KeyType.Oct)
                {
                    key = SymmetricJwk.FromByteArray(kvKey.Value.Key.K, false);
                }
                else if (kvKey.Value.KeyType == KeyType.Rsa || kvKey.Value.KeyType == KeyType.RsaHsm)
                {
                    key = RsaJwk.FromParameters(kvKey.Value.Key.ToRSA(true).ExportParameters(true), false);
                }
#if !NETFRAMEWORK
                else if (kvKey.Value.KeyType == KeyType.Ec || kvKey.Value.KeyType == KeyType.EcHsm)
                {
                    ECJwk.FromParameters(ConvertToECParameters(kvKey.Value), computeThumbprint: false);
                }
#endif

                if (!(key is null))
                {
                    key.Kid = JsonEncodedText.Encode(kvKey.Value.Key.Id);
                    if (kvKey.Value.Key.KeyOps != null)
                    {
                        foreach (var operation in kvKey.Value.Key.KeyOps)
                        {
                            key.KeyOps.Add(JsonEncodedText.Encode(operation.ToString()));
                        }
                    }

                    keys.Add(key);
                }
            }

            return(new Jwks(_client.VaultUri.ToString(), keys));
        }
        public override void Write(Utf8JsonWriter writer, Delta <T> value, JsonSerializerOptions options)
        {
            if (value == null)
            {
                writer.WriteNullValue();
            }
            else
            {
                var clrType = typeof(T);
                var type    = _typeHandler.ResolveType(clrType);
                if (type == null)
                {
                    throw new JsonException($"Could not resolve API type '{clrType.Name}'");
                }

                writer.WriteStartObject();

                foreach (var changedProperty in value.ChangedProperties)
                {
                    if (type.TryGetProperty(changedProperty.Key, out var property))
                    {
                        var propertyClrType = property.ClrProperty.PropertyType;
                        var propertyApiType = _typeHandler.ResolveType(propertyClrType);

                        var key = options.PropertyNamingPolicy.ConvertName(property.JsonName);
                        writer.WritePropertyName(JsonEncodedText.Encode(key));

                        JsonHelper.WriteValue(writer,
                                              propertyApiType,
                                              changedProperty.Value,
                                              null,
                                              _typeHandler,
                                              options);
                    }
                }

                writer.WriteEndObject();
            }
        }
Ejemplo n.º 18
0
            public bool TryGetValue(JsonEncodedText key, out JwtMember value)
            {
                if (key.Equals(_value1.Name))
                {
                    value = _value1;
                }
                else if (key.Equals(_value2.Name))
                {
                    value = _value2;
                }
                else
                {
#if NET5_0_OR_GREATER
                    Unsafe.SkipInit(out value);
#else
                    value = default;
#endif
                    return(false);
                }

                return(true);
            }
Ejemplo n.º 19
0
        public EnumConverter(EnumConverterOptions converterOptions, JsonNamingPolicy?namingPolicy, JsonSerializerOptions serializerOptions)
        {
            _converterOptions = converterOptions;
            _namingPolicy     = namingPolicy;
            _nameCache        = new ConcurrentDictionary <ulong, JsonEncodedText>();

#if NETCOREAPP
            string[] names  = Enum.GetNames <T>();
            T[]      values = Enum.GetValues <T>();
#else
            string[] names  = Enum.GetNames(TypeToConvert);
            Array    values = Enum.GetValues(TypeToConvert);
#endif
            Debug.Assert(names.Length == values.Length);

            JavaScriptEncoder?encoder = serializerOptions.Encoder;

            for (int i = 0; i < names.Length; i++)
            {
                if (_nameCache.Count >= NameCacheSizeSoftLimit)
                {
                    break;
                }

#if NETCOREAPP
                T value = values[i];
#else
                T value = (T)values.GetValue(i) !;
#endif
                ulong  key  = ConvertToUInt64(value);
                string name = names[i];

                _nameCache.TryAdd(
                    key,
                    namingPolicy == null
                        ? JsonEncodedText.Encode(name, encoder)
                        : FormatEnumValue(name, encoder));
            }
        }
Ejemplo n.º 20
0
        public override void Write(
            Utf8JsonWriter writer, Context value, JsonSerializerOptions options)
        {
            // Serialize contect mappings
            if (value?.Mappings != null)
            {
                writer.WriteStartObject();

                foreach (KeyValuePair <string, Uri> mapping in value.Mappings)
                {
                    writer.WriteString(
                        JsonEncodedText.Encode(mapping.Key), mapping.Value.ToString());
                }

                writer.WriteEndObject();
            }
            // Serialize context reference
            else if (value?.Reference != null)
            {
                writer.WriteStringValue(value.Reference.ToString());
            }
        }
Ejemplo n.º 21
0
        public void Equal()
        {
            var key = SymmetricJwk.GenerateKey(128);

            Assert.True(key.Equals(key));
            Assert.Equal(key, key);
            var copiedKey = Jwk.FromJson(key.ToString());

            Assert.Equal(key, copiedKey);

            // 'kid' is not a discriminant, excepted if the value is different.
            copiedKey.Kid = default;
            Assert.Equal(key, copiedKey);
            Assert.Equal(copiedKey, key);
            key.Kid = default;
            Assert.Equal(key, copiedKey);
            key.Kid       = JsonEncodedText.Encode("X");
            copiedKey.Kid = JsonEncodedText.Encode("Y");
            Assert.NotEqual(key, copiedKey);

            Assert.NotEqual(key, Jwk.None);
        }
Ejemplo n.º 22
0
        private static IEnumerable <Expression> BuildPropertyWriters(Type type, Expression objectParam, Expression writerParam)
        {
            var members = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);

            foreach (PropertyInfo property in members)
            {
                if (GetPrimitiveWriterExpression(property, objectParam, writerParam, out var writePrimitiveExpression))
                {
                    yield return(writePrimitiveExpression);
                }
                else
                {
                    var fieldInfo = typeof(DelegateCacheType <>).MakeGenericType(property.PropertyType).GetField(nameof(cachedDelegateWithName));
                    var propertyNameExpression = Expression.Constant(JsonEncodedText.Encode(property.Name));
                    yield return
                        (Expression.IfThenElse(
                             Expression.Equal(Expression.Property(objectParam, property), Expression.Constant(null)),
                             Expression.Call(writerParam, "WriteNull", null, propertyNameExpression),
                             Expression.Invoke(Expression.Field(null, fieldInfo), Expression.Property(objectParam, property), writerParam, propertyNameExpression)));
                }
            }
        }
Ejemplo n.º 23
0
            public bool TryGetValue(JsonEncodedText key, out JwtMember value)
            {
                if (key.Equals(_value1.Name))
                {
                    value = _value1;
                }
                else if (key.Equals(_value2.Name))
                {
                    value = _value2;
                }
                else if (key.Equals(_value3.Name))
                {
                    value = _value3;
                }
                else
                {
                    value = default;
                    return(false);
                }

                return(true);
            }
Ejemplo n.º 24
0
        public void Equal()
        {
            var key = PasswordBasedJwk.FromPassphrase("Hello world");

            Assert.True(key.Equals(key));
            Assert.Equal(key, key);
            var copiedKey = PasswordBasedJwk.FromPassphrase("Hello world");

            Assert.Equal(key, copiedKey);

            // 'kid' is not a discriminant, excepted if the value is different.
            copiedKey.Kid = default;
            Assert.Equal(key, copiedKey);
            Assert.Equal(copiedKey, key);
            key.Kid = default;
            Assert.Equal(key, copiedKey);
            key.Kid       = JsonEncodedText.Encode("X");
            copiedKey.Kid = JsonEncodedText.Encode("Y");
            Assert.NotEqual(key, copiedKey);

            Assert.NotEqual(key, Jwk.None);
        }
Ejemplo n.º 25
0
            private static bool IsEligibleHeaderForJwe(int count, JsonEncodedText kid, string?typ, string?cty)
            {
                bool eligible = kid.EncodedUtf8Bytes.Length != 0;

                if (eligible)
                {
                    int maxHeaderCount = 3; // alg + enc + kid
                    if (typ != null)
                    {
                        maxHeaderCount++;
                    }

                    if (cty != null)
                    {
                        maxHeaderCount++;
                    }

                    eligible = count <= maxHeaderCount;
                }

                return(eligible);
            }
Ejemplo n.º 26
0
        public static void WriteDictionary(
            Utf8JsonWriter writer,
            IDictionary value,
            IOpenApiType valueType,
            IOpenApiTypeHandler typeHandler,
            JsonSerializerOptions options)
        {
            writer.WriteStartObject();

            foreach (DictionaryEntry dictionaryEntry in value)
            {
                var key = options.DictionaryKeyPolicy != null
                    ? options.DictionaryKeyPolicy.ConvertName(dictionaryEntry.Key.ToString())
                    : dictionaryEntry.Key.ToString();

                writer.WritePropertyName(JsonEncodedText.Encode(key));

                WriteValue(writer, valueType, dictionaryEntry.Value, null, typeHandler, options);
            }

            writer.WriteEndObject();
        }
Ejemplo n.º 27
0
        public override void Write(
            Utf8JsonWriter writer, SupportedClass value, JsonSerializerOptions options)
        {
            writer.WriteStartObject();
            WriteStringIfNotNull("@id", value.Id?.ToString());
            writer.WriteString(JsonEncodedText.Encode("@type"), value.Type);
            WriteStringIfNotNull("title", value.Title);
            WriteStringIfNotNull("description", value.Description);

            // Member assertion serialization for collections
            if (value is SupportedCollection supportedCollection)
            {
                WriteObjectIfNotNull("memberAssertion", supportedCollection.MemberAssertion);
            }

            WriteObjectIfNotNull("supportedProperty", value.SupportedProperties);
            WriteObjectIfNotNull("supportedOperation", value.SupportedOperations);

            void WriteObjectIfNotNull <T>(string propertyName, T value)
            {
                if (value != null)
                {
                    writer.WritePropertyName(propertyName);
                    string valueJson = JsonSerializer.Serialize(value);
                    using JsonDocument document = JsonDocument.Parse(valueJson);
                    document.RootElement.WriteTo(writer);
                }
            }

            void WriteStringIfNotNull(string propertyName, string?value)
            {
                if (value != null)
                {
                    writer.WriteString(JsonEncodedText.Encode(propertyName), value);
                }
            }

            writer.WriteEndObject();
        }
Ejemplo n.º 28
0
            public void AddHeader_WithKid()
            {
                const int Count = 10;

                var cache = new LruJwtHeaderCache();

                byte[]    binaryHeader;
                var       headers = new JwtHeader[10];
                JwtHeader header;

                for (int i = 0; i < Count; i++)
                {
                    string kid = i.ToString();
                    binaryHeader = new byte[10] {
                        (byte)i, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    };

                    headers[i] = header = new JwtHeader
                    {
                        { "alg", "whatever" }
                    };
                    cache.AddHeader(header, SignatureAlgorithm.HS256, JsonEncodedText.Encode(kid), default, binaryHeader);
Ejemplo n.º 29
0
        static void Main()
        {
            // Key sample from https://tools.ietf.org/html/rfc7517#appendix-C
            var rsaKey = RsaJwk.FromBase64Url
                         (
                n: "t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRyO125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0XOC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q",
                e: "AQAB",
                d: "GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfSNkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9UvqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnuToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsurY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2ahecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ",
                p: "2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHfQP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJws",
                q: "1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6Iedis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYKrYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4s",
                dp: "KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1wY52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6c",
                dq: "AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBymXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-ots",
                qi: "lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqqabu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0oYu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8"
                         );

            rsaKey.Kid = JsonEncodedText.Encode("*****@*****.**");
            rsaKey.Use = JwkUseValues.Enc;

            // Generates the password based key
            var sharedPassword = PasswordBasedJwk.FromPassphrase("Thus from my lips, by yours, my sin is purged.", iterationCount: 4096, saltSizeInBytes: 16, computeThumbprint: false);

            // Creates the JWE descriptor for JWK
            // The descriptor sets the 'alg' with value 'PBES2-HS256+A128KW' and 'enc' with value 'A128CBC-HS256'
            var descriptor = new JwkJweDescriptor(sharedPassword, KeyManagementAlgorithm.Pbes2HS256A128KW, EncryptionAlgorithm.A128CbcHS256)
            {
                Payload = rsaKey
            };

            // Generates the UTF-8 string representation of the JWT
            var writer = new JwtWriter();
            var token  = writer.WriteTokenString(descriptor);

            Console.WriteLine("The JWT is:");
            Console.WriteLine(descriptor);
            Console.WriteLine();
            Console.WriteLine("Its compact form is:");
            Console.WriteLine(token);
        }
Ejemplo n.º 30
0
        public Jwk CanonicalizeKey(Jwk key)
        {
            key.Kid = JsonEncodedText.Encode("kid");
            key.Use = JwkUseValues.Sig;
            key.X5c.Add(new byte[0]);
            key.X5t     = Base64Url.Decode("XOf1YEg_zFLX0PtGjiEVvjM1WsA");
            key.X5tS256 = Base64Url.Decode("ZgPMqAT8BELhXwBa2nIT0OvdWtQCiF_g09nAyHhgCe0");
            key.X5u     = "https://example.com/jwks";
            var json             = key.Canonicalize();
            var canonicalizedKey = Jwk.FromJson(Encoding.UTF8.GetString(json));

            Assert.NotNull(canonicalizedKey);

            Assert.True(canonicalizedKey.Alg.EncodedUtf8Bytes.IsEmpty);
            Assert.True(canonicalizedKey.Kid.EncodedUtf8Bytes.IsEmpty);
            Assert.True(canonicalizedKey.Use.EncodedUtf8Bytes.IsEmpty);
            Assert.Empty(canonicalizedKey.X5c);
            Assert.Null(canonicalizedKey.X5t);
            Assert.Null(canonicalizedKey.X5tS256);
            Assert.Null(canonicalizedKey.X5u);

            return(canonicalizedKey);
        }