Exemplo n.º 1
0
 public WSRecordJsonConverter(WSParamList _XParams, WSRequest _Request, ClientFunctions _CFunc, WSDataContext _DBContext, params Type[] _types)
 {
     XParams   = _XParams;
     Request   = _Request;
     CFunc     = _CFunc;
     DBContext = _DBContext;
     types     = _types;
 }
Exemplo n.º 2
0
 public bool apply(WSRequest Request, MetaFunctions CFunc)
 {
     if (applied == null)
     {
         applied = false; applied = applyInternal(Request, CFunc);
     }
     return((bool)applied);
 }
Exemplo n.º 3
0
        private bool MatchFields(WSRequest request, MetaFunctions cFunc, WSEntitySchema eSchema)
        {
            bool match = true;

            try
            {
            }
            catch (Exception) { }
            return(match);
        }
Exemplo n.º 4
0
        private bool MatchFilters(WSRequest request, MetaFunctions cFunc, WSEntitySchema eSchema)
        {
            bool match = true;

            try
            {
                //eSchema.Filters.Match(this);
            }
            catch (Exception) { }
            return(match);
        }
Exemplo n.º 5
0
        public WSClientMeta(HttpContext _context)
        {
            Request = new WSRequest(_context, SecurityMap, ClientFunctions);

            preloadStaticSources();

            if (ReloadRAMRequired)
            {
                reloadCoreSources();
            }
        }
Exemplo n.º 6
0
        public WSFilter GetMainFilter(WSRequest Request, Expression _EntityExpression, int _level)
        {
            WSCombineFilter mainFilter = new WSCombineFilter(WSCombineFilter.SQLMode.AndAlso);

            WSFilter BaseFilter = GetBaseFilter(Request, _EntityExpression, _level);
            if (BaseFilter != null && BaseFilter.IsValid) { mainFilter.Save(BaseFilter); }

            WSFilter CustomFilter = GetCustomFilter(_EntityExpression, _level);
            if (CustomFilter != null && CustomFilter.IsValid) { mainFilter.Save(CustomFilter); }

            return mainFilter != null && mainFilter.IsValid ? mainFilter.Reduce() : null;
        }
Exemplo n.º 7
0
 internal override bool applyInternal(WSRequest Request, MetaFunctions CFunc)
 {
     try
     {
         foreach (WSJProperty prop in Value)
         {
             prop.apply(Request, CFunc);
         }
         return(true);
     } catch (Exception e) { WSStatus status = WSStatus.NONE.clone(); CFunc.RegError(GetType(), e, ref status); }
     return(false);
 }
Exemplo n.º 8
0
        public override bool Match(WSRequest Request, WSDataContext DBContext, MetaFunctions CFunc, WSSchema schema)
        {
            bool ok = false;

            try
            {
                WSEntitySchema eSchema = null;
                if (schema is WSEntitySchema)
                {
                    eSchema = (WSEntitySchema)schema;
                }
                else if (schema is WSEntityListSchema)
                {
                    eSchema = ((WSEntityListSchema)schema).EntitySchema;
                }

                if (eSchema != null)
                {
                    bool baseFilterMatch = true;
                    if (eSchema.Source.BaseFilter != null && eSchema.Source.BaseFilter.IsValid && eSchema.Source.BaseFilter.apply(Request, CFunc))
                    {
                        baseFilterMatch = eSchema.Source.BaseFilter.MatchEntity(CFunc, this, ((WSTableSource)CFunc.GetSourceByType(GetType())));
                    }

                    bool dynamicFilterMatch = true;
                    if (eSchema.Fields != null || eSchema.Fields != null)
                    {
                        dynamicFilterMatch = MatchFields(Request, CFunc, eSchema) && MatchFilters(Request, CFunc, eSchema);
                    }

                    ok = baseFilterMatch && dynamicFilterMatch;
                }
            }
            catch (Exception e) {
                if (Request != null)
                {
                    CFunc.RegError(GetType(), e, ref Request.status, $"Match():434");
                }
                else
                {
                    WSStatus status = WSStatus.NONE.clone(); CFunc.RegError(GetType(), e, ref status, $"Match():435");
                }
            }
            return(ok);
        }
Exemplo n.º 9
0
        internal override bool applyInternal(WSRequest Request, MetaFunctions CFunc)
        {
            try {
                if (Value.StartsWith("$") || (Value.StartsWith("[") && Value.EndsWith("]")))
                {
                    string temp = Value.Trim(new char[] { '[', ']' }).TrimStart(new char[] { '$' });

                    if (!string.IsNullOrEmpty(temp))
                    {
                        if (WSConstants.COMMAND_VALUES.Items.Any(v => v.Match(temp)))
                        {
                            if (WSConstants.COMMAND_VALUES.USER_ID.Match(temp))
                            {
                                Value = Request.Security.AuthToken.User.id.ToString();
                            }
                            else
                            {
                                if (WSConstants.COMMAND_VALUES.SQL_COMMAND_VALUE_GETDATE.Match(temp))
                                {
                                    DateTime d = Request.DBContext.GetSystemDate();
                                    Value = d.ToString(WSConstants.DATE_FORMAT);
                                }
                                else if (WSConstants.COMMAND_VALUES.SQL_COMMAND_VALUE_GETTIME.Match(temp))
                                {
                                    DateTime d = Request.DBContext.GetSystemDate();
                                    Value = new TimeSpan(0, d.Hour, d.Minute, d.Second, d.Millisecond).ToString(WSConstants.DATE_FORMAT);
                                }
                            }
                        }
                        else if (WSConstants.COMMAND_KEYS.Items.Any(v => v.Match(temp)))
                        {
                            if (WSConstants.COMMAND_KEYS.SHARED_KEY.Match(temp))
                            {
                                Value = Request.SOURCE.GetXParam(temp).ReadValue(Request.INPUT).ToString();
                            }
                        }
                    }
                }
                return(true);
            } catch (Exception e) { CFunc.RegError(GetType(), e, ref Request.status); }
            return(false);
        }
Exemplo n.º 10
0
        private WSStatus WriteJProperty(object obj, WSParam xParam, JsonWriter writer, JsonSerializer serializer, WSSchema schema, WSSource xSource, WSParamList outFields, List <Type> printedTypes, WSRequest Request, MetaFunctions CFunc, WSDataContext DBContext)
        {
            WSStatus status = WSStatus.NONE_Copy();

            try
            {
                if (Validate(obj, xParam, writer, serializer, schema, xSource, outFields, ref status, Request, CFunc))
                {
                    if (obj == null)
                    {
                        WritePropName(writer, ((schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME), true, PrintMode.ValueCell);
                        serializer.Serialize(writer, obj);
                    }
                    else if (obj is WSStatus || obj is WSStatus_JSON)
                    {
                        #region PRINT WSStatus
                        WSStatus_JSON json = obj is WSStatus_JSON ? (WSStatus_JSON)obj : ((WSStatus)obj).GetJson();
                        if (json != null)
                        {
                            WritePropName(writer, ((schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME), true, PrintMode.TableHeader);
                            serializer.Serialize(writer, json);
                        }
                        #endregion
                    }
                    else if (obj.GetType().IsSimple())
                    {
                        #region PRINT PRIMITIVE FIELD

                        if (obj is DateTime)
                        {
                            obj = ((DateTime)obj).ToString(WSConstants.DATE_FORMAT);
                        }
                        else if (obj is TimeSpan)
                        {
                            obj = ((TimeSpan)obj).ToString(WSConstants.TIMESPAN_FORMAT_SIMPLE);
                        }

                        WritePropName(writer, (schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME);
                        object _obj = null;
                        serializer.Serialize(writer, xParam.TryReadPrimitiveWithDefault(obj, string.Empty, out _obj) ? _obj : string.Empty);

                        #endregion
                    }
                    else if (obj.GetType().IsSimpleCollection())
                    {
                        #region PRINT PRIMITIVE COLLECTION
                        string key = (schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME;
                        status.AddNote("ready to searialize primitive fields (" + key + ")");

                        WritePropName(writer, key);
                        serializer.Serialize(writer, obj);

                        #endregion
                    }
                    else if (obj is WSRecord)
                    {
                        #region PRINT WSRecord

                        string pKey = (schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME;
                        WritePropName(writer, pKey);
                        ((WSRecord)obj).WriteJson(writer, serializer, printedTypes, Request, CFunc, DBContext);

                        #endregion
                    }
                    else if (obj.IsCollectionOf <WSRecord>())
                    {
                        #region PRINT WSRecord Collection

                        string pKey = (schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME;

                        WritePropName(writer, pKey);
                        writer.WriteStartArray();

                        IList list = obj as IList;
                        foreach (WSRecord record in list)
                        {
                            if (record != null)
                            {
                                record.WriteJson(writer, serializer, printedTypes, Request, CFunc, DBContext);
                            }
                        }

                        writer.WriteEndArray();
                        #endregion
                    }
                    else
                    {
                        #region PRINT ENTITY

                        bool printAllowed =
                            (this is WSStaticEntity)
                            ||
                            (
                                schema is WSEntityBaseSchema
                                &&
                                validateType(writer, xParam, obj, printedTypes, true, Request, CFunc)
                            );

                        if (printAllowed)
                        {
                            string pKey = (schema != null && !string.IsNullOrEmpty(schema.Name)) ? schema.Name : xParam.NAME;
                            WritePropName(writer, pKey, false);

                            #region PRINT WSEntity
                            if (obj is WSEntity)
                            {
                                if (obj is WSDynamicEntity && !((WSDynamicEntity)obj).Match(Request, DBContext, CFunc, schema))
                                {
                                    serializer.Serialize(writer, "NULL");
                                }
                                else
                                {
                                    ((WSEntity)obj).WriteJson(writer, serializer, schema, outFields, printedTypes, Request, CFunc, DBContext);
                                }
                            }
                            #endregion

                            #region PRINT Collection
                            else if (obj.IsCollectionOf <WSEntity>())
                            {
                                IList list  = obj as IList;
                                Type  eType = list.GetEntityType();

                                writer.WriteStartArray();
                                foreach (WSEntity entity in list)
                                {
                                    if (entity != null)
                                    {
                                        if (entity is WSDynamicEntity)
                                        {
                                            WSDynamicEntity dEntity = (WSDynamicEntity)entity;
                                            if (dEntity.Match(Request, DBContext, CFunc, schema))
                                            {
                                                entity.WriteJson(writer, serializer, schema, outFields, printedTypes, Request, CFunc, DBContext);
                                            }
                                        }
                                        else
                                        {
                                            entity.WriteJson(writer, serializer, schema, outFields, printedTypes, Request, CFunc, DBContext);
                                        }
                                    }
                                }
                                writer.WriteEndArray();
                            }
                            #endregion
                        }

                        #endregion
                    }
                    status.AddNote("done", WSConstants.ACCESS_LEVEL.READ);
                }
            }
            catch (Exception e)
            {
                status.CODE = WSStatus.ERROR.CODE;
                status.AddNote("Error(line" + e.LineNumber() + "- " + e.Message + ")");
                CFunc.RegError(GetType(), e, ref status);
            }
            return(status);
        }
Exemplo n.º 11
0
 internal abstract bool applyInternal(WSRequest request, MetaFunctions CFunc);
Exemplo n.º 12
0
        public WSStatus WriteJson(JsonWriter writer, JsonSerializer serializer, List <Type> printedTypes, WSRequest Request, MetaFunctions CFunc, WSDataContext DBContext)
        {
            WSStatus status = WSStatus.NONE_Copy();

            try
            {
                if (entity == null)
                {
                    status.CODE = WSStatus.ERROR.CODE;
                    status.AddNote("WSEntity not known", WSConstants.ACCESS_LEVEL.READ);
                }
                else
                {
                    List <Type> postPrintedTypes = printedTypes.Select(x => x).ToList();
                    postPrintedTypes.Add(entity.GetType());

                    if (entity != null)
                    {
                        status.childs.Add(entity.WriteJson(writer, serializer, schema, outFields, postPrintedTypes, Request, CFunc, DBContext));
                    }
                }
            }
            catch (Exception e) {
                CFunc.RegError(GetType(), e, ref status);
                status.CODE = WSStatus.ERROR.CODE;
                status.AddNote("Error(line" + e.LineNumber() + "- " + e.Message + ")");
            }
            return(status);
        }
Exemplo n.º 13
0
 public override WSFilter GetBaseFilter(WSRequest Request, Expression _member, int _level, WSJson BaseFilter = null)
 {
     return(null);
 }
Exemplo n.º 14
0
        public WSStatus WriteJson(JsonWriter writer, JsonSerializer serializer, WSSchema schema, WSParamList outFields, List <Type> printedTypes, WSRequest Request, MetaFunctions CFunc, WSDataContext DBContext)
        {
            WSStatus status = WSStatus.NONE_Copy();

            WSEntitySchema eSchema = null;
            WSSource       xSource = CFunc.GetSourceByType(GetType());

            if (schema != null && schema is WSEntityBaseSchema)
            {
                if (schema is WSEntitySchema)
                {
                    eSchema = (WSEntitySchema)schema;
                }
                else if (schema is WSEntityListSchema)
                {
                    eSchema = ((WSEntityListSchema)schema).EntitySchema;
                }
            }

            if (eSchema == null && this is WSDynamicEntity)
            {
                if (xSource != null && xSource is WSTableSource && ((WSTableSource)xSource).BaseSchema != null)
                {
                    eSchema = ((WSTableSource)xSource).BaseSchema;
                }
            }

            #region Read if in 'COLLAPSED' mode
            bool collapsedMode = false;
            if (eSchema != null)
            {
                IEnumerable <WSJObject>  _JOptions = eSchema.IOBaseOptions.Value.OfType <WSJObject>();
                Func <WSJProperty, bool> func      = v => WSConstants.ALIACES.OPTION_COLLECT.Match(v.Key);
                WSJObject takeJOption = _JOptions.FirstOrDefault(x => x.Value.Any(func));
                if (takeJOption != null && takeJOption.IsValid)
                {
                    collapsedMode = true;
                    status.childs.Add(WriteCollapsedValues(writer, serializer, this, xSource, takeJOption.Value.FirstOrDefault(func).Value, Request, CFunc));
                }
            }
            #endregion

            if (!collapsedMode)
            {
                writer.WriteStartObject();
                if (this is WSStaticEntity || (eSchema != null && eSchema.Fields.Any()))
                {
                    List <Type> postPrintedTypes = printedTypes.Select(x => x).ToList();
                    if (!postPrintedTypes.Any(x => x == GetType()))
                    {
                        postPrintedTypes.Add(GetType());
                    }
                    status.childs.Add(
                        WriteJMembers(
                            GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance).Where(m => m is PropertyInfo || m is FieldInfo),
                            writer,
                            serializer,
                            eSchema,
                            xSource,
                            outFields,
                            printedTypes,
                            Request,
                            CFunc,
                            DBContext
                            )
                        );
                }
                writer.WriteEndObject();
            }
            return(status);
        }
Exemplo n.º 15
0
 public virtual bool Match(WSRequest Request, WSDataContext DBContext, MetaFunctions CFunc, WSSchema schema)
 {
     return(true);
 }
Exemplo n.º 16
0
        private bool validateType(JsonWriter writer, WSParam xParam, object obj, List <Type> printedTypes, bool ignoreCurcularity, WSRequest Request, MetaFunctions CFunc)
        {
            bool isValid = false;

            if (obj != null && Request.Security != null && Request.Security.IsValid && xParam != null)
            {
                byte          uRole            = Request.Security.IsLogged ? Request.Security.AuthToken.User.role : WSConstants.ACCESS_LEVEL.READ;
                int           paramAccessLevel = xParam.READ_ACCESS_MODE.ACCESS_LEVEL;
                WSTableSource xSource          = (WSTableSource)CFunc.GetSourceByType(obj.GetType());
                paramAccessLevel = (xSource != null && xSource.AccessLevel > paramAccessLevel) ? xSource.AccessLevel : paramAccessLevel;

                bool showCycledTypesMessage = uRole >= WSConstants.ACCESS_LEVEL.ADMIN && xSource != null && xSource.ShowMessageInaccessible;

                Type entityType = null;

                if (obj.IsCollection())
                {
                    if (obj.IsCollectionOf <WSEntity>())
                    {
                        entityType = (obj as IList).GetEntityType();
                    }
                    else if (obj.IsCollectionOf <WSRecord>() && (obj as IList).Count > 0)
                    {
                        entityType = ((WSRecord)(obj as IList)[0]).entity.GetType();
                    }
                }
                else if (obj is WSRecord)
                {
                    entityType = ((WSRecord)obj).entity.GetType();
                }
                else if (obj is WSEntity)
                {
                    entityType = obj.GetType();
                }

                bool Ignore = ignoreCurcularity ? false : (printedTypes != null && printedTypes.Any(t => t == entityType));
                if (Ignore)
                {
                    if (showCycledTypesMessage)
                    {
                        WritePropName(writer, xParam.NAME);
                        writer.WriteValue("[unavailable : cycled references detected]");
                    }
                }
                else
                {
                    if (entityType.IsValidDynamicEntity())
                    {
                        WSSource src = CFunc.GetSourceByType(entityType);
                        isValid = src != null && uRole >= src.AccessLevel;
                    }
                    else
                    {
                        isValid = true;
                    }
                }
            }
            return(isValid);
        }
Exemplo n.º 17
0
        public override WSFilter GetBaseFilter(WSRequest Request, Expression _member, int _level, WSJson _BaseFilter = null)
        {
            WSJson          BaseFilter = _BaseFilter == null ? Source.BaseFilter : _BaseFilter;
            WSCombineFilter filter     = new WSCombineFilter(WSCombineFilter.SQLMode.AndAlso);

            if (filter != null && BaseFilter != null && BaseFilter.IsValid)
            {
                Expression member = null;
                filter = BaseFilter is WSJArray ? new WSCombineFilter(WSCombineFilter.SQLMode.OrElse) : filter;

                BaseFilter.apply(Request, Func);

                if (BaseFilter != null && BaseFilter.IsValid)
                {
                    if (_member.Type == Source.ReturnType)
                    {
                        member = _member;
                    }
                    else if (Parent != null)
                    {
                        WSTableParam paramExt = (WSTableParam)Parent.Source.GetXParam(Name);
                        if (paramExt != null)
                        {
                            member = Expression.Property(_member, paramExt.WSColumnRef.NAME);
                        }
                    }

                    if (member != null)
                    {
                        if (BaseFilter is WSJValue)
                        {
                            if (((WSJValue)BaseFilter).Value.IsTrue() || ((WSJValue)BaseFilter).Value.IsFalse())
                            {
                                WSFilter subFilter = ((WSJValue)BaseFilter).GetOptionFilter(Func, member, _level);
                                if (subFilter != null)
                                {
                                    filter.Add(subFilter);
                                }
                            }
                        }
                        else if (BaseFilter is WSJObject)
                        {
                            foreach (WSJProperty item in ((WSJObject)BaseFilter).Value)
                            {
                                bool replace = true;
                                List <WSMemberSchema> _schemas = readFieldSchema(item, out replace);
                                if (_schemas.Any())
                                {
                                    foreach (WSMemberSchema _schema in _schemas)
                                    {
                                        WSFilter subFilter = _schema.GetCustomFilter(member, _level);
                                        if (subFilter != null)
                                        {
                                            filter.Add(subFilter);
                                        }
                                    }
                                }
                            }
                        }
                        else if (BaseFilter is WSJArray)
                        {
                            foreach (WSJson item in ((WSJArray)BaseFilter).Value)
                            {
                                bool replace = true;
                                List <WSMemberSchema> _schemas = readFieldSchema(item, out replace);
                                if (_schemas.Any())
                                {
                                    foreach (WSMemberSchema _schema in _schemas)
                                    {
                                        WSFilter subFilter = _schema.GetCustomFilter(member, _level);
                                        if (subFilter != null)
                                        {
                                            filter.Add(subFilter);
                                        }
                                    }
                                }
                                else if (item is WSJValue && (((WSJValue)item).Value.IsTrue() || ((WSJValue)item).Value.IsFalse()))
                                {
                                    WSFilter subFilter = ((WSJValue)item).GetOptionFilter(Func, member, _level);
                                    if (subFilter != null)
                                    {
                                        filter.Add(subFilter);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            WSFilter result = filter != null && filter.IsValid ? filter.Reduce() : null;

            return(result);
        }
Exemplo n.º 18
0
 public abstract WSFilter GetBaseFilter(WSRequest Request, Expression _member, int _level, WSJson BaseFilter = null);
Exemplo n.º 19
0
        private bool Validate(object obj, WSParam xParam, JsonWriter writer, JsonSerializer serializer, WSSchema schema, WSSource xSource, WSParamList outFields, ref WSStatus status, WSRequest Request, MetaFunctions CFunc)
        {
            try
            {
                if (this is WSDynamicEntity && schema == null)
                {
                    status.CODE = WSStatus.ERROR.CODE; status.AddNote("No schema defined", WSConstants.ACCESS_LEVEL.READ);
                }
                else if (xParam == null)
                {
                    status.CODE = WSStatus.ERROR.CODE; status.AddNote("Undefined parameters are not allowed", WSConstants.ACCESS_LEVEL.READ);
                }
                else
                {
                    bool IsOwner          = false;//TODO@ANDVO:2015-09-11 : ADD IsOwner validation check
                    int  paramAccessLevel = xParam.READ_ACCESS_MODE.ACCESS_LEVEL;
                    paramAccessLevel = (xSource != null && xSource.AccessLevel > paramAccessLevel) ? xSource.AccessLevel : paramAccessLevel;

                    if (Request.Security.AuthToken.User.role < paramAccessLevel && !IsOwner)
                    {
                        #region ACCESS DENIED HANDLING
                        if (xSource != null && xSource.ShowMessageInaccessible)
                        {
                            string accessNote = "Access denied";
                            status.CODE = WSStatus.ATTANTION.CODE;
                            status.AddNote(accessNote, WSConstants.ACCESS_LEVEL.READ);
                            WritePropName(writer, xParam.NAME);
                            serializer.Serialize(writer, accessNote);
                        }
                        #endregion
                    }
                    else
                    {
                        if (!WSParamList.IsEmpty(outFields) && !outFields.Any(a => a.Match(schema.Name)))
                        {
                        }
                        else
                        {
                            if (obj == null && !xParam.SkipEmpty)
                            {
                                obj         = string.Empty;
                                status.CODE = WSStatus.ATTANTION.CODE;
                                status.AddNote("Can not write NULL to [" + xParam.DISPLAY_NAME + "]. Value set to empty string.", WSConstants.ACCESS_LEVEL.READ);
                            }

                            if (obj != null)
                            {
                                status.AddNote("done", WSConstants.ACCESS_LEVEL.READ);
                                return(true);
                            }
                        }
                    }
                }
            }
            catch (Exception e) {
                status.CODE = WSStatus.ERROR.CODE; status.AddNote("Error(line" + e.LineNumber() + "- " + e.Message + ")");
                CFunc.RegError(GetType(), e, ref status);
            }
            return(false);
        }
Exemplo n.º 20
0
        private WSStatus WriteJMembers(IEnumerable <MemberInfo> members, JsonWriter writer, JsonSerializer serializer, WSEntitySchema eSchema, WSSource xSource, WSParamList outFields, List <Type> printedTypes, WSRequest Request, MetaFunctions CFunc, WSDataContext DBContext)
        {
            WSStatus status = WSStatus.NONE_Copy();

            try
            {
                Type    eType = GetType();
                object  obj   = null;
                WSParam param = null;
                if (this is WSDynamicEntity)
                {
                    foreach (WSSchema fieldSchema in eSchema.Fields /*.Items*/)
                    {
                        if (fieldSchema is WSFieldSchema)
                        {
                            param = ((WSFieldSchema)fieldSchema).param;
                        }
                        else if (fieldSchema is WSEntityBaseSchema)
                        {
                            param = GetParam(xSource, fieldSchema.Name);
                        }
                        //else if (childSchema is WSEntitySchema) { param = GetParam(childSchema.Name); }
                        //else if (childSchema is WSEntityListSchema) { param = GetParam(((WSEntityListSchema)childSchema).EntitySchema.Name); }

                        MemberInfo member = param == null ? null : members.FirstOrDefault(p => param.Match(p.Name, null, null, false));
                        obj = member == null ? null : member is PropertyInfo ? ((PropertyInfo)member).GetValue(this, null) : member is FieldInfo ? ((FieldInfo)member).GetValue(this) : null;

                        if (param != null)
                        {
                            status.childs.Add(WriteJProperty(obj, param, writer, serializer, fieldSchema, xSource, outFields, printedTypes, Request, CFunc, DBContext));
                        }
                    }
                }
                else if (this is WSStaticEntity)
                {
                    foreach (MemberInfo member in members)
                    {
                        param = GetParam(xSource, member.Name, member.ReflectedType);
                        obj   = member is PropertyInfo ? ((PropertyInfo)member).GetValue(this, null) : member is FieldInfo ? ((FieldInfo)member).GetValue(this) : null;

                        if (param != null)
                        {
                            status.childs.Add(WriteJProperty(obj, param, writer, serializer, null, xSource, outFields, printedTypes, Request, CFunc, DBContext));
                        }
                    }
                }

                status.AddNote("done", WSConstants.ACCESS_LEVEL.READ);
            }
            catch (Exception e)
            {
                status.CODE = WSStatus.ERROR.CODE;
                status.AddNote("Error(line" + e.LineNumber() + "- " + e.Message + ")");
                CFunc.RegError(GetType(), e, ref status);
            }
            return(status);
        }
Exemplo n.º 21
0
        internal override bool applyInternal(WSRequest Request, MetaFunctions CFunc)
        {
            try
            {
                if (Value != null && Value.IsValid)
                {
                    if (Value is WSJObject)
                    {
                        Func <WSJProperty, bool> READFunc = v => v.Key.StartsWith("$") && WSConstants.COMMAND_KEYS.READ.Match(v.Key.TrimStart(new char[] { '$' }));

                        WSJProperty READProperty = ((WSJObject)Value).Value.FirstOrDefault(READFunc);

                        if (READProperty != null)
                        {
                            string commandKey = READProperty.Key.TrimStart(new char[] { '$' });
                            WSJson temp       = new WSJArray();


                            #region MATCH / READ properties
                            //if (prop.Value is WSJObject && prop.Value.IsValid)
                            //{
                            //    #region apply $match command
                            //    if (WSConstants.COMMAND_KEYS.MATCH.Match(commandKey))
                            //    {
                            //        WSJProperty jMatch = ((WSJObject)prop.Value).Value[0];

                            //        #region SET $currentuser validation Filter
                            //        if (WSConstants.COMMAND_KEYS.CURRENT_USER.Match(jMatch.Key))
                            //        {
                            //            WSJson jUser = jMatch.Value.Clone();
                            //            if (jUser != null && jUser.IsValid)
                            //            {
                            //                Value[i] = new WSJValue(Request.Security.IsValidUser(jUser) ? "1" : "0");
                            //            }
                            //        }
                            //        #endregion
                            //    }
                            //    #endregion

                            //    #region apply $read command
                            //    else if (WSConstants.COMMAND_KEYS.READ.Match(commandKey))
                            //    {
                            //        WSJProperty jTarget = ((WSJObject)prop.Value).Value[0];
                            //        string targetKey = jTarget.Key.TrimStart(new char[] { '$' });

                            //        #region SET $currentuser validation Filter
                            //        if (WSConstants.COMMAND_KEYS.CURRENT_USER.Match(targetKey))
                            //        {
                            //            List<WSJson> items = new List<WSJson> { };
                            //            try
                            //            {
                            //                items.AddRange(
                            //                    (Request.Security.WSCurrentUser != null && Request.Security.WSCurrentUser.entity != null ? Request.Security.WSCurrentUser.entity.read(CFunc, jTarget.Value) : new List<dynamic> { })
                            //                    .Select(x =>
                            //                        new WSJValue((x as object).ToString())
                            //                    )
                            //                );
                            //            }
                            //            catch (Exception e) { CFunc.RegError(GetType(), e, ref Request.status); }
                            //            Value[i] = new WSJArray(items);
                            //        }
                            //        #endregion
                            //    }
                            //    #endregion

                            //    continue;
                            //}
                            #endregion


                            #region apply 'READ' property
                            if (WSConstants.COMMAND_KEYS.READ.Match(commandKey) && READProperty.Value.IsValid)
                            {
                                if (READProperty.Value is WSJObject)
                                {
                                    List <WSJProperty> props = ((WSJObject)READProperty.Value).Value;
                                    if (props != null && props.Any())
                                    {
                                        Func <WSJProperty, bool> CurUserFunc  = v => WSConstants.COMMAND_KEYS.CURRENT_USER.Match(v.Key);
                                        Func <WSJProperty, bool> ExplicitFunc = v => WSConstants.COMMAND_KEYS.EXPLICIT.Match(v.Key);

                                        if (props.Any(CurUserFunc))
                                        {
                                            #region SET $currentuser validation Filter
                                            WSJProperty CurrentUser = props.FirstOrDefault(CurUserFunc);
                                            if (CurrentUser != null /* && WSConstants.COMMAND_KEYS.CURRENT_USER.Match(CurrentUser.Key)*/)
                                            {
                                                List <WSJson> items = new List <WSJson> {
                                                };
                                                try
                                                {
                                                    items.AddRange(
                                                        (Request.Security.WSCurrentUser != null && Request.Security.WSCurrentUser.entity != null ? Request.Security.WSCurrentUser.entity.read(CFunc, CurrentUser.Value) : new List <dynamic> {
                                                    })
                                                        .Select(x =>
                                                                new WSJValue((x as object).ToString())
                                                                )
                                                        );
                                                }
                                                catch (Exception e) { CFunc.RegError(GetType(), e, ref Request.status); }
                                                temp = new WSJArray(items);
                                            }
                                            #endregion
                                        }
                                    }
                                }
                            }
                            #endregion


                            Value = temp;
                            return(true);
                        }
                    }
                }
                Value.apply(Request, CFunc);
            }
            catch (Exception e) { CFunc.RegError(GetType(), e, ref Request.status); }
            return(false);
        }
Exemplo n.º 22
0
        private WSStatus WriteCollapsedValues(JsonWriter writer, JsonSerializer serializer, WSEntity entity, WSSource xSource, WSJson collapseOption, WSRequest Request, MetaFunctions CFunc)
        {
            WSStatus status = WSStatus.NONE_Copy();

            try
            {
                /*******************************************************************************
                 *
                 * //  TODO @ANDVO : 2016-02-15 : IMPORTANT!!! => Implement security check like this :
                 *
                 * WSStatus status = Validate(obj, xParam, writer, serializer, security, schema);
                 * if (status.CODE == WSStatus.SUCCESS.CODE)
                 * {
                 */

                if (entity != null && collapseOption != null && collapseOption.IsValid)
                {
                    WSTableSource childSource = (WSTableSource)CFunc.GetSourceByType(entity.GetType());

                    object  fieldValue = null;
                    WSParam field      = null;
                    if (collapseOption is WSJValue)
                    {
                        string fieldName = ((WSJValue)collapseOption).Value;
                        field      = entity.GetParam(xSource, fieldName);
                        fieldValue = getMemberValue(entity, field, CFunc);

                        WSPrimitiveFieldSchema fieldSchema = new WSPrimitiveFieldSchema(CFunc, (WSTableParam)field, new WSJProperty(fieldName, new WSJArray()), /*((WSTableSource)entity.getSource())*/ childSource.BaseSchema);
                        if (Validate(fieldValue, field, writer, serializer, childSource.BaseSchema, childSource, null, ref status, Request, CFunc))
                        {
                            object _obj = null;
                            serializer.Serialize(writer, field.TryReadPrimitiveWithDefault(fieldValue, string.Empty, out _obj) ? _obj : string.Empty);
                            writer.Flush();
                            status = WSStatus.SUCCESS_Copy();
                        }
                    }
                    else if (collapseOption is WSJObject)
                    {
                        WSJProperty collapseSrc = ((WSJObject)collapseOption).Value.FirstOrDefault();
                        field      = entity.GetParam(childSource, collapseSrc.Key);
                        fieldValue = getMemberValue(entity, field, CFunc);
                        if (Validate(fieldValue, field, writer, serializer, childSource.BaseSchema, childSource, null, ref status, Request, CFunc))
                        {
                            if (fieldValue == null)
                            {
                                serializer.Serialize(writer, "NULL");
                                writer.Flush();
                            }
                            else if (fieldValue is WSEntity)
                            {
                                WSTableSource fieldSource = (WSTableSource)CFunc.GetSourceByType(fieldValue.GetType());
                                status = WriteCollapsedValues(writer, serializer, (WSEntity)fieldValue, fieldSource, collapseSrc.Value, Request, CFunc);
                            }
                            else if (fieldValue.IsCollectionOf <WSEntity>())
                            {
                                WSTableSource fieldSource = (WSTableSource)CFunc.GetSourceByType(fieldValue.GetType().GetEntityType());
                                if (!((IEnumerable <WSEntity>)fieldValue).Any())
                                {
                                    serializer.Serialize(writer, "NULL");
                                    writer.Flush();
                                }
                                else
                                {
                                    foreach (WSEntity eItem in (IEnumerable <WSEntity>)fieldValue)
                                    {
                                        status.childs.Add(WriteCollapsedValues(writer, serializer, eItem, fieldSource, collapseSrc.Value, Request, CFunc));
                                    }
                                    status = status.IsPositive ? WSStatus.SUCCESS_Copy() : WSStatus.ERROR_Copy();
                                }
                            }
                        }
                    }
                }


                /*}
                 *
                 *******************************************************************************/
            }
            catch (Exception e) { CFunc.RegError(GetType(), e, ref status); }
            return(status);
        }
Exemplo n.º 23
0
        internal override bool applyInternal(WSRequest Request, MetaFunctions CFunc)
        {
            if (Request != null)
            {
                try
                {
                    if (Value != null && Value.Any())
                    {
                        for (int i = 0; i < Value.Count; i++)
                        {
                            if (Value[i] is WSJObject)
                            {
                                WSJProperty prop = ((WSJObject)Value[i]).Value[0];
                                if (prop.Key.StartsWith("$"))
                                {
                                    string commandKey = prop.Key.TrimStart(new char[] { '$' });

                                    if (prop.Value is WSJObject && prop.Value.IsValid)
                                    {
                                        #region apply $match command
                                        if (WSConstants.COMMAND_KEYS.MATCH.Match(commandKey))
                                        {
                                            WSJProperty jMatch = ((WSJObject)prop.Value).Value[0];

                                            #region SET $currentuser validation Filter
                                            if (WSConstants.COMMAND_KEYS.CURRENT_USER.Match(jMatch.Key))
                                            {
                                                WSJson jUser = jMatch.Value.Clone();
                                                if (jUser != null && jUser.IsValid)
                                                {
                                                    Value[i] = new WSJValue(Request.Security.IsValidUser(jUser) ? "1" : "0");
                                                }
                                            }
                                            #endregion
                                        }
                                        #endregion

                                        #region apply $read command
                                        else if (WSConstants.COMMAND_KEYS.READ.Match(commandKey))
                                        {
                                            WSJProperty jTarget   = ((WSJObject)prop.Value).Value[0];
                                            string      targetKey = jTarget.Key.TrimStart(new char[] { '$' });

                                            #region SET $currentuser validation Filter
                                            if (WSConstants.COMMAND_KEYS.CURRENT_USER.Match(targetKey))
                                            {
                                                List <WSJson> items = new List <WSJson> {
                                                };
                                                try
                                                {
                                                    items.AddRange(
                                                        (Request.Security.WSCurrentUser != null && Request.Security.WSCurrentUser.entity != null ? Request.Security.WSCurrentUser.entity.read(CFunc, jTarget.Value) : new List <dynamic> {
                                                    })
                                                        .Select(x =>
                                                                new WSJValue((x as object).ToString())
                                                                )
                                                        );
                                                }
                                                catch (Exception e) { CFunc.RegError(GetType(), e, ref Request.status); }
                                                Value[i] = new WSJArray(items);
                                            }
                                            #endregion
                                        }
                                        #endregion

                                        continue;
                                    }
                                }
                            }
                            Value[i].apply(Request, CFunc);
                        }
                    }
                    return(true);
                }
                catch (Exception e) { CFunc.RegError(GetType(), e, ref Request.status); }
            }
            return(false);
        }