/// <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);
/// <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]); } }
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); }
/// <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));
/// <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));
/// <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; }
/// <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));
/// <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);
private JwtDescriptorBuilder AddHeader(ReadOnlySpan <byte> utf8Name, JwtArray value) { _header.Add(new JwtProperty(utf8Name, value)); return(this); }