From c8df0a737a884ef98ebfd23f6391da3d14389482 Mon Sep 17 00:00:00 2001 From: Thomas Arts Date: Tue, 26 May 2020 10:42:56 +0200 Subject: [PATCH 1/3] Update validation (fix error and take new roster.hrl into account) --- apps/roster/src/roster_validator.erl | 35 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/apps/roster/src/roster_validator.erl b/apps/roster/src/roster_validator.erl index 762676f19..a34b3d072 100644 --- a/apps/roster/src/roster_validator.erl +++ b/apps/roster/src/roster_validator.erl @@ -21,12 +21,13 @@ %% roster_validator.erl in "priv/src". %% This file is ignored however, since ?MODULE in apps/roster/src is used instead. +%% Generate at 2020-05-26T10:18:12+02:00 -compile(export_all). -define(COND_FUN(Cond), fun(Rec) when Cond -> true; (_) -> false end). validate(Obj) -> case validate(Obj, []) of ok -> []; - E -> E + Err -> Err end. validate(_, [{[_|_] , _R}|_] = Acc) -> {error, Acc}; @@ -493,12 +494,12 @@ validate(D = #'muc'{name = Name}, Acc) -> end; validate(D = #'mqi'{feed_id = Feed_id, query = Query, status = Status}, Acc) -> ErrFields = lists:flatten( - [case {Field, F} of - {feed_id,_} when is_record(Feed_id,'mqi') -> []; + [case {RecField, F} of + {feed_id,_} when is_record(Feed_id,'muc') -> []; {query,_} when (is_binary(Query) orelse Query==[]) -> []; {status,_} when (Status=='removed' orelse Status=='member' orelse Status=='admin' orelse Status==[]) -> []; - _ -> Field - end || {Field, F} <- lists:zip(record_info(fields, 'mqi'), tl(tuple_to_list(D)))]), + _ -> RecField + end || {RecField, F} <- lists:zip(record_info(fields, 'mqi'), tl(tuple_to_list(D)))]), CondFuns = [], Fields = [], FieldNames = [], @@ -652,7 +653,7 @@ validate(D = #'Link'{id = Id, name = Name, room_id = Room_id, created = Created, 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) -> ErrFields = lists:flatten( - [case {Field, F} of + [case {RecField, F} of {id,_} when (is_binary(Id) orelse Id==[]) -> []; {name,_} when (is_binary(Name) orelse Name==[]) -> []; {links,_} when (is_list(Links) orelse Links==[]) -> []; @@ -666,13 +667,13 @@ validate(D = #'Room'{id = Id, name = Name, links = Links, description = Descript {tos_update,_} when (is_integer(Tos_update) orelse Tos_update==[]) -> []; {unread,_} when (is_integer(Unread) orelse Unread==[]) -> []; {mentions,_} when is_list(Mentions) -> []; - {readers,_} when is_list(Readers) -> []; + {readers,_} when (is_tuple(Readers) orelse Readers=='none' orelse is_list(Readers)) -> []; {last_msg,_} when (is_record(Last_msg,'Message') orelse is_integer(Last_msg) orelse Last_msg==[]) -> []; {update,_} when (is_integer(Update) orelse Update==[]) -> []; {created,_} when (is_integer(Created) orelse Created==[]) -> []; {status,_} when (Status=='unmute' orelse Status=='mute' orelse Status=='last_msg' orelse Status=='delete' orelse Status=='get' orelse Status=='patch' orelse Status=='info' orelse Status=='joined' orelse Status=='join' orelse Status=='removed' orelse Status=='remove' orelse Status=='add' orelse Status=='leave' orelse Status=='create' orelse Status==[]) -> []; - _ -> Field - end || {Field, F} <- lists:zip(record_info(fields, 'Room'), tl(tuple_to_list(D)))]), + _ -> RecField + end || {RecField, F} <- lists:zip(record_info(fields, 'Room'), tl(tuple_to_list(D)))]), CondFuns = [?COND_FUN(is_record(Rec, 'Feature')),?COND_FUN(is_record(Rec, 'Member')),?COND_FUN(is_record(Rec, 'Member')),?COND_FUN(is_record(Rec, 'Desc'))], Fields = [Settings,Members,Admins,Data], FieldNames = [settings,members,admins,data], case validate(lists:zip3(CondFuns, FieldNames, Fields), [{ErrFields, D}|Acc]) of @@ -883,7 +884,7 @@ validate(D = #'Job'{id = Id, container = Container, feed_id = Feed_id, prev = Pr [case {Field, F} of {id,_} when (is_integer(Id) orelse Id==[]) -> []; {container,_} when (Container==[] orelse Container=='chain') -> []; - {feed_id,_} when is_record(Feed_id,'Job') -> []; + {feed_id,_} when is_record(Feed_id,'act') -> []; {prev,_} when (is_integer(Prev) orelse Prev==[]) -> []; {next,_} when (is_integer(Next) orelse Next==[]) -> []; {context,_} when (is_binary(Context) orelse is_integer(Context) orelse Context==[]) -> []; @@ -1169,7 +1170,7 @@ validate(D = #'handler'{name = Name, module = Module, group = Group}, Acc) -> 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) -> ErrFields = lists:flatten( - [case {Field, F} of + [case {RecField, F} of {handlers,_} when is_list(Handlers) -> []; {actions,_} when is_list(Actions) -> []; {req,_} when (Req==[]) -> []; @@ -1178,17 +1179,17 @@ validate(D = #'cx'{handlers = Handlers, actions = Actions, req = Req, module = M {path,_} when (is_binary(Path) orelse Path==[]) -> []; {session,_} when (is_binary(Session) orelse Session==[]) -> []; {formatter,_} when (Formatter=='json' orelse Formatter=='bert') -> []; - {params,_} when (is_list(Params) orelse Params==[]) -> []; + {params,_} when (is_list(Params) orelse is_binary(Params) orelse Params==[]) -> []; {node,_} when (is_atom(Node) orelse Node==[]) -> []; {client_pid,_} when (Client_pid==[]) -> []; {state,_} when (State==[]) -> []; {from,_} when (is_binary(From) orelse From==[]) -> []; {vsn,_} when (is_binary(Vsn) orelse Vsn==[]) -> []; - _ -> Field - end || {Field, F} <- lists:zip(record_info(fields, 'cx'), tl(tuple_to_list(D)))]), - CondFuns = [?COND_FUN(is_record(Rec, 'handler'))], - Fields = [Handlers], - FieldNames = [handlers], case validate(lists:zip3(CondFuns, FieldNames, Fields), [{ErrFields, D}|Acc]) of + _ -> RecField + end || {RecField, F} <- lists:zip(record_info(fields, 'cx'), tl(tuple_to_list(D)))]), + CondFuns = [], + Fields = [], + FieldNames = [], case validate(lists:zip3(CondFuns, FieldNames, Fields), [{ErrFields, D}|Acc]) of ok -> validate(lists:zip(FieldNames,Fields), [{ErrFields, D}|Acc]); Err -> Err end; -- GitLab From 338ee2c22ebd5583b22aafccfba6722082ae9193 Mon Sep 17 00:00:00 2001 From: Thomas Arts Date: Tue, 26 May 2020 11:34:37 +0200 Subject: [PATCH 2/3] update rebar.lock --- rebar.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rebar.lock b/rebar.lock index 0c378341d..1b30e6623 100644 --- a/rebar.lock +++ b/rebar.lock @@ -9,7 +9,7 @@ 0}, {<<"bert">>, {git,"git://github.com/NYNJA-MC/bert.git", - {ref,"8309aa0f62a7603e708f861dbb1fa994502d1052"}}, + {ref,"8128d82739b15b3bf80c6d1149fcc48e8172a58b"}}, 0}, {<<"bpe">>, {git,"git://github.com/synrc/bpe", -- GitLab From 4dd9cee9ee7b1befeb5ecc7457b6bfe4ec93cc94 Mon Sep 17 00:00:00 2001 From: Thomas Arts Date: Tue, 26 May 2020 11:38:41 +0200 Subject: [PATCH 3/3] Revert updating roster.hrl change --- apps/roster/src/roster_validator.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/roster/src/roster_validator.erl b/apps/roster/src/roster_validator.erl index a34b3d072..9ad9eda28 100644 --- a/apps/roster/src/roster_validator.erl +++ b/apps/roster/src/roster_validator.erl @@ -667,7 +667,7 @@ validate(D = #'Room'{id = Id, name = Name, links = Links, description = Descript {tos_update,_} when (is_integer(Tos_update) orelse Tos_update==[]) -> []; {unread,_} when (is_integer(Unread) orelse Unread==[]) -> []; {mentions,_} when is_list(Mentions) -> []; - {readers,_} when (is_tuple(Readers) orelse Readers=='none' orelse is_list(Readers)) -> []; + {readers,_} when is_list(Readers) -> []; %% other types are for internal use only {last_msg,_} when (is_record(Last_msg,'Message') orelse is_integer(Last_msg) orelse Last_msg==[]) -> []; {update,_} when (is_integer(Update) orelse Update==[]) -> []; {created,_} when (is_integer(Created) orelse Created==[]) -> []; -- GitLab