From dc27467490044d9dcb959c3847f5ebbf484273d3 Mon Sep 17 00:00:00 2001
From: Felipe Cecagno <fcecagno@gmail.com>
Date: Thu, 28 Feb 2013 16:35:22 -0300
Subject: [PATCH] check if the metadata passed in the create call is empty;
 raise an exception if the private key isn't found on the recording server;
 updated the deploy script using the ideas implemented on chef

---
 record-and-playback/deploy.sh                 | 50 +++++++++++--------
 .../mconf/scripts/mconf-decrypt.rb            |  3 ++
 .../mconf/scripts/publish/mconf.rb            | 21 +++++---
 3 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/record-and-playback/deploy.sh b/record-and-playback/deploy.sh
index 04ef9bc558..fb88aebdf2 100755
--- a/record-and-playback/deploy.sh
+++ b/record-and-playback/deploy.sh
@@ -25,24 +25,37 @@ echo
 echo "+++++ Building record-and-playback"
 cd ~/dev/bigbluebutton/record-and-playback/
 
-sudo rm -f /usr/local/bigbluebutton/core/scripts/*.rb
-sudo rm -f /usr/local/bigbluebutton/core/scripts/process/*.rb
-sudo rm -f /usr/local/bigbluebutton/core/scripts/publish/*.rb
-#sudo rm -f /usr/local/bigbluebutton/core/scripts/*.yml
-sudo rm -f /usr/local/bigbluebutton/core/scripts/*.nginx
+sudo cp core/Gemfile /usr/local/bigbluebutton/core/Gemfile
+sudo rm -rf /usr/local/bigbluebutton/core/lib
+sudo cp -r core/lib /usr/local/bigbluebutton/core/
+sudo rm -rf /usr/local/bigbluebutton/core/scripts
+sudo cp -r core/scripts /usr/local/bigbluebutton/core/
+sudo rm -rf /etc/bigbluebutton/god
+sudo cp -r core/god/god /etc/bigbluebutton/
+sudo rm -f /etc/init.d/bbb-record-core
+sudo cp core/god/initd.god /etc/init.d/bbb-record-core
+sudo chmod 0755 /etc/init.d/bbb-record-core
+sudo rm -rf /var/bigbluebutton/playback/*
 
-sudo cp -r core/god/* /etc/bigbluebutton/
-sudo cp -r core/lib/* /usr/local/bigbluebutton/core/lib/
-sudo cp -r core/scripts/* /usr/local/bigbluebutton/core/scripts/
+function deploy_format() {
+    local formats=$1
+    for format in $formats
+    do
+        playback_dir="$format/playback/$format"
+        scripts_dir="$format/scripts"
+        if [ -d $playback_dir ]; then sudo cp -r $playback_dir /var/bigbluebutton/playback/; fi
+        if [ -d $scripts_dir ]; then sudo cp -r $scripts_dir/* /usr/local/bigbluebutton/core/scripts/; fi
+        sudo mkdir -p /var/log/bigbluebutton/$format
+    done
+}
 
-if [ $# -eq 0 ]; then
-    PLAYBACK_LIST="slides presentation"
-
-    # Mconf specific files
+RECORDING_SERVER=false
+if $RECORDING_SERVER ; then
     sudo cp mconf/scripts/mconf-god-conf.rb /etc/bigbluebutton/god/conf/
     sudo cp mconf/scripts/mconf-decrypt.rb /usr/local/bigbluebutton/core/scripts/
+    deploy_format "presentation"
 else
-    PLAYBACK_LIST="$1"
+    deploy_format "mconf"
 fi
 
 sudo mkdir -p /var/bigbluebutton/playback/
@@ -54,13 +67,8 @@ sudo mkdir -p /var/bigbluebutton/recording/status/archived/
 sudo mkdir -p /var/bigbluebutton/recording/status/processed/
 sudo mkdir -p /var/bigbluebutton/recording/status/sanity/
 
-for PLAYBACK in $PLAYBACK_LIST
-do
-  if [ -d $PLAYBACK/playback ]; then sudo cp -r $PLAYBACK/playback/* /var/bigbluebutton/playback/; fi
-  if [ -d $PLAYBACK/scripts ]; then sudo cp -r $PLAYBACK/scripts/* /usr/local/bigbluebutton/core/scripts/; fi
-  sudo cp -f $PLAYBACK/scripts/*-god-conf.rb /etc/bigbluebutton/god/conf/
-  sudo mkdir -p /var/log/bigbluebutton/$PLAYBACK
-done
+sudo mv /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/
 sudo chown -R tomcat6:tomcat6 /var/bigbluebutton/ /var/log/bigbluebutton/
-sudo cp -f /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/
 
+cd /usr/local/bigbluebutton/core/
+sudo bundle install
diff --git a/record-and-playback/mconf/scripts/mconf-decrypt.rb b/record-and-playback/mconf/scripts/mconf-decrypt.rb
index 24cd4d5190..c6782bc34d 100755
--- a/record-and-playback/mconf/scripts/mconf-decrypt.rb
+++ b/record-and-playback/mconf/scripts/mconf-decrypt.rb
@@ -85,6 +85,9 @@ if not get_recordings_url.nil? and not get_recordings_url.empty?
               writeOut.close
 
               if key_file != decrypted_key_file
+                if not File.exists("#{private_key}")
+                  raise "Couldn't find the private key on #{private_key}"
+                end
                 command = "openssl rsautl -decrypt -inkey #{private_key} < #{key_file} > #{decrypted_key_file}"
                 status = BigBlueButton.execute(command)
                 if not status.success?
diff --git a/record-and-playback/mconf/scripts/publish/mconf.rb b/record-and-playback/mconf/scripts/publish/mconf.rb
index 64f78423ce..d6ca09f5b7 100755
--- a/record-and-playback/mconf/scripts/publish/mconf.rb
+++ b/record-and-playback/mconf/scripts/publish/mconf.rb
@@ -25,6 +25,8 @@ require 'cgi'
 require 'digest/md5'
 
 bbb_props = YAML::load(File.open('../../core/scripts/bigbluebutton.yml'))
+mconf_props = YAML::load(File.open('mconf.yml'))
+
 recording_dir = bbb_props['recording_dir']
 playback_host = bbb_props['playback_host']
 published_dir = bbb_props['published_dir']
@@ -70,11 +72,11 @@ done_files.each do |df|
         FileUtils.rm_f "#{meeting_id}.zip"
 
         key_filename = ""
-        if metadata.has_key?('mconflb-rec-server-key')
+        if metadata.has_key?('mconflb-rec-server-key') and not metadata['mconflb-rec-server-key'].to_s.empty?
           key_filename = "#{meeting_id}.enc"
+          # The key is already unescaped in the metadata!!
           #BigBlueButton.logger.info("Unescaping public key")
           #public_key_decoded = CGI::unescape("#{metadata['public-key'].to_s}")
-          # The key is already unescaped in the metadata!!
           public_key_decoded = "#{metadata['mconflb-rec-server-key'].to_s}"
           public_key_filename = "public-key.pem"
           public_key = File.new("#{public_key_filename}", "w") 
@@ -144,10 +146,17 @@ done_files.each do |df|
         FileUtils.cp_r(meeting_publish_dir, "#{published_dir}/mconf")
 
         BigBlueButton.logger.info("Removing processed files: #{meeting_process_dir}")
-        FileUtils.remove_entry_secure meeting_process_dir, :force => true, :verbose => true
+        FileUtils.rm_r meeting_process_dir, :force => true
 
         BigBlueButton.logger.info("Removing published files: #{meeting_publish_dir}")
-        FileUtils.remove_entry_secure meeting_publish_dir, :force => true, :verbose => true
+        FileUtils.rm_r meeting_publish_dir, :force => true
+
+        # it doesn't work since video and deskshare files are owned by red5, 
+        # freeswitch files are owned by freeswitch, and this script is ran by
+        # tomcat6, so it can just remove files owned by tomcat6
+        FileUtils.rm_r [ "/usr/share/red5/webapps/video/streams/#{meeting_id}",
+                         "/usr/share/red5/webapps/deskshare/streams/#{meeting_id}",
+                         Dir.glob("/var/freeswitch/meetings/#{meeting_id}*.wav") ], :force => true
 
         # Remove all the recording flags
         FileUtils.rm_f [ "#{recording_dir}/status/processed/#{meeting_id}-mconf.done",
@@ -157,9 +166,9 @@ done_files.each do |df|
 
         # Comment it for testing
         BigBlueButton.logger.info("Removing the recording raw files: #{meeting_raw_dir}")
-        FileUtils.remove_entry_secure meeting_raw_dir, :force => true, :verbose => true
+        FileUtils.rm_r meeting_raw_dir, :force => true
         BigBlueButton.logger.info("Removing the recording presentation: #{meeting_raw_presentation_dir}")
-        FileUtils.remove_entry_secure meeting_raw_presentation_dir, :force => true, :verbose => true
+        FileUtils.rm_r meeting_raw_presentation_dir, :force => true
       end
     end
   end
-- 
GitLab