public CustomUserInfoEndpointValidator(
     IJsonSchemaStore jsonSchemaStore,
     ILogger <CustomUserInfoEndpointValidator> logger)
 {
     _logger = logger;
     _jsonSchemaValidator = jsonSchemaStore.GetSchema(JsonSchema.DelegationMask);
 }
        public void Merge(IJsonSchemaValidator obj)
        {
            var rhs = obj as JsonObjectValidator;

            if (rhs == null)
            {
                throw new ArgumentException();
            }

            foreach (var x in rhs.Properties)
            {
                if (this.Properties.ContainsKey(x.Key))
                {
                    this.Properties[x.Key] = x.Value;
                }
                else
                {
                    this.Properties.Add(x.Key, x.Value);
                }
            }

            foreach (var x in rhs.Required)
            {
                this.Required.Add(x);
            }

            if (rhs.AdditionalProperties != null)
            {
                if (AdditionalProperties != null)
                {
                    throw new NotImplementedException();
                }
                AdditionalProperties = rhs.AdditionalProperties;
            }
        }
 public static void Serialize(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c, T o)
 {
     if (s_serializer == null)
     {
         var        t = typeof(T);
         MethodInfo g = null;
         if (t.IsArray)
         {
             var mi = typeof(JsonArrayValidator).GetMethod("ArraySerializer",
                                                           BindingFlags.Static | BindingFlags.NonPublic);
             g = mi.MakeGenericMethod(t.GetElementType());
         }
         else if (t.GetIsGenericList())
         {
             // ToDo: IList
             var mi = typeof(JsonArrayValidator).GetMethod("ListSerializer",
                                                           BindingFlags.Static | BindingFlags.NonPublic);
             g = mi.MakeGenericMethod(t.GetGenericArguments());
         }
         else
         {
             throw new NotImplementedException();
         }
         var vv       = Expression.Parameter(typeof(IJsonSchemaValidator), "v");
         var ff       = Expression.Parameter(typeof(IFormatter), "f");
         var cc       = Expression.Parameter(typeof(JsonSchemaValidationContext), "c");
         var oo       = Expression.Parameter(typeof(T), "o");
         var call     = Expression.Call(g, vv, ff, cc, oo);
         var compiled = (Action <IJsonSchemaValidator, IFormatter, JsonSchemaValidationContext, T>)Expression.Lambda(call, vv, ff, cc, oo).Compile();
         s_serializer = new Serializer(compiled);
     }
     s_serializer(v, f, c, o);
 }
 public JsonSchemaValidateAttribute(
     JsonSchema jsonSchema,
     IJsonSchemaStore schemaStore,
     ILogger <JsonSchemaValidateAttribute> logger)
 {
     _schema = schemaStore.GetSchema(jsonSchema);
     _logger = logger;
 }
Exemple #5
0
        public static JsonSchema FromType(Type t,
                                          JsonSchemaAttribute a      = null, // field attribute
                                          ItemJsonSchemaAttribute ia = null
                                          )
        {
            if (a == null)
            {
                // get class attribute
                a = t.GetCustomAttributes(typeof(JsonSchemaAttribute), true)
                    .FirstOrDefault() as JsonSchemaAttribute;
            }
            if (a == null)
            {
                a = new JsonSchemaAttribute();
            }

            if (ia == null)
            {
                ia = t.GetCustomAttributes(typeof(ItemJsonSchemaAttribute), true)
                     .FirstOrDefault() as ItemJsonSchemaAttribute;
            }

            IJsonSchemaValidator validator = null;
            bool skipComparison            = a.SkipSchemaComparison;

            if (t == typeof(object))
            {
                skipComparison = true;
            }

            if (a.EnumValues != null)
            {
                validator = JsonEnumValidator.Create(a.EnumValues);
            }
            else if (t.IsEnum)
            {
                validator = JsonEnumValidator.Create(t, a.EnumSerializationType, a.EnumExcludes);
            }
            else
            {
                validator = JsonSchemaValidatorFactory.Create(t, a, ia);
            }

            var schema = new JsonSchema
            {
                Title          = a.Title,
                Description    = a.Description,
                Validator      = validator,
                SkipComparison = skipComparison
            };

            return(schema);
        }
Exemple #6
0
        public void Merge(IJsonSchemaValidator obj)
        {
            var rhs = obj as JsonStringValidator;

            if (rhs == null)
            {
                throw new ArgumentException();
            }

            MaxLength = rhs.MaxLength;
            MinLength = rhs.MinLength;
            Pattern   = rhs.Pattern;
        }
Exemple #7
0
 private static void ListSerializer <U>(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c,
                                        List <U> list)
 {
     f.BeginList(list.Count);
     {
         //int i = 0;
         foreach (var x in list)
         //using (c.Push(i++))
         {
             v.Serialize(f, c, x);
         }
     }
     f.EndList();
 }
Exemple #8
0
 private static void ArraySerializer <U>(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c,
                                         U[] array)
 {
     f.BeginList(array.Length);
     {
         //int i = 0;
         foreach (var x in array)
         //using (c.Push(i++))
         {
             v.Serialize(f, c, x);
         }
     }
     f.EndList();
 }
Exemple #9
0
        public void Merge(IJsonSchemaValidator obj)
        {
            var rhs = obj as JsonIntValidator;

            if (rhs == null)
            {
                throw new ArgumentException();
            }

            MultipleOf       = rhs.MultipleOf;
            Maximum          = rhs.Maximum;
            ExclusiveMaximum = rhs.ExclusiveMaximum;
            Minimum          = rhs.Minimum;
            ExclusiveMinimum = rhs.ExclusiveMinimum;
        }
Exemple #10
0
            public static void Serialize(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c, T o)
            {
                if (s_serializer == null)
                {
                    var        t = typeof(T);
                    MethodInfo g = null;
                    if (t.IsArray)
                    {
                        var mi = typeof(JsonArrayValidator).GetMethod("ArraySerializer",
                                                                      BindingFlags.Static | BindingFlags.NonPublic);
                        g = mi.MakeGenericMethod(t.GetElementType());
                    }
                    else if (t.GetIsGenericList())
                    {
                        // ToDo: IList
                        var mi = typeof(JsonArrayValidator).GetMethod("ListSerializer",
                                                                      BindingFlags.Static | BindingFlags.NonPublic);
                        g = mi.MakeGenericMethod(t.GetGenericArguments());
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }

                    var compiled = (Action <
                                        IJsonSchemaValidator,
                                        IFormatter,
                                        JsonSchemaValidationContext,
                                        T>)
                                   GenericInvokeCallFactory.StaticAction <
                        IJsonSchemaValidator,
                        IFormatter,
                        JsonSchemaValidationContext,
                        T>(g);
                    s_serializer = new Serializer(compiled);
                }

                s_serializer(v, f, c, o);
            }
        public void Assign(IJsonSchemaValidator obj)
        {
            var rhs = obj as JsonObjectValidator;

            if (rhs == null)
            {
                throw new ArgumentException();
            }

            foreach (var x in rhs.Required)
            {
                this.Required.Add(x);
            }

            if (rhs.AdditionalProperties != null)
            {
                if (AdditionalProperties != null)
                {
                    throw new NotImplementedException();
                }
                AdditionalProperties = rhs.AdditionalProperties;
            }
        }
        /// <summary>
        /// Create serializer
        /// </summary>
        /// <param name="jsonSchemaValidator"></param>
        /// <param name="providers"></param>
        public NewtonSoftJsonSerializer(
            IEnumerable <IJsonSerializerConverterProvider> providers = null,
            IJsonSchemaValidator jsonSchemaValidator = null
            )
        {
            // If no json schema validator is provided use default one.
            _jsonSchemaValidator = jsonSchemaValidator ?? new JsonSchemaDotNetSchemaValidator();

            var settings = new JsonSerializerSettings();

            if (providers != null)
            {
                foreach (var provider in providers)
                {
                    settings.Converters.AddRange(provider.GetConverters());
                }
            }
            settings.ContractResolver = new DefaultContractResolver {
                NamingStrategy = new CamelCaseDictionaryKeys()
            };
            settings.Converters.Add(new JsonVariantConverter(this));
            settings.Converters.Add(new StringEnumConverter {
                AllowIntegerValues = true,
                NamingStrategy     = new CamelCaseNamingStrategy()
            });
            settings.FloatFormatHandling   = FloatFormatHandling.String;
            settings.FloatParseHandling    = FloatParseHandling.Double;
            settings.DateParseHandling     = DateParseHandling.DateTime;
            settings.DateTimeZoneHandling  = DateTimeZoneHandling.Utc;
            settings.DateFormatHandling    = DateFormatHandling.IsoDateFormat;
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Error;
            if (settings.MaxDepth > 64)
            {
                settings.MaxDepth = 64;
            }
            Settings = settings;
        }
        public static JsonSchema FromType(Type t,
                                          BaseJsonSchemaAttribute a  = null, // field attribute
                                          ItemJsonSchemaAttribute ia = null
                                          )
        {
            // class attribute
            var aa = t.GetCustomAttributes(typeof(JsonSchemaAttribute), true)
                     .FirstOrDefault() as JsonSchemaAttribute;

            if (a != null)
            {
                a.Merge(aa);
            }
            else
            {
                if (aa == null)
                {
                    a = new JsonSchemaAttribute();
                }
                else
                {
                    a = aa;
                }
            }

            if (ia == null)
            {
                ia = t.GetCustomAttributes(typeof(ItemJsonSchemaAttribute), true)
                     .FirstOrDefault() as ItemJsonSchemaAttribute;
            }

            IJsonSchemaValidator validator = null;
            var skipComparison             = a.SkipSchemaComparison;

            if (t == typeof(object))
            {
                skipComparison = true;
            }

            if (a.EnumValues != null)
            {
                try
                {
                    validator = JsonEnumValidator.Create(a.EnumValues, a.EnumSerializationType);
                }
                catch (Exception)
                {
                    throw new Exception(String.Join(", ", a.EnumValues.Select(x => x.ToString()).ToArray()));
                }
            }
            else if (t.IsEnum)
            {
                validator = JsonEnumValidator.Create(t, a.EnumSerializationType, a.EnumExcludes);
            }
            else
            {
                validator = JsonSchemaValidatorFactory.Create(t, a, ia);
            }

            var schema = new JsonSchema
            {
                Title                       = a.Title,
                Description                 = a.Description,
                Validator                   = validator,
                SkipComparison              = skipComparison,
                ExplicitIgnorableValue      = a.ExplicitIgnorableValue,
                ExplicitIgnorableItemLength = a.ExplicitIgnorableItemLength,
            };

            return(schema);
        }
Exemple #14
0
 public void Assign(IJsonSchemaValidator obj)
 {
     throw new NotImplementedException();
 }
Exemple #15
0
 public void Merge(IJsonSchemaValidator rhs)
 {
     throw new NotImplementedException();
 }