Пример #1
0
        /// <summary>
        /// Use the <paramref name="reader"/> as JSON input and returns a <see cref="JwtArray"/>.
        /// </summary>
        /// <param name="reader"></param>
        public static JwtArray ReadJsonArray(ref Utf8JsonReader reader)
        {
            var array = new JwtArray(new List <JwtValue>(2));

            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                case JsonTokenType.EndArray:
                    return(array);

                case JsonTokenType.StartObject:
                    array.Add(ReadJsonObject(ref reader));
                    break;

                case JsonTokenType.StartArray:
                    var innerArray = ReadJsonArray(ref reader);
                    array.Add(innerArray);
                    break;

                case JsonTokenType.Null:
                    array.Add(JwtValue.Null);
                    break;

                case JsonTokenType.Number:
                    if (reader.TryGetInt64(out long longValue))
                    {
                        array.Add(longValue);
                    }
                    else
                    {
                        array.Add(reader.GetDouble());
                    }

                    break;

                case JsonTokenType.String:
                    string valueString = reader.GetString();
                    array.Add(valueString);
                    break;

                case JsonTokenType.True:
                    array.Add(JwtValue.True);
                    break;

                case JsonTokenType.False:
                    array.Add(JwtValue.False);
                    break;

                case JsonTokenType.EndObject:
                case JsonTokenType.PropertyName:
                default:
                    break;
                }
            }

            // If we are here, we are missing a closing brace.
            ThrowHelper.ThrowFormatException_MalformedJson();
            return(default);
Пример #2
0
        /// <summary>
        /// Merge the <paramref name="other"/> into this <see cref="JwtArray"/>.
        /// </summary>
        /// <param name="other"></param>
        public void Merge(JwtArray other)
        {
            var srcProperties = other._inner;
            var dstProperties = _inner;

            for (int i = 0; i < srcProperties.Count; i++)
            {
                dstProperties.Add(srcProperties[i]);
            }
        }
Пример #3
0
        private JwtDescriptorBuilder AddClaim(ReadOnlySpan <byte> utf8Name, JwtArray value)
        {
            if (_jsonPayload == null)
            {
                _jsonPayload = new JwtObject();
            }

            if (_jsonPayload.TryGetValue(utf8Name, out var property))
            {
                if (property.Type != JwtTokenType.Array)
                {
                    ThrowHelper.ThrowJwtDescriptorException_ClaimMustBeOfType(utf8Name, JwtTokenType.Array);
                }

                ((JwtArray)property.Value !).Merge(value);
            }
            else
            {
                property = new JwtProperty(utf8Name, value);
                _jsonPayload.Add(property);
            }

            return(this);
        }
Пример #4
0
 /// <summary>
 /// Adds a <see cref="JwtArray"/> property to the end of the <see cref="JwtObject"/>.
 /// </summary>
 /// <param name="name"></param>
 /// <param name="value"></param>
 public void Add(string name, JwtArray value) => Add(new JwtProperty(name, value));
Пример #5
0
 /// <summary>
 /// Adds a <see cref="JwtArray"/> property to the end of the <see cref="JwtObject"/>.
 /// </summary>
 /// <param name="name"></param>
 /// <param name="value"></param>
 public void Add(ReadOnlySpan <byte> name, JwtArray value) => Add(new JwtProperty(name, value));
Пример #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JwtValue"/> class.
 /// </summary>
 /// <param name="value"></param>
 public JwtValue(JwtArray value)
 {
     Type  = JwtTokenType.Array;
     Value = value;
 }
Пример #7
0
 /// <summary>
 /// Adds an <see cref="JwtArray"/> to the end of the <see cref="JwtArray"/>.
 /// </summary>
 /// <param name="value"></param>
 public void Add(JwtArray value) => _inner.Add(new JwtValue(value));
Пример #8
0
 /// <summary>
 /// Adds a header parameter.
 /// </summary>
 /// <param name="name"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public JwtDescriptorBuilder AddHeader(string name, JwtArray value)
 => AddHeader(Utf8.GetBytes(name), value);
Пример #9
0
 private JwtDescriptorBuilder AddHeader(ReadOnlySpan <byte> utf8Name, JwtArray value)
 {
     _header.Add(new JwtProperty(utf8Name, value));
     return(this);
 }