From 062525d2d58cfe05253fd71a748577049995d0f8 Mon Sep 17 00:00:00 2001
From: Ahmad Farhat <ahmad.af.farhat@gmail.com>
Date: Wed, 27 Jan 2021 19:48:39 -0500
Subject: [PATCH] Pass createTime as part of the join call (#2488)

---
 app/controllers/concerns/bbb_server.rb    |  3 ++-
 spec/concerns/bbb_server_spec.rb          | 14 ++++++++++----
 spec/controllers/rooms_controller_spec.rb |  8 ++++++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/app/controllers/concerns/bbb_server.rb b/app/controllers/concerns/bbb_server.rb
index ab49c9ba..01718c63 100644
--- a/app/controllers/concerns/bbb_server.rb
+++ b/app/controllers/concerns/bbb_server.rb
@@ -54,6 +54,7 @@ module BbbServer
     join_opts = {}
     join_opts[:userID] = uid if uid
     join_opts[:join_via_html5] = true
+    join_opts[:createTime] = room.last_session.to_datetime.strftime("%Q")
 
     bbb_server.join_meeting_url(room.bbb_id, name, password, join_opts)
   end
@@ -88,7 +89,7 @@ module BbbServer
       end
 
       unless meeting[:messageKey] == 'duplicateWarning'
-        room.update_attributes(sessions: room.sessions + 1, last_session: DateTime.now)
+        room.update_attributes(sessions: room.sessions + 1, last_session: DateTime.strptime(meeting[:createTime].to_s, "%Q"))
       end
     rescue BigBlueButton::BigBlueButtonException => e
       puts "BigBlueButton failed on create: #{e.key}: #{e.message}"
diff --git a/spec/concerns/bbb_server_spec.rb b/spec/concerns/bbb_server_spec.rb
index 350bcee0..6d3f3364 100644
--- a/spec/concerns/bbb_server_spec.rb
+++ b/spec/concerns/bbb_server_spec.rb
@@ -43,7 +43,8 @@ describe BbbServer do
   context "#start_session" do
     it "should update latest session info" do
       allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:create_meeting).and_return(
-        messageKey: ""
+        messageKey: "",
+        createTime: "1611793449622"
       )
 
       expect do
@@ -57,17 +58,22 @@ describe BbbServer do
   context "#join_path" do
     it "should return correct join URL for user" do
       allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:get_meeting_info).and_return(
-        attendeePW: @room.attendee_pw
+        attendeePW: @room.attendee_pw,
+      )
+      allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:create_meeting).and_return(
+        messageKey: "",
+        createTime: "1611793449622"
       )
 
       endpoint = Rails.configuration.bigbluebutton_endpoint
       secret = Rails.configuration.bigbluebutton_secret
-      fullname = "fullName=Example"
+      fullname = "&fullName=Example"
       join_via_html5 = "&join_via_html5=true"
       meeting_id = "&meetingID=#{@room.bbb_id}"
       password = "&password=#{@room.attendee_pw}"
+      time = "createTime=1611793449622"
 
-      query = fullname + join_via_html5 + meeting_id + password
+      query = time + fullname + join_via_html5 + meeting_id + password
       checksum_string = "join#{query + secret}"
 
       checksum = OpenSSL::Digest.digest('sha1', checksum_string).unpack1("H*")
diff --git a/spec/controllers/rooms_controller_spec.rb b/spec/controllers/rooms_controller_spec.rb
index d019954b..675bd92d 100644
--- a/spec/controllers/rooms_controller_spec.rb
+++ b/spec/controllers/rooms_controller_spec.rb
@@ -251,6 +251,10 @@ describe RoomsController, type: :controller do
       @user = create(:user)
       @owner = create(:user)
       @room = @owner.main_room
+      allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:create_meeting).and_return(
+        messageKey: "",
+        createTime: "1611793449622"
+      )
     end
 
     it "should use account name if user is logged in and meeting running" do
@@ -521,6 +525,10 @@ describe RoomsController, type: :controller do
         moderatorPW: "modpass",
         attendeePW: "attpass",
       )
+      allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:create_meeting).and_return(
+        messageKey: "",
+        createTime: "1611793449622"
+      )
     end
 
     it "should redirect to join path if owner" do
-- 
GitLab