From 1eb1917ef47ba4c1a3aa4dae23fac8143683d1fc Mon Sep 17 00:00:00 2001
From: Ahmad Farhat <ahmad.af.farhat@gmail.com>
Date: Wed, 1 Nov 2023 14:46:57 -0400
Subject: [PATCH] More fixes for local migrations (#5491)

* More fixes for local migrations

* fix tests
---
 .../api/v1/migrations/external_controller.rb  |  7 ++++-
 app/services/meeting_starter.rb               |  2 +-
 .../admin/server_rooms_controller_spec.rb     |  2 +-
 .../migrations/external_controller_spec.rb    | 30 ++++++++++++++++---
 spec/services/meeting_starter_spec.rb         |  2 +-
 5 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/app/controllers/api/v1/migrations/external_controller.rb b/app/controllers/api/v1/migrations/external_controller.rb
index 9a68ab20..b398e241 100644
--- a/app/controllers/api/v1/migrations/external_controller.rb
+++ b/app/controllers/api/v1/migrations/external_controller.rb
@@ -105,6 +105,11 @@ module Api
 
           return render_error(status: :bad_request, errors: user&.errors&.to_a) unless user.save
 
+          if user_hash[:provider] != 'greenlight'
+            user.password_digest = nil
+            user.save(validations: false)
+          end
+
           render_data status: :created
         end
 
@@ -250,7 +255,7 @@ module Api
 
           raise ActiveSupport::MessageEncryptor::InvalidMessage unless encrypted_params.is_a? String
 
-          crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base[0..31], cipher: 'aes-256-gcm', serializer: Marshal)
+          crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secret_key_base[0..31], cipher: 'aes-256-gcm', serializer: Marshal)
           decrypted_params = crypt.decrypt_and_verify(encrypted_params) || {}
 
           raise ActiveSupport::MessageEncryptor::InvalidMessage unless decrypted_params.is_a? Hash
diff --git a/app/services/meeting_starter.rb b/app/services/meeting_starter.rb
index 4575aef4..4d9d62b8 100644
--- a/app/services/meeting_starter.rb
+++ b/app/services/meeting_starter.rb
@@ -64,7 +64,7 @@ class MeetingStarter
       logoutURL: room_url,
       meta_endCallbackUrl: meeting_ended_url(host: @base_url),
       'meta_bbb-recording-ready-url': recording_ready_url(host: @base_url),
-      'meta_bbb-origin-version': 3,
+      'meta_bbb-origin-version': ENV.fetch('VERSION_TAG', 'v3'),
       'meta_bbb-origin': 'greenlight'
     }
   end
diff --git a/spec/controllers/admin/server_rooms_controller_spec.rb b/spec/controllers/admin/server_rooms_controller_spec.rb
index b6d135b3..10b2de3a 100644
--- a/spec/controllers/admin/server_rooms_controller_spec.rb
+++ b/spec/controllers/admin/server_rooms_controller_spec.rb
@@ -154,7 +154,7 @@ RSpec.describe Api::V1::Admin::ServerRoomsController, type: :controller do
                                hasJoinedVoice: 'false',
                                hasVideo: 'false',
                                clientType: 'HTML5' } },
-      metadata: { 'bbb-origin-version': '3',
+      metadata: { 'bbb-origin-version': 'v3',
                   'bbb-recording-ready-url': 'http://localhost:3000/recording_ready',
                   'bbb-origin': 'greenlight',
                   endcallbackurl: 'http://localhost:3000/meeting_ended' },
diff --git a/spec/controllers/migrations/external_controller_spec.rb b/spec/controllers/migrations/external_controller_spec.rb
index e2cf4c22..f15c6027 100644
--- a/spec/controllers/migrations/external_controller_spec.rb
+++ b/spec/controllers/migrations/external_controller_spec.rb
@@ -133,7 +133,7 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
 
       describe 'because the ciphertext was not generated with the same configuration' do
         it 'returns :bad_request without creating a role' do
-          key = Rails.application.secrets.secret_key_base[1..32]
+          key = Rails.application.secret_key_base[1..32]
 
           encrypted_params = encrypt_params({ role: { name: 'CrazyRole', role_permissions: {} } }, key:, expires_in: 10.seconds)
           expect { post :create_role, params: { v2: { encrypted_params: } } }.not_to change(Role, :count)
@@ -188,6 +188,28 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
             expect(response).to have_http_status(:created)
             expect(user.password_digest).to be_present
           end
+
+          it 'creates the user without a password if provider is not greenlight' do
+            tenant = create(:tenant)
+            role = create(:role, name: valid_user_role.name, provider: tenant.name)
+            valid_user_params[:provider] = tenant.name
+
+            encrypted_params = encrypt_params({ user: valid_user_params }, expires_in: 10.seconds)
+
+            expect_any_instance_of(described_class).to receive(:generate_secure_pwd).and_call_original
+            expect { post :create_user, params: { v2: { encrypted_params: } } }.to change(User, :count).from(0).to(1)
+            expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
+
+            user = User.take
+            expect(user.name).to eq(valid_user_params[:name])
+            expect(user.email).to eq(valid_user_params[:email])
+            expect(user.language).to eq(valid_user_params[:language])
+            expect(user.role).to eq(role)
+            expect(user.session_token).to be_present
+            expect(user.provider).to eq(tenant.name)
+            expect(response).to have_http_status(:created)
+            expect(user.password_digest).not_to be_present
+          end
         end
 
         context 'when the provider does not exists' do
@@ -429,7 +451,7 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
 
       describe 'because the ciphertext was not generated with the same configuration' do
         it 'returns :bad_request without creating a user' do
-          key = Rails.application.secrets.secret_key_base[1..32]
+          key = Rails.application.secret_key_base[1..32]
 
           encrypted_params = encrypt_params({ user: valid_user_params }, key:, expires_in: 10.seconds)
           expect_any_instance_of(described_class).not_to receive(:generate_secure_pwd)
@@ -547,7 +569,7 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
 
       describe 'because the ciphertext was not generated with the same configuration' do
         it 'returns :bad_request without creating a room' do
-          key = Rails.application.secrets.secret_key_base[1..32]
+          key = Rails.application.secret_key_base[1..32]
           encrypted_params = encrypt_params({ room: valid_room_params }, key:, expires_in: 10.seconds)
           expect { post :create_room, params: { v2: { encrypted_params: } } }.not_to change(Room, :count)
           expect(response).to have_http_status(:bad_request)
@@ -647,7 +669,7 @@ RSpec.describe Api::V1::Migrations::ExternalController, type: :controller do
   private
 
   def encrypt_params(params, key: nil, expires_at: nil, expires_in: nil, purpose: nil)
-    key = Rails.application.secrets.secret_key_base[0..31] if key.nil?
+    key = Rails.application.secret_key_base[0..31] if key.nil?
     crypt = ActiveSupport::MessageEncryptor.new(key, cipher: 'aes-256-gcm', serializer: Marshal)
     crypt.encrypt_and_sign(params, expires_at:, expires_in:, purpose:)
   end
diff --git a/spec/services/meeting_starter_spec.rb b/spec/services/meeting_starter_spec.rb
index 8877c3eb..275f606f 100644
--- a/spec/services/meeting_starter_spec.rb
+++ b/spec/services/meeting_starter_spec.rb
@@ -41,7 +41,7 @@ describe MeetingStarter, type: :service do
       logoutURL: url,
       meta_endCallbackUrl: File.join(base_url, '/meeting_ended'),
       'meta_bbb-recording-ready-url': File.join(base_url, '/recording_ready'),
-      'meta_bbb-origin-version': 3,
+      'meta_bbb-origin-version': 'v3',
       'meta_bbb-origin': 'greenlight',
       setting: 'value'
     }
-- 
GitLab