Add optional moderator codes (#2413)

* add column for moderator code

* add interface for moderator access code

* add support for write and update moderator access

* check if correct moderator_code in session

* move access code form into own component

* add support for moderator access code

* add support for moderator access code

* add copy code button for moderator code

* freeze all the things

* add tests for moderator access code

* add helpfer for moderator_access setting

* add setting for moderator access code

* show setting for moderator access code

* add checks for moderator code setting

* use method from room controller for moderator password check

* add tests for login with moderator access code

* add check for moderator code setting

* check if moderator codes are enabled in settings

* only display form for moderator code if enabled in settings

* add newline at end of file

* make check for moderator code available as helper

* align style of join button and access code button

* add localization for moderator codes

* add field for moderator codes

* add field for moderator access code to rooms

* fixes for rubocop

* fix LineLenghts for rubocop

* fix double space

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
This commit is contained in:
zechmeister
2021-03-14 19:24:30 +01:00
committed by GitHub
parent 4cd41f5aa8
commit 9dc59b1211
19 changed files with 447 additions and 174 deletions

View File

@ -273,6 +273,21 @@ describe RoomsController, type: :controller do
expect(response).to redirect_to(join_path(@owner.main_room, "Join Name", {}, response.cookies["guest_id"]))
end
it "should use join name if user is not logged in and meeting running and moderator access code is enabled and set" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(true)
allow_any_instance_of(Setting).to receive(:get_value).and_call_original
allow_any_instance_of(Setting).to receive(:get_value).with("Moderator Access Codes").and_return("true")
room = Room.new(name: "test", moderator_access_code: "abcdef")
room.room_settings = "{ }"
room.owner = @owner
room.save
post :join, params: { room_uid: room, join_name: "Join Name" }, session: { moderator_access_code: "abcdef" }
expect(response).to redirect_to(join_path(room, "Join Name", { user_is_moderator: true }, response.cookies["guest_id"]))
end
it "should render wait if meeting isn't running" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(false)
@ -398,6 +413,62 @@ describe RoomsController, type: :controller do
expect(response).to redirect_to room_path(protected_room.uid)
end
it "should join the room as moderator if the user has the moderator_access code (and regular access code is not set)" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(true)
allow_any_instance_of(Setting).to receive(:get_value).and_call_original
allow_any_instance_of(Setting).to receive(:get_value).with("Moderator Access Codes").and_return("true")
room = Room.new(name: "test", moderator_access_code: "abcdef")
room.room_settings = "{ }"
room.owner = @owner
room.save
post :join, params: { room_uid: room, join_name: "Join Name" }, session: { moderator_access_code: "abcdef" }
expect(response).to redirect_to(join_path(room, "Join Name", { user_is_moderator: true }, response.cookies["guest_id"]))
end
it "should join the room as moderator if the user has the moderator_access code (and regular access code is set)" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(true)
allow_any_instance_of(Setting).to receive(:get_value).and_call_original
allow_any_instance_of(Setting).to receive(:get_value).with("Moderator Access Codes").and_return("true")
room = Room.new(name: "test", access_code: "123456", moderator_access_code: "abcdef")
room.room_settings = "{ }"
room.owner = @owner
room.save
post :join, params: { room_uid: room, join_name: "Join Name" }, session: { moderator_access_code: "abcdef" }
expect(response).to redirect_to(join_path(room, "Join Name", { user_is_moderator: true }, response.cookies["guest_id"]))
end
it "should redirect to login if a wrong moderator access code is supplied" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(true)
room = Room.new(name: "test", access_code: "123456", moderator_access_code: "abcdef")
room.room_settings = "{ }"
room.owner = @owner
room.save
post :join, params: { room_uid: room, join_name: "Join Name" }, session: { moderator_access_code: "abcdee" }
expect(response).to redirect_to room_path(room.uid)
end
it "should redirect to login if a 'empty' moderator access code is supplied and moderator code is not set" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(true)
room = Room.new(name: "test", access_code: "123456")
room.room_settings = "{ }"
room.owner = @owner
room.save
post :join, params: { room_uid: room, join_name: "Join Name" }, session: { moderator_access_code: nil }
expect(response).to redirect_to room_path(room.uid)
end
it "should join owner as moderator if meeting running" do
allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:is_meeting_running?).and_return(true)
@ -671,12 +742,49 @@ describe RoomsController, type: :controller do
expect(flash[:alert]).to be_nil
end
it "should redirect to show with valid moderator_access_code as regular access_code" do
allow_any_instance_of(Setting).to receive(:get_value).and_call_original
allow_any_instance_of(Setting).to receive(:get_value).with("Moderator Access Codes").and_return("true")
@room.moderator_access_code = "abcdef"
@room.save
post :login, params: { room_uid: @room.uid, room: { access_code: "abcdef" } }
expect(response).to redirect_to room_path(@room.uid)
expect(flash[:alert]).to be_nil
expect(session[:moderator_access_code]).to eq("abcdef")
end
it "should redirect to show with and notify user of invalid access code" do
post :login, params: { room_uid: @room.uid, room: { access_code: "123455" } }
expect(response).to redirect_to room_path(@room.uid)
expect(flash[:alert]).to eq(I18n.t("room.access_code_required"))
end
it "should redirect to show and notify user of invalid moderator access code" do
@room.moderator_access_code = "abcdef"
@room.save
post :login, params: { room_uid: @room.uid, room: { moderator_access_code: "abcdee" } }
expect(response).to redirect_to room_path(@room.uid)
expect(flash[:alert]).to eq(I18n.t("room.access_code_required"))
end
it "it should redirect to show with valid moderator access code and disabled moderator codes setting" do
allow_any_instance_of(Setting).to receive(:get_value).and_call_original
allow_any_instance_of(Setting).to receive(:get_value).with("Moderator Access Codes").and_return("false")
@room.moderator_access_code = "abcdef"
@room.save
post :join, params: { room_uid: @room, join_name: "Join Name" }, session: { moderator_access_code: "abcdef" }
expect(response).to redirect_to room_path(@room.uid)
expect(flash[:alert]).to eq(I18n.t("room.access_code_required"))
end
end
describe "POST join_specific_room" do