diff --git a/app/controllers/bbb_controller.rb b/app/controllers/bbb_controller.rb index b837ced2..c70ada69 100644 --- a/app/controllers/bbb_controller.rb +++ b/app/controllers/bbb_controller.rb @@ -170,9 +170,13 @@ class BbbController < ApplicationController rec_info = rec_info[:recordings].first RecordingCreatedJob.perform_later(token, parse_recording_for_view(rec_info)) + # send an email to the owner of this recording, if defined + owner = User.find_by(encrypted_id: token) + RecordingReadyEmailJob.perform_later(owner) if owner.present? + # TODO: remove the webhook now that the meeting and recording are done # remove only if the meeting is not running, otherwise the hook is needed - # if ENV['GREENLIGHT_USE_WEBHOOKS'] + # if Rails.configuration.use_webhooks # webhook_remove("#{base_url}/callback") # end else diff --git a/app/jobs/recording_ready_email_job.rb b/app/jobs/recording_ready_email_job.rb new file mode 100644 index 00000000..465f0f38 --- /dev/null +++ b/app/jobs/recording_ready_email_job.rb @@ -0,0 +1,25 @@ +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. +# +# Copyright (c) 2016 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 . + +class RecordingReadyEmailJob < ApplicationJob + queue_as :default + + def perform(user) + if user.email.present? + NotificationMailer.recording_ready_email(user).deliver + end + end +end diff --git a/app/lib/bbb_api.rb b/app/lib/bbb_api.rb index 2f0d923b..35f3c450 100644 --- a/app/lib/bbb_api.rb +++ b/app/lib/bbb_api.rb @@ -77,13 +77,12 @@ module BbbApi "meta_#{BbbApi::META_LISTED}": false, "meta_#{BbbApi::META_TOKEN}": meeting_token } + meeting_options.merge!( + { "meta_#{BbbApi::META_HOOK_URL}": options[:hook_url] } + ) if options[:hook_url] - if ENV['GREENLIGHT_USE_WEBHOOKS'] + if Rails.configuration.use_webhooks webhook_register(options[:hook_url], meeting_id) - else - meeting_options.merge!( - { "meta_#{BbbApi::META_HOOK_URL}": options[:hook_url] } - ) if options[:hook_url] end # Create the meeting diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb new file mode 100644 index 00000000..9c73a0bd --- /dev/null +++ b/app/mailers/notification_mailer.rb @@ -0,0 +1,25 @@ +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. +# +# Copyright (c) 2016 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 . + +class NotificationMailer < ActionMailer::Base + default from: Rails.configuration.smtp_from + + def recording_ready_email(user) + @user = user + @room_url = resource_url(resource: "rooms", id: user.encrypted_id) + mail(to: user.email, subject: t('.subject')) + end +end diff --git a/app/models/user.rb b/app/models/user.rb index c1a77b10..01a16ce4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -21,6 +21,7 @@ class User < ApplicationRecord def self.from_omniauth(auth_hash) user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider']) user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil + user.email = self.send("#{auth_hash['provider']}_email", auth_hash) rescue nil user.name = auth_hash['info']['name'] user.save! user @@ -30,10 +31,18 @@ class User < ApplicationRecord auth_hash['info']['nickname'] end + def self.twitter_email(auth_hash) + auth_hash['info']['email'] + end + def self.google_username(auth_hash) auth_hash['info']['email'].split('@').first end + def self.google_email(auth_hash) + auth_hash['info']['email'] + end + def room_url "/rooms/#{encrypted_id}" end diff --git a/app/views/notification_mailer/recording_ready_email.html.erb b/app/views/notification_mailer/recording_ready_email.html.erb new file mode 100644 index 00000000..76712bc8 --- /dev/null +++ b/app/views/notification_mailer/recording_ready_email.html.erb @@ -0,0 +1,11 @@ + + + + + + +

<%= t('.hi', name: @user.name) %>

+

<%= t('.phrase1') %>

+

<%= t('.phrase2', url: @room_url) %>

+ + diff --git a/config/application.rb b/config/application.rb index 4a9e08b6..ae422bc7 100644 --- a/config/application.rb +++ b/config/application.rb @@ -37,5 +37,36 @@ module Greenlight # BigBlueButton config.bigbluebutton_endpoint = ENV['BIGBLUEBUTTON_ENDPOINT'] config.bigbluebutton_secret = ENV['BIGBLUEBUTTON_SECRET'] + + # GreenLight + config.use_webhooks = ENV['GREENLIGHT_USE_WEBHOOKS'] + config.smtp_from = ENV['SMTP_FROM'] + config.smtp_server = ENV['SMTP_SERVER'] + config.smtp_domain = ENV['SMTP_DOMAIN'] + config.smtp_port = ENV['SMTP_PORT'] || 587 + config.smtp_username = ENV['SMTP_USERNAME'] + config.smtp_password = ENV['SMTP_PASSWORD'] + config.smtp_auth = ENV['SMTP_AUTH'] || "login" + config.smtp_starttls_auto = ENV['SMTP_STARTTLS_AUTO'].nil? ? true : ENV['SMTP_STARTTLS_AUTO'] + config.smtp_tls = ENV['SMTP_TLS'].nil? ? false : ENV['SMTP_TLS'] + + # SMTP + config.action_mailer.default_url_options = { host: ENV['GREENLIGHT_DOMAIN'] } + config.action_mailer.delivery_method = :smtp + config.action_mailer.perform_deliveries = true + config.action_mailer.raise_delivery_errors = true + config.action_mailer.smtp_settings = { + :address => config.smtp_server, + :domain => config.smtp_domain, + :port => config.smtp_port, + :user_name => config.smtp_username, + :password => config.smtp_password, + :authentication => config.smtp_auth, + :enable_starttls_auto => config.smtp_starttls_auto, + :tls => config.smtp_tls + } + config.action_mailer.default_options = { + from: config.smtp_from + } end end diff --git a/config/locales/en-us.yml b/config/locales/en-us.yml index 86365cbe..4a781a8c 100644 --- a/config/locales/en-us.yml +++ b/config/locales/en-us.yml @@ -82,6 +82,12 @@ en-US: subject: "%{user} invited you to a meeting" my_room: my room no: No + notification_mailer: + recording_ready_email: + hi: "Hi, %{name}" + phrase1: "One of your recordings has just been made available." + phrase2: "Access the following website to view it and publish to other users: %{url}" + subject: "Your recording is ready!" oauth_signup: Signup for customized sessions past_recordings: Past Recordings footer_html: "%{greenlight_link} build %{version}, Powered by %{bbb_link}" diff --git a/db/migrate/20161208185458_add_email_to_user.rb b/db/migrate/20161208185458_add_email_to_user.rb new file mode 100644 index 00000000..88e1da36 --- /dev/null +++ b/db/migrate/20161208185458_add_email_to_user.rb @@ -0,0 +1,22 @@ +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. +# +# Copyright (c) 2016 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 . + +class AddEmailToUser < ActiveRecord::Migration[5.0] + def change + add_column :users, :email, :string + add_index :users, :email, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index c82f317c..a3ce761f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161108224701) do +ActiveRecord::Schema.define(version: 20161208185458) do create_table "users", force: :cascade do |t| t.string "provider", null: false @@ -20,6 +20,8 @@ ActiveRecord::Schema.define(version: 20161108224701) do t.datetime "updated_at", null: false t.string "username" t.string "encrypted_id", null: false + t.string "email" + t.index ["email"], name: "index_users_on_email", unique: true t.index ["encrypted_id"], name: "index_users_on_encrypted_id", unique: true t.index ["provider", "uid"], name: "index_users_on_provider_and_uid", unique: true t.index ["provider"], name: "index_users_on_provider" diff --git a/sample.env b/sample.env index 1485f639..54626cb4 100644 --- a/sample.env +++ b/sample.env @@ -17,6 +17,20 @@ BIGBLUEBUTTON_SECRET=8cd8ef52e8e101574e400365b55e11a6 # the application when recordings are done). GREENLIGHT_USE_WEBHOOKS=false +# The web site domain, needed for emails mostly +GREENLIGHT_DOMAIN=localhost + +# SMTP configurations +SMTP_FROM=email@gmail.com +SMTP_SERVER=smtp.gmail.com +SMTP_DOMAIN=gmail.com +SMTP_PORT=587 +SMTP_USERNAME=email@gmail.com +SMTP_PASSWORD=my-secret-password +# SMTP_TLS=false +# SMTP_AUTH=login +# SMTP_STARTTLS_AUTO=true + # OmniAuth TWITTER_ID= TWITTER_SECRET= diff --git a/test/mailers/previews/notification_mailer_preview.rb b/test/mailers/previews/notification_mailer_preview.rb new file mode 100644 index 00000000..135f99c0 --- /dev/null +++ b/test/mailers/previews/notification_mailer_preview.rb @@ -0,0 +1,6 @@ +# Preview all emails at http://localhost:3000/rails/mailers/example_mailer +class NotificationMailerPreview < ActionMailer::Preview + def recording_ready_email_preview + NotificationMailer.recording_ready_email(User.first) + end +end