From d3b669d552a3731080712229609691fd00b2de91 Mon Sep 17 00:00:00 2001
From: farhatahmad <35435341+farhatahmad@users.noreply.github.com>
Date: Wed, 28 Aug 2019 16:28:42 -0400
Subject: [PATCH] GRN2-xx: Users, Room and Recordings are now no longer
permanently deleted (#773)
* Bug fixes for 2.4
* Removed accidental code add
* Switched from deleting to tombstoning
* Fixed bug with login
---
app/controllers/admins_controller.rb | 1 +
app/controllers/rooms_controller.rb | 5 +--
app/controllers/sessions_controller.rb | 3 +-
app/models/concerns/deleteable.rb | 45 +++++++++++++++++++
app/models/room.rb | 2 +
app/models/user.rb | 2 +
app/views/users/edit.html.erb | 9 ++++
.../20190822134205_create_role_permissions.rb | 13 +++---
.../20190828153347_add_deleted_column.rb | 10 +++++
db/schema.rb | 12 ++++-
10 files changed, 90 insertions(+), 12 deletions(-)
create mode 100644 app/models/concerns/deleteable.rb
create mode 100644 db/migrate/20190828153347_add_deleted_column.rb
diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb
index 1b52e585..41e7e9f8 100644
--- a/app/controllers/admins_controller.rb
+++ b/app/controllers/admins_controller.rb
@@ -195,6 +195,7 @@ class AdminsController < ApplicationController
role.priority <= current_user.highest_priority_role.priority
return redirect_to admin_roles_path(selected_role: role.id)
else
+ role.role_permissions.delete_all
role.delete
end
diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb
index e9e1b0c6..4283e46a 100644
--- a/app/controllers/rooms_controller.rb
+++ b/app/controllers/rooms_controller.rb
@@ -140,10 +140,7 @@ class RoomsController < ApplicationController
# DELETE /:room_uid
def destroy
# Don't delete the users home room.
- if @room.owned_by?(current_user) && @room != current_user.main_room
- @room.destroy
- delete_all_recordings(@room.bbb_id)
- end
+ @room.destroy if @room.owned_by?(current_user) && @room != current_user.main_room
redirect_to current_user.main_room
end
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index 09eec68e..05a79fca 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -30,7 +30,6 @@ class SessionsController < ApplicationController
def signin
check_if_twitter_account
- providers = configured_providers
if one_provider
provider_path = if Rails.configuration.omniauth_ldap
ldap_signin_path
@@ -147,6 +146,8 @@ class SessionsController < ApplicationController
end
def one_provider
+ providers = configured_providers
+
(!allow_user_signup? || !allow_greenlight_accounts?) && providers.count == 1 &&
!Rails.configuration.loadbalanced_configuration
end
diff --git a/app/models/concerns/deleteable.rb b/app/models/concerns/deleteable.rb
new file mode 100644
index 00000000..a13985c9
--- /dev/null
+++ b/app/models/concerns/deleteable.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
+#
+# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
+#
+# This program is free software; you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free Software
+# Foundation; either version 3.0 of the License, or (at your option) any later
+# version.
+#
+# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with BigBlueButton; if not, see .
+
+module Deleteable
+ extend ActiveSupport::Concern
+
+ included do
+ # By default don't include deleted
+ default_scope { where(deleted: false) }
+ scope :include_deleted, -> { unscope(where: :deleted) }
+ scope :deleted, -> { include_deleted.where(deleted: true) }
+ end
+
+ def destroy
+ run_callbacks :destroy
+ update_attribute(:deleted, true)
+ end
+
+ def delete
+ destroy
+ end
+
+ def undelete
+ assign_attributes(deleted: false)
+ end
+
+ def undelete!
+ update_attribute(:deleted, false)
+ end
+end
diff --git a/app/models/room.rb b/app/models/room.rb
index 23570167..0e61fa7e 100644
--- a/app/models/room.rb
+++ b/app/models/room.rb
@@ -19,6 +19,8 @@
require 'bbb_api'
class Room < ApplicationRecord
+ include Deleteable
+
before_create :setup
validates :name, presence: true
diff --git a/app/models/user.rb b/app/models/user.rb
index 52e39bbe..3ab10b23 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -19,6 +19,8 @@
require 'bbb_api'
class User < ApplicationRecord
+ include Deleteable
+
attr_accessor :reset_token
after_create :setup_user
diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb
index 0c7eefdb..c0a86347 100644
--- a/app/views/users/edit.html.erb
+++ b/app/views/users/edit.html.erb
@@ -18,6 +18,15 @@
<%= render "users/components/menu_buttons" %>
+
+ <% if @user.errors.any? %>
+
<%= t("errors.title") %>:
+
+ <% @user.errors.full_messages.each do |err| %>
+ - <%= err %>.
+ <% end %>
+
+ <% end %>
<%= render "users/components/setting_view", setting_id: "account", setting_title: t("settings.account.subtitle") %>
diff --git a/db/migrate/20190822134205_create_role_permissions.rb b/db/migrate/20190822134205_create_role_permissions.rb
index ff29feb6..158f4ea5 100644
--- a/db/migrate/20190822134205_create_role_permissions.rb
+++ b/db/migrate/20190822134205_create_role_permissions.rb
@@ -21,11 +21,12 @@ class CreateRolePermissions < ActiveRecord::Migration[5.2]
role.role_permissions.create(name: "can_manage_users", value: role.can_manage_users.to_s, enabled: true)
end
- remove_column :roles, :can_create_rooms
- remove_column :roles, :send_promoted_email
- remove_column :roles, :send_demoted_email
- remove_column :roles, :can_edit_site_settings
- remove_column :roles, :can_edit_roles
- remove_column :roles, :can_manage_users
+ # Add these back in once the change to postgres is made
+ # remove_column :roles, :can_create_rooms
+ # remove_column :roles, :send_promoted_email
+ # remove_column :roles, :send_demoted_email
+ # remove_column :roles, :can_edit_site_settings
+ # remove_column :roles, :can_edit_roles
+ # remove_column :roles, :can_manage_users
end
end
diff --git a/db/migrate/20190828153347_add_deleted_column.rb b/db/migrate/20190828153347_add_deleted_column.rb
new file mode 100644
index 00000000..303fca99
--- /dev/null
+++ b/db/migrate/20190828153347_add_deleted_column.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class AddDeletedColumn < ActiveRecord::Migration[5.2]
+ def change
+ add_column :users, :deleted, :boolean, null: false, default: false
+ add_index :users, :deleted
+ add_column :rooms, :deleted, :boolean, null: false, default: false
+ add_index :rooms, :deleted
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 27dd362c..921e3f4e 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_08_22_134205) do
+ActiveRecord::Schema.define(version: 2019_08_28_153347) do
create_table "features", force: :cascade do |t|
t.integer "setting_id"
@@ -46,6 +46,12 @@ ActiveRecord::Schema.define(version: 2019_08_22_134205) do
create_table "roles", force: :cascade do |t|
t.string "name"
t.integer "priority", default: 9999
+ t.boolean "can_create_rooms", default: false
+ t.boolean "send_promoted_email", default: false
+ t.boolean "send_demoted_email", default: false
+ t.boolean "can_edit_site_settings", default: false
+ t.boolean "can_edit_roles", default: false
+ t.boolean "can_manage_users", default: false
t.string "colour"
t.string "provider"
t.datetime "created_at", null: false
@@ -67,7 +73,9 @@ ActiveRecord::Schema.define(version: 2019_08_22_134205) do
t.string "moderator_pw"
t.string "attendee_pw"
t.string "access_code"
+ t.boolean "deleted", default: false, null: false
t.index ["bbb_id"], name: "index_rooms_on_bbb_id"
+ t.index ["deleted"], name: "index_rooms_on_deleted"
t.index ["last_session"], name: "index_rooms_on_last_session"
t.index ["name"], name: "index_rooms_on_name"
t.index ["sessions"], name: "index_rooms_on_sessions"
@@ -101,7 +109,9 @@ ActiveRecord::Schema.define(version: 2019_08_22_134205) do
t.datetime "reset_sent_at"
t.string "activation_digest"
t.datetime "activated_at"
+ t.boolean "deleted", default: false, null: false
t.index ["created_at"], name: "index_users_on_created_at"
+ t.index ["deleted"], name: "index_users_on_deleted"
t.index ["email"], name: "index_users_on_email"
t.index ["password_digest"], name: "index_users_on_password_digest", unique: true
t.index ["provider"], name: "index_users_on_provider"