public WSRecordJsonConverter(WSParamList _XParams, WSRequest _Request, ClientFunctions _CFunc, WSDataContext _DBContext, params Type[] _types) { XParams = _XParams; Request = _Request; CFunc = _CFunc; DBContext = _DBContext; types = _types; }
public bool apply(WSRequest Request, MetaFunctions CFunc) { if (applied == null) { applied = false; applied = applyInternal(Request, CFunc); } return((bool)applied); }
private bool MatchFields(WSRequest request, MetaFunctions cFunc, WSEntitySchema eSchema) { bool match = true; try { } catch (Exception) { } return(match); }
private bool MatchFilters(WSRequest request, MetaFunctions cFunc, WSEntitySchema eSchema) { bool match = true; try { //eSchema.Filters.Match(this); } catch (Exception) { } return(match); }
public WSClientMeta(HttpContext _context) { Request = new WSRequest(_context, SecurityMap, ClientFunctions); preloadStaticSources(); if (ReloadRAMRequired) { reloadCoreSources(); } }
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; }
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); }
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); }
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); }
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); }
internal abstract bool applyInternal(WSRequest request, MetaFunctions CFunc);
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); }
public override WSFilter GetBaseFilter(WSRequest Request, Expression _member, int _level, WSJson BaseFilter = null) { return(null); }
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); }
public virtual bool Match(WSRequest Request, WSDataContext DBContext, MetaFunctions CFunc, WSSchema schema) { return(true); }
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); }
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); }
public abstract WSFilter GetBaseFilter(WSRequest Request, Expression _member, int _level, WSJson BaseFilter = null);
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); }
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); }
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); }
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); }
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); }