Skip to content
Snippets Groups Projects
Select Git revision
  • 2f16771552fd0e42b4800c7d56c088163a4f32db
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

big_blue_button_api.rb

Blame
  • user avatar
    Ahmad Farhat authored and GitHub committed
    * Extend BigBlueButtonApi logic to work for other cases
    
    * rebase
    2f167715
    History
    big_blue_button_api.rb 3.37 KiB
    # BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
    #
    # Copyright (c) 2022 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.
    #
    # Greenlight 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 Greenlight; if not, see <http://www.gnu.org/licenses/>.
    
    # frozen_string_literal: true
    
    require 'bigbluebutton_api'
    
    class BigBlueButtonApi
      def initialize(provider:)
        @provider = provider
        @endpoint, @secret = retrieve_credentials
      end
    
      # Sets a BigBlueButtonApi object for interacting with the API.
      def bbb_server
        @bbb_server ||= BigBlueButton::BigBlueButtonApi.new(
          @endpoint,
          @secret,
          '1.8'
        )
      end
    
      # Start a meeting for a specific room and returns the join URL.
      def start_meeting(room:, options: {}, presentation_url: nil)
        if presentation_url.present?
          modules = BigBlueButton::BigBlueButtonModules.new
          modules.add_presentation(:url, presentation_url)
          bbb_server.create_meeting(room.name, room.meeting_id, options, modules)
        else
          bbb_server.create_meeting(room.name, room.meeting_id, options)
        end
      end
    
      def join_meeting(room:, role:, name: nil, avatar_url: nil)
        bbb_server.join_meeting_url(
          room.meeting_id,
          name,
          '', # empty password -> use the role passed ing
          {
            role:,
            avatarURL: avatar_url,
            createTime: room.last_session&.to_datetime&.strftime('%Q')
          }.compact
        )
      end
    
      def meeting_running?(room:)
        bbb_server.is_meeting_running?(room.meeting_id)
      end
    
      def active_meetings
        bbb_server.get_meetings[:meetings]
      end
    
      def get_meeting_info(meeting_id:)
        bbb_server.get_meeting_info(meeting_id, nil)
      end
    
      # Retrieve the recordings that belong to room with given record_id
      def get_recording(record_id:)
        bbb_server.get_recordings(recordID: record_id)[:recordings][0]
      end
    
      # Retrieve the recordings that belong to room with given meeting_id
      def get_recordings(meeting_ids:)
        bbb_server.get_recordings(meetingID: meeting_ids)
      end
    
      # Delete the recording(s) with given record_ids
      def delete_recordings(record_ids:)
        bbb_server.delete_recordings(record_ids)
      end
    
      # Sets publish (true/false) for recording(s) with given record_id(s)
      def publish_recordings(record_ids:, publish:)
        bbb_server.publish_recordings(record_ids, publish)
      end
    
      def update_recordings(record_id:, meta_hash:)
        bbb_server.update_recordings(record_id, {}, meta_hash)
      end
    
      # Decodes the JWT using the BBB secret as key (Used in Recording Ready Callback)
      def decode_jwt(token)
        JWT.decode token, Rails.configuration.bigbluebutton_secret, true, { algorithm: 'HS256' }
      end
    
      private
    
      def retrieve_credentials
        if @provider == 'greenlight'
          [Rails.configuration.bigbluebutton_endpoint, Rails.configuration.bigbluebutton_secret]
        else
          ProviderCredentials.new(provider: @provider).call
        end
      end
    end