diff --git a/apps/roster/src/roster_validator.erl b/apps/roster/src/roster_validator.erl index 80dacddc5297b0db20c280527124ba1e96f70f1c..e531dcfc8b138ca92c3ab713ea3d9071849c9063 100644 --- a/apps/roster/src/roster_validator.erl +++ b/apps/roster/src/roster_validator.erl @@ -1,6 +1,5 @@ -module(roster_validator). -include_lib("bpe/include/bpe.hrl"). --include_lib("bpe/include/tour.hrl"). -include_lib("emqttd/include/emqttd.hrl"). -include_lib("kvs/include/feed.hrl"). -include_lib("kvs/include/group.hrl"). @@ -15,12 +14,12 @@ -compile(export_all). custom_validate(_Obj) -> []. -validate(Obj) -> validate(Obj, [], application:get_env(bert, custom_validate, {?MODULE, custom_validate})). -validate(Obj, Acc, _) when is_atom(Obj) -> Acc; -validate(Obj, Acc, _) when is_integer(Obj) -> Acc; -validate(Obj, Acc, _) when is_binary(Obj) -> Acc; +validate(Obj) -> validate(Obj, []). +validate(Obj, Acc) when is_atom(Obj) -> Acc; +validate(Obj, Acc) when is_integer(Obj) -> Acc; +validate(Obj, Acc) when is_binary(Obj) -> Acc; -validate(D = #'writer'{id = Id, count = Count, cache = Cache, args = Args, first = First}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'writer'{id = Id, count = Count, cache = Cache, args = Args, first = First}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} -> Acc2; @@ -30,8 +29,9 @@ validate(D = #'writer'{id = Id, count = Count, cache = Cache, args = Args, first {first,_} when First==[] orelse is_tuple(First) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'writer'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'reader'{id = Id, pos = Pos, cache = Cache, args = Args, feed = Feed, dir = Dir}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'reader'{id = Id, pos = Pos, cache = Cache, args = Args, feed = Feed, dir = Dir}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} -> Acc2; @@ -42,8 +42,9 @@ validate(D = #'reader'{id = Id, pos = Pos, cache = Cache, args = Args, feed = Fe {dir,_} when Dir==0 orelse Dir==1 -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'reader'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'cur'{id = Id, top = Top, bot = Bot, dir = Dir, reader = Reader, writer = Writer, args = Args}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'cur'{id = Id, top = Top, bot = Bot, dir = Dir, reader = Reader, writer = Writer, args = Args}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} -> Acc2; @@ -53,11 +54,12 @@ validate(D = #'cur'{id = Id, top = Top, bot = Bot, dir = Dir, reader = Reader, w {reader,_} when Reader==[] orelse is_tuple(Reader) -> Acc2; {writer,_} when Writer==[] orelse is_tuple(Writer) -> Acc2; {args,_} when is_list(Args) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) orelse is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{args, D}|Acc3] end, Acc2, Args); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) orelse is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{args, D}|Acc3] end, Acc2, Args); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'cur'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'iter'{id = Id, container = Container, feed = Feed, next = Next, prev = Prev}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'iter'{id = Id, container = Container, feed = Feed, next = Next, prev = Prev}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -67,8 +69,9 @@ validate(D = #'iter'{id = Id, container = Container, feed = Feed, next = Next, p {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'iter'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'container'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'container'{id = Id, top = Top, rear = Rear, count = Count}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -77,8 +80,9 @@ validate(D = #'container'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {count,_} when is_integer(Count) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'container'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'iterator'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'iterator'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -89,8 +93,9 @@ validate(D = #'iterator'{id = Id, container = Container, feed_id = Feed_id, prev {feeds,_} when is_list(Feeds) -> []; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'iterator'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'log'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'log'{id = Id, top = Top, rear = Rear, count = Count}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -99,8 +104,9 @@ validate(D = #'log'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {Custo {count,_} when is_integer(Count) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'log'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'operation'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'operation'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -111,8 +117,9 @@ validate(D = #'operation'{id = Id, container = Container, feed_id = Feed_id, pre {feeds,_} when is_list(Feeds) -> []; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'operation'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'feed'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'feed'{id = Id, top = Top, rear = Rear, count = Count}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -121,129 +128,133 @@ validate(D = #'feed'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {Cust {count,_} when is_integer(Count) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'feed'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'max_tour'{count = Count, joined = Joined}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {count,_} when is_integer(Count) -> Acc2; - {joined,_} when is_integer(Joined) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'max_tour'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'join_application'{id = Id, name = Name, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when is_integer(Id) -> Acc2; - {name,_} when is_binary(Name) -> Acc2; - {data,_} -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'join_application'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'tour_list'{users = Users}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {users,_} when is_list(Users) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'join_application') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{users, D}|Acc3] end, Acc2, Users); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'tour_list'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'task'{name = Name, roles = Roles, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'task'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {roles,_} when is_binary(Roles) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); + {roles,_} when is_binary(Roles) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'task'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'userTask'{name = Name, roles = Roles, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'userTask'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {roles,_} when is_binary(Roles) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); + {roles,_} when is_binary(Roles) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'userTask'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'serviceTask'{name = Name, roles = Roles, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'serviceTask'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {roles,_} when is_binary(Roles) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); + {roles,_} when is_binary(Roles) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'serviceTask'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'receiveTask'{name = Name, roles = Roles, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'receiveTask'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {roles,_} when is_binary(Roles) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); + {roles,_} when is_binary(Roles) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'receiveTask'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'messageEvent'{name = Name, payload = Payload, timeout = Timeout, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'messageEvent'{name = Name, module = Module, prompt = Prompt, payload = Payload, timeout = Timeout}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; + {module,_} when is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); {payload,_} when is_binary(Payload) -> Acc2; - {timeout,_} when is_tuple(Timeout) -> Acc2; - {module,_} when is_atom(Module) -> Acc2; + {timeout,_} when is_tuple(Timeout) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'messageEvent'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'boundaryEvent'{name = Name, payload = Payload, timeout = Timeout, timeDate = TimeDate, timeDuration = TimeDuration, timeCycle = TimeCycle, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'boundaryEvent'{name = Name, module = Module, prompt = Prompt, payload = Payload, timeout = Timeout, timeDate = TimeDate, timeDuration = TimeDuration, timeCycle = TimeCycle}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); {payload,_} when is_binary(Payload) -> Acc2; {timeout,_} when is_tuple(Timeout) -> Acc2; {timeDate,_} when is_binary(TimeDate) -> Acc2; {timeDuration,_} when is_binary(TimeDuration) -> Acc2; - {timeCycle,_} when is_binary(TimeCycle) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {timeCycle,_} when is_binary(TimeCycle) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'boundaryEvent'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'timeoutEvent'{name = Name, payload = Payload, timeout = Timeout, timeDate = TimeDate, timeDuration = TimeDuration, timeCycle = TimeCycle, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'timeoutEvent'{name = Name, module = Module, prompt = Prompt, payload = Payload, timeout = Timeout, timeDate = TimeDate, timeDuration = TimeDuration, timeCycle = TimeCycle}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); {payload,_} when Payload==[] orelse is_binary(Payload) -> Acc2; {timeout,_} when Timeout==[] orelse is_tuple(Timeout) -> Acc2; {timeDate,_} when TimeDate==[] orelse is_binary(TimeDate) -> Acc2; {timeDuration,_} when TimeDuration==[] orelse is_binary(TimeDuration) -> Acc2; - {timeCycle,_} when TimeCycle==[] orelse is_binary(TimeCycle) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {timeCycle,_} when TimeCycle==[] orelse is_binary(TimeCycle) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'timeoutEvent'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'beginEvent'{name = Name, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'beginEvent'{name = Name, module = Module, prompt = Prompt}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'beginEvent'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'endEvent'{name = Name, module = Module}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'endEvent'{name = Name, module = Module, prompt = Prompt}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {module,_} when Module==[] orelse is_atom(Module) -> Acc2; + {prompt,_} when is_list(Prompt) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'endEvent'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'sequenceFlow'{source = Source, target = Target}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'sequenceFlow'{source = Source, target = Target}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {source,_} when Source==[] orelse is_atom(Source) -> Acc2; {target,_} when Target==[] orelse is_atom(Target) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'sequenceFlow'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'hist'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, name = Name, task = Task, time = Time}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'hist'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, name = Name, task = Task, docs = Docs, time = Time}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -254,11 +265,14 @@ validate(D = #'hist'{id = Id, container = Container, feed_id = Feed_id, prev = P {feeds,_} when is_list(Feeds) -> []; {name,_} when Name==[] orelse is_binary(Name) -> Acc2; {task,_} when is_atom(Task) -> Acc2; + {docs,_} when is_list(Docs) -> + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); {time,_} -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'hist'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'process'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, name = Name, roles = Roles, tasks = Tasks, events = Events, hist = Hist, flows = Flows, rules = Rules, docs = Docs, options = Options, task = Task, timer = Timer, notifications = Notifications, result = Result, started = Started, beginEvent = BeginEvent, endEvent = EndEvent}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'process'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, name = Name, roles = Roles, tasks = Tasks, events = Events, hist = Hist, flows = Flows, rules = Rules, docs = Docs, options = Options, task = Task, timer = Timer, notifications = Notifications, result = Result, started = Started, beginEvent = BeginEvent, endEvent = EndEvent}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -270,15 +284,15 @@ validate(D = #'process'{id = Id, container = Container, feed_id = Feed_id, prev {name,_} when Name==[] orelse is_binary(Name) -> Acc2; {roles,_} when is_list(Roles) -> []; {tasks,_} when is_list(Tasks) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'task') orelse is_record(Tmp,'serviceTask') orelse is_record(Tmp,'userTask') orelse is_record(Tmp,'receiveTask') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{tasks, D}|Acc3] end, Acc2, Tasks); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'task') orelse is_record(Tmp,'serviceTask') orelse is_record(Tmp,'userTask') orelse is_record(Tmp,'receiveTask') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{tasks, D}|Acc3] end, Acc2, Tasks); {events,_} when is_list(Events) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'messageEvent') orelse is_record(Tmp,'boundaryEvent') orelse is_record(Tmp,'timeoutEvent') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{events, D}|Acc3] end, Acc2, Events); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'messageEvent') orelse is_record(Tmp,'boundaryEvent') orelse is_record(Tmp,'timeoutEvent') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{events, D}|Acc3] end, Acc2, Events); {flows,_} when is_list(Flows) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'sequenceFlow') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{flows, D}|Acc3] end, Acc2, Flows); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'sequenceFlow') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{flows, D}|Acc3] end, Acc2, Flows); {docs,_} when is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); {options,_} -> Acc2; {task,_} when Task==[] orelse is_atom(Task) -> Acc2; {timer,_} when Timer==[] orelse is_binary(Timer) -> Acc2; @@ -289,47 +303,53 @@ validate(D = #'process'{id = Id, container = Container, feed_id = Feed_id, prev {endEvent,_} when EndEvent==[] orelse is_atom(EndEvent) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'process'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'complete'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'complete'{id = Id}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'complete'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'proc'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'proc'{id = Id}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'proc'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'histo'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'histo'{id = Id}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'histo'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'create'{proc = Proc, docs = Docs}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'create'{proc = Proc, docs = Docs}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {proc,_} when Proc==[] orelse is_record(Proc,'process') orelse is_binary(Proc) -> Acc2; {docs,_} when Docs==[] orelse is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'join_application') orelse is_record(Tmp,'max_tour') orelse is_record(Tmp,'tour_list') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'create'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'amend'{id = Id, docs = Docs}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'amend'{id = Id, docs = Docs}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; {docs,_} when Docs==[] orelse is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'join_application') orelse is_record(Tmp,'max_tour') orelse is_record(Tmp,'tour_list') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'amend'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'chain'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'chain'{id = Id, top = Top, rear = Rear, count = Count}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -338,8 +358,9 @@ validate(D = #'chain'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {Cus {count,_} when is_integer(Count) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'chain'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'push'{model = Model, type = Type, title = Title, alert = Alert, badge = Badge, sound = Sound}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'push'{model = Model, type = Type, title = Title, alert = Alert, badge = Badge, sound = Sound}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {model,_} when Model==[] orelse true -> Acc2; @@ -350,8 +371,9 @@ validate(D = #'push'{model = Model, type = Type, title = Title, alert = Alert, b {sound,_} when Sound==[] orelse is_binary(Sound) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'push'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Search'{id = Id, ref = Ref, field = Field, type = Type, value = Value, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Search'{id = Id, ref = Ref, field = Field, type = Type, value = Value, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when is_integer(Id) -> Acc2; @@ -359,27 +381,30 @@ validate(D = #'Search'{id = Id, ref = Ref, field = Field, type = Type, value = V {field,_} when is_binary(Field) -> Acc2; {type,_} when Type=='==' orelse Type=='!=' orelse Type=='like' -> Acc2; {value,_} when is_list(Value) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{value, D}|Acc3] end, Acc2, Value); + lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{value, D}|Acc3] end, Acc2, Value); {status,_} when Status=='profile' orelse Status=='roster' orelse Status=='contact' orelse Status=='member' orelse Status=='room' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Search'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'p2p'{from = From, to = To}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'p2p'{from = From, to = To}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {from,_} when is_binary(From) -> Acc2; {to,_} when is_binary(To) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'p2p'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'muc'{name = Name}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'muc'{name = Name}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when is_binary(Name) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'muc'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqi'{feed_id = Feed_id, query = Query, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqi'{feed_id = Feed_id, query = Query, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {feed_id, #'muc'{}} -> Acc2; @@ -387,8 +412,9 @@ validate(D = #'mqi'{feed_id = Feed_id, query = Query, status = Status}, Acc, {Cu {status,_} when Status==[] orelse Status=='admin' orelse Status=='member' orelse Status=='removed' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqi'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Feature'{id = Id, key = Key, value = Value, group = Group}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Feature'{id = Id, key = Key, value = Value, group = Group}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_binary(Id) -> Acc2; @@ -397,8 +423,9 @@ validate(D = #'Feature'{id = Id, key = Key, value = Value, group = Group}, Acc, {group,_} when is_binary(Group) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Feature'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Service'{id = Id, type = Type, data = Data, login = Login, password = Password, expiration = Expiration, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Service'{id = Id, type = Type, data = Data, login = Login, password = Password, expiration = Expiration, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_binary(Id) -> Acc2; @@ -410,8 +437,9 @@ validate(D = #'Service'{id = Id, type = Type, data = Data, login = Login, passwo {status,_} when Status==[] orelse Status=='verified' orelse Status=='added' orelse Status=='add' orelse Status=='remove' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Service'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Member'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, phone_id = Phone_id, avatar = Avatar, names = Names, surnames = Surnames, alias = Alias, reader = Reader, update = Update, settings = Settings, services = Services, presence = Presence, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Member'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, phone_id = Phone_id, avatar = Avatar, names = Names, surnames = Surnames, alias = Alias, reader = Reader, update = Update, settings = Settings, services = Services, presence = Presence, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -428,15 +456,16 @@ validate(D = #'Member'{id = Id, container = Container, feed_id = Feed_id, prev = {reader,_} when Reader==[] orelse is_integer(Reader) -> Acc2; {update,_} when Update==[] orelse is_integer(Update) -> Acc2; {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {services,_} when Services==[] orelse is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); {presence,_} when Presence==[] orelse Presence=='online' orelse Presence=='offline' -> Acc2; {status,_} when Status==[] orelse Status=='admin' orelse Status=='member' orelse Status=='removed' orelse Status=='patch' orelse Status=='owner' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Member'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Desc'{id = Id, mime = Mime, payload = Payload, parentid = Parentid, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Desc'{id = Id, mime = Mime, payload = Payload, parentid = Parentid, data = Data}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_binary(Id) -> Acc2; @@ -444,28 +473,30 @@ validate(D = #'Desc'{id = Id, mime = Mime, payload = Payload, parentid = Parenti {payload,_} when Payload==[] orelse is_binary(Payload) -> Acc2; {parentid,_} when Parentid==[] orelse is_binary(Parentid) -> Acc2; {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Desc'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'StickerPack'{id = Id, name = Name, keywords = Keywords, description = Description, author = Author, stickers = Stickers, created = Created, updated = Updated, downloaded = Downloaded}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'StickerPack'{id = Id, name = Name, keywords = Keywords, description = Description, author = Author, stickers = Stickers, created = Created, updated = Updated, downloaded = Downloaded}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; {name,_} when Name==[] orelse is_binary(Name) -> Acc2; {keywords,_} when is_list(Keywords) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{keywords, D}|Acc3] end, Acc2, Keywords); + lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{keywords, D}|Acc3] end, Acc2, Keywords); {description,_} when Description==[] orelse is_binary(Description) -> Acc2; {author,_} when Author==[] orelse is_binary(Author) -> Acc2; {stickers,_} when is_list(Stickers) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{stickers, D}|Acc3] end, Acc2, Stickers); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{stickers, D}|Acc3] end, Acc2, Stickers); {created,_} when is_integer(Created) -> Acc2; {updated,_} when is_integer(Updated) -> Acc2; {downloaded,_} when is_integer(Downloaded) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'StickerPack'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Message'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, msg_id = Msg_id, from = From, to = To, created = Created, files = Files, type = Type, link = Link, seenby = Seenby, repliedby = Repliedby, mentioned = Mentioned, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Message'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, msg_id = Msg_id, from = From, to = To, created = Created, files = Files, type = Type, link = Link, seenby = Seenby, repliedby = Repliedby, mentioned = Mentioned, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -478,21 +509,22 @@ validate(D = #'Message'{id = Id, container = Container, feed_id = Feed_id, prev {to,_} when To==[] orelse is_binary(To) -> Acc2; {created,_} when Created==[] orelse is_integer(Created) -> Acc2; {files,_} when is_list(Files) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{files, D}|Acc3] end, Acc2, Files); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{files, D}|Acc3] end, Acc2, Files); {type,_} when is_list(Type) -> - lists:foldl(fun(Tmp, Acc3) when Tmp=='sys' orelse Tmp=='reply' orelse Tmp=='forward' orelse Tmp=='read' orelse Tmp=='edited' orelse Tmp=='cursor' -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{type, D}|Acc3] end, Acc2, Type); + lists:foldl(fun(Tmp, Acc3) when Tmp=='sys' orelse Tmp=='reply' orelse Tmp=='forward' orelse Tmp=='read' orelse Tmp=='edited' orelse Tmp=='cursor' -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{type, D}|Acc3] end, Acc2, Type); {link,_} when Link==[] orelse is_integer(Link) orelse is_record(Link,'Message') -> Acc2; {seenby,_} when Seenby==[] orelse is_list(Seenby) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) orelse is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{seenby, D}|Acc3] end, Acc2, Seenby); + lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) orelse is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{seenby, D}|Acc3] end, Acc2, Seenby); {repliedby,_} when Repliedby==[] orelse is_list(Repliedby) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{repliedby, D}|Acc3] end, Acc2, Repliedby); + lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{repliedby, D}|Acc3] end, Acc2, Repliedby); {mentioned,_} when Mentioned==[] orelse is_list(Mentioned) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{mentioned, D}|Acc3] end, Acc2, Mentioned); + lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{mentioned, D}|Acc3] end, Acc2, Mentioned); {status,_} when Status==[] orelse Status=='async' orelse Status=='delete' orelse Status=='clear' orelse Status=='update' orelse Status=='edit' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Message'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Link'{entity_id = Entity_id, name = Name, type = Type, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Link'{entity_id = Entity_id, name = Name, type = Type, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {entity_id,_} when Entity_id==[] orelse is_binary(Entity_id) -> Acc2; @@ -501,8 +533,9 @@ validate(D = #'Link'{entity_id = Entity_id, name = Name, type = Type, status = S {status,_} when Status==[] orelse Status=='get' orelse Status=='join' orelse Status=='update' orelse Status=='delete' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Link'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Room'{id = Id, name = Name, links = Links, description = Description, settings = Settings, members = Members, admins = Admins, data = Data, type = Type, tos = Tos, tos_update = Tos_update, unread = Unread, mentions = Mentions, readers = Readers, last_msg = Last_msg, update = Update, created = Created, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Room'{id = Id, name = Name, links = Links, description = Description, settings = Settings, members = Members, admins = Admins, data = Data, type = Type, tos = Tos, tos_update = Tos_update, unread = Unread, mentions = Mentions, readers = Readers, last_msg = Last_msg, update = Update, created = Created, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_binary(Id) -> Acc2; @@ -510,29 +543,30 @@ validate(D = #'Room'{id = Id, name = Name, links = Links, description = Descript {links,_} when Links==[] orelse is_binary(Links) -> Acc2; {description,_} when Description==[] orelse is_binary(Description) -> Acc2; {settings,_} when is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {members,_} when is_list(Members) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Member') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{members, D}|Acc3] end, Acc2, Members); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Member') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{members, D}|Acc3] end, Acc2, Members); {admins,_} when is_list(Admins) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Member') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{admins, D}|Acc3] end, Acc2, Admins); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Member') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{admins, D}|Acc3] end, Acc2, Admins); {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); {type,_} when Type==[] orelse Type=='group' orelse Type=='channel' -> Acc2; {tos,_} when Tos==[] orelse is_binary(Tos) -> Acc2; {tos_update,_} when Tos_update==[] orelse is_integer(Tos_update) -> Acc2; {unread,_} when Unread==[] orelse is_integer(Unread) -> Acc2; {mentions,_} when is_list(Mentions) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{mentions, D}|Acc3] end, Acc2, Mentions); + lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{mentions, D}|Acc3] end, Acc2, Mentions); {readers,_} when is_list(Readers) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{readers, D}|Acc3] end, Acc2, Readers); + lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{readers, D}|Acc3] end, Acc2, Readers); {last_msg,_} when Last_msg==[] orelse is_integer(Last_msg) orelse is_record(Last_msg,'Message') -> Acc2; {update,_} when Update==[] orelse is_integer(Update) -> Acc2; {created,_} when Created==[] orelse is_integer(Created) -> Acc2; {status,_} when Status==[] orelse Status=='create' orelse Status=='leave' orelse Status=='add' orelse Status=='remove' orelse Status=='removed' orelse Status=='join' orelse Status=='patch' orelse Status=='get' orelse Status=='delete' orelse Status=='last_msg' orelse Status=='mute' orelse Status=='unmute' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Room'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Tag'{roster_id = Roster_id, name = Name, color = Color, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Tag'{roster_id = Roster_id, name = Name, color = Color, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {roster_id,_} when Roster_id==[] orelse is_binary(Roster_id) -> Acc2; @@ -541,8 +575,9 @@ validate(D = #'Tag'{roster_id = Roster_id, name = Name, color = Color, status = {status,_} when Status==[] orelse Status=='create' orelse Status=='remove' orelse Status=='edit' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Tag'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Star'{id = Id, client_id = Client_id, roster_id = Roster_id, message = Message, tags = Tags, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Star'{id = Id, client_id = Client_id, roster_id = Roster_id, message = Message, tags = Tags, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -550,20 +585,22 @@ validate(D = #'Star'{id = Id, client_id = Client_id, roster_id = Roster_id, mess {roster_id,_} when Roster_id==[] orelse is_integer(Roster_id) -> Acc2; {message, #'Message'{}} -> Acc2; {tags,_} when is_list(Tags) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Tag') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{tags, D}|Acc3] end, Acc2, Tags); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Tag') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{tags, D}|Acc3] end, Acc2, Tags); {status,_} when Status==[] orelse Status=='add' orelse Status=='remove' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Star'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Typing'{phone_id = Phone_id, comments = Comments}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Typing'{phone_id = Phone_id, comments = Comments}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {phone_id,_} when is_binary(Phone_id) -> Acc2; {comments,_} -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Typing'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Contact'{phone_id = Phone_id, avatar = Avatar, names = Names, surnames = Surnames, nick = Nick, reader = Reader, unread = Unread, last_msg = Last_msg, update = Update, created = Created, settings = Settings, services = Services, presence = Presence, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Contact'{phone_id = Phone_id, avatar = Avatar, names = Names, surnames = Surnames, nick = Nick, reader = Reader, unread = Unread, last_msg = Last_msg, update = Update, created = Created, settings = Settings, services = Services, presence = Presence, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {phone_id,_} when Phone_id==[] orelse is_binary(Phone_id) -> Acc2; @@ -572,29 +609,31 @@ validate(D = #'Contact'{phone_id = Phone_id, avatar = Avatar, names = Names, sur {surnames,_} when Surnames==[] orelse is_binary(Surnames) -> Acc2; {nick,_} when Nick==[] orelse is_binary(Nick) -> Acc2; {reader,_} when Reader==[] orelse is_integer(Reader) orelse is_list(Reader) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{reader, D}|Acc3] end, Acc2, Reader); + lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{reader, D}|Acc3] end, Acc2, Reader); {unread,_} when Unread==[] orelse is_integer(Unread) -> Acc2; {last_msg,_} when Last_msg==[] orelse is_record(Last_msg,'Message') -> Acc2; {update,_} when Update==[] orelse is_integer(Update) -> Acc2; {created,_} when Created==[] orelse is_integer(Created) -> Acc2; {settings,_} when is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {services,_} when is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); {presence,_} when Presence==[] orelse Presence=='online' orelse Presence=='offline' orelse is_binary(Presence) -> Acc2; {status,_} when Status==[] orelse Status=='request' orelse Status=='authorization' orelse Status=='ignore' orelse Status=='internal' orelse Status=='friend' orelse Status=='last_msg' orelse Status=='ban' orelse Status=='banned' orelse Status=='deleted' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Contact'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'ExtendedStar'{star = Star, from = From}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'ExtendedStar'{star = Star, from = From}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {star,_} when is_record(Star,'Star') orelse Star==[] -> Acc2; {from,_} when is_record(From,'Contact') orelse is_record(From,'Room') orelse From==[] -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'ExtendedStar'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Auth'{client_id = Client_id, dev_key = Dev_key, user_id = User_id, phone = Phone, token = Token, type = Type, sms_code = Sms_code, attempts = Attempts, services = Services, settings = Settings, push = Push, os = Os, created = Created, last_online = Last_online}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Auth'{client_id = Client_id, dev_key = Dev_key, user_id = User_id, phone = Phone, token = Token, type = Type, sms_code = Sms_code, attempts = Attempts, services = Services, settings = Settings, push = Push, os = Os, created = Created, last_online = Last_online}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {client_id,_} when Client_id==[] orelse is_binary(Client_id) -> Acc2; @@ -606,17 +645,18 @@ validate(D = #'Auth'{client_id = Client_id, dev_key = Dev_key, user_id = User_id {sms_code,_} when Sms_code==[] orelse is_binary(Sms_code) -> Acc2; {attempts,_} when Attempts==[] orelse is_integer(Attempts) -> Acc2; {services,_} when is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); + lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {push,_} when Push==[] orelse is_binary(Push) -> Acc2; {os,_} when Os==[] orelse Os=='ios' orelse Os=='android' orelse Os=='web' -> Acc2; {created,_} when Created==[] orelse is_integer(Created) -> Acc2; {last_online,_} when Last_online==[] orelse is_integer(Last_online) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Auth'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Roster'{id = Id, names = Names, surnames = Surnames, email = Email, nick = Nick, userlist = Userlist, roomlist = Roomlist, favorite = Favorite, tags = Tags, phone = Phone, avatar = Avatar, update = Update, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Roster'{id = Id, names = Names, surnames = Surnames, email = Email, nick = Nick, userlist = Userlist, roomlist = Roomlist, favorite = Favorite, tags = Tags, phone = Phone, avatar = Avatar, update = Update, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_binary(Id) orelse is_integer(Id) -> Acc2; @@ -625,58 +665,62 @@ validate(D = #'Roster'{id = Id, names = Names, surnames = Surnames, email = Emai {email,_} when Email==[] orelse is_binary(Email) -> Acc2; {nick,_} when Nick==[] orelse is_binary(Nick) -> Acc2; {userlist,_} when is_list(Userlist) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Contact') orelse is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{userlist, D}|Acc3] end, Acc2, Userlist); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Contact') orelse is_integer(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{userlist, D}|Acc3] end, Acc2, Userlist); {roomlist,_} when is_list(Roomlist) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Room') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{roomlist, D}|Acc3] end, Acc2, Roomlist); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Room') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{roomlist, D}|Acc3] end, Acc2, Roomlist); {favorite,_} when is_list(Favorite) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Star') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{favorite, D}|Acc3] end, Acc2, Favorite); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Star') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{favorite, D}|Acc3] end, Acc2, Favorite); {tags,_} when is_list(Tags) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Tag') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{tags, D}|Acc3] end, Acc2, Tags); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Tag') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{tags, D}|Acc3] end, Acc2, Tags); {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; {avatar,_} when Avatar==[] orelse is_binary(Avatar) -> Acc2; {update,_} when Update==[] orelse is_integer(Update) -> Acc2; {status,_} when Status==[] orelse Status=='get' orelse Status=='create' orelse Status=='del' orelse Status=='remove' orelse Status=='nick' orelse Status=='add' orelse Status=='update' orelse Status=='list' orelse Status=='patch' orelse Status=='last_msg' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Roster'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Profile'{phone = Phone, services = Services, rosters = Rosters, settings = Settings, update = Update, balance = Balance, presence = Presence, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Profile'{phone = Phone, services = Services, rosters = Rosters, settings = Settings, update = Update, balance = Balance, presence = Presence, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; {services,_} when Services==[] orelse is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); {rosters,_} when Rosters==[] orelse is_list(Rosters) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Roster') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{rosters, D}|Acc3] end, Acc2, Rosters); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Roster') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{rosters, D}|Acc3] end, Acc2, Rosters); {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {update,_} when is_integer(Update) -> Acc2; {balance,_} when is_integer(Balance) -> Acc2; {presence,_} when Presence==[] orelse Presence=='offline' orelse Presence=='online' -> Acc2; {status,_} when Status==[] orelse Status=='remove' orelse Status=='get' orelse Status=='patch' orelse Status=='update' orelse Status=='delete' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Profile'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Friend'{phone_id = Phone_id, friend_id = Friend_id, settings = Settings, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Friend'{phone_id = Phone_id, friend_id = Friend_id, settings = Settings, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {phone_id,_} when is_binary(Phone_id) -> Acc2; {friend_id,_} when is_binary(Friend_id) -> Acc2; {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {status,_} when Status=='ban' orelse Status=='unban' orelse Status=='request' orelse Status=='confirm' orelse Status=='update' orelse Status=='ignore' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Friend'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'act'{name = Name, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'act'{name = Name, data = Data}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when Name==[] orelse is_binary(Name) -> Acc2; {data,_} when is_binary(Data) orelse is_integer(Data) orelse is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); + lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'act'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Job'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, context = Context, proc = Proc, time = Time, data = Data, events = Events, settings = Settings, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Job'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, context = Context, proc = Proc, time = Time, data = Data, events = Events, settings = Settings, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -688,16 +732,17 @@ validate(D = #'Job'{id = Id, container = Container, feed_id = Feed_id, prev = Pr {proc,_} when Proc==[] orelse is_integer(Proc) orelse is_record(Proc,'process') -> Acc2; {time,_} when Time==[] orelse is_integer(Time) -> Acc2; {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Message') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Message') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); {events,_} when Events==[] orelse is_list(Events) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'messageEvent') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{events, D}|Acc3] end, Acc2, Events); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'messageEvent') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{events, D}|Acc3] end, Acc2, Events); {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); {status,_} when Status==[] orelse Status=='init' orelse Status=='update' orelse Status=='delete' orelse Status=='pending' orelse Status=='stop' orelse Status=='complete' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Job'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'History'{roster_id = Roster_id, feed = Feed, size = Size, entity_id = Entity_id, data = Data, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'History'{roster_id = Roster_id, feed = Feed, size = Size, entity_id = Entity_id, data = Data, status = Status}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {roster_id,_} when is_binary(Roster_id) -> Acc2; @@ -705,91 +750,101 @@ validate(D = #'History'{roster_id = Roster_id, feed = Feed, size = Size, entity_ {size,_} when Size==[] orelse is_integer(Size) -> Acc2; {entity_id,_} when Entity_id==[] orelse is_integer(Entity_id) -> Acc2; {data,_} when Data==[] orelse is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Message') orelse is_record(Tmp,'Job') orelse is_record(Tmp,'StickerPack') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Message') orelse is_record(Tmp,'Job') orelse is_record(Tmp,'StickerPack') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); {status,_} when Status=='updated' orelse Status=='get' orelse Status=='update' orelse Status=='last_loaded' orelse Status=='last_msg' orelse Status=='get_reply' orelse Status=='double_get' orelse Status=='delete' orelse Status=='image' orelse Status=='video' orelse Status=='file' orelse Status=='link' orelse Status=='audio' orelse Status=='contact' orelse Status=='location' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'History'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Schedule'{id = Id, proc = Proc, data = Data, state = State}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Schedule'{id = Id, proc = Proc, data = Data, state = State}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; {proc,_} when Proc==[] orelse is_integer(Proc) -> Acc2; {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); + lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); {state,_} when State==[] orelse true -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Schedule'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Index'{id = Id, roster = Roster}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Index'{id = Id, roster = Roster}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse true -> Acc2; {roster,_} when is_list(Roster) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{roster, D}|Acc3] end, Acc2, Roster); + lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{roster, D}|Acc3] end, Acc2, Roster); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Index'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Whitelist'{phone = Phone, created = Created}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Whitelist'{phone = Phone, created = Created}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; {created,_} when Created==[] orelse is_integer(Created) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Whitelist'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'error'{code = Code}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'error'{code = Code}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {code,_} when Code==[] orelse is_atom(Code) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'error'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'ok'{code = Code}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'ok'{code = Code}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {code,_} when Code==[] orelse is_binary(Code) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'ok'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'error2'{code = Code, src = Src}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'error2'{code = Code, src = Src}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {code,_} when Code==[] orelse is_atom(Code) -> Acc2; {src,_} when Src==[] orelse is_binary(Src) orelse is_integer(Src) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'error2'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'ok2'{code = Code, src = Src}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'ok2'{code = Code, src = Src}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {code,_} when Code==[] orelse is_atom(Code) -> Acc2; {src,_} when Src==[] orelse is_tuple(Src) orelse is_binary(Src) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'ok2'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'io'{code = Code, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'io'{code = Code, data = Data}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {code,_} when Code==[] orelse is_record(Code,'ok') orelse is_record(Code,'error') orelse is_record(Code,'ok2') orelse is_record(Code,'error2') -> Acc2; {data,_} when Data==[] orelse is_binary(Data) orelse is_record(Data,'Roster') orelse is_tuple(Data) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'io'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'errors'{code = Code, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'errors'{code = Code, data = Data}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {code,_} when Code==[] orelse is_list(Code) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{code, D}|Acc3] end, Acc2, Code); + lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{code, D}|Acc3] end, Acc2, Code); {data,_} when Data==[] orelse true -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'errors'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'PushService'{recipients = Recipients, id = Id, ttl = Ttl, module = Module, priority = Priority, payload = Payload}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'PushService'{recipients = Recipients, id = Id, ttl = Ttl, module = Module, priority = Priority, payload = Payload}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {recipients,_} when is_list(Recipients) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{recipients, D}|Acc3] end, Acc2, Recipients); + lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{recipients, D}|Acc3] end, Acc2, Recipients); {id,_} when Id==[] orelse is_binary(Id) -> Acc2; {ttl,_} when Ttl==[] orelse is_integer(Ttl) -> Acc2; {module,_} when Module==[] orelse is_binary(Module) -> Acc2; @@ -797,8 +852,9 @@ validate(D = #'PushService'{recipients = Recipients, id = Id, ttl = Ttl, module {payload,_} when Payload==[] orelse is_binary(Payload) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'PushService'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'PublishService'{message = Message, topic = Topic, qos = Qos}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'PublishService'{message = Message, topic = Topic, qos = Qos}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {message,_} when Message==[] orelse is_binary(Message) -> Acc2; @@ -806,16 +862,18 @@ validate(D = #'PublishService'{message = Message, topic = Topic, qos = Qos}, Acc {qos,_} when Qos==[] orelse is_integer(Qos) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'PublishService'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'FakeNumbers'{phone = Phone, created = Created}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'FakeNumbers'{phone = Phone, created = Created}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; {created,_} when Created==[] orelse is_integer(Created) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'FakeNumbers'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'handler'{name = Name, module = Module, class = Class, group = Group, config = Config, state = State, seq = Seq}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'handler'{name = Name, module = Module, class = Class, group = Group, config = Config, state = State, seq = Seq}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when is_atom(Name) -> Acc2; @@ -827,8 +885,9 @@ validate(D = #'handler'{name = Name, module = Module, class = Class, group = Gro {seq,_} -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'handler'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'pi'{name = Name, sup = Sup, module = Module, state = State}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'pi'{name = Name, sup = Sup, module = Module, state = State}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {name,_} when is_atom(Name) -> Acc2; @@ -837,14 +896,15 @@ validate(D = #'pi'{name = Name, sup = Sup, module = Module, state = State}, Acc, {state,_} -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'pi'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'cx'{handlers = Handlers, actions = Actions, req = Req, module = Module, lang = Lang, path = Path, session = Session, formatter = Formatter, params = Params, node = Node, client_pid = Client_pid, state = State, from = From, vsn = Vsn}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'cx'{handlers = Handlers, actions = Actions, req = Req, module = Module, lang = Lang, path = Path, session = Session, formatter = Formatter, params = Params, node = Node, client_pid = Client_pid, state = State, from = From, vsn = Vsn}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {handlers,_} when is_list(Handlers) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'handler') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{handlers, D}|Acc3] end, Acc2, Handlers); + lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'handler') -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{handlers, D}|Acc3] end, Acc2, Handlers); {actions,_} when is_list(Actions) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{actions, D}|Acc3] end, Acc2, Actions); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{actions, D}|Acc3] end, Acc2, Actions); {req,_} when Req==[] orelse true -> Acc2; {module,_} when Module==[] orelse is_atom(Module) -> Acc2; {lang,_} when Lang==[] orelse is_atom(Lang) -> Acc2; @@ -852,7 +912,7 @@ validate(D = #'cx'{handlers = Handlers, actions = Actions, req = Req, module = M {session,_} when Session==[] orelse is_binary(Session) -> Acc2; {formatter,_} when Formatter=='bert' orelse Formatter=='json' -> Acc2; {params,_} when Params==[] orelse is_list(Params) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{params, D}|Acc3] end, Acc2, Params); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{params, D}|Acc3] end, Acc2, Params); {node,_} when Node==[] orelse is_atom(Node) -> Acc2; {client_pid,_} when Client_pid==[] orelse true -> Acc2; {state,_} when State==[] orelse true -> Acc2; @@ -860,8 +920,9 @@ validate(D = #'cx'{handlers = Handlers, actions = Actions, req = Req, module = M {vsn,_} when Vsn==[] orelse is_binary(Vsn) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'cx'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'user'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, email = Email}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'user'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, email = Email}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -873,24 +934,9 @@ validate(D = #'user'{id = Id, container = Container, feed_id = Feed_id, prev = P {email,_} when Email==[] orelse is_binary(Email) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'user'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'user2'{id = Id, container = Container, feed = Feed, next = Next, prev = Prev, mail = Mail, name = Name, pass = Pass, zone = Zone, type = Type}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed,_} -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {mail,_} when Mail==[] orelse is_binary(Mail) -> Acc2; - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {pass,_} when Pass==[] orelse is_binary(Pass) -> Acc2; - {zone,_} when Zone==[] orelse is_binary(Zone) -> Acc2; - {type,_} when Type==[] orelse is_atom(Type) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'user2'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'group'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'group'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when Id==[] orelse is_integer(Id) -> Acc2; @@ -901,17 +947,19 @@ validate(D = #'group'{id = Id, container = Container, feed_id = Feed_id, prev = {feeds,_} when is_list(Feeds) -> []; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'group'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_topic'{topic = Topic, flags = Flags}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_topic'{topic = Topic, flags = Flags}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {topic,_} when is_binary(Topic) -> Acc2; {flags,_} when is_list(Flags) -> - lists:foldl(fun(Tmp, Acc3) when Tmp=='retained' orelse Tmp=='static' -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{flags, D}|Acc3] end, Acc2, Flags); + lists:foldl(fun(Tmp, Acc3) when Tmp=='retained' orelse Tmp=='static' -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{flags, D}|Acc3] end, Acc2, Flags); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_topic'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_client'{client_id = Client_id, client_pid = Client_pid, username = Username, peername = Peername, clean_sess = Clean_sess, proto_ver = Proto_ver, will_topic = Will_topic, ws_initial_headers = Ws_initial_headers}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_client'{client_id = Client_id, client_pid = Client_pid, username = Username, peername = Peername, clean_sess = Clean_sess, proto_ver = Proto_ver, will_topic = Will_topic, ws_initial_headers = Ws_initial_headers}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {client_id,_} when is_binary(Client_id) orelse Client_id=='undefined' -> Acc2; @@ -922,11 +970,12 @@ validate(D = #'mqtt_client'{client_id = Client_id, client_pid = Client_pid, user {proto_ver,_} when Proto_ver==3 orelse Proto_ver==4 -> Acc2; {will_topic,_} when Will_topic=='undefined' orelse is_binary(Will_topic) -> Acc2; {ws_initial_headers,_} when is_list(Ws_initial_headers) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{ws_initial_headers, D}|Acc3] end, Acc2, Ws_initial_headers); + lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3); (Tmp, Acc3) -> [{ws_initial_headers, D}|Acc3] end, Acc2, Ws_initial_headers); _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_client'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_session'{client_id = Client_id, sess_pid = Sess_pid, clean_sess = Clean_sess}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_session'{client_id = Client_id, sess_pid = Sess_pid, clean_sess = Clean_sess}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {client_id,_} when is_binary(Client_id) -> Acc2; @@ -934,31 +983,35 @@ validate(D = #'mqtt_session'{client_id = Client_id, sess_pid = Sess_pid, clean_s _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_session'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_message'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_message'{id = Id}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when is_binary(Id) orelse Id=='undefined' -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_message'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_delivery'{sender = Sender, message = Message}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_delivery'{sender = Sender, message = Message}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {message, #'mqtt_message'{}} -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_delivery'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_route'{topic = Topic, node = Node}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_route'{topic = Topic, node = Node}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {topic,_} when is_binary(Topic) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_route'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_alarm'{id = Id, severity = Severity, title = Title, summary = Summary}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'mqtt_alarm'{id = Id, severity = Severity, title = Title, summary = Summary}, Acc) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of {id,_} when is_binary(Id) -> Acc2; @@ -967,4 +1020,5 @@ validate(D = #'mqtt_alarm'{id = Id, severity = Severity, title = Title, summary {summary,_} when is_list(Summary) orelse is_binary(Summary) -> Acc2; _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'mqtt_alarm'), tl(tuple_to_list(D)))), + {CustomValidateModule, ValidateFun} = application:get_env(bert, custom_validate, {?MODULE, custom_validate}), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end. \ No newline at end of file diff --git a/rebar.config b/rebar.config index 860f95c7fccff0d2d5b2af608900560bb216a5e0..9e99afe7cc01e2b091ebd742cf7f600d0a604a02 100644 --- a/rebar.config +++ b/rebar.config @@ -1,12 +1,15 @@ {sub_dirs,["apps"]}. {lib_dirs,["apps","deps"]}. {deps_dir,"deps"}. + +{erl_opts, [{parse_transform,lager_transform},{parse_transform, oc_transform},debug_info]}. + {deps, [ - {lager, ".*", {git, "https://github.com/erlang-lager/lager.git","3.6.1"}}, + {lager, ".*", {git, "https://github.com/voxoz/lager.git", {tag, "master"}}}, {bert, ".*", {git, "git://github.com/synrc/bert",{tag,"master"}}}, {active, ".*", {git, "git://github.com/synrc/active",{tag,"master"}}}, {esockd, ".*", {git, "https://github.com/voxoz/esockd",{ref, "a80634b961c315ffe5f020d73236473b53ae5dc9"}}}, - {bpe, ".*", {git, "git://github.com/synrc/bpe.git", {tag,"8f9e5ca7c8b8e5eb9c64381ceed549e9f5ef4f57"}}}, + {bpe, ".*", {git, "git://github.com/synrc/bpe.git", {tag,"master"}}}, {emqttd, ".*", {git, "git://github.com/synrc/emqttd",{tag,"master"}}}, {n2o, ".*", {git, "git://github.com/synrc/n2o", {tag,"master"}}}, {emqttc, ".*", {git, "git://github.com/voxoz/emqttc",{tag,"master"}}}, @@ -19,7 +22,7 @@ {gproc, ".*", {git, "https://github.com/uwiger/gproc","0.6.1"}}, {erlydtl, ".*", {git, "git://github.com/voxoz/erlydtl",{tag,"master"}}}, {mini_s3, ".*", {git, "https://github.com/chef/mini_s3.git",{tag,"master"}}}, - {jwt, ".*", {git, "https://github.com/artemeff/jwt.git",{tag, "0.1.0"}}}, + {jwt, ".*", {git, "https://github.com/artemeff/jwt.git",{tag, "0.1.8"}}}, {jsx, ".*", {git, "https://github.com/talentdeficit/jsx.git","v2.9.0"}}, {base64url, ".*", {git, "https://github.com/dvv/base64url.git","v1.0"}}, {migresia, ".*", {git, "https://github.com/yoonka/migresia.git",{tag,"master"}}}, @@ -34,3 +37,23 @@ % {json_rec, ".*", {git, "https://github.com/justinkirby/json_rec.git",{tag,"master"}}} ]}. {erl_opts, [{parse_transform,lager_transform},{parse_transform, oc_transform},debug_info]}. + +{relx, [{release, {server, "1.0.0"}, + + [roster, service]}, + + {sys_config, "./sys.config"}, + {vm_args, "./vm.args"}, + + {dev_mode, true}, + {include_erts, false}, + + {extended_start_script, true} + ] +}. + +{profiles, [ + {prod, [{relx, [{dev_mode, false}, + {include_erts, true}]} + ]} +]}. diff --git a/rebar.lock b/rebar.lock index 7e3256db834ca8f417cd3fad5c391a0b4c7b582e..888b68fe4bfad7839b6e6a46e4277d941beb4359 100644 --- a/rebar.lock +++ b/rebar.lock @@ -9,11 +9,11 @@ 0}, {<<"bert">>, {git,"git://github.com/synrc/bert", - {ref,"9bf347a128c0af6ca422dffb8f066ec1ff9fafca"}}, + {ref,"6d01890639016c5ff78d04c723a07a8a1b101ebf"}}, 0}, {<<"bpe">>, - {git,"git://github.com/spawnproc/bpe.git", - {ref,"73fa6ab18d77e8689c18a80e6dd1add2fdd4db22"}}, + {git,"git://github.com/synrc/bpe.git", + {ref,"7a7e5a00f29003315c1b29a3fe1438be061f20eb"}}, 0}, {<<"certifi">>,{pkg,<<"certifi">>,<<"2.4.2">>},1}, {<<"counters">>, @@ -60,6 +60,10 @@ {git,"https://github.com/voxoz/esockd", {ref,"a80634b961c315ffe5f020d73236473b53ae5dc9"}}, 0}, + {<<"forms">>, + {git,"git://github.com/synrc/forms", + {ref,"9594e8ac01c499c769082b1f949b684c411954cb"}}, + 1}, {<<"fs">>, {git,"git://github.com/synrc/fs", {ref,"dfa36b8fd363cdebff4755c42ce0565d05caaccf"}}, @@ -75,7 +79,7 @@ {<<"goldrush">>, {git,"git://github.com/voxoz/goldrush.git", {ref,"9e92405985827fabd2508b92bdc8b28b9e17b668"}}, - 2}, + 1}, {<<"gproc">>, {git,"https://github.com/uwiger/gproc", {ref,"1d16f5e6d7cf616eec4395f2385e3a680a4ffc9f"}}, @@ -90,16 +94,16 @@ 0}, {<<"jwt">>, {git,"https://github.com/artemeff/jwt.git", - {ref,"cf0fc2688148a5b4e1583e0a2788c0aa5b522df7"}}, + {ref,"6fd754fec1cd2e4577a5d7121233371900aa44e7"}}, 0}, {<<"kvs">>, {git,"git://github.com/synrc/kvs", - {ref,"6a4ae5cec94add55c95ce4eb497732d682e6cfcc"}}, + {ref,"c0f9bd4766c2751e8f7b1752f8eb949d17f01b87"}}, 1}, {<<"lager">>, - {git,"git://github.com/voxoz/lager", + {git,"https://github.com/voxoz/lager.git", {ref,"1ecf4c17e9e39dd7a1943140477f632d17518f0c"}}, - 1}, + 0}, {<<"libphonenumber_erlang">>, {git,"https://github.com/loxs/libphonenumber_erlang.git", {ref,"da6656a9fb43f91c4bfc3e05066f1d834dabb335"}}, @@ -130,7 +134,7 @@ 0}, {<<"nitro">>, {git,"git://github.com/synrc/nitro", - {ref,"3f15180c00fcc5c49686d2afe6267467d844e06a"}}, + {ref,"007d2d980f4d123b1d596546602e38f69e359067"}}, 1}, {<<"opencensus-erlang">>, {git,"https://github.com/voxoz/opencensus-erlang",