forked from External/greenlight
		
	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
This commit is contained in:
		@@ -195,6 +195,7 @@ class AdminsController < ApplicationController
 | 
				
			|||||||
          role.priority <= current_user.highest_priority_role.priority
 | 
					          role.priority <= current_user.highest_priority_role.priority
 | 
				
			||||||
      return redirect_to admin_roles_path(selected_role: role.id)
 | 
					      return redirect_to admin_roles_path(selected_role: role.id)
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
 | 
					      role.role_permissions.delete_all
 | 
				
			||||||
      role.delete
 | 
					      role.delete
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,10 +140,7 @@ class RoomsController < ApplicationController
 | 
				
			|||||||
  # DELETE /:room_uid
 | 
					  # DELETE /:room_uid
 | 
				
			||||||
  def destroy
 | 
					  def destroy
 | 
				
			||||||
    # Don't delete the users home room.
 | 
					    # Don't delete the users home room.
 | 
				
			||||||
    if @room.owned_by?(current_user) && @room != current_user.main_room
 | 
					    @room.destroy if @room.owned_by?(current_user) && @room != current_user.main_room
 | 
				
			||||||
      @room.destroy
 | 
					 | 
				
			||||||
      delete_all_recordings(@room.bbb_id)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    redirect_to current_user.main_room
 | 
					    redirect_to current_user.main_room
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,6 @@ class SessionsController < ApplicationController
 | 
				
			|||||||
  def signin
 | 
					  def signin
 | 
				
			||||||
    check_if_twitter_account
 | 
					    check_if_twitter_account
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    providers = configured_providers
 | 
					 | 
				
			||||||
    if one_provider
 | 
					    if one_provider
 | 
				
			||||||
      provider_path = if Rails.configuration.omniauth_ldap
 | 
					      provider_path = if Rails.configuration.omniauth_ldap
 | 
				
			||||||
        ldap_signin_path
 | 
					        ldap_signin_path
 | 
				
			||||||
@@ -147,6 +146,8 @@ class SessionsController < ApplicationController
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def one_provider
 | 
					  def one_provider
 | 
				
			||||||
 | 
					    providers = configured_providers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (!allow_user_signup? || !allow_greenlight_accounts?) && providers.count == 1 &&
 | 
					    (!allow_user_signup? || !allow_greenlight_accounts?) && providers.count == 1 &&
 | 
				
			||||||
      !Rails.configuration.loadbalanced_configuration
 | 
					      !Rails.configuration.loadbalanced_configuration
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								app/models/concerns/deleteable.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								app/models/concerns/deleteable.rb
									
									
									
									
									
										Normal file
									
								
							@@ -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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
@@ -19,6 +19,8 @@
 | 
				
			|||||||
require 'bbb_api'
 | 
					require 'bbb_api'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Room < ApplicationRecord
 | 
					class Room < ApplicationRecord
 | 
				
			||||||
 | 
					  include Deleteable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  before_create :setup
 | 
					  before_create :setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :name, presence: true
 | 
					  validates :name, presence: true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,8 @@
 | 
				
			|||||||
require 'bbb_api'
 | 
					require 'bbb_api'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class User < ApplicationRecord
 | 
					class User < ApplicationRecord
 | 
				
			||||||
 | 
					  include Deleteable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  attr_accessor :reset_token
 | 
					  attr_accessor :reset_token
 | 
				
			||||||
  after_create :setup_user
 | 
					  after_create :setup_user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,15 @@
 | 
				
			|||||||
  <div class="row">
 | 
					  <div class="row">
 | 
				
			||||||
    <div class="col-lg-3 mb-4">
 | 
					    <div class="col-lg-3 mb-4">
 | 
				
			||||||
      <%= render "users/components/menu_buttons" %>
 | 
					      <%= render "users/components/menu_buttons" %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <% if @user.errors.any? %>
 | 
				
			||||||
 | 
					        <h5 class="mt-8"><%= t("errors.title") %>:</h5>
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					        <% @user.errors.full_messages.each do |err| %>
 | 
				
			||||||
 | 
					          <li class="text-danger"><%= err %>.</li>
 | 
				
			||||||
 | 
					        <% end %>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					      <% end %>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="col-lg-9">
 | 
					    <div class="col-lg-9">
 | 
				
			||||||
      <%= render "users/components/setting_view", setting_id: "account", setting_title: t("settings.account.subtitle") %>
 | 
					      <%= render "users/components/setting_view", setting_id: "account", setting_title: t("settings.account.subtitle") %>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
					      role.role_permissions.create(name: "can_manage_users", value: role.can_manage_users.to_s, enabled: true)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    remove_column :roles, :can_create_rooms
 | 
					    # Add these back in once the change to postgres is made
 | 
				
			||||||
    remove_column :roles, :send_promoted_email
 | 
					    # remove_column :roles, :can_create_rooms
 | 
				
			||||||
    remove_column :roles, :send_demoted_email
 | 
					    # remove_column :roles, :send_promoted_email
 | 
				
			||||||
    remove_column :roles, :can_edit_site_settings
 | 
					    # remove_column :roles, :send_demoted_email
 | 
				
			||||||
    remove_column :roles, :can_edit_roles
 | 
					    # remove_column :roles, :can_edit_site_settings
 | 
				
			||||||
    remove_column :roles, :can_manage_users
 | 
					    # remove_column :roles, :can_edit_roles
 | 
				
			||||||
 | 
					    # remove_column :roles, :can_manage_users
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								db/migrate/20190828153347_add_deleted_column.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								db/migrate/20190828153347_add_deleted_column.rb
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										12
									
								
								db/schema.rb
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								db/schema.rb
									
									
									
									
									
								
							@@ -10,7 +10,7 @@
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# It's strongly recommended that you check this file into your version control system.
 | 
					# 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|
 | 
					  create_table "features", force: :cascade do |t|
 | 
				
			||||||
    t.integer "setting_id"
 | 
					    t.integer "setting_id"
 | 
				
			||||||
@@ -46,6 +46,12 @@ ActiveRecord::Schema.define(version: 2019_08_22_134205) do
 | 
				
			|||||||
  create_table "roles", force: :cascade do |t|
 | 
					  create_table "roles", force: :cascade do |t|
 | 
				
			||||||
    t.string "name"
 | 
					    t.string "name"
 | 
				
			||||||
    t.integer "priority", default: 9999
 | 
					    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 "colour"
 | 
				
			||||||
    t.string "provider"
 | 
					    t.string "provider"
 | 
				
			||||||
    t.datetime "created_at", null: false
 | 
					    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 "moderator_pw"
 | 
				
			||||||
    t.string "attendee_pw"
 | 
					    t.string "attendee_pw"
 | 
				
			||||||
    t.string "access_code"
 | 
					    t.string "access_code"
 | 
				
			||||||
 | 
					    t.boolean "deleted", default: false, null: false
 | 
				
			||||||
    t.index ["bbb_id"], name: "index_rooms_on_bbb_id"
 | 
					    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 ["last_session"], name: "index_rooms_on_last_session"
 | 
				
			||||||
    t.index ["name"], name: "index_rooms_on_name"
 | 
					    t.index ["name"], name: "index_rooms_on_name"
 | 
				
			||||||
    t.index ["sessions"], name: "index_rooms_on_sessions"
 | 
					    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.datetime "reset_sent_at"
 | 
				
			||||||
    t.string "activation_digest"
 | 
					    t.string "activation_digest"
 | 
				
			||||||
    t.datetime "activated_at"
 | 
					    t.datetime "activated_at"
 | 
				
			||||||
 | 
					    t.boolean "deleted", default: false, null: false
 | 
				
			||||||
    t.index ["created_at"], name: "index_users_on_created_at"
 | 
					    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 ["email"], name: "index_users_on_email"
 | 
				
			||||||
    t.index ["password_digest"], name: "index_users_on_password_digest", unique: true
 | 
					    t.index ["password_digest"], name: "index_users_on_password_digest", unique: true
 | 
				
			||||||
    t.index ["provider"], name: "index_users_on_provider"
 | 
					    t.index ["provider"], name: "index_users_on_provider"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user