Пример #1
0
        public static RequestAttributeCollection ToRequestAttributeCollection(this Entity entity)
        {
            var result = new RequestAttributeCollection();
            result.AddRange(entity.Attributes.Select(attribute => new RequestAttribute(attribute.Key, attribute.Value)));

            return result;
        }
Пример #2
0
 public RequestAttributeCollection FetchAll()
 {
     var coll = new RequestAttributeCollection();
     var qry = new Query(RequestAttribute.Schema);
     coll.LoadAndCloseReader(qry.ExecuteReader());
     return coll;
 }
Пример #3
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
            JsonSerializer serializer)
        {
            if (objectType != typeof (RequestAttributeCollection))
            {
                return serializer.Deserialize(reader);
            }

            var request = new RequestAttributeCollection();
            var key = string.Empty;
            object value = null;
            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                    case JsonToken.StartObject:
                    {
                        continue;
                    }
                    case JsonToken.PropertyName:
                    {
                        if (!String.IsNullOrEmpty(key) && value != null)
                        {
                            request.Add(new RequestAttribute
                            {
                                Key = key,
                                Value = value
                            });
                            value = null;
                        }

                        key = reader.Value.ToString();
                        break;
                    }
                    case JsonToken.StartArray:
                    case JsonToken.EndArray:
                    {
                        value = serializer.Deserialize<JArray>(reader);
                        break;
                    }
                    case JsonToken.Integer:
                    case JsonToken.Boolean:
                    case JsonToken.Date:
                    case JsonToken.Float:
                    case JsonToken.String:
                    case JsonToken.Undefined:
                    {
                        value = reader.Value;
                        break;
                    }
                }
            }
            request.Add(new RequestAttribute
            {
                Key = key,
                Value = value
            });
            return request;
        }
Пример #4
0
        public CheckResult CheckRequest(string entityType, string operation, RequestAttributeCollection attributes)
        {
            var message = Empty;
            // If operation is not allowed for this entity.
            if (_jConfig[entityType] == null || _jConfig[entityType][operation] == null)
            {
                message = $"Operation {operation} is now alowed for entity {entityType}";
                if (Throw) throw new InvalidRequestException(message);
                return new CheckResult(CheckResult.CheckStatus.Invalid, message);
            }
            // Convert config entry to dictionary of required and optional fields.
            var fields = (_jConfig[entityType][operation]).ToObject<Dictionary<string, JArray>>();

            // Processing required section//Check if request contains required fields.
            var keys = attributes.Keys;
            var allFields = fields["required"].ToObject<string[]>();
            var diff = allFields.Where(f => !keys.Contains(f)).ToList();

            // Missing fields
            if (diff.Any())
            {
                // Generate mesage with missing keys.
                message = $"Fields [{Join(", ", diff)}] are missing";
                if (Throw) throw new InvalidRequestException(message);
                return new CheckResult(CheckResult.CheckStatus.Invalid, message);
            }

            // Processing required-or section.
            // Check if request fields have required or fields.
            if (fields.ContainsKey("required-or"))
            {
                var orFields = fields["required-or"].ToObject<string[][]>();
                foreach (var orField in orFields)
                {
                    if (!orField.Intersect(keys).Any())
                    {
                        message = $"Fields [{Join(", ", orField)}] are required";
                        if (Throw) throw new InvalidRequestException(message);
                        return new CheckResult(CheckResult.CheckStatus.Invalid, message);
                    }

                    allFields = allFields.Concat(orField).ToArray();
                }
            }

            // Processing optional section.
            if (fields.ContainsKey("optional"))
            {
                // Add optional fields to all fields.
                allFields = allFields.Concat(fields["optional"].ToObject<string[]>()).ToArray();
            }

            // Check if request does not contain extra fields.
            var extra = keys.Where(k => !allFields.Contains(k)).ToArray();
            // ReSharper disable once InvertIf
            if (extra.Any())
            {
                message = $"Fields [{Join(", ", extra)}] is not allowed";
                if (Throw) throw new InvalidRequestException(message);
                return new CheckResult(CheckResult.CheckStatus.Valid, message);
            }

            return new CheckResult(CheckResult.CheckStatus.Valid, message);
        }
Пример #5
0
 public RequestAttributeCollection FetchByQuery(Query qry)
 {
     var coll = new RequestAttributeCollection();
     coll.LoadAndCloseReader(qry.ExecuteReader());
     return coll;
 }
Пример #6
0
 public RequestAttributeCollection FetchByID(object Guid)
 {
     RequestAttributeCollection coll = new RequestAttributeCollection().Where("GUID", Guid).Load();
     return coll;
 }