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"