From 3384ba65a7a20c85ae589765574c530645ebac92 Mon Sep 17 00:00:00 2001 From: Tobias Lindahl Date: Thu, 14 May 2020 13:16:35 +0200 Subject: [PATCH 1/2] Add admin information on member tuples in REST CRI API endpoints --- apps/roster/src/rest/rest_cowboy_cri_handler.erl | 5 ++++- spec/nynja_rest.yaml | 4 ++++ test/api_nynja.erl | 3 ++- test/server_SUITE.erl | 14 ++++++++++---- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/roster/src/rest/rest_cowboy_cri_handler.erl b/apps/roster/src/rest/rest_cowboy_cri_handler.erl index 3241aafd7..66e32ae4f 100644 --- a/apps/roster/src/rest/rest_cowboy_cri_handler.erl +++ b/apps/roster/src/rest/rest_cowboy_cri_handler.erl @@ -215,18 +215,21 @@ room_members_to_json(Req, State) -> member_tuples(PhoneId, RoomId) -> case roster:muc_member(nitro:to_binary(PhoneId), RoomId) of - #'Member'{} -> + #'Member'{status = Status} -> [{<<"phone_id">>, PhoneId}, + {<<"is_admin">>, Status =:= admin}, {<<"is_member">>, true}]; [] -> PhoneNumber = rest_main_helper:get_phone_number(PhoneId), case kvs:get('Profile', nitro:to_binary(PhoneNumber)) of {error, _} -> [{<<"phone_id">>, PhoneId}, + {<<"is_admin">>, false}, {<<"is_member">>, false}, {error, ?ERROR_USER_404}]; _ -> [{<<"phone_id">>, PhoneId}, + {<<"is_admin">>, false}, {<<"is_member">>, false}] end end. diff --git a/spec/nynja_rest.yaml b/spec/nynja_rest.yaml index 5f2123dce..acd7f7849 100644 --- a/spec/nynja_rest.yaml +++ b/spec/nynja_rest.yaml @@ -1122,6 +1122,9 @@ components: is_member: type: string ## should be boolean, but jsx_tuples_to_json broken + is_admin: + type: string + ## should be boolean, but jsx_tuples_to_json broken phone_id: type: string error: @@ -1129,6 +1132,7 @@ components: required: - is_member - phone_id + - is_admin RoomId: type: object diff --git a/test/api_nynja.erl b/test/api_nynja.erl index a153e8b3b..8fd57f14f 100644 --- a/test/api_nynja.erl +++ b/test/api_nynja.erl @@ -25,9 +25,10 @@ definitions() -> {"/components/schemas/MemberEntry", #{<<"properties">> => #{<<"error">> => #{<<"type">> => <<"string">>}, + <<"is_admin">> => #{<<"type">> => <<"string">>}, <<"is_member">> => #{<<"type">> => <<"string">>}, <<"phone_id">> => #{<<"type">> => <<"string">>}}, - <<"required">> => [<<"is_member">>,<<"phone_id">>], + <<"required">> => [<<"is_admin">>,<<"is_member">>,<<"phone_id">>], <<"type">> => <<"object">>}}, {"/components/schemas/PhoneEntry", #{<<"properties">> => diff --git a/test/server_SUITE.erl b/test/server_SUITE.erl index 52c6bf23f..28e3f4223 100644 --- a/test/server_SUITE.erl +++ b/test/server_SUITE.erl @@ -242,18 +242,21 @@ rooms(Cfg) -> ct:log("Phone ids should be a real id, not phone number"), {ok, 200, #{data := [#{error := <<"User Not Found">>, is_member := <<"false">>, + is_admin := <<"false">>, phone_id := Phone}]}} = request('GetMembersCRIRoom', #{phoneid => AdminId, room_id => RoomId, phone_ids => Phone}, [basic_auth() | Cfg]), ct:log("User is found, but phone ids should contain phone plus roster ix"), {ok, 200, #{data := [#{is_member := <<"false">>, + is_admin := <<"false">>, phone_id := LookupPhone}]}} = request('GetMembersCRIRoom', #{phoneid => AdminId, room_id => RoomId, phone_ids => LookupPhone}, [basic_auth() | Cfg]), %% The AdminId is the one we are looking for {ok, 200, #{data := [#{is_member := <<"true">>, + is_admin := <<"true">>, phone_id := AdminId}]}} = request('GetMembersCRIRoom', #{phoneid => AdminId, room_id => RoomId, phone_ids => AdminId}, [basic_auth() | Cfg]), @@ -261,11 +264,11 @@ rooms(Cfg) -> nynja:join_room(User, RoomName, member), ct:log("Check that useer can become a member of room ~p", [RoomName]), - {ok, 200, #{data := [#{is_member := <<"true">>}]}} = + {ok, 200, #{data := [#{is_member := <<"true">>, is_admin := <<"false">>}]}} = request('GetMembersCRIRoom', #{phoneid => AdminId, room_id => RoomId, phone_ids => MemberId}, [basic_auth() | Cfg]), - {ok, 200, #{data := [#{is_member := <<"true">>}]}} = + {ok, 200, #{data := [#{is_member := <<"true">>, is_admin := <<"true">>}]}} = request('GetMembersCRIRoom', #{phoneid => MemberId, room_id => RoomId, phone_ids => AdminId}, [basic_auth() | Cfg]), @@ -320,8 +323,9 @@ create_and_join_room_cri(Cfg) -> {ok, 200, #{data := #{ room_id := RoomId}}} = request('PostCRIRoom', #{phoneid => RosterId1}, [basic_auth() | Cfg]), - ct:log("Check that room exists and has the creator as member"), + ct:log("Check that room exists and has the creator as member, and admin"), {ok, 200, #{data := [#{is_member := <<"true">>, + is_admin := <<"true">>, phone_id := RosterId1}] }} = request('GetMembersCRIRoom', @@ -363,9 +367,11 @@ wait_for_cri_room_member(RoomId, RosterId1, RosterId2, N, Cfg) -> Spec = #{phoneid => RosterId1, room_id => RoomId, phone_ids => RosterId2}, case request('GetMembersCRIRoom', Spec,[basic_auth() | Cfg]) of {ok, 200, #{data := [#{is_member := <<"true">>, + is_admin := <<"false">>, phone_id := RosterId2}]}} -> ok; {ok, 200, #{data := [#{is_member := <<"false">>, + is_admin := <<"false">>, phone_id := RosterId2}]}} -> timer:sleep(200), wait_for_cri_room_member(RoomId, RosterId1, RosterId2, N - 1, Cfg) @@ -890,7 +896,7 @@ register_fresh_user(N) -> request(Id, Params, Config) -> Request = api_nynja:request(Id, Params, Config), - ct:pal("Outgoing Request ~p", [Request]), + ct:log("Outgoing Request ~p", [Request]), {ok, Status, Headers, Body} = api_nynja:http_request(Request, [{timeout, 10000}], [], -- GitLab From 77d48c3b78526fed3d5ac97b7ad81c0ff686f679 Mon Sep 17 00:00:00 2001 From: Thomas Arts Date: Fri, 15 May 2020 08:57:54 +0200 Subject: [PATCH 2/2] new api_nynja --- test/api_nynja.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/api_nynja.erl b/test/api_nynja.erl index 8fd57f14f..fb8ad1520 100644 --- a/test/api_nynja.erl +++ b/test/api_nynja.erl @@ -1,6 +1,6 @@ %% coding: latin-1 %% This code is generated from ../server/spec/nynja_rest.yaml -%% on 2020-05-13 8:31:46 UTC +%% on 2020-05-15 7:04:52 UTC %% Using openapi rebar3 plugin version: #6ad56be %% Do not manually change this code! %% @@ -28,7 +28,7 @@ definitions() -> <<"is_admin">> => #{<<"type">> => <<"string">>}, <<"is_member">> => #{<<"type">> => <<"string">>}, <<"phone_id">> => #{<<"type">> => <<"string">>}}, - <<"required">> => [<<"is_admin">>,<<"is_member">>,<<"phone_id">>], + <<"required">> => [<<"is_member">>,<<"phone_id">>,<<"is_admin">>], <<"type">> => <<"object">>}}, {"/components/schemas/PhoneEntry", #{<<"properties">> => -- GitLab