diff --git a/app/controllers/account_activations_controller.rb b/app/controllers/account_activations_controller.rb
index f508b056..80e7ba22 100644
--- a/app/controllers/account_activations_controller.rb
+++ b/app/controllers/account_activations_controller.rb
@@ -17,7 +17,7 @@
# with BigBlueButton; if not, see .
class AccountActivationsController < ApplicationController
- include Verifier
+ include Emailer
before_action :ensure_unauthenticated
before_action :find_user
@@ -46,7 +46,7 @@ class AccountActivationsController < ApplicationController
flash[:alert] = I18n.t("verify.already_verified")
else
begin
- @user.send_activation_email(user_verification_link)
+ send_activation_email(@user)
rescue => e
logger.error "Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
diff --git a/app/controllers/concerns/verifier.rb b/app/controllers/concerns/emailer.rb
similarity index 69%
rename from app/controllers/concerns/verifier.rb
rename to app/controllers/concerns/emailer.rb
index b6bc852b..53a10a9c 100644
--- a/app/controllers/concerns/verifier.rb
+++ b/app/controllers/concerns/emailer.rb
@@ -16,11 +16,27 @@
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see .
-module Verifier
+module Emailer
extend ActiveSupport::Concern
+ # Sends account activation email.
+ def send_activation_email(user)
+ @user = user
+ UserMailer.verify_email(@user, user_verification_link, logo_image, user_color).deliver
+ end
+
+ # Sends password reset email.
+ def send_password_reset_email(user)
+ @user = user
+ UserMailer.password_reset(@user, reset_link, logo_image, user_color).deliver_now
+ end
+
# Returns the link the user needs to click to verify their account
def user_verification_link
request.base_url + edit_account_activation_path(token: @user.activation_token, email: @user.email)
end
+
+ def reset_link
+ request.base_url + edit_password_reset_path(@user.reset_token, email: @user.email)
+ end
end
diff --git a/app/controllers/password_resets_controller.rb b/app/controllers/password_resets_controller.rb
index 280ef06f..e4959eb8 100644
--- a/app/controllers/password_resets_controller.rb
+++ b/app/controllers/password_resets_controller.rb
@@ -17,6 +17,8 @@
# with BigBlueButton; if not, see .
class PasswordResetsController < ApplicationController
+ include Emailer
+
before_action :disable_password_reset, unless: -> { Rails.configuration.enable_email_verification }
before_action :find_user, only: [:edit, :update]
before_action :valid_user, only: [:edit, :update]
@@ -29,7 +31,7 @@ class PasswordResetsController < ApplicationController
@user = User.find_by(email: params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
- @user.send_password_reset_email(reset_link)
+ send_password_reset_email(@user)
flash[:success] = I18n.t("email_sent", email_type: t("reset_password.subtitle"))
redirect_to root_path
else
@@ -78,10 +80,6 @@ class PasswordResetsController < ApplicationController
redirect_to new_password_reset_url, alert: I18n.t("expired_reset_token") if current_user.password_reset_expired?
end
- def reset_link
- request.base_url + edit_password_reset_path(@user.reset_token, email: @user.email)
- end
-
# Confirms a valid user.
def valid_user
unless current_user.authenticated?(:reset, params[:id])
diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb
index 17bc0f8d..4f0a3042 100644
--- a/app/controllers/rooms_controller.rb
+++ b/app/controllers/rooms_controller.rb
@@ -26,6 +26,7 @@ class RoomsController < ApplicationController
before_action :verify_room_ownership, except: [:create, :show, :join, :logout]
before_action :verify_room_owner_verified, only: [:show, :join],
unless: -> { !Rails.configuration.enable_email_verification }
+ before_action :verify_user_not_admin, only: [:show]
# POST /
def create
@@ -244,11 +245,15 @@ class RoomsController < ApplicationController
unless @room.owner.activated?
flash[:alert] = t("room.unavailable")
- if current_user
+ if current_user && !@room.owned_by?(current_user)
redirect_to current_user.main_room
else
redirect_to root_path
end
end
end
+
+ def verify_user_not_admin
+ redirect_to admins_path if current_user && current_user&.has_role?(:super_admin)
+ end
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 8d49a5f3..c10b5133 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -18,7 +18,7 @@
class UsersController < ApplicationController
include RecordingsHelper
- include Verifier
+ include Emailer
before_action :find_user, only: [:edit, :update, :destroy]
before_action :ensure_unauthenticated, only: [:new, :create]
@@ -46,7 +46,7 @@ class UsersController < ApplicationController
# Start email verification and redirect to root.
begin
- @user.send_activation_email(user_verification_link)
+ send_activation_email(@user)
rescue => e
logger.error "Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb
index 2ca2f404..3ffee474 100644
--- a/app/mailers/user_mailer.rb
+++ b/app/mailers/user_mailer.rb
@@ -19,15 +19,19 @@
class UserMailer < ApplicationMailer
default from: Rails.configuration.smtp_sender
- def verify_email(user, url)
+ def verify_email(user, url, image, color)
@user = user
@url = url
+ @image = image
+ @color = color
mail(to: @user.email, subject: t('landing.welcome'))
end
- def password_reset(user, url)
+ def password_reset(user, url, image, color)
@user = user
@url = url
+ @image = image
+ @color = color
mail to: user.email, subject: t('reset_password.subtitle')
end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index de530c94..f67026dc 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -103,8 +103,16 @@ class User < ApplicationRecord
end
def self.admins_search(string)
+ active_database = Rails.configuration.database_configuration[Rails.env]["adapter"]
+ # Postgres requires created_at to be cast to a string
+ created_at_query = if active_database == "postgresql"
+ "created_at::text"
+ else
+ "created_at"
+ end
+
search_query = "name LIKE :search OR email LIKE :search OR username LIKE :search" \
- " OR created_at LIKE :search OR provider LIKE :search"
+ " OR #{created_at_query} LIKE :search OR provider LIKE :search"
search_param = "%#{string}%"
where(search_query, search: search_param)
end
@@ -149,10 +157,6 @@ class User < ApplicationRecord
email_verified
end
- def send_activation_email(url)
- UserMailer.verify_email(self, url).deliver
- end
-
# Sets the password reset attributes.
def create_reset_digest
self.reset_token = User.new_token
@@ -160,11 +164,6 @@ class User < ApplicationRecord
update_attribute(:reset_sent_at, Time.zone.now)
end
- # Sends password reset email.
- def send_password_reset_email(url)
- UserMailer.password_reset(self, url).deliver_now
- end
-
# Returns true if the given token matches the digest.
def authenticated?(attribute, token)
digest = send("#{attribute}_digest")
diff --git a/app/views/shared/admin_settings/_users.html.erb b/app/views/shared/admin_settings/_users.html.erb
index d0fd7347..47140dd5 100644
--- a/app/views/shared/admin_settings/_users.html.erb
+++ b/app/views/shared/admin_settings/_users.html.erb
@@ -68,15 +68,16 @@
<%= user.email && user.email != "" ? user.email : user.username%> |
<%= user.provider %> |
- <% if user.has_role? :denied %>
+ <% roles = user.roles().pluck(:name) %>
+ <% if roles.include?("denied")%>
<%= t("roles.banned") %>
- <% elsif user.has_role? :super_admin %>
+ <% elsif roles.include?("super_admin") %>
<%= t("roles.super_admin") %>
- <% elsif user.has_role? :admin %>
+ <% elsif roles.include?("admin") %>
<%= t("roles.administrator") %>
@@ -87,13 +88,13 @@
<% end %>
|
- <% unless user.has_role? :super_admin %>
+ <% unless roles.include?("super_admin") %>
|