forked from External/greenlight
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:
@ -186,6 +186,12 @@ class ApplicationController < ActionController::Base
|
||||
end
|
||||
helper_method :recording_consent_required?
|
||||
|
||||
# Indicates whether users are allowed to add moderator access codes to rooms
|
||||
def moderator_code_allowed?
|
||||
@settings.get_value("Moderator Access Codes") == "true"
|
||||
end
|
||||
helper_method :moderator_code_allowed?
|
||||
|
||||
# Returns a list of allowed file types
|
||||
def allowed_file_types
|
||||
Rails.configuration.allowed_file_types
|
||||
|
@ -50,10 +50,11 @@ module Joiner
|
||||
def join_room(opts)
|
||||
@room_settings = JSON.parse(@room[:room_settings])
|
||||
|
||||
if room_running?(@room.bbb_id) || @room.owned_by?(current_user) || room_setting_with_config("anyoneCanStart")
|
||||
moderator_privileges = @room.owned_by?(current_user) || valid_moderator_access_code(session[:moderator_access_code])
|
||||
if room_running?(@room.bbb_id) || room_setting_with_config("anyoneCanStart") || moderator_privileges
|
||||
|
||||
# Determine if the user needs to join as a moderator.
|
||||
opts[:user_is_moderator] = @room.owned_by?(current_user) || room_setting_with_config("joinModerator") || @shared_room
|
||||
opts[:user_is_moderator] = room_setting_with_config("joinModerator") || @shared_room || moderator_privileges
|
||||
opts[:record] = record_meeting
|
||||
opts[:require_moderator_approval] = room_setting_with_config("requireModeratorApproval")
|
||||
opts[:mute_on_start] = room_setting_with_config("muteOnStart")
|
||||
|
@ -44,7 +44,9 @@ class RoomsController < ApplicationController
|
||||
return redirect_to current_user.main_room, flash: { alert: I18n.t("room.room_limit") } if room_limit_exceeded
|
||||
|
||||
# Create room
|
||||
@room = Room.new(name: room_params[:name], access_code: room_params[:access_code])
|
||||
@room = Room.new(name: room_params[:name],
|
||||
access_code: room_params[:access_code],
|
||||
moderator_access_code: room_params[:moderator_access_code])
|
||||
@room.owner = current_user
|
||||
@room.room_settings = create_room_settings_string(room_params)
|
||||
|
||||
@ -109,8 +111,9 @@ class RoomsController < ApplicationController
|
||||
@shared_room = room_shared_with_user
|
||||
|
||||
unless @room.owned_by?(current_user) || @shared_room
|
||||
# Don't allow users to join unless they have a valid access code or the room doesn't have an access code
|
||||
if @room.access_code && !@room.access_code.empty? && @room.access_code != session[:access_code]
|
||||
# Don't allow users to join unless they have a valid access code or the room doesn't have an access codes
|
||||
valid_access_code = !@room.access_code.present? || @room.access_code == session[:access_code]
|
||||
if !valid_access_code && !valid_moderator_access_code(session[:moderator_access_code])
|
||||
return redirect_to room_path(room_uid: params[:room_uid]), flash: { alert: I18n.t("room.access_code_required") }
|
||||
end
|
||||
|
||||
@ -203,7 +206,8 @@ class RoomsController < ApplicationController
|
||||
@room.update_attributes(
|
||||
name: options[:name],
|
||||
room_settings: room_settings_string,
|
||||
access_code: options[:access_code]
|
||||
access_code: options[:access_code],
|
||||
moderator_access_code: options[:moderator_access_code]
|
||||
)
|
||||
|
||||
flash[:success] = I18n.t("room.update_settings_success")
|
||||
@ -321,9 +325,16 @@ class RoomsController < ApplicationController
|
||||
|
||||
# POST /:room_uid/login
|
||||
def login
|
||||
session[:access_code] = room_params[:access_code]
|
||||
# use same form for access_code and moderator_access_code
|
||||
if valid_moderator_access_code(room_params[:access_code])
|
||||
session[:moderator_access_code] = room_params[:access_code]
|
||||
else
|
||||
session[:access_code] = room_params[:access_code]
|
||||
end
|
||||
|
||||
flash[:alert] = I18n.t("room.access_code_required") if session[:access_code] != @room.access_code
|
||||
if session[:access_code] != @room.access_code && !valid_moderator_access_code(session[:moderator_access_code])
|
||||
flash[:alert] = I18n.t("room.access_code_required")
|
||||
end
|
||||
|
||||
redirect_to room_path(@room.uid)
|
||||
end
|
||||
@ -345,7 +356,7 @@ class RoomsController < ApplicationController
|
||||
def room_params
|
||||
params.require(:room).permit(:name, :auto_join, :mute_on_join, :access_code,
|
||||
:require_moderator_approval, :anyone_can_start, :all_join_moderator,
|
||||
:recording, :presentation)
|
||||
:recording, :presentation, :moderator_access_code)
|
||||
end
|
||||
|
||||
# Find the room from the uid.
|
||||
@ -412,6 +423,11 @@ class RoomsController < ApplicationController
|
||||
end
|
||||
helper_method :room_limit_exceeded
|
||||
|
||||
def valid_moderator_access_code(code)
|
||||
code == @room.moderator_access_code && !@room.moderator_access_code.blank? && moderator_code_allowed?
|
||||
end
|
||||
helper_method :valid_moderator_access_code
|
||||
|
||||
def record_meeting
|
||||
# If the require consent setting is checked, then check the room setting, else, set to true
|
||||
if recording_consent_required?
|
||||
|
Reference in New Issue
Block a user