995 Commits

Author SHA1 Message Date
transifex-integration[bot] 00f470b1d0 Translate /config/locales/en.yml in gl
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.
2021-01-08 11:13:06 +00:00
dependabot[bot] 1296d0657f Bump nokogiri from 1.10.10 to 1.11.1 (#2409)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.10 to 1.11.1.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.10...v1.11.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-01-07 17:59:02 -05:00
Moritz Schlarb 3b7b45cc03 Refine OpenID Connect Authentication from #1194 (#1399)
* Adds OpenID Connect.

* Add CSS class for openid_connect omniauth provider

* Add translation (de_DE and en) for openid_connect omniauth provider label

* Make uid_field configurable for openid_connect omniauth provider

* updates to support for openid

* updates to support for openid

* updated ldap gem

* updated sample.env

Co-authored-by: mapidentity <git@mapidentity.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
Co-authored-by: mapidentity <49822181+mapidentity@users.noreply.github.com>
2021-01-07 15:11:17 -05:00
Ahmad Farhat 6be629ae82 Make all LIKE queries case insensitive (#2402) 2021-01-05 17:22:57 -05:00
Ahmad Farhat 752b192ef9 Only pass muteOnStart if set to true (#2401) 2021-01-04 17:55:09 -05:00
Ahmad Farhat cf3b450743 Only return required info for dynamic user lists (#2397) 2020-12-30 17:39:31 -05:00
transifex-integration[bot] 85b8cac9fe Translate /config/locales/en.yml in gl (#2384)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-24 13:57:28 -05:00
Ahmad Farhat c9b16729f6 Make room delete permanent (#2390) 2020-12-24 13:54:27 -05:00
Ahmad Farhat b2500e6504 GRN2-309: Allows admins to edit a non-local users name and email (#2389)
* Allows admins to edit a non-local users name and email

* Fixed edge case
2020-12-24 13:21:56 -05:00
Ahmad Farhat 86e6056d3c GRN2-310: Share Access now dynamically pulls the list of users from the server (#2380)
* Share Access now dynamically pulls the list of users from the server

* Merge users now dynamically pulls the list of users from the server

* Only return the information needed to the front-end
2020-12-21 17:21:17 -05:00
Marc Laporte 155d214215 Fix a typo (#2386) 2020-12-21 17:16:47 -05:00
transifex-integration[bot] c21ad97b6c Translate '/config/locales/en.yml' in 'ja_JP' (#2378)
* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-17 17:56:18 -05:00
transifex-integration[bot] 805f0c790d Translate /config/locales/en.yml in de_DE (#2377)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-17 17:52:18 -05:00
transifex-integration[bot] 55fedef21b Translate /config/locales/en.yml in nl (#2375)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-17 17:49:00 -05:00
transifex-integration[bot] bd9222d9e2 Translate /config/locales/en.yml in cs (#2372)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-17 17:45:16 -05:00
Ahmad Farhat 5a51f6d714 Added mapping roles through email to site settings (#2373) 2020-12-16 19:31:32 -05:00
Ahmad Farhat 14350c5f5d Added field to track users last login (#2367) 2020-12-14 18:52:08 -05:00
Ahmad Farhat 7a2405aa9e Fixed 500 caused by room search (#2366) 2020-12-14 18:15:07 -05:00
Ahmad Farhat 7809431873 Fixes to room search (#2343) 2020-12-09 17:48:59 -05:00
transifex-integration[bot] a798c16929 Translate /config/locales/en.yml in es (#2342)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-08 18:25:38 -05:00
transifex-integration[bot] b73c55c8da Translate /config/locales/en.yml in de_DE (#2339)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-08 18:13:24 -05:00
transifex-integration[bot] fb8a28865f Translate /config/locales/en.yml in gl (#2337)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-08 18:04:15 -05:00
transifex-integration[bot] 2344e92ec6 Translate '/config/locales/en.yml' in 'nl' (#2335)
* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-08 17:53:31 -05:00
Julien Gribonvald 97e961d580 fix: health_check SMTP check when no auth required (#2281) 2020-12-08 17:46:58 -05:00
Ahmad Farhat 42bb568172 Uppercased Name in Full Name (#2333) 2020-12-07 18:50:04 -05:00
Lars Kiesow 04651ea65d Allow Searching for Rooms (#2315)
* Allow Searching for Rooms

If a user has a lot of rooms, finding the correct one can be somewhat
annoying and it would be great to be able to search for or filter the
rooms in the room list.

This patch adds a very simple search functionality for this. The search
bar is hidden as long as a user has not more than six (two rows in
desktop mode) rooms. If the number of rooms exceeds this limit, a search
field is shown to quickly filter the list.

* Updates Romm Filter Style

This patch updates the room filtering according to the review requests.
It switches to the same search input style that is used at places like
the recording table.

This mans, that this also works slightly different since the input now
has a clear and a search button. The basic functionality is the same
though.

Finally, this switches from plain JavaScript to jQuery functions for
filtering.
2020-12-07 18:20:58 -05:00
Lars Kiesow f2fc803d2e Improce Word Wrapping in Recording Table (#2328)
Using `break-all` for word-wrapping in the recording table can cause
awkward word wrapping. Using `break-word` should mostly avoid that
while still ensuring that words too long to properly fit are wrapped.

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-05 14:39:13 -05:00
Lars Kiesow 0c8c102f4a Fix Invite Link Separator (#2309)
This patch fixes the separator before the invite link in the text which
is sent to BigBlueButton. The `\n` characters were filtered out so that
at least a space character was missing here.

This fixes #2307

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-05 14:27:56 -05:00
transifex-integration[bot] fa99b7678f Translate /config/locales/en.yml in cs (#2289)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-05 14:12:56 -05:00
transifex-integration[bot] 33194ef06b Translate /config/locales/en.yml in da (#2290)
translation completed for the source file '/config/locales/en.yml'
on the 'da' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-12-05 14:05:40 -05:00
Ahmad Farhat 95b86b167e Fixed issue with account activation allowing it to be circumvented (#2324) 2020-12-01 18:21:09 -05:00
transifex-integration[bot] 81907d0285 Translate /config/locales/en.yml in ja_JP (#2258)
translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-30 14:03:39 -04:00
transifex-integration[bot] 03da4eafc6 Translate /config/locales/en.yml in ca (#2253)
translation completed for the source file '/config/locales/en.yml'
on the 'ca' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-30 13:21:42 -04:00
transifex-integration[bot] 3f45b27940 Translate /config/locales/en.yml in es (#2252)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-30 13:18:19 -04:00
transifex-integration[bot] 6cb40b0189 Translate /config/locales/en.yml in ca_ES (#2250)
translation completed for the source file '/config/locales/en.yml'
on the 'ca_ES' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-10-30 11:09:54 -04:00
transifex-integration[bot] 68b4a5abca Translate /config/locales/en.yml in nl (#2243)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-28 10:37:32 -04:00
Ahmad Farhat 57bf994f1b Made rescue clause more specific to catch timeouts for Server Rooms (#2245) 2020-10-28 10:27:24 -04:00
transifex-integration[bot] fe8a46cee4 Translate '/config/locales/en.yml' in 'gl' (#2239)
* Translate /config/locales/en.yml in gl

translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

* Translate /config/locales/en.yml in gl

translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-27 11:50:00 -04:00
transifex-integration[bot] 7e887f8ba3 Translate '/config/locales/en.yml' in 'de_DE' (#2236)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-27 11:15:35 -04:00
Ahmad Farhat 23b08853db Added missing question mark (#2234)
* Added missing question mark

* Made bigbluebutton name variable
2020-10-26 15:27:49 -04:00
Ahmad Farhat 68716bc6f3 Added a flash message if the getMeetings call times out (#2232) 2020-10-26 14:38:19 -04:00
transifex-integration[bot] 3880e932bb Translate '/config/locales/en.yml' in 'fr' (#2230)
* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-26 12:56:29 -04:00
Ahmad Farhat 49f7a7714a Fixed issue with ldap redirect throwing 404 (#2231) 2020-10-26 11:50:43 -04:00
Ahmad Farhat 0ff938a0fd GRN2-xx: Hide signin when error occures (#2221)
* Hide signin when error occures

* Rubocop fixes
2020-10-23 10:01:19 -04:00
Ahmad Farhat 0801c626c5 Added limit for join name (#2220) 2020-10-22 15:47:54 -04:00
transifex-integration[bot] 9cb09b49d1 Translate /config/locales/en.yml in cs (#2203)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-21 11:33:36 -04:00
Lars Kiesow a17bcb9d14 Fix broken UI on long filenames (#2215)
If you select a presentation with a very long filename in in Greenlight,
the filename text in the upload dialog wraps at the end and leaves the
label box, leading to a slightly broken looking user interface.

This patch adjusts the style to hide the end of a long filename, ending
with a horizontal ellipsis instead.
2020-10-21 10:17:24 -04:00
Ahmad Farhat 7c57f4b93a Fixed XSS vulnerability in merge user modal (#2214) 2020-10-20 14:31:59 -04:00
RomainNakedCat ec4cde64ff allow single quote inside email field (#2187)
Co-authored-by: romainnakedcat <romainnakedcat@greenserver.novalocal>
2020-10-13 10:20:34 -04:00
Ahmad Farhat c77ae11ea0 Bumped Rails to 5.2.4.4 (#2185) 2020-10-09 10:55:19 -04:00
transifex-integration[bot] 57c835d859 Translate /config/locales/en.yml in gl (#2180)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-08 10:55:13 -04:00
transifex-integration[bot] f8418098ec Translate '/config/locales/en.yml' in 'de_DE' (#2178)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-08 10:46:36 -04:00
transifex-integration[bot] 2e1ca707b0 Translate /config/locales/en.yml in ja_JP (#2175)
translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-08 10:38:44 -04:00
transifex-integration[bot] 719989f328 Translate /config/locales/en.yml in nl (#2173)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-08 10:23:23 -04:00
transifex-integration[bot] da01a3a388 Translate /config/locales/en.yml in cs (#2155)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-10-08 10:15:39 -04:00
Ahmad Farhat bc9867566c Updated language dropdown to look nicer (#2171) 2020-10-07 16:26:38 -04:00
Ahmad Farhat 92d6c285c4 Removed public from public room recordings (#2169) 2020-10-07 13:32:11 -04:00
Ahmad Farhat 5c79d37524 GRN2-xx: Added a tab that displays invited users when using Join by Invitation (#2162)
* Added a tab that displays invited users when using Join by Invitation

* Made search work
2020-10-07 11:23:19 -04:00
Ahmad Farhat c80e215110 Added a copy access code button (#2161) 2020-10-06 14:23:46 -04:00
Ahmad Farhat 1c2e8ad040 Removed unused option in code (#2153) 2020-10-05 13:53:47 -04:00
Ahmad Farhat 56be1ad2ae Improvements to create room modal (#2152) 2020-10-02 14:23:31 -04:00
Ahmad Farhat c8a104c76e Added timestamp to production logs (#2151) 2020-10-02 14:15:46 -04:00
Ahmad Farhat 07557f45dc Added env variable to set the default language (#2147) 2020-10-02 09:50:24 -04:00
Ahmad Farhat 165eeccb23 Manually encode the ampersand in a presentation file name (#2140) 2020-09-29 14:48:54 -04:00
transifex-integration[bot] 58989c96c9 Translate /config/locales/en.yml in it (#2131)
translation completed for the source file '/config/locales/en.yml'
on the 'it' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-29 13:33:48 -04:00
Lars Kiesow 4286864263 Puma Worker Configuration (#1701)
We noticed that the current default settings perform very poorly under
load. We managed to literally take down Greenlight during a larger event
when people where accessing the landing page for rooms and when doing
some tests, I was more or less able to DoS Greenlight on my own.

This patch adds a default worker configuration similar to the previous
configuration with one worker, but lets users easily adjust it to more
workers which significantly improves the situation. The small, 4 core
machine I was testing on could handle about thrice the amount of
requests.

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-29 11:44:47 -04:00
Ahmad Farhat ba7beb827a Switched default cable adapter to postgres (#2139) 2020-09-29 11:31:42 -04:00
marklackey f8a4f85193 Test email configuration during setup (#1144)
* create proper test message and use correct env var for from address. designed to work with sandboxed AWS ses

* use actionmailer in configuration test rake task

* remove mailfactory gem

* tidy up Gemfile and gem lock

* fix rubocop issues

* Update configuration.rake

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
Co-authored-by: Ahmad Farhat <ahmad.farhat@blindsidenetworks.com>
2020-09-23 11:20:49 -04:00
Ahmad Farhat b89cbfad03 ENABLE_SSL is now defaulted to true for new installations (#2121) 2020-09-23 10:25:44 -04:00
Jordi Molina 5a38ae488e Allow customization of test email recipient (#2107)
* Update configuration.rake

use env variable SMTP_TEST_RECIPIENT so customers using mail providers like Microsoft can specify RFC 2606 compliant destination test recipients

* add SMTP_TEST_RECIPIENT to sample.env

add SMTP_TEST_RECIPIENT to sample.env with default value to ensure retro compatibility

* default to notifications@example.com

default to notifications@example.com should SMTP_TEST_RECIPIENT not be defined

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-22 11:03:47 -04:00
Henning 75b989240a Added validation for name: Should not include a http(s) url (#2114) 2020-09-22 10:46:17 -04:00
Ahmad Farhat 816cefe1b6 Fixed 404 when resending verification email (#2110) 2020-09-21 15:32:05 -04:00
Ahmad Farhat 360783606e Fixed 500 caused by editting a user when not allowed to (#2108) 2020-09-21 13:20:15 -04:00
Ahmad Farhat 74ebb15dad Fixed 500 when there is an invalid profile picture (#2109) 2020-09-21 13:12:17 -04:00
Ahmad Farhat f992f76ae1 Set default cable adapter to postgres (#2096) 2020-09-17 15:02:54 -04:00
Ahmad Farhat 7309ef9bfd Added back join retry as fallback (#2095) 2020-09-17 14:19:18 -04:00
transifex-integration[bot] a8251338af Translate /config/locales/en.yml in fr (#2090)
translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-17 14:11:55 -04:00
Ahmad Farhat 55dd5725b5 Fixed 404 on room join (#2092) 2020-09-17 11:32:06 -04:00
Toni Förster a27884733d fixes #2082 proper link in mail (#2083)
* fixes #2082 proper link in mail

only send the promoted user a link to the admin page if their role 
allows them to.

* addressed review

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-15 16:08:32 -04:00
Ahmad Farhat ca94ac46ba Added back ability to set maintenance window through env variables (#2089) 2020-09-15 13:37:58 -04:00
transifex-integration[bot] 83cc7ed3cc Translate /config/locales/en.yml in ja_JP (#2074)
translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-08 14:22:52 -04:00
transifex-integration[bot] 015b17098e Translate /config/locales/en.yml in nl (#2070)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-08 14:12:48 -04:00
transifex-integration[bot] e096ba8d6e Translate /config/locales/en.yml in zh_CN (#2068)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-08 13:41:50 -04:00
transifex-integration[bot] a97900b916 Translate /config/locales/en.yml in de_DE (#2065)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-08 13:38:11 -04:00
transifex-integration[bot] db20b94fee Translate /config/locales/en.yml in gl (#2061)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-08 13:30:06 -04:00
transifex-integration[bot] ff2bfb0f02 Translate /config/locales/en.yml in es (#2042)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-08 13:22:33 -04:00
Ahmad Farhat 4deefdfee9 Docker ignore new security policy (#2062) 2020-09-03 12:04:19 -04:00
Ahmad Farhat a00732c10e Create SECURITY.md 2020-09-03 11:25:24 -04:00
Ahmad Farhat 5cbcc82e9b Added confirm modal when deleting recording (#2056) 2020-09-03 11:08:13 -04:00
Ahmad Farhat 99c7262971 Added env variable to exclude recording formats from public recordings (#2055) 2020-09-03 10:55:24 -04:00
Mitsutaka Sato 3de60daf85 WR342136 One more piece for hide/show recording (#2059)
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-03 10:45:53 -04:00
Ahmad Farhat c1c62e8bf8 Fixed issue with shared room not having correct record setting (#2053) 2020-09-02 13:55:09 -04:00
Ahmad Farhat cb700404f3 Fixed bug allowing users to access their own room when they aren't allowed (#2054) 2020-09-02 13:45:29 -04:00
transifex-integration[bot] f85fb90cae Translate /config/locales/en.yml in zh_CN (#2048)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-02 11:34:37 -04:00
transifex-integration[bot] 56b8802120 Translate /config/locales/en.yml in hu_HU (#2002)
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-02 10:58:32 -04:00
transifex-integration[bot] 2d4d76e70b Translate /config/locales/en.yml in ko_KR (#2003)
translation completed for the source file '/config/locales/en.yml'
on the 'ko_KR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-09-02 10:28:00 -04:00
felix-itz 5760bea00b LDAP Sign-In form: user field attributes (#2014)
- autocomplete="username": Tell the browser a user name should be filled, if any.
  Reference: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
- autocapitalize="none": Tell browsers (especially on mobile devices like iOS) not to
  capitalize the first letter
  Reference: https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html#//apple_ref/doc/uid/TP40008058-autocapitalize
- spellcheck="false": Do not spell-check the user name
  Reference: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/spellcheck
- autofocus: indicates that the input should automatically have focus, which makes sense
  because this form is shown after having clicked the "login" button so it's not an issue that
  the screen reader will skip the "Sign in to your account" text.
  Reference: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefautofocus

This PR will improve usability especially on mobile devices. It does *not* not attempt to improve WCAG compliance.

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-26 14:03:19 -04:00
Ahmad Farhat e2bfdef967 More work to fix CSRF issue on join (#2043) 2020-08-26 10:20:50 -04:00
Lars Kiesow 503ca52806 Fix Cross-Site-Scripting Vulnerability (#2034)
This patch fixes a cross-site-scripting vulnerability in Greenlight
which allowed users to inject code into Greenlight by adding scripts
into their names.

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-24 14:32:14 -04:00
Ahmad Farhat e5340d2a7a Add env variables to change same_site and secure (#2040) 2020-08-24 14:19:46 -04:00
Ahmad Farhat b23715c906 Changed room joining post to hopefully fix CSRF errors (#2027) 2020-08-19 16:03:10 -04:00
Ahmad Farhat 6dea54ccd7 Added cable url (#2026) 2020-08-19 15:55:50 -04:00
transifex-integration[bot] f82090fabc Translate /config/locales/en.yml in da (#1993)
translation completed for the source file '/config/locales/en.yml'
on the 'da' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-05 10:19:26 -04:00
transifex-integration[bot] f6dcee3417 Translate /config/locales/en.yml in gl (#1991)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-05 10:08:52 -04:00
transifex-integration[bot] 9f66c39839 Translate /config/locales/en.yml in fa_IR (#1989)
translation completed for the source file '/config/locales/en.yml'
on the 'fa_IR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-08-05 09:54:08 -04:00
Ahmad Farhat aeb5edf8a0 Hide recording table when disabled through room config (#1988) 2020-08-04 17:59:47 -04:00
transifex-integration[bot] ace029b124 Translate /config/locales/en.yml in de_DE (#1985)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-04 16:45:20 -04:00
transifex-integration[bot] d30df21097 Translate /config/locales/en.yml in nl (#1983)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-04 16:33:50 -04:00
transifex-integration[bot] 892a9bad69 Translate /config/locales/en.yml in ja_JP (#1981)
translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-04 16:24:46 -04:00
transifex-integration[bot] ba1f1efb4a Translate /config/locales/en.yml in gl (#1961)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-04 16:14:55 -04:00
Lars Kiesow 61b91881d7 Allow uploading larger presentations (#1977)
* Allow uploading larger presentations

This patch allows uploading presentations up to 30MB instead of the
default 1MB. This should prevent users from getting an 401 reply from
Nginx in most cases.

* Update greenlight.nginx

Co-authored-by: Ahmad Farhat <ahmad.farhat@blindsidenetworks.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-04 15:41:03 -04:00
Ahmad Farhat 620416f18a Fixed issue causing account verify to throw 404 (#1987) 2020-08-04 14:04:47 -04:00
Ahmad Farhat 0710c569b7 GRN2-xx: Allowed file types now matches BigBlueButton (#1966)
* Allowed file types now matches BigBlueButton

* Uppercased file types are now allowed

* Rubocop
2020-08-04 10:35:07 -04:00
MrKeksi 35c82f9c17 small cosmetic changes (#1872)
* removed remains

* comment adapted

* removes blinking background from icons on buttons 

like copy (from room links)

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-08-04 10:26:41 -04:00
Ahmad Farhat bb83bf553d Revert hiding recording menus when recording disabled (#1959) 2020-07-30 15:18:28 -04:00
Ahmad Farhat ec93d5e472 GRN2-xx: Fixed issue with join warning displaying incorrectly (#1957)
* Fixed issue with room settings

* Update room join consent string
2020-07-30 10:50:04 -04:00
transifex-integration[bot] af8c78fdee Translate /config/locales/en.yml in gl (#1956)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-30 10:01:33 -04:00
transifex-integration[bot] 70b3f26db8 Translate /config/locales/en.yml in de_DE (#1955)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-07-30 09:47:13 -04:00
transifex-integration[bot] 141518d6c9 Translate '/config/locales/en.yml' in 'id_ID' (#1823)
* Translate /config/locales/en.yml in id_ID

translation completed for the source file '/config/locales/en.yml'
on the 'id_ID' language.

* Translate /config/locales/en.yml in id_ID

translation completed for the source file '/config/locales/en.yml'
on the 'id_ID' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 14:51:49 -04:00
transifex-integration[bot] dfdada853b Translate '/config/locales/en.yml' in 'cs' (#1835)
* Translate /config/locales/en.yml in cs

translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

* Translate /config/locales/en.yml in cs

translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 14:44:24 -04:00
transifex-integration[bot] f61049bac2 Translate '/config/locales/en.yml' in 'sk_SK' (#1885)
* Translate /config/locales/en.yml in sk_SK

translation completed for the source file '/config/locales/en.yml'
on the 'sk_SK' language.

* Translate /config/locales/en.yml in sk_SK

translation completed for the source file '/config/locales/en.yml'
on the 'sk_SK' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 14:37:00 -04:00
transifex-integration[bot] 74febbec12 Translate '/config/locales/en.yml' in 'uk' (#1903)
* Translate /config/locales/en.yml in uk

translation completed for the source file '/config/locales/en.yml'
on the 'uk' language.

* Translate /config/locales/en.yml in uk

translation completed for the source file '/config/locales/en.yml'
on the 'uk' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 14:23:06 -04:00
transifex-integration[bot] b89a523d10 Translate /config/locales/en.yml in nl (#1953)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 14:00:23 -04:00
transifex-integration[bot] 4a97a87459 Translate '/config/locales/en.yml' in 'fa_IR' (#1929)
* Translate /config/locales/en.yml in fa_IR

translation completed for the source file '/config/locales/en.yml'
on the 'fa_IR' language.

* Translate /config/locales/en.yml in fa_IR

translation completed for the source file '/config/locales/en.yml'
on the 'fa_IR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 13:46:27 -04:00
transifex-integration[bot] 9932c32956 Translate /config/locales/en.yml in he_IL (#1944)
translation completed for the source file '/config/locales/en.yml'
on the 'he_IL' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-07-29 13:33:22 -04:00
Ahmad Farhat 60cf5f7440 Merge v2.7-alpha (#1951)
* Fix wrong conditional (reported by LGTM) (#1477)

Signed-off-by: Stefan Weil <sw@weilnetz.de>

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>

* Bump rack from 2.2.2 to 2.2.3 (#1839)

Bumps [rack](https://github.com/rack/rack) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/v2.2.2...2.2.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [FIX]  Unable to edit long recording names #1776  (#1780)

* Allow to set a filter for LDAP authentication

* [FIX] Unable to edit long recording names #1776

Co-authored-by: François Ménabé <francois.menabe@unistra.fr>
Co-authored-by: farhatahmad <ahmad.af.farhat@gmail.com>

* Desgin for Manage Users Tabs (#1777)

* Update _subtitle.html.erb

* Update _manage_users_tags.html.erb

* Update admins.scss

* Update _primary_themes.scss

* Update _manage_users_tags.html.erb

* Minor style changes to manage users (#1845)

* Maintenance banner moved to admin site (#1775)

* initial

* finish

* travis fixes

* travis again

* not required

* Co-authored-by: Tobias Fiebig <t.fiebig@tudelft.nl> (#1296)

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>

* Enhance Room OpenGraph Metadata (#1601)

* Revert "Enhance Room OpenGraph Metadata (#1601)" (#1852)

This reverts commit 3b007c233a.

* GRN2-xx: Tab title now displays the current page name (#1853)

* Tab title now displays the current page name

* Added page title for the rest of the pages

* Split Site Settings into 3 different tabs (#1858)

* Split Site Settings into 3 different tabs

* Fix copyright

* Added redirect to correct tab

* Make sure settings are displaying when they should

* Update en.yml (#1857)

* Build images for alpha branches (#1867)

* Upgraded jquery to latest version (#1896)

* Added favicon tag (#1898)

* Fixed XSS issue with role name (#1899)

* Update path for coloring redirect (#1908)

* Added a fourth section to the room uid (#1910)

* Fixed issue with insecure room sharing removal (#1914)

* Fixes typo (#1917)

Fixes typo: successfully was written incorrect.

* Fixed order of rooms in server rooms (#1915)

* Change default room sort to latest activity (#1919)

* GRN2-xx: Small changes/improvements to the recording settings (#1851)

* Small changes/improvements to the recording settings

* Replaced room warning with info flash

* Added global setting to enable/disable the recording consent feature

* Replace Legal with Terms (#1931)

* Added a more friendly OpenGraph description when invited to join a room (#1932)

* Fixed issue causing maintenance banner not to hide correctly (#1933)

* Hide recording menu and recording list when it is disabled (#1935)

* Hide recording menu and recording list when it is disabled

* Hide recording list when disabled

* GRN2-xx: Added an auto-refresh after 2 mins while waiting for room to start (#1947)

* Added an auto-refresh after 2 mins while waiting for room to start

* Fixed random issue with test case

* GRN2-xx: Added ability to preupload presentations to rooms (#1895)

* Added ability to preupload presentations to rooms (#1868)

* Added setting to site settings and allowed admins to change the presentation

* Added AWS S3 and GCS Storage ENV variables

* Added check to ensure file extension is correct

* Added icon to remove presentation

* Added testcases for preupload

* Add nginx redirect to solve issue with relative root

* Record title, instead of room name, in the popup (#1924)

* Update _public_recording_row.html.erb

* Update _recording_row.html.erb

Co-authored-by: Stefan Weil <sw@weilnetz.de>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: beckerr-rzht <beckerr@hochschule-trier.de>
Co-authored-by: François Ménabé <francois.menabe@unistra.fr>
Co-authored-by: MrKeksi <mrkeksi@users.noreply.github.com>
Co-authored-by: yanosz <yanosz@users.noreply.github.com>
Co-authored-by: Moritz Schlarb <moschlar@metalabs.de>
Co-authored-by: chronikum <34622984+chronikum@users.noreply.github.com>
Co-authored-by: Mitsutaka Sato <miztaka@honestyworks.jp>
Co-authored-by: hiroshisuga <45039819+hiroshisuga@users.noreply.github.com>
2020-07-29 11:03:22 -04:00
Ahmad Farhat 50c2070188 Fix issue with search in manage users (#1792) 2020-06-12 15:10:12 -04:00
transifex-integration[bot] 152c636fa3 Translate '/config/locales/en.yml' in 'pt_BR' (#1787)
* Translate /config/locales/en.yml in pt_BR

translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language.

* Translate /config/locales/en.yml in pt_BR

translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-12 11:22:43 -04:00
Ahmad Farhat b84f10a51a GRN2-xx: Cleaned up manage users query (#1786)
* Cleaned up manage users query

* Bring back filter by role
2020-06-12 10:01:53 -04:00
transifex-integration[bot] a32a383b65 Translate '/config/locales/en.yml' in 'eu' (#1785)
* Translate /config/locales/en.yml in eu

translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.

* Translate /config/locales/en.yml in eu

translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-11 16:21:03 -04:00
Ahmad Farhat 06236b49f7 Sanitize search for users and rooms (#1784) 2020-06-11 12:39:18 -04:00
Ahmad Farhat cf794db595 Added ability to map attributes for LDAP (#1779) 2020-06-11 11:28:55 -04:00
transifex-integration[bot] 2c1a11e9a3 Translate '/config/locales/en.yml' in 'ru' (#1781)
* Translate /config/locales/en.yml in ru

translation completed for the source file '/config/locales/en.yml'
on the 'ru' language.

* Translate /config/locales/en.yml in ru

translation completed for the source file '/config/locales/en.yml'
on the 'ru' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-11 10:46:18 -04:00
Ahmad Farhat 39c31e759a Fixed issue causing manage users to through 500 (#1778) 2020-06-11 10:21:11 -04:00
dependabot[bot] 62da03b9dc Bump websocket-extensions from 0.1.4 to 0.1.5 (#1757)
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-ruby) from 0.1.4 to 0.1.5.
- [Release notes](https://github.com/faye/websocket-extensions-ruby/releases)
- [Changelog](https://github.com/faye/websocket-extensions-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-ruby/compare/0.1.4...0.1.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-06-09 15:19:18 -04:00
transifex-integration[bot] c7472e6d80 Translate '/config/locales/en.yml' in 'kn' (#1754)
* Translate /config/locales/en.yml in kn

translation completed for the source file '/config/locales/en.yml'
on the 'kn' language.

* Translate /config/locales/en.yml in kn

translation completed for the source file '/config/locales/en.yml'
on the 'kn' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-06-04 15:59:05 -04:00
Ahmad Farhat 959cfe0425 Fixed user create task failing with invalid role (#1751) 2020-06-04 14:08:25 -04:00
Ahmad Farhat f9e85aadb9 Fix home room not being created if user gets assigned new role (#1750) 2020-06-04 12:05:58 -04:00
Ahmad Farhat 33ca929630 Fixed Role not exist warning in user create (#1737) 2020-06-03 14:44:45 -04:00
Ahmad Farhat a61b96289e Updated sample env for SMTP setting (#1736) 2020-06-03 13:31:40 -04:00
transifex-integration[bot] 9edddc9fd4 Translate /config/locales/en.yml in da (#1730)
translation completed for the source file '/config/locales/en.yml'
on the 'da' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-03 10:28:14 -04:00
LifeEncrypter b297fdfbaf Added optional SMTP_OPENSSL_VERIFY_MODE (#1703)
* Added optional SMTP_OPENSSL_VERIFY_MODE to fix mailserver certificate issues

* Added optional SMTP_OPENSSL_VERIFY_MODE

Fixed to long line. [139/130]

* Fix multi-line indent

* Remove elseif statements and use much shorter way of checking for SMTP_OPENSSL_VERIFY_MODE

* Too long line again

* Moved SMTP_OPENSSL_VERIFY_OPTION. Specified what it does. Added security warning

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-03 10:13:08 -04:00
Ahmad Farhat 13fb9faa4c Fixed issue with LDAP role not being respected (#1728) 2020-06-02 16:50:52 -04:00
Ahmad Farhat 737d39dce9 Signed in users are now redirected to main page if they try to access root (#1726) 2020-06-02 16:42:15 -04:00
transifex-integration[bot] 9cf7e53c99 Translate '/config/locales/en.yml' in 'ja_JP' (#1708)
* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-02 13:45:42 -04:00
transifex-integration[bot] 68b17a586a Translate '/config/locales/en.yml' in 'fr' (#1705)
* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-02 13:23:55 -04:00
transifex-integration[bot] ae80f76fd6 Translate '/config/locales/en.yml' in 'hu_HU' (#1713)
* Translate /config/locales/en.yml in hu_HU

translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

* Translate /config/locales/en.yml in hu_HU

translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-06-02 11:33:14 -04:00
Ahmad Farhat 7e27feb70b Removed default order by priority on roles (#1720) 2020-06-02 11:12:33 -04:00
Ahmad Farhat 4da03957a9 Fix rename recordings (#1721) 2020-06-02 11:01:35 -04:00
Ahmad Farhat 8355c59b00 Upgrade LDAP gem version (#1700) 2020-05-28 18:36:20 -04:00
Ahmad Farhat 8444b2c333 Fixed room remove task (#1695) 2020-05-28 18:24:03 -04:00
Ahmad Farhat fe363e742b Home rooms are created for all users with role if can_create_rooms is enabled (#1694) 2020-05-28 14:48:18 -04:00
transifex-integration[bot] 5e4fe3b306 Translate '/config/locales/en.yml' in 'zh_CN' (#1683)
* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-28 14:37:32 -04:00
Ahmad Farhat 3be109df54 Fixed user create rake task (#1690) 2020-05-28 14:27:46 -04:00
Ahmad Farhat b0de03cc09 Fixed migration erroring (#1681) 2020-05-27 17:45:35 -04:00
Ahmad Farhat db6db06a78 Fix date for duplicate rooms (#1680) 2020-05-27 16:42:26 -04:00
transifex-integration[bot] 140254ad62 Translate '/config/locales/en.yml' in 'gl' (#1676)
* Translate /config/locales/en.yml in gl

translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

* Translate /config/locales/en.yml in gl

translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 16:13:19 -04:00
Ahmad Farhat d7079e7880 Fixes for 2.6 (#1677) 2020-05-27 14:46:33 -04:00
transifex-integration[bot] 39962c54df Translate '/config/locales/en.yml' in 'de_DE' (#1673)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 14:12:44 -04:00
transifex-integration[bot] e3f5d40139 Translate '/config/locales/en.yml' in 'tr' (#1639)
* Translate /config/locales/en.yml in tr

translation completed for the source file '/config/locales/en.yml'
on the 'tr' language.

* Translate /config/locales/en.yml in tr

translation completed for the source file '/config/locales/en.yml'
on the 'tr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 11:23:38 -04:00
transifex-integration[bot] 76faee591f Translate '/config/locales/en.yml' in 'nl' (#1675)
* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 10:34:00 -04:00
transifex-integration[bot] ccb1be1734 Translate '/config/locales/en.yml' in 'zh_CN' (#1647)
* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 10:23:46 -04:00
transifex-integration[bot] da19a23be1 Translate /config/locales/en.yml in cs (#1631)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 10:17:59 -04:00
transifex-integration[bot] e8ed94db98 Translate /config/locales/en.yml in gl (#1605)
translation completed for the source file '/config/locales/en.yml'
on the 'gl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 10:09:38 -04:00
transifex-integration[bot] 093487a6cc Translate '/config/locales/en.yml' in 'fr' (#1602)
* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-05-27 10:06:28 -04:00
Ahmad Farhat 51824ad84b Merge v2.6-alpha (#1672)
* GRN2-xx: Switch the relation between users and roles to make queries cleaner and faster (#1299)

* First steps

* Fixes in account creation flow

* Fixed most testcases

* more test fixes

* Fixed more test cases

* Passing tests and rubocop

* Added rake task to remove rooms

* Adding translation (#1510)

* Update _account.html.erb

* Update en.yml

* Fix "for" attribute for label elements (#1488)

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>

* Fix some issues reported by LGTM (#1478)

* Declare local JavaScript variables (reported by LGTM)

Signed-off-by: Stefan Weil <sw@weilnetz.de>

* Remove unused local JavaScript variable (reported by LGTM)

Signed-off-by: Stefan Weil <sw@weilnetz.de>

* Puma Worker Configuration (#1332)

We noticed that the current default settings perform very poorly under
load. We managed to literally take down Greenlight during a larger event
when people where accessing the landing page for rooms and when doing
some tests, I was more or less able to DoS Greenlight on my own.

This patch adds a default worker configuration which significantly
improves the situation. The small, 4 core machine I was testing on could
handle about thrice the amount of requests.

While the new default configuration should be reasonably well suited for
most deployments, this patch further allows users to easily configure
the worker pool on their own in the environment file.

* Made name and email readonly for no greenlight accounts (#1534)

* Fixed hardcoded string (#1532)

* fixed spelling error that was bugging me :) - sep a rat e (#1535)

Co-authored-by: Dave Lane <dave@oerfoundation.org>

* Improve Server Rooms View (#1524)

* Order rooms by status

* Cleaned up order function

* Now displays Started/Created/Ended

* Added participant count to rooms list

* Fix rake task user:create so that users can be created when terms are present (#1565)

* Changed user create task to always accept terms

* clean up

* More secure room ID (#1451)

* Legal and privpolicy link (#1421)

* add customizable Links to Imprint and Privacy Policy

* fix copy&paste error in spec

* replace "imprint" with "legal" since that is the correct term

* remove german translation of new strings, transifex will take care of them later

* GRN2-295:Refactored update profile and update password (#1591)

* Refactored update profile and update password

* Relowered rubocop settings

* Fixed email sending when not supposed to (#1592)

* Design changes for small screens  (#1580)

* now rap for pagination

* Update _subtitle.html.erb

* Update _rooms.html.erb

* Update _recordings.html.erb

* Update _rooms.html.erb

* Update _users.html.erb

* Update cant_create_rooms.html.erb

* Update room.js

* Update edit.html.erb

* Update new.html.erb

* Update cant_create_rooms.html.erb

* Update _sessions.html.erb

* Update _account.html.erb

* Make Greenlight work with Ruby 2.7 (#1560)

Greenlight's failure to start up with Ruby 2.7 seems to be caused by [an
issue in bootsnap](https://github.com/Shopify/bootsnap/issues/258).
Updating that library makes Greenlight work again.

However, there are still a lot of deprecation warnings. But that's
something to deal with separately.

This fixes #1558

* use email input for sign in (#1199)

* use email input for sign in

* use email input for registration

* use email input for invitation

* use email input for account settings

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>

* Fix Gemfile (#1593)

* Fixed invalid token for password reset (#1632)

* HELP_URL env variable now works as expected (#1636)

* #1372 Fix for long Text in Table + Remove invalid HTML Tag (#1403)

* removed invalid HTML Tag

* removed invalid HTML Tag

* Update _public_recording_row.html.erb

* Update _recording_row.html.erb

* Update _server_recording_row.html.erb

form-inline replaced by own css

* Update _server_room_row.html.erb

* Update _public_recording_row.html.erb

* Update _recording_row.html.erb

* Update _public_recording_row.html.erb

* Update _recordings.html.erb

* Update _rooms.html.erb

* Update main.scss

fix for long text

* Update main.scss

* Update _public_recording_row.html.erb

* Added more validation on profile image (#1644)

* Users who can't create rooms but have shared rooms now have a different view (#1649)

* Revert "Puma Worker Configuration (#1332)" (#1667)

This reverts commit 78ed8d7460.

* Removed html safe from all flash messages (#1668)

* Remove hardcoded guest=true if require mod approval is set (#1669)

* Change random generation for room uid (#1670)

* GRN2-290: Update gems and update to Rails 5.2.4.3 (#1671)

* Update gems and update to Rails 5.2.4.3

* remove gemfile error

Co-authored-by: MrKeksi <mrkeksi@users.noreply.github.com>
Co-authored-by: Florian Weber <fnwbr@users.noreply.github.com>
Co-authored-by: Stefan Weil <sw@weilnetz.de>
Co-authored-by: Lars Kiesow <lkiesow@uos.de>
Co-authored-by: Dave Lane <dave@lane.net.nz>
Co-authored-by: Dave Lane <dave@oerfoundation.org>
Co-authored-by: Henning <hng@users.noreply.github.com>
Co-authored-by: Marcel Waldvogel <marcel@waldvogel.family>
Co-authored-by: Christian Marg <marg@rz.tu-clausthal.de>
Co-authored-by: Klaus <klaus@jsxc.org>
2020-05-26 17:37:23 -04:00
Jesus Federico 7411eba8e0 GRN2-xx: Added port to database configuration (#1550)
* GRN2-XX: Added port to database configuration

* GRN2-XX: Added port to database configuration
2020-05-08 16:13:57 -04:00
Ahmad Farhat 6b628d62d3 Remove production check for hosts (#1549) 2020-05-08 16:09:03 -04:00
jfederico 6104b3d713 GRN2-xx: Bypass SAFE_HOSTS on dev and test environments 2020-05-08 15:38:02 -04:00
Ahmad Farhat 891a32a15c GR2-xx: Updated gems to point to rubygems (#1546)
* Updated gems

* Updated another gem

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 15:29:20 -04:00
Ahmad Farhat f47d68ea18 GRN2-xx: Allow SAFE_HOSTS to be left blank (#1545)
* Allow SAFE_HOSTS to be left blank

* a different approach

Co-authored-by: jfederico <jesus@123it.ca>
2020-05-08 15:25:24 -04:00
transifex-integration[bot] 0806bf4e58 Translate /config/locales/en.yml in it (#1502)
translation completed for the source file '/config/locales/en.yml'
on the 'it' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 14:48:44 -04:00
transifex-integration[bot] 5a77128185 Translate /config/locales/en.yml in eu (#1499)
translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 14:42:41 -04:00
transifex-integration[bot] 9e3d8f2821 Translate /config/locales/en.yml in vi (#1484)
translation completed for the source file '/config/locales/en.yml'
on the 'vi' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 14:37:17 -04:00
transifex-integration[bot] 2fbbaebadb Translate /config/locales/en.yml in ja_JP (#1481)
translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 14:30:05 -04:00
transifex-integration[bot] 3b447cf333 Translate /config/locales/en.yml in da (#1475)
translation completed for the source file '/config/locales/en.yml'
on the 'da' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 14:01:41 -04:00
transifex-integration[bot] 7a44a6b6e8 Translate '/config/locales/en.yml' in 'de_DE' (#1462)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-05-08 13:58:23 -04:00
Ahmad Farhat 6fc402e40b GRN2-xx: Added SAFE_HOSTS env variable to block unknown hosts (#1543)
* Added SAFE_HOSTS env variable to block unknown hosts

* Update sample.env
2020-05-08 13:33:02 -04:00
transifex-integration[bot] 8f454cad0e Translate /config/locales/en.yml in uk (#1460)
translation completed for the source file '/config/locales/en.yml'
on the 'uk' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-29 22:23:30 -04:00
Ahmad Farhat 28302107bd GRN2-xx: Restructured email verification and password reset (#1444)
* Restructured email verification and password reset

* Fixed issue with password reset

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-29 17:56:46 -04:00
Ahmad Farhat 8f3ba8a038 Bumped LDAP gem version (#1443) 2020-04-29 17:45:37 -04:00
transifex-integration[bot] c92d6778c8 Translate /config/locales/en.yml in cs (#1454)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-29 16:32:19 -04:00
transifex-integration[bot] 7d881377d2 Translate '/config/locales/en.yml' in 'nl' (#1447)
* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-29 11:43:29 -04:00
transifex-integration[bot] 4bea4bb64c Translate '/config/locales/en.yml' in 'de_DE' (#1442)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-29 11:27:34 -04:00
transifex-integration[bot] ce1e0d6737 Translate '/config/locales/en.yml' in 'ja_JP' (#1445)
* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-29 11:20:48 -04:00
transifex-integration[bot] 6fa547fb83 Translate '/config/locales/en.yml' in 'lv' (#1435)
* Translate /config/locales/en.yml in lv

translation completed for the source file '/config/locales/en.yml'
on the 'lv' language.

* Translate /config/locales/en.yml in lv

translation completed for the source file '/config/locales/en.yml'
on the 'lv' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 15:30:52 -04:00
transifex-integration[bot] 6cceafa081 Translate '/config/locales/en.yml' in 'de_DE' (#1441)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 15:11:12 -04:00
transifex-integration[bot] 12f62de6e4 Translate /config/locales/en.yml in nl (#1438)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 15:07:13 -04:00
transifex-integration[bot] 16647b5c7f Translate '/config/locales/en.yml' in 'fr' (#1440)
* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:50:39 -04:00
transifex-integration[bot] 90032045a4 Translate /config/locales/en.yml in tr (#1439)
translation completed for the source file '/config/locales/en.yml'
on the 'tr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:39:14 -04:00
transifex-integration[bot] c7ade09ee8 Translate /config/locales/en.yml in it (#1437)
translation completed for the source file '/config/locales/en.yml'
on the 'it' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:32:07 -04:00
transifex-integration[bot] a48bd084e8 Translate '/config/locales/en.yml' in 'hu_HU' (#1436)
* Translate /config/locales/en.yml in hu_HU

translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

* Translate /config/locales/en.yml in hu_HU

translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:28:48 -04:00
transifex-integration[bot] 7823f65067 Translate '/config/locales/en.yml' in 'bg' (#1434)
* Translate /config/locales/en.yml in bg

translation completed for the source file '/config/locales/en.yml'
on the 'bg' language.

* Translate /config/locales/en.yml in bg

translation completed for the source file '/config/locales/en.yml'
on the 'bg' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:24:06 -04:00
transifex-integration[bot] d3c806de60 Translate '/config/locales/en.yml' in 'ja_JP' (#1433)
* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:20:41 -04:00
transifex-integration[bot] 238107536e Translate /config/locales/en.yml in hy (#1432)
translation completed for the source file '/config/locales/en.yml'
on the 'hy' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:17:39 -04:00
transifex-integration[bot] fef02ee76f Translate /config/locales/en.yml in es_MX (#1431)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:13:21 -04:00
transifex-integration[bot] 35812c21c6 Translate /config/locales/en.yml in da (#1430)
translation completed for the source file '/config/locales/en.yml'
on the 'da' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-04-28 14:10:24 -04:00
transifex-integration[bot] 9ba74825f0 Translate /config/locales/en.yml in zh_CN (#1429)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-28 14:03:22 -04:00
transifex-integration[bot] 8e701c8460 Translate '/config/locales/en.yml' in 'uk' (#1416)
* Translate /config/locales/en.yml in uk

translation completed for the source file '/config/locales/en.yml'
on the 'uk' language.

* Translate /config/locales/en.yml in uk

translation completed for the source file '/config/locales/en.yml'
on the 'uk' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-28 13:50:03 -04:00
Jesus Federico 2ab0c7e067 Merge pull request #1222 from farhatahmad/room-settings
GRN2-xx: Added room configuration tab to allow admins to set room settings as always enabled, optional or disabled
2020-04-28 13:42:55 -04:00
Ahmad Farhat c81c6ab417 Update joiner.rb 2020-04-28 13:31:27 -04:00
Ahmad Farhat 8788664061 Merge branch 'master' into room-settings 2020-04-28 13:30:39 -04:00
Jesus Federico a6d0e2a695 Translate '/config/locales/en.yml' in 'eu' (#1386)
* Translate /config/locales/en.yml in eu

translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.

* Translate /config/locales/en.yml in eu

translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-28 13:15:58 -04:00
Jesus Federico 6dd78ca41b Merge branch 'master' into translations_en-yml--master_eu 2020-04-28 13:15:47 -04:00
Ahmad Farhat 44bd2315b2 Merge branch 'master' into room-settings 2020-04-28 13:12:20 -04:00
transifex-integration[bot] 5f9e82c705 Translate /config/locales/en.yml in eu
translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.
2020-04-28 17:04:23 +00:00
Ahmad Farhat b08b1ff013 GRN2-xx: Fixed translation location for room status (#1378)
* Fixed translation location for room status

* Added more missing translations
2020-04-28 13:04:04 -04:00
transifex-integration[bot] f8a9d71b77 Translate /config/locales/en.yml in eu
translation completed for the source file '/config/locales/en.yml'
on the 'eu' language.
2020-04-24 10:02:15 +00:00
jfederico aeaa1e7d45 Merge branch 'v2' 2020-04-22 23:40:28 -04:00
Ahmad Farhat 855694c716 Store a random user id for unauthenticated users as a cookie (#1364) 2020-04-22 09:46:21 -04:00
transifex-integration[bot] dadc57d9ea Translate /config/locales/en.yml in zh_CN (#1356)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-21 13:54:39 -04:00
Jesus Federico a11d79f1dc GRN2-xx: Updated i18n-language-mapping to 0.1.1 (#1361)
Updated i18n-language-mapping to 0.1.1
2020-04-21 13:41:33 -04:00
François Ménabé 8049ddbd01 Allow to set a filter for LDAP authentication (#1306) 2020-04-20 15:25:25 -04:00
farhatahmad 1d88f54b44 Added disabled styling to always enabled settings 2020-04-16 15:50:23 -04:00
farhatahmad 63b6bb7407 Added tests 2020-04-16 15:50:23 -04:00
farhatahmad 33d7fa4e1e Fixed rspec 2020-04-16 15:50:23 -04:00
farhatahmad 5c7062d7c9 Added room configuration tab to admin panel 2020-04-16 15:50:23 -04:00
Ahmad Farhat 5aa1868f63 Local account email is now downcased to match the downcased value stored in db (#1319)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 15:21:27 -04:00
Ahmad Farhat f4990b4523 GRN2-xx: Replaced bbb_id field with a better string generator (#1250)
* Replaced bbb_id field with a better string generator

* Update room.rb

How about this instead @farhatahmad ?

* Update room.rb

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 15:06:56 -04:00
Lars Kiesow 10ef20363a Additional LDAP Authentication Methods (#1287)
This patch allows anonymous and user based authentication to LDAP
servers. This change is based on a patch against bn-ldap-authentication:

-  https://github.com/blindsidenetworks/bn-ldap-authentication/pull/2

The patch introduces a new environment variable `LDAP_AUTH` which
controls the authentication method used against the LDAP server:

- `anonymous` enables an anonymous bind to the LDAP with no password
  being used.

- `user` uses the user's own credentials to search for his data,
  enabling authenticated login to LDAP without the need for a user with
  global read privileges.

The default still remains at using a bind user, allowing for a seamless
upgrade path from the previous version.

This fixes #1082

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 14:10:14 -04:00
Ahmad Farhat 9d14b561a5 Updated ldap gem to newest version (#1318) 2020-04-16 14:01:27 -04:00
Ahmad Farhat 37decd9b43 Fixed role permissin check for update_recording and delete_recording (#1308)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:52:04 -04:00
Lars Kiesow 311806faa7 Color Configuration for Cookie Banner (#1302)
* Color Configuration for Cookie Banner

Right now, the colors of the cookie banner are hard-coded which can
easily clash with the configured site colors in site settings.

This patch switches to using the configured colors instead.

* Update application.scss

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:46:46 -04:00
Ahmad Farhat 7738499978 Add check to make sure ldap username isn't blank (#1252)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:42:27 -04:00
Ahmad Farhat da82867abe Remove report issue from being included automatically (#1257)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:35:58 -04:00
Ahmad Farhat 2f41b02e72 Fixed server recordings 500 if user doesn't have an email (#1254)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:31:57 -04:00
transifex-integration[bot] 3b8b1abb59 Translate /config/locales/en.yml in hy (#1262)
translation completed for the source file '/config/locales/en.yml'
on the 'hy' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:24:10 -04:00
transifex-integration[bot] 977e93754d Translate /config/locales/en.yml in it (#1256)
translation completed for the source file '/config/locales/en.yml'
on the 'it' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:13:25 -04:00
transifex-integration[bot] 13c58fb3c2 Translate /config/locales/en.yml in tr (#1249)
translation completed for the source file '/config/locales/en.yml'
on the 'tr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:08:44 -04:00
transifex-integration[bot] d10ec802c6 Translate /config/locales/en.yml in tr (#1248)
translation completed for the source file '/config/locales/en.yml'
on the 'tr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 12:00:09 -04:00
transifex-integration[bot] 135444310d Translate '/config/locales/en.yml' in 'nl' (#1246)
* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

* Translate /config/locales/en.yml in nl

translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 11:36:02 -04:00
Klaus e7e0c7624c room block enhancements (#1203)
* highlight current room block

* fix duplicated ids

* remove inline js

* remove some trailing whitespaces

* Fixed Server Rooms room settings name

Co-authored-by: farhatahmad <ahmad.af.farhat@gmail.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 11:21:57 -04:00
Klaus 21cb768fc4 make help link configurable (#1161)
* make help link configurable

* change default help url

* use default help url in setups without env var

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-16 10:56:34 -04:00
Klaus a06da481db fix cookie banner height (#1202) 2020-04-16 10:45:16 -04:00
transifex-integration[bot] e2156059ef Translate /config/locales/en.yml in hu_HU (#1314)
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-16 10:42:07 -04:00
transifex-integration[bot] 3f3c69d85e Translate /config/locales/en.yml in fr (#1226)
translation completed for the source file '/config/locales/en.yml'
on the 'fr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-08 17:07:33 -04:00
transifex-integration[bot] 4646dd863b Translate /config/locales/en.yml in nl (#1193)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-06 16:20:11 -04:00
transifex-integration[bot] d04ab7013a Translate /config/locales/en.yml in zh_TW (#1210)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_TW' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-06 16:12:42 -04:00
transifex-integration[bot] bda696619e Translate /config/locales/en.yml in bg (#1168)
translation completed for the source file '/config/locales/en.yml'
on the 'bg' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-03 16:42:39 -04:00
transifex-integration[bot] 4ff7c2465e Translate /config/locales/en.yml in da (#1169)
translation completed for the source file '/config/locales/en.yml'
on the 'da' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-03 16:38:16 -04:00
transifex-integration[bot] dd6cea92fb Translate /config/locales/en.yml in tr_TR (#1189)
translation completed for the source file '/config/locales/en.yml'
on the 'tr_TR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-03 16:30:45 -04:00
transifex-integration[bot] bbec5bdf2d Translate /config/locales/en.yml in es_MX (#1167)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-02 10:41:13 -04:00
transifex-integration[bot] fb651113fd Translate /config/locales/en.yml in de_DE (#1159)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-02 10:40:15 -04:00
transifex-integration[bot] b243e12e5e Translate /config/locales/en.yml in ja_JP (#1158)
translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-02 10:36:57 -04:00
transifex-integration[bot] 7100fea5c0 Translate /config/locales/en.yml in lv (#1156)
translation completed for the source file '/config/locales/en.yml'
on the 'lv' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-04-02 07:56:40 -04:00
Ahmad Farhat 11cdd1ec14 Fixed configuration rake task check (#1155)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-01 17:28:46 -04:00
Ahmad Farhat 509215ae8d Added fallback message if image url is invalid (#1149)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-01 17:26:16 -04:00
Ahmad Farhat 6dc0ffc5c1 Remove hardcoded role value (#1152) 2020-04-01 17:18:27 -04:00
Ahmad Farhat 348713d4df GRN2-xx: Admin actions are now dictated by the correct role permission (#1140)
* Admin actions are now dictated by the correct role permission

* Rspec fix

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-01 10:58:13 -04:00
Ahmad Farhat c72d77dbcb Prevented LDAP sign in without password (#1092)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-01 10:45:45 -04:00
Ahmad Farhat fab3b479c9 Fixed issue with duplicate roles from LDAP sigin (#1090)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-04-01 10:43:27 -04:00
transifex-integration[bot] f9d193bb5e Translate /config/locales/en.yml in cs (#1141)
translation completed for the source file '/config/locales/en.yml'
on the 'cs' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-31 22:38:43 -04:00
Ahmad Farhat b8eddf73a9 Updated restart policy for db container (#1026)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-31 22:35:51 -04:00
transifex-integration[bot] 2395ea4d69 Translate '/config/locales/en.yml' in 'ja_JP' (#1095)
* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

* Translate /config/locales/en.yml in ja_JP

translation completed for the source file '/config/locales/en.yml'
on the 'ja_JP' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-27 14:04:06 -04:00
transifex-integration[bot] 9070aa4e6a Translate /config/locales/en.yml in tr_TR (#1094)
translation completed for the source file '/config/locales/en.yml'
on the 'tr_TR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-27 13:54:07 -04:00
transifex-integration[bot] dbbfb27810 Translate /config/locales/en.yml in th (#1091)
translation completed for the source file '/config/locales/en.yml'
on the 'th' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-26 17:22:45 -04:00
transifex-integration[bot] 5a74f6a080 Translate /config/locales/en.yml in tr (#1088)
translation completed for the source file '/config/locales/en.yml'
on the 'tr' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-26 16:23:40 -04:00
transifex-integration[bot] 7d3acc9914 Translate /config/locales/en.yml in uk (#1076)
translation completed for the source file '/config/locales/en.yml'
on the 'uk' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-26 16:23:05 -04:00
transifex-integration[bot] 83f9f65489 Translate /config/locales/en.yml in bg (#1073)
translation completed for the source file '/config/locales/en.yml'
on the 'bg' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-26 11:31:22 -04:00
transifex-integration[bot] 3dbcf56454 Translate /config/locales/en.yml in ar (#1055)
translation completed for the source file '/config/locales/en.yml'
on the 'ar' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-25 18:06:55 -04:00
Ahmad Farhat a82526736b Fixed issue with adding roles (#1051) 2020-03-20 14:07:39 -04:00
Christian Marg bf04743bc5 allow for mail system without authentication (#1019)
* allow for mail system without authentication

* try to fix travis build
2020-03-20 11:57:56 -04:00
Ahmad Farhat 7fa7d2f525 Removed placeholder text for maintenance window (#1049)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-20 11:48:54 -04:00
Ahmad Farhat b23c1d11b3 Added log line when BigBlueButton exception occurs (#1048)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-20 11:40:13 -04:00
Ahmad Farhat 03cdbd6b69 Fixed bugs in administrator panel (#1047) 2020-03-20 11:18:05 -04:00
etiennevvv 4cc45ab017 Fixed issue with users not being muted on join (#1027)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-20 11:10:31 -04:00
Ahmad Farhat 71f35c4c50 Add callback location for each provider (#1029)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-19 11:18:30 -04:00
etiennevvv 73061bdba9 GRN2-284: Fixed bug where admin rights emails was sent multiple times (#996)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-19 11:17:33 -04:00
Justin Byrne 3eead129c9 Updated documentation urls (#1021)
The urls for the Auth settings were pointing towards the customise page these have been moved to the config page.
2020-03-19 11:14:14 -04:00
transifex-integration[bot] d0fb3750f2 Translate /config/locales/en.yml in es_MX (#1038)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2020-03-19 11:04:33 -04:00
transifex-integration[bot] 79da307aa1 Translate /config/locales/en.yml in nl (#991)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-18 21:09:48 -04:00
transifex-integration[bot] 89a7b70091 Translate /config/locales/en.yml in fa_IR (#990)
translation completed for the source file '/config/locales/en.yml'
on the 'fa_IR' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-18 16:35:44 -04:00
Ahmad Farhat 3e7fb7ecc2 GRN2-xx: Added option to specify different redirect url for google auth (#1016)
* Added option to specify different redirect url for google auth

* Made the redirect url generic so it works with 365

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-18 16:26:45 -04:00
transifex-integration[bot] 6bb831fb27 Translate /config/locales/en.yml in hu_HU (#986)
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-18 16:11:44 -04:00
transifex-integration[bot] 8596a3f121 Translate /config/locales/en.yml in ru (#982)
translation completed for the source file '/config/locales/en.yml'
on the 'ru' language.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-18 15:54:00 -04:00
etiennevvv 84fb615005 GRN2-283: Fixed bug where users can't join a shared room (Fixed #989) (#995)
* GRN2-283: Fixed bug where users can't join a shared room

* GRN2-283: Fixed bug where users can't join a shared room

* GRN2-283: Fixed bug where users can't join a shared room

Co-authored-by: Ahmad Farhat <ahmad.af.farhat@gmail.com>
2020-03-18 15:19:16 -04:00
transifex-integration[bot] e670260f29 Translate /config/locales/en.yml in zh_CN (#980)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-04 09:54:44 -05:00
Ahmad Farhat 43911b9fd5 Fixed order of rooms in postgres (#979)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-04 09:50:06 -05:00
Ahmad Farhat 037e4f1c43 Scoped reset password to provider (#978) 2020-03-03 14:43:10 -05:00
dependabot[bot] 90dff3dc7f Bump rake from 12.3.2 to 13.0.1 (#977)
Bumps [rake](https://github.com/ruby/rake) from 12.3.2 to 13.0.1.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v12.3.2...v13.0.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-03 13:50:42 -05:00
dependabot[bot] b95a9e450d Bump nokogiri from 1.10.5 to 1.10.9 (#975)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.5 to 1.10.9.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.10.9/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.5...v1.10.9)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-03 13:45:28 -05:00
dependabot[bot] 469562c87d Bump rack from 2.0.7 to 2.2.2 (#976)
Bumps [rack](https://github.com/rack/rack) from 2.0.7 to 2.2.2.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/2.0.7...v2.2.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-03-03 13:41:16 -05:00
dependabot[bot] 11a83320bc Bump puma from 3.12.2 to 3.12.3 (#974)
Bumps [puma](https://github.com/puma/puma) from 3.12.2 to 3.12.3.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/master/History.md)
- [Commits](https://github.com/puma/puma/compare/v3.12.2...v3.12.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-03-03 13:36:07 -05:00
transifex-integration[bot] 2da2ee068d Translate /config/locales/en.yml in de_DE (#972)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.
2020-03-03 12:07:29 -05:00
Fred Dixon 2af1f7242f Merge pull request #971 from bigbluebutton/v2.5-alpha
Release v2.5
2020-03-02 11:48:17 -05:00
Ahmad Farhat 0092a28bec Replaced PG variables in docker-compose with the correct ones (#968) 2020-02-28 14:45:44 -05:00
etiennevvv edcda54f89 GRN2-268: Fixed redirection after executing an action in Manage Users (#967)
* GRN2-268: Fixed redirection after executing an action in Manage Users

* GRN2-268: rubocop fix
2020-02-28 11:32:32 -05:00
Ahmad Farhat 50f4d5e4f8 Small fixes to shared access (#966) 2020-02-28 10:13:51 -05:00
Ahmad Farhat 2c1472daff Admins can no longer delete a users home room (#965) 2020-02-25 09:53:08 -05:00
Ahmad Farhat 54234ef54b Admins that are not signed in are redirected to the signin page when doing admin actions (#964) 2020-02-24 17:30:39 -05:00
Ahmad Farhat 475374090a Fixed issue with rooms not correctly ordering (#963) 2020-02-24 16:48:51 -05:00
etiennevvv 03266730e8 GRN2-233: Made account activation & password reset links based on tokens only (#959)
* GRN2-233: Hiding email in verification link and password reset link

* updating tests

* removing uid from email verificaiton link

* GRN2-233: modifying test cases

* GRN2-233: Removing uid from password reset link

* GRN2-233: Removed email_params and fixed "authenticated?" method

* GRN2-233: Fixed error when trying to sign in unverified

* GRN2-233: Changed how activation tokens are generated
2020-02-24 13:05:09 -05:00
etiennevvv b7aa5406ea GRN2-273: Fixed bug where incorrect recording length returned when "Notes" format was included (#961)
* GRN2-273: Fixed bug where incorrect recording length returned

* GRN2-273: Changing iteration variable name   in recording_length method
2020-02-24 12:58:28 -05:00
Ahmad Farhat 4093a89b4a Added dropdown for dynamically changing the log level (#962) 2020-02-24 12:51:27 -05:00
Ahmad Farhat 2cc1fdf281 Refactored code to reduce number of database queries (#960) 2020-02-24 12:31:30 -05:00
etiennevvv 92da1f6f87 GRN2-269: Pulling room settings using GET instead of data-attributes (#953)
* GRN2-269: Pulling room settings using GET instead of data-attributes

* GRN2-269: added test case and fixed documentation

* GRN2:269: rubocop fix

* GRN2-269: Fixed test case
2020-02-21 09:20:22 -05:00
Ahmad Farhat c75c624a1a GRN2-xx: Made role priority unique scoped to provider (#942)
* Made role priority unique scoped to provider

* Fixed issues related to update_role after making role priority unique
2020-02-19 13:38:16 -05:00
Ahmad Farhat feccee7d62 GRN2-164: Switched the default database to Postgres (#952)
* Switched the default database to Postgres

* Uncomment DB variables in sample.env
2020-02-18 15:22:51 -05:00
Ahmad Farhat 005c738e4d GRN2-260: Added the ability to merge user accounts (#938)
* Added the ability to merge user accounts

* Styling fixes
2020-02-14 10:24:06 -05:00
Ahmad Farhat 31258272c2 GRN2-265: No longer throws 500 if provider not included (#944)
* No longer throws 500 if provider not included

* Rubocop fix
2020-02-14 10:03:16 -05:00
etiennevvv 3641f1b953 GRN2-270: Hiding delete button in room dropdown for Home Room (#956) 2020-02-14 09:47:17 -05:00
etiennevvv 9fa79bcc16 GRN2-271: Removing redirection to "#" in invite participants copy button (#957) 2020-02-14 09:47:02 -05:00
etiennevvv b67bee2638 GRN2-264: Allow users to change the room settings on Home Room (#951)
* GRN2-264: Allow users to change the room settings on Home Room

* fixing inconsistencies

* removing 'secondary_rooms' method and adjusting looping
2020-02-12 17:49:35 -05:00
etiennevvv 01c93b1f67 GRN2-268: Redirecting user back to page they came from in Manage Users (#950)
* GRN2-268: Redirecting user back to page they come from in Manage Users

* re-factoring
2020-02-12 17:49:35 -05:00
etiennevvv 68b231dbdb GRN2-266: Autofocus room name when create room modal appears (#945)
* added autofocus to the Room Name field

* added autofocus to Room Name text field

* added autofocus to Room Name text field

* GRN2-266 Fixing autofocus for Room name when creating room

* removing whitespace

* fixing whitespace

* fixing whitespace
2020-02-12 17:49:35 -05:00
etiennevvv eb8cc9b17f GRN2-267 Redirect admin link when approving a new user to the "pending" tab (#947)
* GRN2-267 redirect admin to 'pending' tab when approving a new user

* changes after robocop failed

* robocop changes
2020-02-12 17:49:35 -05:00
Ahmad Farhat d6b7e975b0 Final fix for vendor assets (#940) 2020-02-12 17:49:35 -05:00
Ahmad Farhat e15e119d5d Included missing assets and fixed room delete 404 (#939) 2020-02-12 17:49:35 -05:00
Ahmad Farhat 3f8ffa61d7 Fixed issue with links (#934) 2020-02-12 17:49:35 -05:00
Ahmad Farhat 5949a6e243 GRN2-xx: Removed unnecessary log lines (#930)
* Removed unnecessary log lines

* Removed empty function
2020-02-12 17:49:35 -05:00
Ahmad Farhat 397b4b742f GRN2-128: Fixed issue with manage rooms permissions (#929)
* Fixed issue with manage rooms permissions

* Improved server rooms efficiency
2020-02-12 17:49:35 -05:00
Ahmad Farhat 967130e57c GRN2-253: Added the ability to share rooms across multiple users (#912)
* Added ability to share rooms with other users

* Fixed testcases
2020-02-12 17:49:35 -05:00
Ahmad Farhat 8cbfc3f730 GRN2-xx: Users can no longer join a room whose owner is banned or pending (Fixed #902) (#922)
* Users can no longer join a room whose owner is banned or pending

* Changed flash message

* rubocop fix
2020-02-12 17:49:35 -05:00
Ahmad Farhat df1705d9ea Join button now expands to fit text (#921) 2020-02-12 17:49:35 -05:00
Ahmad Farhat eb965e5c52 Added data-disable to all button_to to fix double click issue (#923) 2020-02-12 17:49:35 -05:00
Ahmad Farhat 8a8eee52fe Fixed issue with ldap images (#926) 2020-02-12 17:49:35 -05:00
Ahmad Farhat 005ec84c73 GRN2-252: Change to how sign ins are processed (#869)
* Social to local

* Social/Local to Social

* Rubocop fixes

* Added test cases

* Added the ability to clear social uids

* Update admins_controller.rb

* Update admins_controller.rb
2020-02-12 17:49:35 -05:00
Ahmad Farhat 42e6e4f235 GRN2-241: Moved assets precompile to start script (#927)
* Moved assets precompile to start script

* Added curl to image for postgres database
2020-02-12 17:49:35 -05:00
Ahmad Farhat 734f7a757e GRN2-241: Switched Docker base image to Alpine (#853)
* Switched to alpine image

* Switch Docker base image to alpine

* Removed uneeded code

* Slimmed it down even further
2020-02-12 17:49:35 -05:00
Ahmad Farhat c13a83a3f3 Fixed issues with rubocop (#916) 2020-02-12 17:49:35 -05:00
Ahmad Farhat 09de6b6739 GRN2-128: Added the ability to manage rooms (#848)
* Added the ability to manage rooms

* Small fixes

* Fixed travis complaints

* Fixed issues with role permissions

* Fixed issue with delete room

* Fixed rubocop and added testcases
2020-02-12 17:49:35 -05:00
Ahmad Farhat 984e5cc085 Fixed 500 caused by 1 provider (#937) 2020-01-28 11:34:46 -05:00
Ahmad Farhat 079d64795b Redirect authenticated users to main room when accessing ldap signin (#856)
Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-22 16:32:26 -05:00
transifex-integration[bot] 445800d382 Translate /config/locales/en.yml in ru (#925)
translation completed for the source file '/config/locales/en.yml'
on the 'ru' language.
2020-01-22 16:22:15 -05:00
Jesus Federico 6bc43d8e52 Revert "Bump rack from 2.0.7 to 2.0.8 (#914)" (#915)
This reverts commit 315a83957e.
2020-01-09 11:11:39 -05:00
dependabot[bot] 315a83957e Bump rack from 2.0.7 to 2.0.8 (#914)
Bumps [rack](https://github.com/rack/rack) from 2.0.7 to 2.0.8.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/2.0.7...2.0.8)

Signed-off-by: dependabot[bot] <support@github.com>
2020-01-09 11:06:10 -05:00
transifex-integration[bot] 1e5f4da905 Translate /config/locales/en.yml in sk_SK (#913)
translation completed for the source file '/config/locales/en.yml'
on the 'sk_SK' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-09 10:54:33 -05:00
transifex-integration[bot] 0ad2ac9eab Translate /config/locales/en.yml in hu_HU (#908)
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-09 10:39:01 -05:00
transifex-integration[bot] 0eeda259d1 Translate /config/locales/en.yml in de_DE (#898)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-09 10:32:32 -05:00
transifex-integration[bot] acd5825622 Translate /config/locales/en.yml in nl (#901)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-09 10:24:49 -05:00
transifex-integration[bot] 8d245e656a Translate '/config/locales/en.yml' in 'es' (#910)
* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language.

* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-09 10:20:31 -05:00
transifex-integration[bot] bcf6ff2245 Translate '/config/locales/en.yml' in 'es_MX' (#911)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language.

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language.

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-08 11:12:25 -05:00
Ahmad Farhat ebff9d3625 GRN2-xx: Fixed issue with rooms not being ordered correctly (#897)
* Fixed issue with rooms not being ordered correctly

* removed home room from list

Co-authored-by: Jesus Federico <jesus@123it.ca>
2020-01-08 10:34:01 -05:00
transifex-integration[bot] 4476245f29 Translate /config/locales/en.yml in zh_CN (#900)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language.
2020-01-08 10:19:10 -05:00
transifex-integration[bot] 1ea8ca5411 Translate /config/locales/en.yml in pt_BR (#909)
translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language.
2020-01-08 10:04:48 -05:00
Ahmad Farhat b291b0e409 Fixed statistics spelling mistake (#874) 2019-12-20 11:31:37 -05:00
transifex-integration[bot] 07a1860f21 Translate /config/locales/en.yml in sk_SK (#894)
translation completed for the source file '/config/locales/en.yml'
on the 'sk_SK' language.

Co-authored-by: Jesus Federico <jesus@123it.ca>
2019-12-20 10:19:21 -05:00
Ahmad Farhat 9a8e661fb1 Removed unnecessary log lines (#896) 2019-12-20 09:59:40 -05:00
dependabot[bot] ce281d8b87 Bump puma from 3.12.1 to 3.12.2 (#887)
Bumps [puma](https://github.com/puma/puma) from 3.12.1 to 3.12.2.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/master/History.md)
- [Commits](https://github.com/puma/puma/compare/v3.12.1...v3.12.2)

Signed-off-by: dependabot[bot] <support@github.com>
2019-12-13 11:46:17 -05:00
transifex-integration[bot] 546b816e4e Translate /config/locales/en.yml in nb (#885)
translation completed for the source file '/config/locales/en.yml'
on the 'nb' language
2019-12-04 12:52:35 -05:00
jfederico c708f19f10 Patch on start script for validating the existentce of the database 2019-12-03 14:11:30 -05:00
transifex-integration[bot] 81107e8492 Translate /config/locales/en.yml in es_MX (#883)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-12-03 11:24:31 -05:00
transifex-integration[bot] f48bb3c0b2 Translate /config/locales/en.yml in es (#884)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-12-03 11:19:37 -05:00
Jesus Federico 5a18da1a2f Update start 2019-11-28 16:43:17 -05:00
transifex-integration[bot] a08a8be24e Translate /config/locales/en.yml in nl (#860)
translation completed for the source file '/config/locales/en.yml'
on the 'nl' language
2019-11-28 18:08:11 +01:00
transifex-integration[bot] c955f8b766 Translate /config/locales/en.yml in hu_HU (#863)
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language
2019-11-28 18:00:12 +01:00
transifex-integration[bot] 82f210bdaf Translate /config/locales/en.yml in zh_CN (#857)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-11-28 17:53:10 +01:00
transifex-integration[bot] ec3f31354c Translate /config/locales/en.yml in de_DE (#855)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-11-28 17:49:36 +01:00
dependabot[bot] 8cccbfde3f Bump loofah from 2.2.3 to 2.3.1 (#858)
Bumps [loofah](https://github.com/flavorjones/loofah) from 2.2.3 to 2.3.1.
- [Release notes](https://github.com/flavorjones/loofah/releases)
- [Changelog](https://github.com/flavorjones/loofah/blob/master/CHANGELOG.md)
- [Commits](https://github.com/flavorjones/loofah/compare/v2.2.3...v2.3.1)

Signed-off-by: dependabot[bot] <support@github.com>
2019-11-28 17:40:24 +01:00
Ahmad Farhat 8a4118a9c1 Added back cache clear function (#867) 2019-11-28 17:36:49 +01:00
Ahmad Farhat d35a554199 Fixed small issue with sign in to prevent error pages from appearing (#868) 2019-11-15 10:49:52 -05:00
Richard Alam c92c8ad1ca Merge pull request #866 from farhatahmad/signin-bug
GRN2-xx: Fixed signin bug that prevent specific users from signing in
2019-11-14 14:27:04 -05:00
farhatahmad 2b9ab05e1e Fixed signin bug 2019-11-14 11:59:37 -05:00
Ahmad Farhat da80fb55c7 Errors with recordings no longer cause the page to 500 (#849) 2019-11-01 14:37:38 -04:00
Ahmad Farhat e61946a0f4 GRN2-132: Fixed visual issues with mobile (Fixed #325) (#844)
* Fixed visual issues with mobile

* Fixed spacing above room name
2019-11-01 11:51:22 -04:00
Ahmad Farhat 933408f68b GRN2-xx: Removed Health Check Gem (#840)
* Initial work on removing health check gem

* Added health checks

* Fixed gemfile
2019-10-21 12:09:31 -04:00
Ahmad Farhat 9c9867b4e7 GRN2-xx: Fixed scaling issue on mobile (#843)
* Disabled browser auto zoom

* Fixed spacing

* Removed unnecessary file
2019-10-18 14:53:13 -04:00
transifex-integration[bot] 12193c2008 Translate /config/locales/en.yml in es (#842)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-10-16 09:38:30 -04:00
Jesus Federico cf5a873493 Updated script for start (#839) 2019-10-15 12:58:11 -04:00
transifex-integration[bot] b895549c04 Translate /config/locales/en.yml in de_DE (#832)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-10-15 12:44:34 -04:00
Jesus Federico 7854485534 Updated script for start (#838) 2019-10-15 12:15:45 -04:00
transifex-integration[bot] 6f3b8a0851 Translate /config/locales/en.yml in zh_CN (#835)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-10-15 10:34:13 -04:00
transifex-integration[bot] 8f188ae505 Translate '/config/locales/en.yml' in 'es_MX' (#834)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-10-11 11:25:54 -04:00
transifex-integration[bot] 90793544a7 Translate '/config/locales/en.yml' in 'es_MX' (#833)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-10-11 10:49:48 -04:00
Ahmad Farhat 628790733e GRN2-xx: Replaced language files with the updated versions (Fixed #813) (#814)
* Updated language files

* Added fix for javascript languages
2019-10-11 08:53:40 -04:00
Ahmad Farhat c1de7f8f70 GRN2-xx: Replaced google fonts api call with local font load (Fixed #830) (#831)
* Replaced google fonts api call with local font load

* Removed references to Roboto
2019-10-10 16:28:46 -04:00
Ahmad Farhat b9dcaa1b18 Fixed issue with return to cookie (#828) 2019-10-10 16:24:35 -04:00
Ahmad Farhat 49def8f405 GRN2-247: Added Active Pending Banned Deleted tabs to manage users (#816)
* Added Active Pending Banned Deleted tabs to manage users

* Removed hard coded strings

* Fixed issues with sign in flow

* Fixed issues with rooms not deleting
2019-10-10 16:10:23 -04:00
transifex-integration[bot] 03bde37a2b Translate /config/locales/en.yml in pl_PL (#827)
translation completed for the source file '/config/locales/en.yml'
on the 'pl_PL' language
2019-10-10 15:58:03 -04:00
Ahmad Farhat 3f5affd116 Only render 1 delete room modal (#819) 2019-10-10 15:45:42 -04:00
transifex-integration[bot] 58cfb0ec30 Translate /config/locales/en.yml in zh_CN (#818)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-10-10 15:37:15 -04:00
Ahmad Farhat e0a4d485bf Added Open Graph attributes to layout (#815) 2019-10-10 15:29:02 -04:00
Ahmad Farhat c14f4dc31c Fixed issue with migration running on empty db (#812) 2019-10-10 15:17:52 -04:00
Ahmad Farhat 4a791ae0b5 Email recording now translates correctly (#809) 2019-10-10 15:08:55 -04:00
transifex-integration[bot] 073400b51b Translate /config/locales/en.yml in de_DE (#808)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-10-10 14:48:30 -04:00
jfederico 9967e276c0 Fixed script so the releases for alpha and beta are not built as latest 2019-09-23 17:03:36 +00:00
Ahmad Farhat 091b548e90 Fixed issue with Room Settings (#807) 2019-09-20 15:33:08 -04:00
jfederico b2f2e73bbc Merge branch 'v2.4-beta' 2019-09-20 16:23:21 +00:00
jfederico ec47225abd Replaced tocken for slack notifications on travis 2019-09-20 15:56:45 +00:00
Ahmad Farhat bf5922fca0 GRN2-xx: Replaced tabler gem with local gem (#806)
* Replaced tabler gem with local gem

* Replaced tabler gem branch with version
2019-09-20 11:15:21 -04:00
Ahmad Farhat 6d29422c31 Default to EN if language is not recognized (#805) 2019-09-20 09:02:55 -04:00
Ahmad Farhat e13e762349 GRN2-243: Added a report issue button to the 500 error page (#796)
* Added a report issue button to the 500 error page

* Removed unused code

* Removed unused quotes
2019-09-19 10:03:44 -04:00
Ahmad Farhat 7c6ad6d903 Improve code quality to increase scrut score (#789) 2019-09-19 10:03:44 -04:00
Ahmad Farhat 55d4a21dcb Fixes after merge (#786) 2019-09-19 10:03:44 -04:00
Ahmad Farhat 666ee12988 GRN2-xx: Cleaning up bugs that appeared after refactoring (#780)
* First step

* Fixed issues with update room
2019-09-19 10:03:44 -04:00
farhatahmad d3b669d552 GRN2-xx: Users, Room and Recordings are now no longer permanently deleted (#773)
* Bug fixes for 2.4

* Removed accidental code add

* Switched from deleting to tombstoning

* Fixed bug with login
2019-09-19 10:03:44 -04:00
shawn-higgins1 666231db6c Change permissions from columns to table entries (#762) 2019-09-19 10:03:44 -04:00
farhatahmad 01b8dbbd0e GRN2-196: Fixed issues that scrutinizer is complaining about (#765)
* Refactored code to improve scrutinizer score

* Bug fixes
2019-09-19 10:03:44 -04:00
farhatahmad fd6077696d GRN2-180: First stages of refactoring code for v2.4 (#748)
* Email rescues and authenticator concern

* Application controller and helper clean up

* Moved controller code out of helpers

* More helper and email clean up

* Cleaned up remaining helpers and create omniauth_options

* Controller code clean up

* restructured views structure

* Restructured role code

* Restructured profile and code clean up

* Master merge

* Added bbb server concern to deal with bbb calls

* Bug fixes and changes after changes

* rspec

* More rubocop fixes
2019-09-19 10:03:44 -04:00
transifex-integration[bot] 194b5ddfa0 Translate '/config/locales/en.yml' in 'es' (#802)
* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language

* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-09-13 11:57:53 -04:00
transifex-integration[bot] 121dce6d3c Translate /config/locales/en.yml in es_MX (#801)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-09-13 11:45:31 -04:00
transifex-integration[bot] 53f14f24b0 Translate /config/locales/en.yml in sv_SE (#795)
translation completed for the source file '/config/locales/en.yml'
on the 'sv_SE' language
2019-09-13 10:24:51 -04:00
transifex-integration[bot] ded61af40e Translate /config/locales/en.yml in de_DE (#793)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-09-13 09:57:34 -04:00
transifex-integration[bot] e24dc5381d Translate /config/locales/en.yml in zh_CN (#792)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-09-13 09:51:13 -04:00
Ahmad Farhat d203f43946 GRN2-237: Added DB migration error check to health check (#790)
* Added DB migration error check to health check

* Switch nil to blank
2019-09-06 17:09:43 -04:00
Ahmad Farhat b590a5a264 GRN2-xx: Added fallback language to locales (#788)
* Added fallback language to locales

* Added comments
2019-09-06 14:28:47 -04:00
transifex-integration[bot] 2090b9f8e6 Translate /config/locales/en.yml in de_DE (#785)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-09-06 13:49:39 -04:00
Ahmad Farhat 390ccf71c2 Localized js is now served as json (#784) 2019-09-06 10:56:53 -04:00
Ahmad Farhat 061b69f962 GRN2-xx: Fixed issue with room join (#779)
* Fixed issue with room join

* Rspec fix
2019-09-05 15:50:19 -04:00
Ahmad Farhat 201a394813 Added the ability to invite multiple users at once (#778) 2019-09-05 12:55:23 -04:00
Ahmad Farhat 843d42a1d8 Allowed room access text to be translated (#777) 2019-08-30 16:25:43 -04:00
farhatahmad 02413cefb2 GRN2-xx: Migration Error now returns 500 and added the option to disable cache (#776)
* Added the option to disable cache

* Remove put statements
2019-08-30 11:57:11 -04:00
Jesus Federico 1eddd564d5 Revert "GRN2-xx: Migration Error now returns 500 and added the option to disable cache (#770)" (#774)
This reverts commit 9bd5a659d5.
2019-08-29 12:08:28 -04:00
jfederico 459d0ed582 Reverted 500 error on migration failed 2019-08-29 14:03:07 +00:00
farhatahmad 9bd5a659d5 GRN2-xx: Migration Error now returns 500 and added the option to disable cache (#770)
* Added the option to disable cache

* Remove put statements
2019-08-28 17:00:07 -04:00
transifex-integration[bot] 760c942780 Translate /config/locales/en.yml in zh_CN (#768)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-08-27 11:12:02 -04:00
transifex-integration[bot] 0372dc98bb Translate /config/locales/en.yml in de_DE (#766)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-23 10:54:09 -04:00
farhatahmad cfab2fd191 Switched to Redis cache in production (#761) 2019-08-22 14:09:39 -04:00
transifex-integration[bot] d3eb064b96 Translate /config/locales/en.yml in es_MX (#760)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-08-22 12:40:06 -04:00
transifex-integration[bot] 2c85345f9f Translate /config/locales/en.yml in de_DE (#759)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-22 12:26:55 -04:00
farhatahmad 9ddc057589 Added a Maintenance Window flash (#758) 2019-08-22 12:15:01 -04:00
farhatahmad 177bf4d595 Cached request to provider to increase application performance (#755) 2019-08-21 14:45:22 -04:00
shawn-higgins1 3d2a0a060b GRN2-225, GRN2-227: Images sent by Office365 Institutional accounts break the rooms (#753)
* Validate profile image url

* Add rake task to migrate old office365 accounts
2019-08-21 14:23:00 -04:00
dependabot[bot] 915ed9381d Bump nokogiri from 1.10.3 to 1.10.4 (#752)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.3 to 1.10.4.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.3...v1.10.4)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-20 14:46:55 -04:00
farhatahmad 96ace3265e Added Google Analytics (#749) 2019-08-19 08:51:57 -04:00
transifex-integration[bot] c31cf17b22 Translate /config/locales/en.yml in de_DE (#747)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-16 10:16:08 -04:00
transifex-integration[bot] 4e1f709126 Translate /config/locales/en.yml in es_MX (#746)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-08-15 14:04:00 -04:00
farhatahmad ea8acaff4c Added extra check for reset password (#745) 2019-08-15 13:20:55 -04:00
shawn-higgins1 589536b18d Launcher errors in gl (#744)
* Display launcher errors in Greenlight

* Update launcher gem
2019-08-15 11:39:37 -04:00
transifex-integration[bot] 050fa21189 Translate /config/locales/en.yml in es_MX (#743)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-08-15 11:17:06 -04:00
transifex-integration[bot] cdf465dcda Translate /config/locales/en.yml in de_DE (#741)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-15 10:17:56 -04:00
shawn-higgins1 de81223413 Display launcher errors in Greenlight (#742) 2019-08-15 10:17:32 -04:00
farhatahmad 4d14c5fc23 Asset fixes (#740) 2019-08-14 17:05:14 -04:00
farhatahmad 89f36c1766 GRN2-224: Added event logs and production caching (#739)
* Added event logs and production caching

* Added Support: before logs for easy identification

* Added more Support for log errors

* Reverted change to assets precompile check

* Added vendor assets to precompile list

* Travis fix
2019-08-14 14:25:52 -04:00
shawn-higgins1 f87c2bfd16 Set omniauth to use the rails logger (#738) 2019-08-14 10:22:26 -04:00
farhatahmad 7e3c44575e Added the ability for admins to send a reset password email for users (#737) 2019-08-14 10:21:57 -04:00
shawn-higgins1 1256554ce6 Configurable default registration (#733)
* Configurable default registration

* Remove unneeded if branch
2019-08-14 10:11:01 -04:00
farhatahmad 853e712a43 Refactored code related to all recordings pagination (#736) 2019-08-14 10:04:23 -04:00
farhatahmad 98405c7d86 GRN2-xx: General bug fixes and performance upgrades (#734)
* General bug fixes and performance upgrades

* Removed unused lines
2019-08-14 09:59:34 -04:00
Jesus Federico 4d69d06ba1 GRN2-ZZZ: Added messages for debugging actioncable (#731)
* GRN2-ZZZ: Added messages for debugging actioncable

* GRN2-ZZZ: Added data to the js message for debugging actioncable

* GRN2-ZZZ: Added data to the js message for debugging actioncable

* Log unsubscribe
2019-08-09 12:07:38 -04:00
shawn-higgins1 921f252223 Fix session isssues (#730) 2019-08-07 15:47:05 -04:00
shawn-higgins1 6d6ac3efdd Bug fixes for roles (#729) 2019-08-07 11:19:16 -04:00
transifex-integration[bot] 6e73bbdb5a Translate '/config/locales/en.yml' in 'de_DE' (#725)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-06 15:26:23 -04:00
Jinesh 7c20decafe altered build steps to utilize the cloud build cache (#728) 2019-08-06 14:55:05 -04:00
farhatahmad a5fd4a08b5 GRN2-xx: Fixed issue with room settings not showing updated values (#727)
* Fixed issue with room settings not showing updated values

* Updated rake task to take provider
2019-08-06 14:03:12 -04:00
farhatahmad 7bafd41a56 Fixed issue with invalid csrf token (#724) 2019-08-02 16:11:45 -04:00
shawn-higgins1 46e0595e3a Improve can't create room view (#723)
* Improve cant create room view

* Translate role names in the promoted/demoted emails
2019-08-02 16:07:15 -04:00
transifex-integration[bot] 402de8189e Translate '/config/locales/en.yml' in 'de_DE' (#722)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-02 16:06:00 -04:00
transifex-integration[bot] e42d2d0984 Translate '/config/locales/en.yml' in 'de_DE' (#720)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-08-01 16:54:27 -04:00
shawn-higgins1 e1fdc8f58b Roles editor bug fix (#721)
* Allow users with just the manage users permission to edit roles

* Allow users with just the manage users permission to edit roles

* Fix update recordings bug
2019-08-01 16:53:55 -04:00
farhatahmad 60f5cd5c81 GRN2-xx: Fixed issue with recording row and added small fix to roles migration (Fixed #717, #718) (#719)
* Fixed issue with recording row and added small fix to roles migration

* Fixed issue with edit user avatar

* Small bug fixes for user settings

* Added autofocus on name field when joining

* Added extra check for admin password check

* Rubocop fixes
2019-08-01 16:53:26 -04:00
shawn-higgins1 4fc1714db8 GRN2-176: Create a role editor that allows admins to specify what permissions each role has (#709)
* Add roles editor

* Add colour selection ability to roles

* Add ability to assign roles to users in the UI

* Remove rolify and replace it with our own custom roles implemenation

* - Fix all existing roles functionality
- Fix super admins

* Fix bugs with new customers not have default roles

* Add can't create room setting

* Code improvements

* Fix migration

* Add tests for new methods

* Translate reserved role names

* Pull roles from saml/ldap

* Fix rspec

* Fix scrutinizer issues

* Fix email promoted/demoted tests

* Apply comments

* Redirect directly to the main room

* Add comments
2019-07-31 11:53:32 -04:00
farhatahmad 02b342b157 GRN2-217: Fixes issues with recording rows and localization (fixed #703-#705) (#707)
* Fixes issues with recording rows

* Fixed small typo related to logs
2019-07-31 11:45:15 -04:00
transifex-integration[bot] d123d5add0 Translate /config/locales/en.yml in zh_CN (#695)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-07-31 11:37:07 -04:00
farhatahmad 2f52310d46 Create a rake task to create users (#708) 2019-07-31 11:36:38 -04:00
farhatahmad e0afcdec23 GRN2-xx: Added back fix for ldap image and fixed issue with ldap redirect (Fixed #712) (#711)
* Added back fix for ldap image

* Fixed issue with ldap redirect
2019-07-31 11:35:43 -04:00
farhatahmad 973c95339c Added All Join as Moderator room setting (#696) 2019-07-31 11:34:31 -04:00
farhatahmad 5f237194b1 GRN2-xx: General bug fixes and improvements for 2.3 (#701)
* General bug fixes and improvements for 2.3

* Removed mins change

* Removed mins change rspec
2019-07-31 11:33:29 -04:00
farhatahmad 58201d5763 Email recording now includes all urls (#697) 2019-07-31 11:33:06 -04:00
jfederico 2775b18993 Merge branch 'v2' 2019-07-29 14:30:30 +00:00
farhatahmad 403a7c4e40 GRN2-xx: Removed readonly maintenance mode (#699)
* Removed readonly maintenance mode

* Removed full reference
2019-07-29 10:23:18 -04:00
transifex-integration[bot] beadd4c7d3 Translate /config/locales/en.yml in de_DE (#698)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-25 15:08:32 -04:00
farhatahmad c472f751a1 GRN2-xx: Switched to Lograge for logging and increased log level to info (#694)
* Switched to Lograge for logging and increased log level to info

* Travis fixes

* Travis fixes 2
2019-07-25 15:07:55 -04:00
farhatahmad a080d3dd62 Fixed delete user modal in Manage Users (#693) 2019-07-25 10:27:29 -04:00
farhatahmad 453e6b7c96 Updated strings and added a bit of styling (#692) 2019-07-24 13:42:46 -04:00
shawn-higgins1 9057615784 Change env variable name (#691) 2019-07-24 13:41:42 -04:00
transifex-integration[bot] eb252fb3f0 Translate /config/locales/en.yml in es_MX (#690)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-07-24 13:40:22 -04:00
shawn-higgins1 79188a6cae Add support for roles (#656)
* Add support for ldap roles

* Remove debugger

* Remove bundled with

* Update omniauth-bn-launcher version
2019-07-24 13:40:09 -04:00
shawn-higgins1 0934919e44 GRN2-206: Remove support for the flash client Fixes(#654) (#661)
* Remove ability to specify flash client

* Always join via html5

* Fix styling and tests
2019-07-24 09:37:59 -04:00
transifex-integration[bot] 4e31366012 Translate /config/locales/en.yml in de_DE (#688)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-24 09:16:57 -04:00
transifex-integration[bot] 2973c46869 Translate /config/locales/en.yml in fa_IR (#689)
translation completed for the source file '/config/locales/en.yml'
on the 'fa_IR' language
2019-07-24 09:16:15 -04:00
farhatahmad ee0a339e2b Fixed issue with image being replaced on every sign in (#687) 2019-07-24 09:14:56 -04:00
transifex-integration[bot] 05614bbae4 Translate '/config/locales/en.yml' in 'de_DE' (#681)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-23 16:30:21 -04:00
shawn-higgins1 7b96d5ae41 Add room setting to require moderator approval (#660) 2019-07-23 16:16:14 -04:00
Jesus Federico f7c88cfc6a Merge branch 'v2.2.1-alpha' into master 2019-07-23 15:57:08 -04:00
shawn-higgins1 0a6bce1384 Fix health checks (#663) 2019-07-23 15:56:04 -04:00
shawn-higgins1 81aea827ba GRN2-210: Add ability to search by role (#659)
* Add ability to search by role

* Fix role search to work with select
2019-07-23 14:57:01 -04:00
shawn-higgins1 68eb67752c Widen invite url field (#651) 2019-07-23 14:56:21 -04:00
shawn-higgins1 d3a9ae32a9 GRN2-202: Create a room in which everyone joins as Moderator (Fixed #628) (#650)
* Room setting to allow anyone to start a room

* Update sample.env

* merge v2.2.1
2019-07-23 14:54:46 -04:00
shawn-higgins1 b23f94dfb5 Single sign on for super admins (#648) 2019-07-23 14:53:48 -04:00
farhatahmad 0b64acaecf Fixed issues with maintenance mode (#683) 2019-07-23 13:52:39 -04:00
shawn-higgins1 42f7d4f8d2 If a user only has one configured provider redirect them to that provider (#647) 2019-07-23 11:08:38 -04:00
farhatahmad d1e50f2ef6 GRN2-213: Cleaned up omniauth user create (#682)
* Fixed omniauth user create

* Added readonly exception
2019-07-23 11:02:25 -04:00
farhatahmad 4e16e99758 Allowed users to start rooms if database is in readonly (#680)
* Allowed users to start rooms if database is in readonly

* Travis fix
2019-07-22 17:02:49 -04:00
farhatahmad 02c0d577f8 Added an env variable that allows maitenance mode (#679) 2019-07-22 16:45:56 -04:00
shawn-higgins1 0e4adc0049 Add watchtower metadata (#635) 2019-07-22 16:28:09 -04:00
shawn-higgins1 1e75f5e822 Don't sent email if there are no admins (#664) 2019-07-22 15:58:40 -04:00
transifex-integration[bot] f2373ad21e Translate /config/locales/en.yml in de_DE (#676)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-22 15:40:45 -04:00
farhatahmad 744a21b244 Fixed localization bugs (#678) 2019-07-22 15:40:26 -04:00
shawn-higgins1 c4eeee3d40 Add setting for recording visibility (#634) 2019-07-22 15:39:49 -04:00
farhatahmad 8b2c472536 GRN2-211: Added a maintenance mode (#675)
* Added a maintenance mode

* Cleaned up dockerignore file

* Added branding to maintenance page

* Fixed branding
2019-07-22 15:25:43 -04:00
shawn-higgins1 2c37f87cbc Fix the dockerfile for the new version of rails (#658)
* Fix the dockerfile for the new version of rails

* Update Dockerfile
2019-07-22 14:31:11 -04:00
shawn-higgins1 7d1c9e87a9 Allow rooms to have an optional access code (#646) 2019-07-22 13:12:44 -04:00
transifex-integration[bot] 670efeae31 Translate /config/locales/en.yml in zh_CN (#649)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-07-22 12:49:52 -04:00
farhatahmad a055b88eb7 GRN2-129: Added server recordings and refactored adminsitrator panel (#662)
* Added server recordings and refactored adminsitrator panel

* Fixed some issues

* Fixed issue with owner email search

* Fixed issue with edit user
2019-07-22 12:46:47 -04:00
shawn-higgins1 ee26036105 Unify error pages (#674)
* Unify error pages

* Start travis
2019-07-22 12:33:53 -04:00
transifex-integration[bot] 9dd30138ba Translate /config/locales/en.yml in ar (#665)
translation completed for the source file '/config/locales/en.yml'
on the 'ar' language
2019-07-22 12:22:22 -04:00
Jinesh edc29ede02 added cache layer to cloudbuild (#672) 2019-07-22 12:20:59 -04:00
Anton Georgiev eb723be3d3 Merge pull request #655 from farhatahmad/2.2.0-hotfix
GRN2-205: Fixed issue with https redirect
2019-07-17 14:14:38 -04:00
farhatahmad 56be3a5b13 Removed left over testing code 2019-07-17 14:08:30 -04:00
farhatahmad 347ed2bdc1 Fixed issue with https redirect 2019-07-17 14:05:28 -04:00
shawn-higgins1 8c63f793a5 Reduce number of roles queries for the admin controller (#631) 2019-07-15 14:45:06 -04:00
farhatahmad 5a3ad3159c GRN2-45, GRN2-197: Upgrade Rails to 5.2.3 and removed sass-rails gem (#636)
* Removed deprecate sass-rails and replace with sassc-rails

* Upgraded to Rails 5.2.3

* Fixed travis

* Added back Spring code

* Fixed travis again
2019-07-15 10:13:41 -04:00
farhatahmad ad2321e3e9 Update sample.env with the correct links (#637) 2019-07-12 16:55:11 -04:00
jfederico 5ecb3e419e Merge branch 'master' into v2.2.1-alpha 2019-07-12 20:37:52 +00:00
shawn-higgins1 c410c0b8ef Change default recording sort order to descending (#630) 2019-07-12 16:34:47 -04:00
transifex-integration[bot] 31b5e96ba6 Translate '/config/locales/en.yml' in 'pt_BR' (#645)
* Translate /config/locales/en.yml in pt_BR

translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language

* Translate /config/locales/en.yml in pt_BR

translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language

* Translate /config/locales/en.yml in pt_BR

translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language
2019-07-12 11:37:13 -04:00
transifex-integration[bot] 979f8d172d Translate '/config/locales/en.yml' in 'de_DE' (#644)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-12 11:36:53 -04:00
transifex-integration[bot] 506b44f80a Translate '/config/locales/en.yml' in 'pl_PL' (#643)
* Translate /config/locales/en.yml in pl_PL

translation completed for the source file '/config/locales/en.yml'
on the 'pl_PL' language

* Translate /config/locales/en.yml in pl_PL

translation completed for the source file '/config/locales/en.yml'
on the 'pl_PL' language
2019-07-12 11:36:15 -04:00
transifex-integration[bot] bef6083e84 Translate '/config/locales/en.yml' in 'es_MX' (#642)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-07-12 11:35:50 -04:00
transifex-integration[bot] 860a8a2f91 Translate '/config/locales/en.yml' in 'es' (#641)
* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language

* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language

* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-07-12 11:35:37 -04:00
Jesus Federico 65270bdbb0 Update en.yml 2019-07-12 11:15:02 -04:00
transifex-integration[bot] 5e3809b35e Translate /config/locales/en.yml in pt_BR (#640)
translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language
2019-07-12 11:08:40 -04:00
transifex-integration[bot] 7501be3bbc Translate /config/locales/en.yml in pl_PL (#639)
translation completed for the source file '/config/locales/en.yml'
on the 'pl_PL' language
2019-07-12 11:08:01 -04:00
transifex-integration[bot] 3c01bfcdaa Translate '/config/locales/en.yml' in 'de_DE' (#632)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-11 14:29:45 -04:00
shawn-higgins1 85da83f8b0 Fix office365 if hd environment variable isn't set (#629) 2019-07-11 11:14:43 -04:00
transifex-integration[bot] eb82425747 Translate '/config/locales/en.yml' in 'de_DE' (#625)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-07-11 09:06:30 -04:00
farhatahmad ea759d551c GRN2-195: Fixed issues with turbolinks caching (#626)
* Fixed issues with turbolinks caching

* Updated string for twitter flash
2019-07-11 08:54:52 -04:00
transifex-integration[bot] 355bee8059 Translate /config/locales/en.yml in sv_SE (#590)
translation completed for the source file '/config/locales/en.yml'
on the 'sv_SE' language
2019-07-10 14:00:56 -04:00
transifex-integration[bot] 026bb2794e Translate '/config/locales/en.yml' in 'zh_CN' (#592)
* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language

* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-07-10 14:00:38 -04:00
transifex-integration[bot] 92f4dd613c Translate /config/locales/en.yml in hu_HU (#591)
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language
2019-07-10 13:39:54 -04:00
transifex-integration[bot] 3b1cd41ae2 Translate '/config/locales/en.yml' in 'es' (#624)
* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language

* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-07-10 13:34:47 -04:00
transifex-integration[bot] 1af434cd21 Translate /config/locales/en.yml in ar (#595)
translation completed for the source file '/config/locales/en.yml'
on the 'ar' language
2019-07-10 13:26:30 -04:00
transifex-integration[bot] 43ba3dff86 Translate '/config/locales/en.yml' in 'es_MX' (#622)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-07-10 13:26:05 -04:00
shawn-higgins1 bc78feb0bd Fix spelling error (#623) 2019-07-10 13:11:23 -04:00
Jesus Federico 5a8758d396 Merge pull request #621 from bigbluebutton/v2.2-alpha
v2.2-alpha release
2019-07-10 12:07:22 -04:00
farhatahmad c7a0c6a463 GRN2-192: Made error pages more descriptive (#620)
* GRN2-192

* Brought back error codes
2019-07-10 11:51:19 -04:00
shawn-higgins1 523d9a38f2 GRN2-30: Add custom ldap sign in page (#619)
* Add custom ldap signin page

* Remove old omniauth-ldap gem

* Use new bn gems
2019-07-10 11:26:43 -04:00
jfederico 09afd9154f Updates to Gemfile for custom gems 2019-07-10 13:40:21 +00:00
farhatahmad f1b4089d15 Added fix for room limit (#618) 2019-07-09 17:05:04 -04:00
farhatahmad 338953d728 Replaced old colour picker with a cleaner one (#617) 2019-07-09 17:03:18 -04:00
shawn-higgins1 2a96269d44 GRN2-175: Update Greenlight to work with the new launcher (#614)
* Update greenlight to support the new launcher

* Update comments to indicate that checksum should eventually be removed

* Fix spelling mistake

* Fix rubocop

* Missed variable name change

* Support old environment variable
2019-07-09 16:46:25 -04:00
shawn-higgins1 fc18976b6d GRN2-107: Add office365 auth (#616)
* add office365 auth

* Delete conflicting file
2019-07-09 13:54:15 -04:00
shawn-higgins1 40b05b1626 GRN2-155: Begin preparing for removal of Twitter accounts (#615)
* Add twitter deprecation message

* Fix rspec test

* Extract room switch to its own method

* update method name
2019-07-09 13:06:07 -04:00
Jesus Federico a3158b5872 GRN2-178: Generalized use of language_name based on Mozilla Mapping (#613)
* GRN2-178: Generalized use of language_name based on Moxilla Mapping

* Fixed issues catched by rubocop

* MAke sure the file with data exists

* Removed language mapping from local code
2019-07-09 12:24:30 -04:00
farhatahmad 5d4bd1b851 GRN2-174: Added 404 if user does not exist (#609)
* Added 404 if user does not exist

* Differentiated between 404 and 500

* Rspec fixes
2019-07-09 11:00:33 -04:00
farhatahmad e4f50026f1 Added setting for admin to limit the number of rooms for the user (#607) 2019-07-09 10:56:06 -04:00
farhatahmad 4f2b190239 Small updates to ReadMe to better match the current state of Greenlight (#612) 2019-07-08 13:23:20 -04:00
farhatahmad 315bb1af1c Added a max-width to the email column in the manage users table (#611) 2019-07-08 09:12:46 -04:00
farhatahmad f6bd959c4c GRN2-135: Limit Jquery version in Gemfile (#610)
* Limit Jquery version in Gemfile

* Fixed issue with lock file
2019-07-08 09:08:39 -04:00
farhatahmad cb2587a6c6 Added the missing model attribute strings (#604) 2019-07-08 09:07:24 -04:00
farhatahmad 0fc85636f1 Removed duplicate keys in en.yml file (#603) 2019-07-08 09:04:24 -04:00
farhatahmad 7828c15286 GRN2-166: Fixed issue with language fallback not working (Fixed #593) (#602)
* Fixed issue with language fallback not working

* Rubocop fixes
2019-07-08 09:02:34 -04:00
shawn-higgins1 e153528fcc GRN2-162: Revert to sqlite in docker compose (#594)
* Revert to sqlite

* Missed uncomenting sqlite volume

* Update sample.env
2019-06-28 16:40:19 -04:00
farhatahmad 98f7afb9a1 Fixed issue with user list (#589) 2019-06-28 16:06:21 -04:00
transifex-integration[bot] ce2c9c1822 Translate /config/locales/en.yml in de_DE (#583)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-06-26 12:15:31 -04:00
transifex-integration[bot] 20b1e3b45a Translate /config/locales/en.yml in es_MX (#587)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-06-26 12:15:12 -04:00
transifex-integration[bot] b8c19cef05 Translate /config/locales/en.yml in es (#586)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-06-26 11:37:30 -04:00
Jesus Federico efe0e70b03 Reorganized docker-contrib.yml (#585) 2019-06-26 10:54:03 -04:00
shawn-higgins1 ccbd46f045 Improve container build: GRN2-156 (#582)
* Cache gems

* Remove debug statement

* Use postgress by default

* Update sample.env
2019-06-26 10:15:53 -04:00
transifex-integration[bot] 18214037c3 Translate /config/locales/en.yml in zh_CN (#572)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-06-25 22:44:42 -04:00
farhatahmad bb17771a03 Removed recording warning on room delete if there are no recordings (#577) 2019-06-25 22:34:16 -04:00
farhatahmad 9e0a7b513f Removed the Oops from the string (#578) 2019-06-25 22:06:15 -04:00
farhatahmad 3aaa735934 Removed env variable from name (#580) 2019-06-25 16:51:52 -04:00
Jinesh 2603e945c8 GRN2-yyy: Added initial cloudbuild scripts (#581)
* Initial cloudbuild scripts

* Update sample.env

* Update sample.env
2019-06-25 13:01:01 -04:00
Jesus Federico d985681e0d Fixed script for building docker image (#575) 2019-06-21 10:34:56 -04:00
Jesus Federico a0a99b34c2 GRN2-159: Changed the inception of the version tag (#574)
* GRN2-159: Changed the inception of the version tag

* GRN2-159: Restored TRAVIS_BRANCH

* Relocated ARG aNV for version in Dockerfile
2019-06-21 10:15:10 -04:00
Jesus Federico f5c33e9306 GRN2-159: Changed the inception of the version tag (#573) 2019-06-21 09:36:52 -04:00
jfederico 790a0365c5 Merge branch 'translations_en-yml--master_es' 2019-06-13 15:24:37 +00:00
jfederico d11dc42f85 Merge branch 'translations_en-yml--master_zh_CN' 2019-06-13 15:21:45 +00:00
jfederico b5958834b2 Merge branch 'translations_en-yml--master_vi_VN' 2019-06-13 15:20:11 +00:00
jfederico ce819b6929 Merge branch 'translations_en-yml--master_it_IT' 2019-06-13 15:19:59 +00:00
jfederico f95f08e5c2 Merge branch 'translations_en-yml--master_it' 2019-06-13 15:19:54 +00:00
jfederico 6e4925ecdf Merge branch 'translations_en-yml--master_hu_HU' 2019-06-13 15:19:42 +00:00
jfederico 9cf9e9f23d Merge branch 'translations_en-yml--master_fa_IR' 2019-06-13 15:19:26 +00:00
jfederico 30c3a5a10a Merge branch 'translations_en-yml--master_es_MX' 2019-06-13 15:19:07 +00:00
jfederico 3a7fc56bd2 Merge branch 'translations_en-yml--master_de_DE' 2019-06-13 15:16:06 +00:00
farhatahmad 7a3436cdea Added helpful message (#564) 2019-06-13 11:12:42 -04:00
farhatahmad 78c9903f7c GRN2-xx: Cleaned up Javascript Complaints from Scrutinizer (#557)
* First step

* Fix flash issue
2019-06-13 10:48:06 -04:00
transifex-integration[bot] c5e020e90d Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-06-13 14:46:50 +00:00
transifex-integration[bot] 157915a235 Translate /config/locales/en.yml in hu_HU
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language
2019-06-13 14:36:13 +00:00
farhatahmad cb939735bc Fixed string for user demoted email (#556) 2019-06-13 10:32:18 -04:00
transifex-integration[bot] 92a6db1a25 Translate /config/locales/en.yml in zh_CN
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-06-10 10:32:08 +00:00
transifex-integration[bot] d85d7b38b0 Translate /config/locales/en.yml in hu_HU
translation completed for the source file '/config/locales/en.yml'
on the 'hu_HU' language
2019-06-06 08:26:37 +00:00
transifex-integration[bot] a682dbcfc8 Translate /config/locales/en.yml in fa_IR
translation completed for the source file '/config/locales/en.yml'
on the 'fa_IR' language
2019-06-01 05:49:16 +00:00
Fred Dixon 36ad8f695a Update README.md
Fix broken link to install page.
2019-05-27 07:29:58 -04:00
transifex-integration[bot] ccea24ce6c Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-24 18:31:53 +00:00
jfederico e1fc628202 Add settings for postgres 2019-05-24 15:54:20 +00:00
Jesus Federico 98395328b2 Merge pull request #555 from bigbluebutton/alpha-2.1.1
Alpha 2.1.1
2019-05-24 11:49:59 -04:00
farhatahmad 006a2029dd Bug fixes related to banned users (#554) 2019-05-23 18:31:01 -04:00
farhatahmad 990f72ebf4 Fixed issues with endpoint and conf check (#553) 2019-05-23 17:08:43 -04:00
farhatahmad 9467f756e2 Added Indexs to improve db performance (#551) 2019-05-23 16:56:15 -04:00
farhatahmad 3e0238eb0c Replaced checkbox with dropdown (#552) 2019-05-23 13:21:43 -04:00
farhatahmad de1e75fbf8 Added check to emailer concern (#550) 2019-05-23 12:22:34 -04:00
farhatahmad 190fc57f5e Added a BigBlueButton error page (#548) 2019-05-23 09:36:28 -04:00
shawn-higgins1 c3d1ce3a04 Fix checkbox styling (#547) 2019-05-22 15:23:31 -04:00
farhatahmad f7fef926f8 Merge pull request #545 from farhatahmad/v2.1.1
GRN2-xx: Fixed Rubocop and Rspec
2019-05-22 13:52:39 -04:00
farhatahmad e90ca9cf48 Rspec and rubocop fixes 2019-05-22 13:51:55 -04:00
shawn-higgins1 70acb9a7e1 GRN2-118: Create a setting to require authentication to join a room (#541)
* Create a setting to require authentication to join a room

* Apply comments
2019-05-22 13:44:40 -04:00
farhatahmad 996518eea7 Added filter for user role (#540) 2019-05-22 13:39:34 -04:00
shawn-higgins1 eac8290001 GRN2-148: Always check that email notifications are enabled before sending an email (#539)
* Always check that email notificatiosn are enabled before sending an email

* Fix tests

* Fix formating

* Change to hardcoding the validation
2019-05-22 13:38:34 -04:00
shawn-higgins1 f88d67f6fb GRN2-6: Notify admins when a approve/invite user signs up (#538)
* Notify admins when a approve/invite user signs up

* Fix formating

* Uses admins_url variable
2019-05-22 13:38:00 -04:00
shawn-higgins1 83a9edf81d GRN2-140: Added Email to inform user they've been promoted (#534)
* Added Email to inform user they've been promoted

* Update user_mailer.rb

* Send email when a user is demoted

* Change more-info string
2019-05-22 13:36:33 -04:00
farhatahmad 9638ebcbc5 GRN2-134: Added Color Input for lighten and darken (#529)
* Added Color Input for lighten and darken

* rspec
2019-05-22 13:34:37 -04:00
jfederico 1a5cecc0c5 Merge branch 'master' into v2.1.1 2019-05-22 17:25:53 +00:00
Jesus Federico 661d6f9bdf GRN2-149: Updated gems (#544)
* Updated gems
* Removed bundler updates from scripts
2019-05-22 13:20:39 -04:00
jfederico f2ea874801 Merge branch 'master' into v2.1.1 2019-05-22 16:36:28 +00:00
Jesus Federico 1fbd89d2fc GRN2-149: Updated gems (#543)
* Updated gems
2019-05-22 12:34:42 -04:00
jfederico b971a6f6c2 Merge branch 'v2.1.1' of github.com:bigbluebutton/greenlight into v2.1.1 2019-05-22 16:05:18 +00:00
Jesus Federico be84e7e4ed Updated Gemfile and scripts for supporting Heroku (#542)
* Include sqlite only for test and development

* Updated db config

* added assed precompile as a fallback for production

* restored some code from Gemfile

* Restored db settings

* Restored db settings

* Include sqlite for production in the docker image build

* Updated script for building image

* Updated script for building image

* Updated script for building image
2019-05-22 12:03:06 -04:00
shawn-higgins1 0360c78219 Revert "Notify admins when a approval/invite user signs up"
This reverts commit 251d85d88a.
2019-05-21 14:37:27 -04:00
shawn-higgins1 251d85d88a Notify admins when a approval/invite user signs up 2019-05-21 14:25:28 -04:00
farhatahmad 7dfab1482d GRN2-xx: Fixed issues with Greenlight ReadME (#537)
* Replaced Green Light with Greenlight

* Fixed docs links
2019-05-21 13:53:47 -04:00
transifex-integration[bot] 77f181fd71 Translate /config/locales/en.yml in es_MX
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-05-21 13:46:37 +00:00
transifex-integration[bot] cf55847429 Translate /config/locales/en.yml in es
translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-05-21 13:45:41 +00:00
transifex-integration[bot] 4d5eec3174 Translate /config/locales/en.yml in it
translation completed for the source file '/config/locales/en.yml'
on the 'it' language
2019-05-21 09:36:32 +00:00
transifex-integration[bot] 7574bc482c Translate /config/locales/en.yml in it_IT
translation completed for the source file '/config/locales/en.yml'
on the 'it_IT' language
2019-05-21 09:36:16 +00:00
transifex-integration[bot] bf2ea7f9f2 Translate /config/locales/en.yml in it_IT
translation completed for the source file '/config/locales/en.yml'
on the 'it_IT' language
2019-05-21 09:33:15 +00:00
Fred Dixon f44b776d1e Moving towards writing it as "Green Light" 2019-05-19 13:59:33 -04:00
farhatahmad 720dac6012 GRN2-6: Added the ability for admins to specify registration method (#520)
* Added the ability to invite users

* Small bug fix

* Added the ability to approve/decline users

* Small bug fixes

* More bug fixes

* More minor changes

* Final changes
2019-05-17 16:26:49 -04:00
Jesus Federico c42e4d960b Merge branch 'master' into translations_en-yml--master_de_DE 2019-05-17 14:50:26 -04:00
transifex-integration[bot] fb651e53f3 Translate /config/locales/en.yml in vi_VN
translation completed for the source file '/config/locales/en.yml'
on the 'vi_VN' language
2019-05-17 17:25:30 +00:00
farhatahmad adf4b68008 GRN2-139: Fixed issue with default bbb endpoint (#522)
* Fixed issue with default bbb endpoint

* Fixed issue with configuration rake task
2019-05-17 12:52:53 -04:00
farhatahmad c3ddb17514 GRN2-138: Fixed issue with admin rake task (#521)
* Fixed issue with admin rake task

* rspec
2019-05-17 12:49:42 -04:00
shawn-higgins1 4a4fcec6fb Add a colour picker that is consistent across all browsers (GRN2-96) (#518)
* sync

* Fix corruption

* Add back room.rb

* Line endings

* More line endings

* Add jQuery colour picker

* Remove inline styling
2019-05-17 12:28:58 -04:00
transifex-integration[bot] 64b1122550 Translate /config/locales/en.yml in zh_CN
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-05-15 12:25:39 +00:00
shawn-higgins1 23abdb52ee Add paging to Recordings Table (GRN2-26) (#512)
* Add translations for the validation messages

* Add translations for next/prev button

* Add paging to recordings

* sync

* Fix line endings
2019-05-14 09:01:41 -04:00
transifex-integration[bot] 52e628272b Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-14 04:23:14 +00:00
Rafael Baldasso Audibert d8f6c3f872 Added Google calendar button (#429)
* implement first version of the recording authentication, redirecting to the playback URL with the jwt token

* set default recording visibility by environment variable

* use the http header, if present, to determine the client ip address

* fix email verification when disabled

* revert playback component to link_to, change method to get

* remove unnecessary variable

* Added "Add to Google Calendar" button on Room page

* Added Google Calendar button enable to env.sample

* Updated CSS for the Google Calendar Button row

* Added correct translation when copying room link

* Fixed new Google Calendar button mobile display

* GRN-80: Allow local accounts on multitenant (#428)

* Changed the way the omniauth providers are declared

* Allow local authentication for multitenant mode based on customer settings

* Cleanead up code mandated by rubocop

* Completed implementation for signin and added the one for signup

* Fixed issue with rubocop

* Renamed customer_name to lb_user

* Renamed lb_user -> user_domain, fixed issue with signup controller, email verification WAS NOT implemented

* Completed implementation of email_verification

* Fixed rubocop issue

* Final update

* Fix for test with loadbalancer

* Make sure loadbalancer mockup is only used when env defined

* Fix for test on rooms_controller

* Fixed most of the test failing on multitenant env

* Fixed issue detected by rubocop

* Fixed issue with activation tockens not working on resend

* Fixed new issue found by rubocop

* Updated travis script

* Harcoded credentials for mockup

* Updated expectation on start_session

* Fixed issue with duplication of home room

* Updated script for rubocop

* Restored Gemfile

* Update sample.env

* Update sample.env
2019-05-13 17:05:31 -04:00
transifex-integration[bot] d7b9e7a322 Translate '/config/locales/en.yml' in 'de_DE' (#517)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-10 07:27:51 -04:00
Jesus Federico 2d03054e46 Merge branch 'master' into translations_en-yml--master_de_DE 2019-05-09 18:29:24 -04:00
shawn-higgins1 55afbe99f5 Refactor users.html to only make one db call to get roles (GRN2-121) (#513)
* Refactor _users.html to only make one db call to get role

* Apply comments
2019-05-09 18:24:58 -04:00
farhatahmad 75bde6a42d GRN2-xx: Email and admin fix (#515)
* Email and admin fix

* Redirected super_admins to the admins page

* Small fix

* Update rooms_controller.rb
2019-05-09 18:07:17 -04:00
transifex-integration[bot] 31e27c983b Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-09 20:11:39 +00:00
shawn-higgins1 63ada8b3db Fixed #514: Fix UI issues with the create room modal (#516)
* sync

* Fix create room modal UI

* Fix line endings issues

* More line ending issues
2019-05-09 14:02:36 -04:00
transifex-integration[bot] bf6138d5bb Translate /config/locales/en.yml in zh_CN (#510)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-05-08 08:52:06 -04:00
transifex-integration[bot] acb0189d78 Translate /config/locales/en.yml in zh_CN
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-05-08 00:44:46 +00:00
transifex-integration[bot] 6d0f84877a Translate '/config/locales/en.yml' in 'de_DE' (#505)
* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language

* Translate /config/locales/en.yml in de_DE

translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-07 18:21:17 -04:00
transifex-integration[bot] 284cd07fa5 Translate '/config/locales/en.yml' in 'es_MX' (#507)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Updated es_MX locale file

* Added es locale file
2019-05-07 18:14:21 -04:00
Jesus Federico 7b19f8fa4f Merge branch 'master' into translations_en-yml--master_de_DE 2019-05-07 18:11:37 -04:00
farhatahmad 84d7d8992a Small bug fix (#508) 2019-05-07 18:11:13 -04:00
Jesus Federico 6acb924c38 Merge branch 'master' into translations_en-yml--master_es_MX 2019-05-07 18:10:24 -04:00
transifex-integration[bot] 7371cf50c2 Translate /config/locales/en.yml in es
translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-05-07 22:08:30 +00:00
jfederico c5bb915363 Added es locale file 2019-05-07 19:36:05 +00:00
jfederico 79161523dd Updated es_MX locale file 2019-05-07 19:34:45 +00:00
farhatahmad 2e064de0a9 GRN2-xx: Fixed minor issues related to deletes (#506)
* Minor fixes to improve quality

* Changed styling on login button
2019-05-07 14:53:29 -04:00
Jesus Federico 4fc5b26fe2 Merge branch 'master' into translations_en-yml--master_de_DE 2019-05-07 14:25:05 -04:00
transifex-integration[bot] f48ce84e96 Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-07 18:20:47 +00:00
transifex-integration[bot] a252ccc05b Translate /config/locales/en.yml in es_MX
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-05-07 18:08:59 +00:00
shawn-higgins1 b5aa7edd16 Fixed #500: Add translations for active record validations (GRN2-127) (#504)
* Add translations for the validation messages

* Add translations for next/prev button
2019-05-07 12:17:42 -04:00
transifex-integration[bot] 2866c16fe3 Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-07 15:35:33 +00:00
transifex-integration[bot] 2c36932ea7 Translate /config/locales/en.yml in de_DE
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-07 15:32:32 +00:00
farhatahmad 73f6ec846f Fixed recaptcha (#503) 2019-05-07 11:18:15 -04:00
transifex-integration[bot] 794754bba8 Translate /config/locales/en.yml in de_DE (#498)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-05-07 09:22:45 -04:00
transifex-integration[bot] 48bd5ee8a4 Translate /config/locales/en.yml in zh_CN (#497)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-05-07 09:22:13 -04:00
farhatahmad 75f48f4979 GRN2-125: Added a configurable reCAPTCHA on sign up (#502)
* Added a configurable reCAPTCHA on sign up

* Added missing code
2019-05-07 09:21:04 -04:00
shawn-higgins1 f6dd3d34eb Add recording count to room delete (#501) 2019-05-07 09:07:16 -04:00
farhatahmad 91760d284b Added check to make sure user is signed in (#499) 2019-05-07 09:03:02 -04:00
Jesus Federico 9f74b0e2c0 Admin panel (#496)
* Added the administrator role and functionality that comes with it  (#403)

* GRN-20: Added roles to the user model

* GRN-75: Added a view for admins to see their users

* GRN-77: Added Edit/Delete/Promote ability for admins

* GRN-71: Added admin account by default

* Changed the way locales are shown

* Updated the rest of the locales

* Changed the way available_locales are defined

* Updated locales in Russian

* Updated locaales for German

* Update user.rb

* Update admins.js

* GRN-15: Added the ability to change color and image from admin interface (#425)

* GRN-20: Added roles to the user model

* GRN-75: Added a view for admins to see their users

* GRN-77: Added Edit/Delete/Promote ability for admins

* GRN-71: Added admin account by default

* Changed the way locales are shown

* Updated the rest of the locales

* Changed the way available_locales are defined

* Updated locales in Russian

* Updated locaales for German

* GRN-15: Added the ability for admins to customize color and image

* Update user.rb

* Update user.rb

* Update routes.rb

* Update admins_controller.rb

* GRN-87:Added a super admin role and made changes to how to the design works (#430)

* GRN-20: Added roles to the user model

* GRN-75: Added a view for admins to see their users

* GRN-77: Added Edit/Delete/Promote ability for admins

* GRN-71: Added admin account by default

* Changed the way locales are shown

* Updated the rest of the locales

* Changed the way available_locales are defined

* Updated locales in Russian

* Updated locaales for German

* GRN-15: Added the ability for admins to customize color and image

* Added the super admin and completed the design tab

* Update user.rb

* Update themes_controller_spec.rb

* Update routes.rb

* Update admins_controller.rb

* Removed duplicated code that broke the build after last merge

* GRN-78: Restructured some of the views to make the UI more consistent and responsive (#435)

* GRN-20: Added roles to the user model

* GRN-75: Added a view for admins to see their users

* GRN-77: Added Edit/Delete/Promote ability for admins

* GRN-71: Added admin account by default

* GRN-15: Added the ability for admins to customize color and image

* Added the super admin and completed the design tab

* GRN-78: Cleaned up buttons and moved signin to its own page

* GRN-78: Moved the Rooms and Recordings link to nav bar

* Merge fix

* Views restructure fix (#458)

* Added cache to gitlab-ci.yml

* Restructured seed

* GRN2-99 -> GRN2-106: UI cleanup and refactoring (#478)

* GRN2-98: Change Fullname to Full name

* GRN2-105: Changed View Users to Manage Users

* GRN2-101/103: Updated email to match branding

* GRN2-100: Updated Email Sent flash to be more descriptive

* GRN2-104: Redirect user to sign in page w/ flash after clicking activation link

* GRN2-102: Changed the wording in the verification email

* GRN2-99: Added email form validation

* GRN2-106: Cleaned up Users list front end

* Fixes to rake and admin password validator for passing rubocop

* GRN2-113: Fixed issues with admin panel (#479)

* GRN2-116: Code clean up after restructure of views (#482)

* Removed unused references

* Rubocop

* Added pagination to admin view (#483)

* GRN2-114: Added the ability for admins to ban/unban users (#487)

* Added the ability for admins to ban and unban users

* Update sessions_helper.rb

*  Merge branch 'master' into admin-panel  (#492)

* Updated rubocop gem

* Updated rubocop and fixed issues (#490)

* Rubocop fixes

* GRN2-122: Updated sign in flow for admins and switch design tab to site settings (#489)

* Switched design tab to site settings

* Update _header with spaces instead of tabs

* Added more test cases to increase coverage (#494)
2019-05-03 13:05:12 -04:00
transifex-integration[bot] b9efff586a Translate /config/locales/en.yml in zh_CN (#495)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-05-03 09:03:02 -04:00
farhatahmad a0c99dde47 Updated rubocop and fixed issues (#490) 2019-05-02 15:44:00 -04:00
jfederico bc57caa806 Updated rubocop gem 2019-05-02 14:34:37 +00:00
jfederico fe5a567788 Merge branch 'master' of github.com:bigbluebutton/greenlight 2019-05-01 21:05:40 +00:00
transifex-integration[bot] 3473069bda Translate /config/locales/en.yml in pt_BR (#484)
translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language
2019-05-01 17:01:53 -04:00
jfederico 8e731e878b Merge branch 'master' of github.com:bigbluebutton/greenlight 2019-05-01 20:54:36 +00:00
farhatahmad 4896133d58 Added signup_url to list of urls not to redirect to (#481) 2019-05-01 16:53:47 -04:00
farhatahmad 57c49ca8f4 Fixed #486: Allow users to sign in if ALLOW_GREENLIGHT_ACCOUNTS=false (#480)
* Allow local users to sign in when sign up is turned off

* Update _header.html.erb
2019-05-01 16:29:53 -04:00
jfederico 63a6cdb28b Removed rubocop.yml so the default is loaded 2019-05-01 19:30:23 +00:00
Jesus Federico bba42bb708 Update .rubocop.yml 2019-05-01 15:14:58 -04:00
Jesus Federico c5b5d1e445 Update .rubocop.yml 2019-05-01 14:49:53 -04:00
transifex-integration[bot] 84caa20078 Translate /config/locales/en.yml in pt (#485)
translation completed for the source file '/config/locales/en.yml'
on the 'pt' language
2019-05-01 11:32:58 -04:00
transifex-integration[bot] 327da4d503 Translate /config/locales/en.yml in de_DE (#477)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-04-22 11:40:34 -04:00
Jesus Federico 1c160a8b27 Translate /config/locales/en.yml es, es_MX, fr (#476)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Translate /config/locales/en.yml in es

translation completed for the source file '/config/locales/en.yml'
on the 'es' language

* Translate /config/locales/en.yml in fr

translation completed for the source file '/config/locales/en.yml'
on the 'fr' language

* Restored es file
2019-04-22 10:37:46 -04:00
transifex-integration[bot] aac0696e02 Translate /config/locales/en.yml in hi_IN (#472)
translation completed for the source file '/config/locales/en.yml'
on the 'hi_IN' language
2019-04-22 09:59:51 -04:00
Rafael Baldasso Audibert 32bbc80415 Added Record type/format I18n (#471)
* GRN-80: Allow local accounts on multitenant (#428)

* Changed the way the omniauth providers are declared

* Allow local authentication for multitenant mode based on customer settings

* Cleanead up code mandated by rubocop

* Completed implementation for signin and added the one for signup

* Fixed issue with rubocop

* Renamed customer_name to lb_user

* Renamed lb_user -> user_domain, fixed issue with signup controller, email verification WAS NOT implemented

* Completed implementation of email_verification

* Fixed rubocop issue

* Final update

* Fix for test with loadbalancer

* Make sure loadbalancer mockup is only used when env defined

* Fix for test on rooms_controller

* Fixed most of the test failing on multitenant env

* Fixed issue detected by rubocop

* Fixed issue with activation tockens not working on resend

* Fixed new issue found by rubocop

* Updated travis script

* Harcoded credentials for mockup

* Updated expectation on start_session

* Fixed issue with duplication of home room

* Updated script for rubocop

* Restored Gemfile

* Added I18n for recording types/formats
2019-04-22 09:17:37 -04:00
Jesus Federico 9b2424cde0 GRN2-112: Default language fallback fails with a 500 error (#469)
* GRN2-112: Default language fallback fails with a 500 error

* Updates for passing rspec tests

* Added cache for gitlab ci

* Updated cache for gitlab

* Restored Dockerfile

* Fixed glitch in filter for build and deployment
2019-04-17 15:33:38 -04:00
Jesus Federico c8a799bce8 HOT-FIX: Issue with changes with the language file name (#466)
* HOT-FIX: Issue with changes with the language file name

* Rubocop!
2019-04-16 17:08:17 -04:00
Jesus Federico 5ff41d0590 Allow multiple as host_url (#465) 2019-04-16 09:28:30 -04:00
transifex-integration[bot] 751aecf360 Translate '/config/locales/en.yml' in 'zh_CN' (#464)
* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language

* Translate /config/locales/en.yml in zh_CN

translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-04-16 09:21:31 -04:00
Jesus Federico 56fe9d3640 Update README.md 2019-04-15 11:27:09 -04:00
Jesus Federico 1d2cbf6871 Updates to translations for pt_BR, pt, fr, ar (#463) 2019-04-15 09:16:11 -04:00
transifex-integration[bot] b7ae2e591c Translate /config/locales/en.yml in es_MX (#456)
translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language
2019-04-12 13:29:26 -04:00
transifex-integration[bot] d43229af7e Translate /config/locales/en.yml in es (#457)
translation completed for the source file '/config/locales/en.yml'
on the 'es' language
2019-04-12 13:29:07 -04:00
transifex-integration[bot] 6d04198918 Translate /config/locales/en.yml in de_DE (#455)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-04-12 11:14:41 -04:00
farhatahmad 6bd5d81697 Fix issue with flash messages and activation link (#454) 2019-04-11 14:31:45 -04:00
transifex-integration[bot] c595ba9895 Translate /config/locales/en.yml in zh_CN (#452)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-04-11 13:20:59 -04:00
farhatahmad a14007743f Users are redirected to the url they clicked login/signup from (#446) 2019-04-11 12:45:43 -04:00
farhatahmad d39a11059e Fixed #366: Changed how GreenLight handles LDAP jpegPhoto (GRN-92) (#445)
* Fixed issue with LDAP jpegPhoto

* Update _header.html.erb
2019-04-11 11:53:32 -04:00
Rafael Baldasso Audibert 822dd27509 Added mailer i18n (#436)
* Added mailer i18n

* Added translation to mailer in the JS

Also added a generic way to add JS translation through a javascript entry in the locale file

* Moved line-breaks from translations to JS file
2019-04-11 11:30:50 -04:00
farhatahmad 88776eaadb GRN-88: Fixed some things that Scrutinizer was complaining about (#433)
* Scrutinizer fixes

* Moved helper code to concern

* Another scrutinizer fix

* User controller conflict fix

* Another user controller fix

* Added include verifier
2019-04-11 10:25:49 -04:00
farhatahmad 5e3aa72955 GRN-85-fix: Fix for endpoint auto completion (#451)
* Fix for endpoint auto completion

* Update application.rb

* Update application.rb
2019-04-11 10:07:35 -04:00
farhatahmad f6715b83ae Join meeting name is now stored in a session cookie (#432) 2019-04-10 17:06:19 -04:00
farhatahmad 4d648534f7 Fixed #398 Fixed issue with recording length and sort (GRN-83) (#426)
* Fixed issue with recording length and sort

* Made js run on any page with a table element on it

* Scrutinizer fix
2019-04-10 16:32:28 -04:00
farhatahmad 95a98f6574 Added check for bigbluebutton/ for endpoint config (#408) 2019-04-10 16:04:59 -04:00
Jesus Federico dd4629908c GRN-93: Get rid of false positive exception in production logs (#450) 2019-04-10 15:10:55 -04:00
Jesus Federico a7d307aec1 GRN-93: Get rid of false positive exception in production logs (#449) 2019-04-10 13:55:34 -04:00
Jesus Federico 3dea09ee9b GRN-94: Make sure reset-password also works on non-verified accounts (#448)
* Fix for issue with excesive requests to lb

* Fixed issue with rspec on users not passing when run alone

* Include dotenv in production

* GRN-94: Make sure reset-password also works on non-verified accounts
2019-04-10 10:56:01 -04:00
Jesus Federico 2b0301da38 GRN-93: Fix for issue with excesive requests to LB (#447)
* Fix for issue with excesive requests to lb

* Fixed issue with rspec on users not passing when run alone

* Include dotenv in production
2019-04-10 10:12:32 -04:00
Jesus Federico c07cfd0d93 GRN-80: Patch for fixing the added function in a production environment (#444)
* Patch for fixing the added function in a production environment

* Rubocop!
2019-04-09 11:22:55 -04:00
transifex-integration[bot] 88f408c092 Translate /config/locales/en.yml in de_DE (#438)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-04-09 10:36:18 -04:00
transifex-integration[bot] 362ae1d6dd Translate /config/locales/en.yml in pt_BR (#437)
translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language
2019-04-09 10:35:41 -04:00
Jesus Federico 57aa72ecee GRN-73: Added settings for externalizing logs (#441)
* Added settoings for externalizing logs

* Fix for passing rubocop

* Attempt to fix jenkins fail

* Final Jenkins fix
2019-04-08 16:06:14 -04:00
Jesus Federico 154bb883b6 Make sure the loadbalancer URL is correct (#440) 2019-04-08 09:19:35 -04:00
Jesus Federico b15868fb3c GRN-80: Allow local accounts on multitenant (#428)
* Changed the way the omniauth providers are declared

* Allow local authentication for multitenant mode based on customer settings

* Cleanead up code mandated by rubocop

* Completed implementation for signin and added the one for signup

* Fixed issue with rubocop

* Renamed customer_name to lb_user

* Renamed lb_user -> user_domain, fixed issue with signup controller, email verification WAS NOT implemented

* Completed implementation of email_verification

* Fixed rubocop issue

* Final update

* Fix for test with loadbalancer

* Make sure loadbalancer mockup is only used when env defined

* Fix for test on rooms_controller

* Fixed most of the test failing on multitenant env

* Fixed issue detected by rubocop

* Fixed issue with activation tockens not working on resend

* Fixed new issue found by rubocop

* Updated travis script

* Harcoded credentials for mockup

* Updated expectation on start_session

* Fixed issue with duplication of home room

* Updated script for rubocop

* Restored Gemfile
2019-04-05 14:54:36 -04:00
Jesus Federico 5ba5b663ac GRN-86: Change the way the locales are handled (#417)
* Changed the way locales are shown

* Updated the rest of the locales

* Changed the way available_locales are defined

* Updated locales in Russian

* Updated locaales for German
2019-03-28 11:02:36 -04:00
transifex-integration[bot] 7474a3c6a0 Translate /config/locales/en.yml in ru_RU (#416)
translation completed for the source file '/config/locales/en.yml'
on the 'ru_RU' language
2019-03-28 08:51:56 -04:00
transifex-integration[bot] 9a13a4683e Translate /config/locales/en.yml in de (#414)
translation completed for the source file '/config/locales/en.yml'
on the 'de' language
2019-03-27 16:25:35 -04:00
transifex-integration[bot] 1d2e142f5b Translate /config/locales/en.yml in de_DE (#413)
translation completed for the source file '/config/locales/en.yml'
on the 'de_DE' language
2019-03-27 14:13:33 -04:00
transifex-integration[bot] a6d6dc5136 Translate /config/locales/en.yml in zh_CN (#412)
translation completed for the source file '/config/locales/en.yml'
on the 'zh_CN' language
2019-03-27 10:36:32 -04:00
transifex-integration[bot] 18cefe8c0b Translate '/config/locales/en.yml' in 'es_MX' (#411)
* Translate /config/locales/en.yml in es_MX

translation completed for the source file '/config/locales/en.yml'
on the 'es_MX' language

* Rename es_MX.yml to es-MX.yml

* Rename es-MX.yml to es_MX.yml
2019-03-27 09:45:05 -04:00
transifex-integration[bot] 1f34174df1 Translate '/config/locales/en.yml' in 'pt_BR' (#410)
* Translate /config/locales/en.yml in pt_BR

translation completed for the source file '/config/locales/en.yml'
on the 'pt_BR' language

* Rename pt_BR.yml to pt-BR.yml

* Rename pt-BR.yml to pt_BR.yml
2019-03-27 08:52:05 -04:00
Jesus Federico 8d484e2c0e Update en.yml 2019-03-26 09:43:43 -04:00
farhatahmad 38beb2a7cc Added bundler cache to travis script (#405) 2019-03-25 14:31:49 -04:00
farhatahmad 5daa5bab45 Fixed issue with api_concern (#406) 2019-03-25 13:12:33 -04:00
Jesus Federico 6e0b232c3e Updated locales (#402) 2019-03-21 11:45:45 -04:00
farhatahmad c0b46be547 Added fix for multitenant error (#394)
* Added fix for multitenant error

* Fixed issue with room lock when using ldap

* Fixed test cases

* Fixed rubocop issue

* Included internal documentation for LDAP ENV variables
2019-03-13 15:56:57 -04:00
Jesus Federico 08f6f32779 Persist password (#393)
* never hold the owner of the room on the waiting screen

* persist room passwords so we can always call create meeting, even if it's already running, to avoid any inconsistency or race condition when joining a meeting

* Fixed issues in migration, room attribute updates, random_password and tests
2019-03-12 17:54:57 -04:00
farhatahmad 3195bb4429 GRN-59: Implemented pagination on the API call (#370)
* Added the env variable and functionality to paginate the call to the bbbapi

* Update user.rb
2019-03-12 13:50:20 -04:00
farhatahmad ab6655554c Added javascript needed to rename from all recordings (#390) 2019-03-05 17:04:14 -05:00
farhatahmad ef8fc2c0e4 GRN-69: Fixed javascript bug related to room validation (#388)
* Fixed javascript bug related to room validation

* More javascript bugs

* Removed room name length error

* Fixed issue with room post url
2019-03-05 15:07:14 -05:00
Jesus Federico 37af17fae1 Revert "Redirecting the user to the referrer on login success/fail (#374)" (#389)
This reverts commit 404134aa8d.
2019-03-05 14:45:42 -05:00
Jesus Federico 49779b2dd1 Updated bootstrap and sqlite3 in order to solve some concerns with security (#385) 2019-03-04 16:54:11 -05:00
farhatahmad 79bb782319 Fixed issues with application js order and flash messages (#387) 2019-03-04 16:29:07 -05:00
farhatahmad 404134aa8d Redirecting the user to the referrer on login success/fail (#374) 2019-03-04 15:51:53 -05:00
Jesus Federico a0036e244b CI Updates (#386)
* Fixed issue with pushing build to dockerhub

* Fixed issue with pushing build to dockerhub
2019-02-28 11:54:08 -05:00
farhatahmad 6f2eef7437 Updated application.js to call require jquery before tabler (#373) 2019-02-28 10:29:51 -05:00
farhatahmad 532c7bd2af Refactored flash messages code (#372) 2019-02-27 15:21:52 -05:00
Jesus Federico 5553a8ffaa Updated internal documentation (#384) 2019-02-27 14:10:19 -05:00
Jesus Federico 6ebdd43709 New updates to scripts for travis (#381) 2019-02-26 09:34:51 -05:00
Jesus Federico fff8a52cc2 Updated scripts for CI (#380) 2019-02-25 15:33:05 -05:00
farhatahmad c60e25f71c GRN-56: Correctly implemented the account verification flow (#367)
* Correctly implemented the account verification flow

* Fixed issues with redirect locations
2019-02-22 16:47:02 -05:00
farhatahmad 5521402ee7 Fixed #365: Added check to config rake file (GRN-66) (#376)
* Added check to config rake file

* Update configuration.rake
2019-02-22 15:11:00 -05:00
Jesus Federico 7429349d3b GRN-37: Externalized scripts for building/deploying docker images though CI (#375) 2019-02-22 13:11:15 -05:00
farhatahmad 9c23c88735 Added a env variable to toggle visibilty of the customize tab in user settings (#369) 2019-02-15 12:15:29 -05:00
farhatahmad c38032ac20 Fixed styling on cookie warning (#368) 2019-02-15 12:07:10 -05:00
farhatahmad 0b90e130c6 Fixed issue with form post action url (#364) 2019-02-06 17:07:36 -05:00
farhatahmad d24e8fad14 Added the ability to choose which room settings are available using env variable (#363) 2019-02-06 16:13:53 -05:00
farhatahmad 5a7c3133da Changed document.ready to turbolinks:load (#362) 2019-02-06 13:28:21 -05:00
farhatahmad 9883616f9c Fixed issue with visibility redirected and changed the 'no recordings' string for the recordings page (#361) 2019-02-06 12:02:53 -05:00
farhatahmad 16def655cf Sorted the recording playback array by the type attribute before displaying (#358) 2019-02-06 11:43:00 -05:00
farhatahmad 2e8670a8ab GRN-11: Ability to configure room specific settings (#348)
* Added the ability to set room settings on create or update

* Added room settings alerts and made fixes to other alerts

* Small bug fixes related to rubocop and the create room modal

* Update test case and fixed issue with small edge case

* Update room.js
2019-02-06 11:08:18 -05:00
farhatahmad 992c154c10 Change the browser tab text to BigBlueButton (#357) 2019-02-04 13:16:14 -05:00
farhatahmad 8ff05643dc Added a Recordings page where the user can see all recordings (#352) 2019-02-04 11:21:42 -05:00
farhatahmad ef23cae73d Changed the link to the bbb image to be an absolute url (#353) 2019-02-04 10:19:11 -05:00
farhatahmad c73064a70a GRN-45: Fixed the URL being sent in the password reset email (#351)
* Fixed the url used in the reset password emails and added the ability to preview emails in the dev environment

* Replaced localhost with example.com in email previews

* Update password_reset.html.erb
2019-02-01 15:00:10 -05:00
farhatahmad ecee282fc4 GRN-19: Add confirmation for accepting cookies from the site (#345)
* Added a cookie warning

* Cleaned up code to better match application standard
2019-02-01 12:54:29 -05:00
farhatahmad ffff724712 GRN-48: Password reset e-mails getting into SPAM folders (#349)
* Changed the way emails look and added an extra string for the user to check their spam folder

* Update verify_email.text.erb
2019-02-01 12:14:51 -05:00
Jesus Federico 56a72ade9d Completed fix for the specs (#343) 2019-01-18 10:29:06 -05:00
Jesus Federico 4d9d0ebb97 GRN-46: Scoped user email uniqueness validation (#342)
* Scoped user email uniqueness validation

* Scoped user email uniqueness validation

* Scoped user email uniqueness validation

* Extended User test for check email scope
2019-01-17 16:27:50 -05:00
jfederico e915aba9db Updates to specs 2019-01-09 22:01:19 +00:00
plastilincheg 8df16d2651 Update ru.yml (#338)
Change some mistakes
2018-12-21 15:24:07 -05:00
John Ma 1571e27ac0 Added russian translation (#336)
* <Added russian locale>

* Update ru.yml

* Update ru.yml
2018-12-21 12:42:05 -05:00
John Ma 8fe66d81f1 Fixed #332 Allow users to reset their password (#335)
* <Added password reset system>

* <Added rspec tests>

* <Fixed code style>

* <Added rescue for invalid smtp configuration>
2018-12-21 11:56:52 -05:00
John Ma e3389c84d1 Improve code style based on scrutinizer ci (#337)
* <fixed settingsJs and sortJs>

* <Fixed searchJs, renameJs and renameJs>

* <Fixed renameJs>
2018-12-21 11:46:42 -05:00
John Ma 8cdbf1d5e6 Add the ability to Sort Recordings (GRN-43) (#327)
* <Added Pagination>

* <Created search bar in Room>

* <Fixed search bar UI>

* <Fixed searching>

* <Modified search>

* <Fixed code style>

* <fixed changes>

* <Added pagination and search for public recordings>

* <added rspec tests>

* <Added and Updated search.js>

* <Fixed live searching for current user room>

* <Fixed live searching for current user room>

* <Added live search for join>

* <Fixed errors>

* <fixed gemfile>

* <Fix gems>

* <>

* <Fixed rspec tests>

* <Added filter ui options>

* <Add sorting functionality>

* <Added sorting functionality for public recordings>

* <Update branch>

* <Fix code>

* <Fix code>

* <Fix code style>

* Update sort.js
2018-12-13 11:58:33 -05:00
John Ma b3f37cd3b3 Fixed #323 Allow users to select a language in settings (GRN-17) (#324)
* <Added ui for language setting and migration>

* <Option to choose languages added>

* <Fixed code style>

* <Added Rspec tests>

* <sync db>

* <Sync db>

* <Generalized language settings>

* <Fixed flash message>

* Fixed las issue with i18n fallback

* <Modified fallback config>

* <Fixed code style>
2018-12-06 16:00:22 -05:00
John Ma 895af7494e Fixed #280 Search/Paginate recordings (GRN-12) (#281)
* <Added Pagination>

* <Created search bar in Room>

* <Fixed search bar UI>

* <Fixed searching>

* <Modified search>

* <Fixed code style>

* <fixed changes>

* <Added pagination and search for public recordings>

* <added rspec tests>

* <Added and Updated search.js>

* <Fixed live searching for current user room>

* <Fixed live searching for current user room>

* <Added live search for join>

* <Fixed errors>

* <fixed gemfile>

* <Fix gems>

* <>

* <Fixed rspec tests>

* <Removed commented code>

* Update search.js
2018-12-06 10:24:22 -05:00
John Ma 8b41dec8ac UI fixes for Renaming of Rooms and Recordings (GRN-18) (#328)
* <Double clicking header support added>

* <Add dotted underline>

* <Added fixes to name change ui>

* <Removed console.log statements>

* <Changed css for dotted underline>
2018-12-05 16:07:00 -05:00
John Ma 41a543f6b8 Fixed #303 Add the ability to rename rooms and recordings (GRN-18) (#304)
* <Added modal for rename>

* <Commit changes and switch branch>

* <Javascript Scaffolding for rename room feature>

* <Created room_block.js>

* <update changes>

* <Updating rename branch>

* <Update rename.js>

* <Update branch>

* <Update branch>

* <Implemented renaming of room blocks>

* <Refactoring code>

* Remove modal due to new design

* <Finished renaming of rooms>

* <Updated renaming of recordings>

* <updating branch>

* <added renaming of recordings>

* <update branch>

* <>

* <Fixed code style>

* <Fixed rspec tests>

* Update application.js
2018-12-04 10:48:51 -05:00
John Ma efa9e08dfc Fixed #318 Allow multiple domains when using Google as OAuth provider (GRN-38) (#319)
* <Added muli_domain restriction with google_oauth>

* <Fixed code style>

* <Added some rspec tests>
2018-11-15 15:01:53 -05:00
John Ma 1954ba4cff <Fixed UI for join button> (#308) 2018-11-15 14:52:57 -05:00
John Ma e22d163a3f Fixed #305 Added smtp check to rakefile (GRN-42) (#313)
* <Added conf check for smtp server>

* <fixed code style>
2018-11-15 14:33:59 -05:00
John Ma de98fd0a3c Display notification that max concurrent sessions has been reached (GRN-41) (#317)
* <Added max concurrent sessions check>

* <Refactored some exception logic>

* <Fixed code style>

* <Generalized BBBException error message>
2018-11-15 14:20:46 -05:00
John Ma 655516535c <Updated rack gem> (#322) 2018-11-15 14:02:37 -05:00
John Ma 0e7277a046 Modify UI for "accept terms" checkbox (#321)
* <Changed terms and conditions checkbox>

* <Fixed code style>
2018-11-15 12:56:00 -05:00
John Ma 9f26485fb5 Added RSpec tests to increase code coverage (Application Controller) (#320)
* <Added applications controller spec>

* <Fixed code style>

* <testing for issues with travis ci>

* <added potential ci fix>

* <added potential ci fix>

* <added potential ci fix>
2018-11-15 12:41:11 -05:00
John Ma f94678627c Allow for specification of email sender (#311)
* <Allow for configuration of email sender>

* <Configure for localization>

* <Added a change in verify_mail>
2018-11-08 10:27:26 -05:00
John Ma 33d43c8f43 <Updated loofah gem> (#314) 2018-11-08 09:59:14 -05:00
Jesus Federico 3b67ffee40 Generalized logs and mailer (#312) 2018-10-26 11:59:49 -04:00
John Ma b8785a3bf8 Fixed loading of error pages (#310)
* <Fixed loading of error pages>

* <Remove not_found from application folder>
2018-10-23 13:10:54 -04:00
Jesus Federico b3a2d9e39e Updates to env variables for logging (#309)
* Updates to env variables for logging

* Added not_found template to application
2018-10-23 11:45:14 -04:00
Jesus Federico 5174bf1c1e Added step for precompiling assets (#302) 2018-10-17 14:40:55 -04:00
Jesus Federico 207ec6ffb2 Unify the UI style in sign up, sign in buttons when using omniauth (GRN-35) (#301)
* Changed style to buttons for sign up

* Added assets and generalized code for sign up buttons

* Added new style to sign in modal

* Replaced hex colors with the official ones

* Removed the old social icons that are no longer used

* Centred text in sign up buttons

* Base button rendering on iconset_providers and secured office 365
2018-10-17 12:41:57 -04:00
John Ma 1bb5be68a5 Fix for email verification issue (GRN-36) (#300)
* <incorrect smtp settings no longer crashes the application>

* <Added rspec tests>

* <>

* Delete env

* Update development.rb
2018-10-17 11:42:50 -04:00
Jesus Federico de5bbc44f2 Shortened commit tag used for build version (#299) 2018-10-16 14:58:52 -04:00
Jesus Federico 1617b7dba1 Helper scripts (#298)
* Added helper scripts

* Added commit tag to version tag to builds from master

* Restored script for Travis

* Restored script for Jenkins

* Restored script for Jenkins

* Restored script for Jenkins
2018-10-16 14:28:21 -04:00
John Ma ec250f3ed5 Fixed #291 Added OAuth2 for Office365 (GRN-32) (#293)
* <Added omniauth for office365>

* <Fixed code style>

* Update puma.rb

* <Inserted link to documentation>
2018-10-16 12:58:06 -04:00
Jesus Federico 90b965d03f Workaround for issue with email notification (#297) 2018-10-15 15:55:29 -04:00
Bruck Wubete fd1b586c6e Fixed #266 Externalize version tag so it is based on GitHub tag when deployed to production (GRN-1) (#292)
* Update Jenkinsfile

* updating Jenkinsfile

* updating version in Jenkins

* Update version.rb
2018-10-12 16:11:22 -04:00
John Ma a9be611d00 Fixed #269 Add health-check endpoint (GRN-3) (#290)
* <Added health_check endpoint>

* <changed gemfile_lock>

* <fixed code style>

* <removed excess health_check routes>
2018-10-12 15:57:53 -04:00
Tyler Copeland cf2fac019e Updated styles for the Google Auth button (GRN-31) (#296)
* Greenlight landing page layout adjustments, general cleanup and responsive styles

* Text update Signup to Sign up

* Updated Google Sign in and Sign up styles

* no changes were made to sample env but needed to commit it

* minor padding update on the Google icon

* deleted Google Auth secrets from the sameple.env

* updated the if condition in new.html.erb

* <changed logic of button display>

* Update _login_modal.html.erb
2018-10-12 15:33:19 -04:00
Jesus Federico a2ffd74042 Fixed room view broken when no format presentation is included (GRN-34) (#289) 2018-10-09 16:16:27 -04:00
John Ma 99fb4cc478 <Updated boostrap gem> (#288) 2018-10-09 16:07:50 -04:00
John Ma 967c805836 Fixed #267 Email verification feature (#268)
* <Implemented basic welcome email upon signup>

* <Added config option to enable>

* <Added verification link routing>

* <Added views for verify/resend and reconfigured routes>

* <Finished Verification System minus Rspec changes>

* <Fixed code style>

* <Modified dome rspec tests>

* <Switched sample env back to default>

* <Added test cases to increase code coverage>

* <Added test_helper>

* <Minor code changes>

* <Added requested changes>

* <Added requested changes>

* <see if this fixes migration>

* <see if this fixes migration>

* <fixed migrations>

* Delete .rake_tasks~

* Update _confirm_button.html.erb

* Update _resend_button.html.erb

* Update verify_email.html.erb

* Update verify_email.text.erb

* <Fixed bugs>

* <Added validation of verification link and fixed some code style>

* <Disabled updating email for omniauth>
2018-10-09 14:22:02 -04:00
John Ma daaf305c30 Fixed #272 Mocked up external server requests (#286)
* <Partially filled out the stub request>

* <Mocked requests to external servers>

* <Fixed style>

* Deleting rename.js

Accidentally slipped its way into the commit
2018-10-04 14:16:12 -04:00
John Ma 5c3fd15323 Fixed #283 (#284)
* <fixed translation errors>

* <fixed translation errors>

* <fixed translation errors>
2018-10-03 14:08:50 -04:00
John Ma 5c281a1a3f Fixes #278 (#282)
* <Fixed the main ui glitch>

* <Fixed issue>

* <Fixed code style>

* <Some more code style fixes>

* Update sessions_helper.rb
2018-10-03 11:42:14 -04:00
John Ma f0f0638be3 500 internal server error (fixes #277) (#279)
* <Fixed bug>

* <Fixed some errors>

* <fixed rspec tests>

* <Made requested changes>

* Delete search.js
2018-10-02 17:48:01 -04:00
John Ma dcd24d61be John fix issue#274 (#275)
* <fixed privacy policy errors>

* <Fixed code style>

* <Robustness changes>

* <redirect to 404 page if terms are disabled>

* <patched validation of accepted terms>

* <relaunching scrutinizer>
2018-10-02 10:23:09 -04:00
Tyler Copeland 423ec6c828 Greenlight landing page layout adjustments, general cleanup and responsive styles (#271) 2018-09-19 15:28:48 -04:00
jfederico c05d2e314d Fixed badge for coverage 2018-09-14 18:37:28 +00:00
John Ma d83ec1a027 Fix #260 issues with privacy policy (#261)
* <fixed privacy policy workflow>

* <fixed privacy policy workflow>

* <changed rspec tests to handle new privacy flow>

* <changed rspec tests to handle new privacy flow>

* <deleted previous term validation due to changed workflow>

* <fixed code style>

* <reverted configuration settings>

* <Updated terms and conditions for existing users (not omniauth)>

* <Fix code style>

* <Fixed privacy policy for omniauth>

* <Fixed Travis C.I test>

* <Minor code changes>

* <Undo routes.rb change>

* <reconfigured routes.rb>
2018-09-14 14:33:58 -04:00
John Ma 4fb1a008ca Fixed #255
* <Fixed how uid was generated>

* <Fixed code style>

* <Removed unnecessary downcase call>
2018-09-12 17:03:01 -04:00
Jesus Federico 074a002abf Added support for coveralls (#264) 2018-09-12 16:06:49 -04:00
John Ma 94d0d1acd7 John ui fix issue#256 (#257)
Greenlight Homepage should display "Welcome to BigBlueButton", "powered by Greenlight"
2018-09-11 13:40:07 -04:00
Calvin Walton d1ea30f94c Merge pull request #258 from bruckwubete/patch-2
Update Jenkinsfile
2018-09-11 12:29:54 -04:00
Bruck Wubete 748f6c1f6a Update Jenkinsfile 2018-09-11 12:20:22 -04:00
Joshua Arts 261c46c421 Merge pull request #254 from joshua-arts/more-locales
Add locales from Transifex.
2018-08-30 11:50:43 -04:00
Joshua Arts cb77c6b5af add ar, de, el and fr locales from transifex 2018-08-30 10:46:13 -04:00
Bruck Wubete e477948713 Update Jenkins File with github webhooks and slack notifications (#251)
* Update Jenkinsfile
2018-08-24 14:54:32 -04:00
Jesus Federico f6742fd440 removed Docker build step (#253) 2018-08-24 14:24:27 -04:00
Joshua Arts 1ae7996dd9 Merge pull request #249 from jfederico/transifex
Added translation to Spanish
2018-08-21 17:44:44 -04:00
Joshua Arts 8624b132a3 Merge pull request #250 from bruckwubete/staging
Added test stage to Jenkins CI
2018-08-21 16:15:17 -04:00
jfederico 7190779abb Added Spanish translation 2018-08-21 20:03:58 +00:00
bruckwubete ba50105dd9 resolve confict with master 2018-08-21 16:00:50 -04:00
bruckwubete 317e6e8cc5 update to add github trigger 2018-08-21 15:55:50 -04:00
bruckwubete 44a8e4ea97 Merge https://github.com/bigbluebutton/greenlight 2018-08-21 15:00:14 -04:00
Joshua Arts 81d460f1c2 fix before_filter deprecation warning 2018-08-21 14:54:52 -04:00
Joshua Arts ba4b7a018e make user_controller tests not env dependent 2018-08-21 13:52:20 -04:00
Joshua Arts 71395003c1 revert version 2018-08-21 13:28:56 -04:00
Joshua Arts 4c842c8e8d Merge branch 'master' of github.com:bigbluebutton/greenlight 2018-08-21 13:20:24 -04:00
Joshua Arts d7db798adc show placeholder when no participants field 2018-08-21 13:20:04 -04:00
Bruck Wubete 907b8e949e Update Jenkinsfile 2018-08-21 08:04:41 -08:00
Bruck Wubete 810b62f66e Added a Test stage 2018-08-21 07:56:52 -08:00
Bruck Wubete 3a97e91844 Remove unnecessary get pods command 2018-08-21 07:47:38 -08:00
Joshua Arts effcf89146 Merge pull request #248 from bruckwubete/master
Adding Jenkinsfile
2018-08-20 17:30:38 -04:00
bruckwubete 512892a6bc Adding Jenkinsfile to dockerignore 2018-08-20 17:23:07 -04:00
bruckwubete 3c28da67ac Squashed to 1 2018-08-20 17:20:27 -04:00
Joshua Arts a6fc8f0f2f fix stats format being removed 2018-08-20 14:53:14 -04:00
Joshua Arts a27fbec44a Merge pull request #247 from britoederr/master
Brazilian Portuguese Translate
2018-08-20 10:32:35 -04:00
Éder Brito e7b97e3d67 Update application.rb 2018-08-20 11:04:16 -03:00
Joshua Arts ffcc841fe7 Merge pull request #246 from joshua-arts/disable-thumbnails-config
Add option to disable recording thumbnails.
2018-08-17 16:43:07 -04:00
Joshua Arts 0cf5baddb2 add option to disable recording thumbnails 2018-08-17 16:31:16 -04:00
Joshua Arts 04d07ee8d4 Merge pull request #245 from joshua-arts/bump-bigbluebutton-api-ruby
Bump bigbluebutton-api-ruby gem to 1.7.0.
2018-08-17 11:22:44 -04:00
Joshua Arts 1b204e7e7f bump bigbluebutton-api-ruby 2018-08-17 11:11:29 -04:00
Joshua Arts 4434c31fed Merge pull request #243 from joshua-arts/temp-stats-rec-fix
Fix error when loading recordings that contain "statistics" format.
2018-08-16 14:39:58 -04:00
Joshua Arts f58d76c5ef prevent from grabbing length from stats format 2018-08-16 14:30:49 -04:00
Joshua Arts efc2e3ab17 Merge pull request #242 from bigbluebutton/escape-uid-url
Escape room uid when generating invite path.
2018-08-16 13:33:44 -04:00
Joshua Arts f8af2fc3bf escape uid in invite path 2018-08-16 13:25:32 -04:00
Joshua Arts 0d1df083d9 Merge pull request #241 from bruckwubete/master
fix force ssl logic for lb configuration
2018-08-15 12:08:10 -04:00
bruckwubete 0d252add03 linting 2018-08-15 11:49:13 -04:00
bruckwubete 66ff9c7a2f fix force ssl logic for lb configuration 2018-08-15 11:45:37 -04:00
Éder Brito 7b65b04d9b Brazilian Portuguese Translate 2018-08-14 11:08:06 -03:00
Éder Brito f742e1af78 Brazilian Portuguese Translate 2018-08-13 15:40:38 -03:00
Éder Brito e98037fd64 Update application.rb 2018-08-13 15:39:31 -03:00
Joshua Arts f0610f363d add option to force ssl 2018-08-02 14:58:20 -04:00
Joshua Arts 8ff0018eac allow for production cable config 2018-08-02 14:08:13 -04:00
Joshua Arts fc0ecc1bb9 Merge pull request #233 from joshua-arts/license
Add LGPL 3.0 License.
2018-08-01 10:03:34 -04:00
Joshua Arts 562e84fc0d add LICENSE file 2018-08-01 09:49:05 -04:00
Joshua Arts 162c7a3085 add LGPL 3.0 headers 2018-08-01 09:45:12 -04:00
Joshua Arts b8e3045b30 fix start indentation 2018-07-30 15:42:45 -04:00
Joshua Arts d7083363b7 center version in footer 2018-07-30 15:05:21 -04:00
Joshua Arts 40aa64f43f Merge pull request #232 from joshua-arts/fix-recordings
Fix recordings table.
2018-07-30 14:58:02 -04:00
Joshua Arts c7fbaa3f80 fix recordings lengths 2018-07-30 11:48:11 -04:00
Joshua Arts 8220a09aa1 Merge pull request #230 from joshua-arts/delete_accounts
Add option in settings to delete account.
2018-07-27 16:05:06 -04:00
Joshua Arts 2a2e4f285c change terms from txt to markdown 2018-07-27 15:12:27 -04:00
Joshua Arts 4b9ca3f13e recenter errors and missing locales 2018-07-27 14:55:32 -04:00
Joshua Arts 572134f344 check for no recordings 2018-07-27 14:18:39 -04:00
Joshua Arts 7b15b84daa delete recordings with account 2018-07-27 14:14:48 -04:00
Joshua Arts 5e5f31c375 add option in settings to delete account 2018-07-27 11:36:28 -04:00
Joshua Arts f285377abf Merge pull request #229 from joshua-arts/len-locale-fixes
Fix missing locales and bump name/email max.
2018-07-26 13:34:49 -04:00
Joshua Arts 89b1afa470 fix missing locales and bump name/email max 2018-07-26 11:53:50 -04:00
Joshua Arts fd2dc3abec fix bug with single thumbnails erroring 2018-07-25 16:16:25 -04:00
Joshua Arts a9892d2dcb redesign landing & fix footer 2018-07-25 14:43:05 -04:00
Joshua Arts 6a668149b6 add padding to room block ellipsis 2018-07-24 14:55:54 -04:00
Joshua Arts 11f0c1f5e6 disable allow_greenlight_accounts when ldap is enabled 2018-07-24 11:13:04 -04:00
Joshua Arts d6aee4d2d1 bump max name length to 32 characters 2018-07-24 11:05:25 -04:00
Joshua Arts 4e87dcbd64 Merge branch 'master' of github.com:bigbluebutton/greenlight 2018-07-24 11:01:32 -04:00
Joshua Arts d7881fa31a update allow_greenligth_accounts env link 2018-07-24 11:01:04 -04:00
Joshua Arts 6234bdc0df Merge pull request #227 from bruckwubete/bn_launcher_integration
redirect to https in prod for bn_launcher
2018-07-23 16:56:30 -04:00
bruckwubete e60407378a gix rubocop offense 2018-07-23 16:37:17 -04:00
Joshua Arts 12a448aa24 Merge pull request #225 from joshua-arts/ldap
Add support for LDAP authentication.
2018-07-23 15:34:42 -04:00
bruckwubete 5f6d70f751 redirect to https in prod 2018-07-23 15:30:31 -04:00
Joshua Arts d11390fadd Merge pull request #226 from joshua-arts/ux-changes
Improve UX style changes.
2018-07-23 15:17:01 -04:00
Joshua Arts 3696fa95d7 add version in footer 2018-07-23 15:06:21 -04:00
Joshua Arts f91c6d193a make features appear non-clickable 2018-07-23 14:40:41 -04:00
Joshua Arts 0202d09a9d fix video link spanning entire page 2018-07-23 12:23:59 -04:00
Joshua Arts 00a3deec29 explicitly call #omniauth_fail 2018-07-23 12:07:26 -04:00
Joshua Arts 9a738c4432 add signup with provider buttons 2018-07-23 11:46:53 -04:00
Joshua Arts 40cb48a10a remove unneeded redirect 2018-07-20 17:09:03 -04:00
Joshua Arts 690a12ceba add relative root to ldap callback path 2018-07-20 16:04:50 -04:00
Joshua Arts 8ea2cc0928 add pull counter badge 2018-07-20 15:04:11 -04:00
Joshua Arts 473860aaa3 fix sample.env ldap link 2018-07-20 14:55:49 -04:00
Joshua Arts 775285bba9 add ldap authentication 2018-07-20 14:20:14 -04:00
Joshua Arts 212618de47 fix sample.env oauth links 2018-07-20 11:03:28 -04:00
Joshua Arts 7c0c944cb4 Merge pull request #224 from joshua-arts/localization
Add localisation support.
2018-07-19 16:10:33 -04:00
Joshua Arts c5cfc621ca localize controllers 2018-07-19 16:04:08 -04:00
Joshua Arts ce4c8b3bff localize views 2018-07-17 11:57:49 -04:00
Joshua Arts 55b83226c9 detect users preferred language 2018-07-13 11:04:32 -04:00
Joshua Arts 29e273f5a1 Merge pull request #223 from bigbluebutton/settings-fix
Fix Greenlight accounts unable to update settings.
2018-07-13 10:35:19 -04:00
Joshua Arts a6b05f5fd3 fix gl accounts unable to update settings 2018-07-13 10:21:32 -04:00
Joshua Arts 8089decc17 ignore bundler files 2018-07-12 17:42:20 -04:00
Joshua Arts f5ab362f96 add ability for custom branding images 2018-07-11 15:33:35 -04:00
Joshua Arts 20a2c570ba Merge pull request #222 from bruckwubete/bn_launcher_integration
Bn launcher integration
2018-07-11 15:03:29 -04:00
bruckwubete 01ea22ed6d removed OpenSSL::SSL::VERIFY_PEER assignment 2018-07-11 14:57:00 -04:00
bruckwubete b7801f9874 adding DB_ADAPTER check 2018-07-11 13:19:20 -04:00
Joshua Arts 1412b39620 skip cleanup and minor fixes 2018-07-11 10:23:16 -04:00
bruckwubete cec4393837 rubocop fixes 2018-07-10 16:05:37 -04:00
bruckwubete f36741f131 added specs for bn-launcher 2018-07-10 16:00:57 -04:00
Joshua Arts 4394b0b6e7 add rspec command to travis 2018-07-10 15:16:35 -04:00
bruckwubete 278df69c55 Merge branch 'master' into bn_launcher_integration 2018-07-10 15:07:37 -04:00
bruckwubete c5a1f3bbce Merge branch 'master' of https://github.com/bigbluebutton/greenlight 2018-07-10 15:07:11 -04:00
bruckwubete 91644281c4 fixing rubocop errors 2018-07-10 15:05:50 -04:00
Joshua Arts 047edbd6e8 disable travis email notifications 2018-07-10 14:52:58 -04:00
bruckwubete 407e8ee13c made omniauth-bn-launcher public 2018-07-10 13:54:45 -04:00
bruckwubete 137b8450a8 adding checksum. using customer name as the provider 2018-07-10 12:11:00 -04:00
Joshua Arts 121ec4b3f7 Merge pull request #221 from bigbluebutton/travis-rubocop
Add Travis CI.
2018-07-10 12:04:55 -04:00
Joshua Arts 51c3ae9807 add slack notifications and deploy to travis 2018-07-10 11:54:19 -04:00
Joshua Arts 6b118ce933 exclude vendor from rubocop 2018-07-09 16:59:20 -04:00
Joshua Arts 19ffe483c6 add rubocop to travis config 2018-07-09 16:41:49 -04:00
Joshua Arts 3b985a6dbb add travis.yml 2018-07-09 16:10:11 -04:00
bruckwubete 0d2a5a4c90 small fixes 2018-07-09 16:00:10 -04:00
Joshua Arts fa5f27d17f remove outdated #home test 2018-07-09 15:17:23 -04:00
bruckwubete 590e189474 Merge branch 'master' into bn_launcher_integration 2018-07-09 13:20:34 -04:00
bruckwubete 68d61d115c Merge branch 'master' of https://github.com/bigbluebutton/greenlight2 2018-07-09 13:19:59 -04:00
bruckwubete 67c32a396f passing params to the launcher gem 2018-07-09 13:17:23 -04:00
Joshua Arts 60a5b57121 add stay on 1.0 link 2018-07-06 12:12:27 -04:00
Joshua Arts cbdf32e7b1 Merge pull request #4 from bigbluebutton/easy-upgrading
Make upgrading from 1.0 easier.
2018-07-06 11:44:08 -04:00
Joshua Arts 8647993443 fix docker-compose org 2018-07-06 11:42:50 -04:00
Joshua Arts e2ad6e7715 make upgrading from 1.0 easier 2018-07-05 17:25:59 -04:00
bruckwubete 930ed809f5 pass github token as runtime arg 2018-07-04 17:06:52 -04:00
bruckwubete adeb844918 Merge branch 'bn_launcher_integration' of https://github.com/bigbluebutton/greenlight2 into bn_launcher_integration 2018-07-04 15:36:06 -04:00
Joshua Arts fd1b550f93 Merge pull request #2 from bigbluebutton/release_recommendations
Final tweaks and getting ready for release.
2018-07-04 15:29:42 -04:00
bruckwubete b51ac6aa7c reverting unnecessary changes 2018-07-04 15:24:01 -04:00
Joshua Arts 8a9f2a3cc2 multiple fixes and tweaks 2018-07-04 15:22:59 -04:00
bruckwubete 3bb0c26f33 clean up for PR 2018-07-04 15:20:21 -04:00
Joshua Arts 21e0a3558d add delete confirmation modal 2018-07-04 15:20:12 -04:00
bruckwubete 3c11aca1aa able to handle launcher login with gem 2018-07-04 14:48:22 -04:00
Joshua Arts 91b9bb4054 set .ruby-version to 2.5.1 2018-07-04 09:56:50 -04:00
Joshua Arts d383f142ee tidy or line styling 2018-07-04 09:43:08 -04:00
Joshua Arts ecd101833a Merge pull request #1 from Hajar1/master
switched hr line to a inline or
2018-07-03 15:53:00 -04:00
Adnan Hajar 9764ac6848 switched hr line to a inline or 2018-07-03 15:40:38 -04:00
Joshua Arts dcf199c0aa fix chat join message 2018-07-03 13:11:39 -04:00
Joshua Arts efcc312e9e remove ability to change home room 2018-07-03 11:57:45 -04:00
Joshua Arts ab7ae8434b add demo server trial to README.md 2018-06-29 16:59:45 -04:00
Joshua Arts efbf42f698 remove unused launch route 2018-06-29 16:18:00 -04:00
bruckwubete 2bb41977ed Merge https://github.com/joshua-arts/greenlight-2.0 2018-06-29 10:08:58 -04:00
bruckwubete e3e32365d0 able to handle launcher login 2018-06-29 10:07:06 -04:00
Joshua Arts 924ba7256b Merge pull request #4 from joshua-arts/loadbalanced
Add ability to launch through a loadbalanced BBB configuration.
2018-06-29 09:26:20 -04:00
Joshua Arts 056289789a add ability to launch through a loadbalanced bbb configuration 2018-06-29 09:24:25 -04:00
Joshua Arts 840c677c5e Merge pull request #3 from joshua-arts/tests
Build out rspec testing suite.
2018-06-28 16:56:42 -04:00
Joshua Arts 1acf901c68 finish controller tests 2018-06-28 16:55:56 -04:00
Joshua Arts 63cdbdc874 Merge branch master into tests 2018-06-28 11:29:30 -04:00
Joshua Arts 0b9fdb371e fix footer and update links 2018-06-28 11:21:02 -04:00
Joshua Arts c802e4806a fix waiting to join retry logic 2018-06-28 10:39:39 -04:00
Joshua Arts d9c5d37810 correctly handle failed login 2018-06-28 09:35:36 -04:00
Joshua Arts f0ab2924db allow client to be determined by server 2018-06-27 17:53:11 -04:00
Joshua Arts a6b313f38e test sessions controller and fix style 2018-06-27 17:00:37 -04:00
Joshua Arts 337345560d Merge branch master into tests 2018-06-26 16:48:02 -04:00
Joshua Arts 3748bb2140 Merge pull request #2 from joshua-arts/join_as_mod
Always join room owners as moderators.
2018-06-26 16:22:08 -04:00
Joshua Arts 60d8a595f0 always join owners ad moderators 2018-06-26 16:20:04 -04:00
Josh c348bd6bb1 update README.md 2018-06-26 10:48:32 -04:00
Joshua Arts 979f796cb5 Merge pull request #1 from joshua-arts/rubocop
Add rubocop configuration and make appropriate style changes.
2018-06-26 10:39:39 -04:00
Josh ad5f218f23 adhere to rubocop guidelines 2018-06-26 10:29:46 -04:00
Josh d2a677d15f add rubocop config 2018-06-26 10:28:08 -04:00
Josh f0011a564e raise when user not found 2018-06-25 15:51:23 -04:00
Josh df90f4aade add controller tests 2018-06-25 15:49:56 -04:00
Josh 7c6174edc5 add conf:check rake task 2018-06-22 16:09:35 -04:00
Josh 939820bffb minor styling and fixes 2018-06-22 15:58:25 -04:00
Josh c16197670b add ability to configure terms and conditions 2018-06-21 16:17:18 -04:00
Josh 2dc033ee20 remove tabler plugins 2018-06-21 11:06:14 -04:00
Josh ad7aaa1a11 dynamically select websocket protocol 2018-06-21 10:57:20 -04:00
Josh 54adff3779 load Twitter image over https 2018-06-21 10:17:46 -04:00
Josh f6bff7a58f simplify room uid format 2018-06-21 10:06:10 -04:00
Josh 78976f3f51 add Dockerfile and docker-compose.yml 2018-06-20 15:24:39 -04:00
Josh 8790640fb0 add nginx configuration 2018-06-20 15:19:57 -04:00
Josh 1c966663e0 switch feather for fontawesome 2018-06-20 15:18:05 -04:00
Josh e1eca134fc minor fixes 2018-06-19 16:43:27 -04:00
Josh d1b81a385f add more model tests 2018-06-18 14:55:01 -04:00
Josh 5d5cfd1b7d add ability to change recording visibility 2018-06-18 14:25:30 -04:00
Josh b2b2c641da add support for deploying to a subdirectory 2018-06-18 10:28:47 -04:00
Josh ce6ec0acfb fix logout route to not conflict with BBB 2018-06-15 16:21:00 -04:00
Josh 086a39ca3d rework tests 2018-06-15 14:41:07 -04:00
Josh 8cffc4872c reinclude tabler progress 2018-06-15 11:34:34 -04:00
Josh 26a9f588a1 support postgres in production 2018-06-15 11:24:10 -04:00
Josh 911bfb446e remove unneeded styling 2018-06-15 11:23:20 -04:00
Josh 766066f9dc update .gitignore 2018-06-14 16:56:18 -04:00
Josh 9d55a88d4a add favicon 2018-06-14 16:39:03 -04:00
Josh b81eadda8d production settings 2018-06-14 14:22:19 -04:00
Josh 37d9ae4136 add readme 2018-06-13 16:33:23 -04:00
Josh bc67d9e1e5 clean styling 2018-06-13 15:51:10 -04:00
Josh 7fadd6be69 seperate js in files 2018-06-13 14:43:08 -04:00
Josh 83642f22c1 minor fixes 2018-06-13 13:27:29 -04:00
Josh bc9c2c1232 add ability to configure banner message 2018-06-13 09:55:34 -04:00
Josh 8390e075e1 finish settings and public recordings 2018-06-12 17:28:02 -04:00
Josh 39b687a58f recording management 2018-06-12 14:36:35 -04:00
Josh 46bb456063 error pages and rec row 2018-06-11 17:32:08 -04:00
Josh 2b065eb7fa handle errors and fix join form 2018-06-11 13:05:54 -04:00
Josh 2b0f75e62b join page tweaks 2018-06-08 16:59:09 -04:00
Josh 4f70c9a8e5 validate passwords and fix home 2018-06-08 14:44:08 -04:00
Josh 520c489e62 change /start to post 2018-06-07 16:57:56 -04:00
Josh 2b28c750a8 in progress button 2018-06-07 16:39:25 -04:00
Josh 657feb777f signup and room waiting 2018-06-07 15:52:42 -04:00
Josh 56489ee6cd uncomment route 2018-06-06 14:57:08 -04:00
Josh c1549193f2 redesign home page 2018-06-06 14:51:32 -04:00
Josh fa64e53792 remove video modal 2018-06-05 16:49:00 -04:00
Josh d9a95ffc18 work on user settings 2018-06-04 15:58:59 -04:00
joshua-arts 79949b4aa6 join with specific id 2018-06-03 14:57:30 -04:00
joshua-arts 140547d035 shorten is_running? 2018-06-01 21:30:11 -04:00
Josh 11a61180ed show all rooms 2018-06-01 17:28:39 -04:00
Josh 475646f7c1 remove table border 2018-06-01 14:28:34 -04:00
Josh a9d5215d2b styling again 2018-06-01 14:20:40 -04:00
Josh 45fb18e609 add room functionality 2018-06-01 11:55:52 -04:00
joshua-arts 1bcd176285 styling 2018-05-31 22:15:18 -04:00
Josh 39414e269b more ui tweaks 2018-05-31 16:54:48 -04:00
Josh ede80075c1 redo rooms page 2018-05-31 15:04:18 -04:00
Josh 9e5250353b add room post 2018-05-29 17:08:38 -04:00
Josh de44d8024b room resources 2018-05-29 16:51:18 -04:00
Josh 32ec2bacce restructure app 2018-05-29 15:28:29 -04:00
Josh 5042e2572c minor tweaks 2018-05-29 08:40:35 -04:00
joshua-arts af3c45b019 minor ui tweaks 2018-05-28 19:12:24 -04:00
joshua-arts 79d63e7b70 settings and sessions UI 2018-05-28 18:10:20 -04:00
Josh 6c1074443f more work on frontend 2018-05-25 16:51:16 -04:00
Josh 0dce8d2bf5 continue front-end work 2018-05-25 11:55:48 -04:00
Josh a1a41bfa43 work on frontend 2018-05-24 16:59:20 -04:00
Josh 3dd7b33363 change rooms#index to rooms#show 2018-05-23 16:13:24 -04:00
Josh 434021239c sessions and fixes 2018-05-22 16:58:11 -04:00
Josh f189c98c56 add rspec tests 2018-05-18 11:51:03 -04:00
Josh 6cdcd89387 reworking routes 2018-05-15 11:43:59 -04:00
Josh 1ddc3172eb one meeting per room 2018-05-14 14:28:18 -04:00
Josh 0f8a4734b2 add lb option 2018-05-11 15:57:31 -04:00
Josh b452932767 work on tests 2018-05-10 15:03:59 -04:00
Josh 5347d902c0 start writing tests 2018-05-09 16:31:52 -04:00
Josh e6d01ef1b9 implement wait for moderator 2018-05-08 10:41:03 -04:00
Josh 4037b6304e initial commit 2018-05-07 16:06:01 -04:00
438 changed files with 44884 additions and 7084 deletions
+13 -10
View File
@@ -2,10 +2,10 @@
.git .git
.gitignore .gitignore
README.md README.md
SECURITY.md
# Rails # Rails
.env .env
.env.prod
*.rbc *.rbc
capybara-*.html capybara-*.html
.rspec .rspec
@@ -13,14 +13,17 @@ log
tmp tmp
/db/**/*.sqlite3 /db/**/*.sqlite3
/db/**/*.sqlite3-journal /db/**/*.sqlite3-journal
public/system /db/production
/db/production-postgres
public/assets
public/b
coverage/ coverage/
spec/tmp
.rvmrc .rvmrc
.byebug_history vendor/bundle
.bundle
# docker Dockerfile
docker-compose.yml .gitlab-ci.yml
production-compose.yml .rubocop.yml
.travis.yml
.atom spec
test
+32 -7
View File
@@ -6,21 +6,46 @@
# Ignore bundler config. # Ignore bundler config.
/.bundle /.bundle
vendor/.bundle vendor/bundle
# Ignore the default SQLite database. # Ignore the default SQLite database.
/db/**/*.sqlite3 /db/*.sqlite3
/db/**/*.sqlite3-journal /db/*.sqlite3-journal
# Ignore static assets.
/public/system/** /public/system/**
/public/assets/** /public/assets/**
/public/b/**
# Ignore uploaded files
/storage
# Ignore production paths.
/db/production
/db/production-postgres
# Ignore all logfiles and tempfiles. # Ignore all logfiles and tempfiles.
/log/* /log/*
/tmp/* /tmp
!/log/.keep !/log/.keep
!/tmp/.keep
.env
coverage
# Ignore Byebug command history file. # Ignore Byebug command history file.
.byebug_history .byebug_history
# Ignore environment configuration.
.env
env
# Ignore yarn configs
/node_modules
# IDEs
.idea
.idea/**
.vscode
.vscode/**
config/terms.md
coverage*
/atom-sftp-sync.json
+71
View File
@@ -0,0 +1,71 @@
stages:
- test
- build
- deploy
cache:
paths:
- /cache
before_script:
test:
stage: test
image: ruby:2.5
script:
- apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
- bundle install --path /cache
- bundle exec rake db:create RAILS_ENV=test
- bundle exec rake test & bundle exec rspec & bundle exec rubocop
except:
variables:
- $CD_TEST_IGNORE
build:
stage: build
image: docker:stable
services:
- docker:dind
script:
# Install bash, curl, git for deployment script
- apk update && apk add --no-cache bash curl git
# Install CA certs, openssl to https downloads, python for gcloud sdk
- apk add --update make ca-certificates openssl python
- update-ca-certificates
# Build.
- ./scripts/image_build.sh $CI_PROJECT_PATH $CI_COMMIT_REF_NAME $CI_COMMIT_SHA
only:
refs:
- branches
- tags
variables:
- $CD_DOCKER_USERNAME
- $CD_DOCKER_PASSWORD
except:
variables:
- $CD_BUILD_IGNORE
deploy:
stage: deploy
image: docker:stable
services:
- docker:dind
script:
# Install bash, curl, git for deployment script
- apk update && apk add --no-cache bash curl git
# Install CA certs, openssl to https downloads, python for gcloud sdk
- apk add --update make ca-certificates openssl python
- update-ca-certificates
# Deploy.
- ./scripts/image_deploy.sh $CI_PROJECT_PATH $CI_COMMIT_REF_NAME $CI_COMMIT_SHA $CI_COMMIT_BEFORE_SHA
only:
refs:
- branches
- tags
variables:
- $CD_DOCKER_USERNAME
- $CD_DOCKER_PASSWORD
- $CD_DEPLOY_SCRIPT
except:
variables:
- $CD_DEPLOY_IGNORE
+42
View File
@@ -0,0 +1,42 @@
about
app:template
app:update
assets:clean[keep]
assets:clobber
assets:environment
assets:precompile
autoprefixer:info
cache_digests:dependencies
cache_digests:nested_dependencies
conf:check
db:create
db:drop
db:environment:set
db:fixtures:load
db:migrate
db:migrate:status
db:rollback
db:schema:cache:clear
db:schema:cache:dump
db:schema:dump
db:schema:load
db:seed
db:setup
db:structure:dump
db:structure:load
db:version
dev:cache
initializers
log:clear
middleware
notes
notes:custom
restart
routes
secret
stats
test
test:db
time:zones[country_or_offset]
tmp:clear
tmp:create
+3
View File
@@ -0,0 +1,3 @@
--require spec_helper
--format documentation
--color
+179
View File
@@ -0,0 +1,179 @@
AllCops:
Exclude:
- 'db/schema.rb'
- 'vendor/**/*'
DisabledByDefault: false
TargetRubyVersion: 2.5
# Gems within groups in the Gemfile should be alphabetically sorted.
Bundler/OrderedGems:
Enabled: false
Style/BlockDelimiters:
Enabled: false
# Checks if uses of quotes match the configured preference.
Style/StringLiterals:
Enabled: false
# Document classes and non-namespace modules.
Style/Documentation:
Enabled: false
# Check for conditionals that can be replaced with guard clauses
Style/GuardClause:
Enabled: false
# Checks the formatting of empty method definitions.
Style/EmptyMethod:
Enabled: false
# Checks for trailing comma in hash literals.
Style/TrailingCommaInHashLiteral:
Enabled: false
# Checks for trailing comma in argument lists.
Style/TrailingCommaInArguments:
Enabled: false
# Checks that `include`, `extend` and `prepend` exists at the top level.
Style/MixinUsage:
Enabled: false
# Use %i or %I for arrays of symbols.
Style/SymbolArray:
Enabled: false
# Don't use begin blocks when they are not needed.
Style/RedundantBegin:
Enabled: false
# Use `%`-literal delimiters consistently
Style/PercentLiteralDelimiters:
Enabled: false
# Only use if/unless modifiers on single line statements.
Style/MultilineIfModifier:
Enabled: false
# Checks for trailing comma in array literals.
Style/TrailingCommaInArrayLiteral:
Enabled: false
# Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`.
Style/ExpandPathArguments:
Enabled: false
# Do not assign mutable objects to constants.
Style/MutableConstant:
Enabled: false
# Avoid rescuing without specifying an error class.
Style/RescueStandardError:
Enabled: false
# Align the elements of a hash literal if they span more than one line.
Layout/HashAlignment:
Enabled: false
# Align the parameters of a method definition if they span more than one line.
Layout/ParameterAlignment:
Enabled: false
# Align ends corresponding to defs correctly.
Layout/EndAlignment:
Enabled: false
# Align elses and elsifs correctly.
Layout/ElseAlignment:
Enabled: false
# Add empty line after guard clause.
Layout/EmptyLineAfterGuardClause:
Enabled: false
# Align the arguments of a method call if they span more than one line.
Layout/ArgumentAlignment:
Enabled: false
#
Layout/IndentationWidth:
Enabled: false
Layout/CaseIndentation:
Enabled: false
# Checks for ambiguous block association with method when param passed without parentheses.
Lint/AmbiguousBlockAssociation:
Enabled: false
# Avoid long blocks with many lines.
Metrics/BlockLength:
Enabled: false
# A complexity metric geared towards measuring complexity for a human reader.
Metrics/PerceivedComplexity:
Max: 17
# Avoid classes longer than 100 lines of code.
Metrics/ClassLength:
Enabled: false
# Limit lines to 80 characters.
Layout/LineLength:
Max: 130
# Avoid methods longer than 10 lines of code.
Metrics/MethodLength:
Enabled: false
Metrics/ModuleLength:
Enabled: false
# A calculated magnitude based on number of assignments,
# branches, and conditions.
Metrics/AbcSize:
Max: 60
# A complexity metric that is strongly correlated to the number
# of test cases needed to validate a method.
Metrics/CyclomaticComplexity:
Max: 17
# Checks for method parameter names that contain capital letters, end in numbers, or do not meet a minimal length.
Naming/MethodParameterName:
Enabled: false
Lint/LiteralInInterpolation:
Enabled: false
Layout/EmptyLinesAroundAttributeAccessor:
Enabled: true
Layout/SpaceAroundMethodCallOperator:
Enabled: true
Lint/DeprecatedOpenSSLConstant:
Enabled: true
Lint/RaiseException:
Enabled: true
Lint/StructNewOverride:
Enabled: true
Style/ExponentialNotation:
Enabled: true
Style/HashEachMethods:
Enabled: true
Style/HashTransformKeys:
Enabled: true
Style/HashTransformValues:
Enabled: true
Style/SlicingWithRange:
Enabled: true
+1
View File
@@ -0,0 +1 @@
2.5.1
+24
View File
@@ -0,0 +1,24 @@
sudo: required
language: ruby
cache: bundler
rvm:
- 2.5.1
jobs:
include:
- stage: test
name: rubocop
script: bundle exec rubocop
if: env(CD_TEST_IGNORE) IS NOT present
- stage: test
name: rspec
script: gem install bundler & bundle exec rspec
if: env(CD_TEST_IGNORE) IS NOT present
- stage: build
name: build docker image
script: bash scripts/image_build.sh $TRAVIS_REPO_SLUG $TRAVIS_BRANCH
if: env(CD_BUILD_IGNORE) IS NOT present AND type NOT IN (pull_request) AND env(CD_DOCKER_USERNAME)
IS present AND env(CD_DOCKER_PASSWORD) IS present
notifications:
email: false
slack:
secure: T64A1ut/3LdnUpPfsywNkjbyR2AIRlm99SM40xnLmXjM6Q0EtcFJ4luymC0EQB2q86WmFiK3AyPNm/EKGw8ZmjgeJIUkhMm8zZOLnYLsqMZeYmNNlDtV4zbhQ0HO3uvBqGVCSD2LTcGhCU/9VAplWpa9VnWUsWeRfklQ1yJ4y9oKtzEuiFHrILbDfqF47SlkQqbhS/Bl/oGHVVXijAmomJGG4wa9UI0PlSOUL2sJxxMhti+fptSwKo+TgKS8Vtjeu3C10QfRlcSmoDS0vaQgm7fggm/GrQ8zkSC/SKzOes/+hhRBE+TERWkx26azEy2kmI6xIkNf2BqFjDtQkjKN9yJLdJ1Kyry0uk7Eco67klEN/WoJ38NBuHVkq7p2CWWawFMg3OCS/3D9DStvYJBTBFrv7LMGKfhB4UdOgr/aSRlCTiF2grxqaXmDp0p/1J3uHIfDxbXiwx2ySjJFSC9e0/nTkJprPCQxVoZO+OFk0y2ElHMrX5L0qA2kZ4tQaPf04pQNguCgEsTnBtivVVMxCn9+ymgcHAnzGZmQmQ52NoZBQpa2FjBfhfxGOqHWJm6Kuk3p5yrGZTqlkf3GlTIlFNL8y9/5w6QaxQJbZLYSBbxAtJNvMWN/1cUwdbRTE4D0QTThASTgN6TtPKfWwIRrfj5+G9cAWo6DunmNhzATZ9g=
+58 -13
View File
@@ -1,20 +1,65 @@
FROM ruby:2.4.0 FROM ruby:2.5.1-alpine AS base
# app dependencies # Set a variable for the install location.
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs ARG RAILS_ROOT=/usr/src/app
# Set Rails environment.
ENV RAILS_ENV production
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
ENV RAILS_ENV=production \ # Make the directory and set as working.
APP_HOME=/usr/src/app RUN mkdir -p $RAILS_ROOT
WORKDIR $RAILS_ROOT
ARG BUILD_PACKAGES="build-base curl-dev git"
ARG DEV_PACKAGES="postgresql-dev sqlite-libs sqlite-dev yaml-dev zlib-dev nodejs yarn"
ARG RUBY_PACKAGES="tzdata"
# Install app dependencies.
RUN apk update \
&& apk upgrade \
&& apk add --update --no-cache $BUILD_PACKAGES $DEV_PACKAGES $RUBY_PACKAGES
COPY Gemfile* ./
COPY Gemfile Gemfile.lock $RAILS_ROOT/
RUN bundle config --global frozen 1 \
&& bundle install --deployment --without development:test:assets -j4 --path=vendor/bundle \
&& rm -rf vendor/bundle/ruby/2.5.0/cache/*.gem \
&& find vendor/bundle/ruby/2.5.0/gems/ -name "*.c" -delete \
&& find vendor/bundle/ruby/2.5.0/gems/ -name "*.o" -delete
# Adding project files.
COPY . .
# Remove folders not needed in resulting image
RUN rm -rf tmp/cache spec
############### Build step done ###############
FROM ruby:2.5.1-alpine
# Set a variable for the install location.
ARG RAILS_ROOT=/usr/src/app
ARG PACKAGES="tzdata curl postgresql-client sqlite-libs yarn nodejs bash"
ENV RAILS_ENV=production
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
WORKDIR $RAILS_ROOT
RUN apk update \
&& apk upgrade \
&& apk add --update --no-cache $PACKAGES
RUN mkdir $APP_HOME COPY --from=base $RAILS_ROOT $RAILS_ROOT
WORKDIR $APP_HOME
# Add the greenlight app # Expose port 80.
ADD . $APP_HOME EXPOSE 80
# Install app dependencies # Sets the footer of greenlight application with current build version
RUN bundle install --without development test doc --deployment --clean ARG version_code
RUN bundle exec rake assets:precompile --trace ENV VERSION_CODE=$version_code
CMD ["scripts/default_start.sh"] # Start the application.
CMD ["bin/start"]
-10
View File
@@ -1,10 +0,0 @@
FROM ruby:2.4.0
# app dependencies
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
ENV RAILS_ENV=development \
APP_HOME=/usr/src/app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
+100 -55
View File
@@ -1,98 +1,143 @@
# frozen_string_literal: true
source 'https://rubygems.org' source 'https://rubygems.org'
ruby '2.4.0' git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.0', '>= 5.0.0.1' gem 'rails', '~> 5.2.4.4'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use postgres as the database for Active Record
gem 'pg'
# Use Puma as the app server # Use Puma as the app server
gem 'puma', '~> 3.0' gem 'puma', '~> 3.12'
# Use SCSS for stylesheets # Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0' gem 'sassc-rails'
# Use Uglifier as compressor for JavaScript assets # Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0' gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views # Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2' gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes # See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby # gem 'mini_racer', platforms: :ruby
# Use jquery as the JavaScript library # Use jquery as the JavaScript library
gem 'jquery-rails' gem 'jquery-rails', '~> 4.4'
gem 'jquery-ui-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5' gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5' gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production # Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0' # gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password # Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7' gem 'bcrypt', '~> 3.1.7'
# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.1.0', require: false
gem 'sprockets', '< 4.0.0'
# Authentication.
gem 'omniauth'
gem 'omniauth-twitter'
gem 'omniauth-google-oauth2'
gem 'omniauth_openid_connect'
gem 'omniauth-bn-launcher', '~> 0.1.3'
gem 'net-ldap'
gem 'bn-ldap-authentication', '~> 0.1.4'
gem 'omniauth-bn-office365', '~> 0.1.1'
# BigBlueButton API wrapper.
gem 'bigbluebutton-api-ruby', git: 'https://github.com/mconf/bigbluebutton-api-ruby.git', branch: 'master'
# Front-end.
gem 'bootstrap', '~> 4.3.1'
gem 'tabler-rubygem', git: 'https://github.com/blindsidenetworks/tabler-rubygem.git', tag: '0.1.4.1'
gem 'pagy'
gem 'font-awesome-sass', '~> 5.9.0'
# For detecting the users preferred language.
gem 'http_accept_language'
# Use Capistrano for deployment # Use Capistrano for deployment
# gem 'capistrano-rails', group: :development # gem 'capistrano-rails', group: :development
# Markdown parsing.
gem 'redcarpet'
# For limiting access based on user roles
gem 'cancancan', '~> 2.0'
# Active Storage gems
gem 'aws-sdk-s3', '~> 1.75'
gem 'google-cloud-storage', '~> 1.26'
gem 'pluck_to_hash', '~> 1.0.2'
group :production do
# Use a postgres database in production.
gem 'pg', '~> 0.18'
gem 'sequel'
# For a better logging library in production
gem "lograge"
# Use for the cache store in production
gem 'redis'
gem 'hiredis'
end
# Ruby linting.
gem 'rubocop'
group :development, :test do group :development, :test do
# For environment configuration
gem 'dotenv-rails'
# Call 'byebug' anywhere in the code to stop execution and get a debugger console # Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: :mri gem 'byebug', platform: :mri
# Environment configuration.
gem 'dotenv-rails'
# Use a sqlite database in test and development.
gem 'sqlite3', '~> 1.3.6'
end
group :test do
# Include Rspec and other testing utilities.
gem 'rspec-rails', '~> 3.7'
gem 'action-cable-testing'
gem 'rails-controller-testing'
gem 'shoulda-matchers', '~> 3.1'
gem 'faker'
gem "factory_bot_rails"
gem 'webmock'
end end
group :development do group :development do
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code. # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console' gem 'web-console', '>= 3.3.0'
gem 'listen', '~> 3.0.5' gem 'listen', '~> 3.0.5'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring' gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-watcher-listen', '~> 2.0.0'
end end
group :test do gem 'remote_syslog_logger'
gem 'mocha'
gem 'simplecov', :require => false
end
group :production do
# For more condensed logging
gem "lograge"
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'tzinfo-data'
gem 'omniauth', '1.6.1' gem 'coveralls', require: false
gem 'omniauth-twitter', '1.2.1'
gem 'omniauth-google-oauth2', '0.4.1'
gem 'omniauth-ldap'
gem 'bigbluebutton-api-ruby' gem 'random_password'
gem 'bootstrap-sass', '3.3.0.0' # Adds helpers for the Google reCAPTCHA API
gem 'bootstrap-social-rails', '~> 4.12' gem "recaptcha"
gem 'font-awesome-sass', '4.7.0'
gem 'jquery-ui-rails'
gem 'jquery-datatables-rails', '~> 3.4.0'
gem 'rails-timeago', '~> 2.0'
gem 'http_accept_language' gem 'i18n-language-mapping', '~> 0.1.1'
# For sending slack notifications.
gem 'slack-notifier'
# For landing background image uploading.
gem 'paperclip', '~> 5.1'
# For uploading recordings to Youtube.
gem 'yt', '~> 0.28.0'
# Simple HTTP client.
gem 'faraday'
# For SAML authentication
gem 'omniauth-saml'
# For device detection to determine BigBlueButton client.
gem 'browser'
+412 -236
View File
@@ -1,57 +1,110 @@
GIT
remote: https://github.com/blindsidenetworks/tabler-rubygem.git
revision: 4c16e6dc930f6b92dec093abaf9652d768b46d97
tag: 0.1.4.1
specs:
tabler-rubygem (0.1.4.1)
autoprefixer-rails (>= 6.0.3)
GIT
remote: https://github.com/mconf/bigbluebutton-api-ruby.git
revision: 91dc495324a6b7e162773227ec3650f8a5b39c50
branch: master
specs:
bigbluebutton-api-ruby (1.7.0)
childprocess (>= 1.0.1)
ffi (>= 1.9.24)
json (>= 1.8.6)
nokogiri (>= 1.10.4)
rack (>= 1.6.11)
rubyzip (>= 1.3.0)
xml-simple (~> 1.1)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (5.0.7) action-cable-testing (0.6.1)
actionpack (= 5.0.7) actioncable (>= 5.0)
nio4r (>= 1.2, < 3.0) actioncable (5.2.4.4)
websocket-driver (~> 0.6.1) actionpack (= 5.2.4.4)
actionmailer (5.0.7) nio4r (~> 2.0)
actionpack (= 5.0.7) websocket-driver (>= 0.6.1)
actionview (= 5.0.7) actionmailer (5.2.4.4)
activejob (= 5.0.7) actionpack (= 5.2.4.4)
actionview (= 5.2.4.4)
activejob (= 5.2.4.4)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (5.0.7) actionpack (5.2.4.4)
actionview (= 5.0.7) actionview (= 5.2.4.4)
activesupport (= 5.0.7) activesupport (= 5.2.4.4)
rack (~> 2.0) rack (~> 2.0, >= 2.0.8)
rack-test (~> 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.0.7) actionview (5.2.4.4)
activesupport (= 5.0.7) activesupport (= 5.2.4.4)
builder (~> 3.1) builder (~> 3.1)
erubis (~> 2.7.0) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3) rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.0.7) activejob (5.2.4.4)
activesupport (= 5.0.7) activesupport (= 5.2.4.4)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (5.0.7) activemodel (5.2.4.4)
activesupport (= 5.0.7) activesupport (= 5.2.4.4)
activerecord (5.0.7) activerecord (5.2.4.4)
activemodel (= 5.0.7) activemodel (= 5.2.4.4)
activesupport (= 5.0.7) activesupport (= 5.2.4.4)
arel (~> 7.0) arel (>= 9.0)
activesupport (5.0.7) activestorage (5.2.4.4)
actionpack (= 5.2.4.4)
activerecord (= 5.2.4.4)
marcel (~> 0.3.1)
activesupport (5.2.4.4)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
minitest (~> 5.1) minitest (~> 5.1)
tzinfo (~> 1.1) tzinfo (~> 1.1)
arel (7.1.4) addressable (2.7.0)
bigbluebutton-api-ruby (1.6.0) public_suffix (>= 2.0.2, < 5.0)
xml-simple (~> 1.1) aes_key_wrap (1.1.0)
bindex (0.5.0) arel (9.0.0)
bootstrap-sass (3.3.0.0) ast (2.4.0)
sass (~> 3.2) attr_required (1.0.1)
bootstrap-social-rails (4.12.0) autoprefixer-rails (9.7.6)
railties (>= 3.1) execjs
browser (2.5.2) aws-eventstream (1.1.0)
builder (3.2.3) aws-partitions (1.343.0)
byebug (9.1.0) aws-sdk-core (3.104.1)
climate_control (0.2.0) aws-eventstream (~> 1, >= 1.0.2)
cocaine (0.5.8) aws-partitions (~> 1, >= 1.239.0)
climate_control (>= 0.0.3, < 1.0) aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.36.0)
aws-sdk-core (~> 3, >= 3.99.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.75.0)
aws-sdk-core (~> 3, >= 3.104.1)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.1)
aws-eventstream (~> 1, >= 1.0.2)
bcrypt (3.1.13)
bindata (2.4.8)
bindex (0.8.1)
bn-ldap-authentication (0.1.4)
net-ldap (~> 0)
bootsnap (1.4.6)
msgpack (~> 1.0)
bootstrap (4.3.1)
autoprefixer-rails (>= 9.1.0)
popper_js (>= 1.14.3, < 2)
sassc-rails (>= 2.0.0)
builder (3.2.4)
byebug (11.1.3)
cancancan (2.3.0)
childprocess (4.0.0)
coffee-rails (4.2.2) coffee-rails (4.2.2)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
railties (>= 4.0.0) railties (>= 4.0.0)
@@ -59,281 +112,404 @@ GEM
coffee-script-source coffee-script-source
execjs execjs
coffee-script-source (1.12.2) coffee-script-source (1.12.2)
concurrent-ruby (1.0.5) concurrent-ruby (1.1.7)
concurrent-ruby (1.0.5-java) coveralls (0.8.23)
crass (1.0.4) json (>= 1.8, < 3)
docile (1.1.5) simplecov (~> 0.16.1)
dotenv (2.2.1) term-ansicolor (~> 1.3)
dotenv-rails (2.2.1) thor (>= 0.19.4, < 2.0)
dotenv (= 2.2.1) tins (~> 1.6)
railties (>= 3.2, < 5.2) crack (0.4.3)
erubis (2.7.0) safe_yaml (~> 1.0.0)
crass (1.0.6)
declarative (0.0.20)
declarative-option (0.1.0)
diff-lcs (1.3)
digest-crc (0.6.1)
rake (~> 13.0)
docile (1.3.2)
dotenv (2.7.5)
dotenv-rails (2.7.5)
dotenv (= 2.7.5)
railties (>= 3.2, < 6.1)
erubi (1.9.0)
execjs (2.7.0) execjs (2.7.0)
faraday (0.12.2) factory_bot (5.2.0)
activesupport (>= 4.2.0)
factory_bot_rails (5.2.0)
factory_bot (~> 5.2.0)
railties (>= 4.2.0)
faker (2.11.0)
i18n (>= 1.6, < 2)
faraday (1.0.1)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
ffi (1.9.18) ffi (1.12.2)
ffi (1.9.18-java) font-awesome-sass (5.9.0)
ffi (1.9.18-x64-mingw32) sassc (>= 1.11)
ffi (1.9.18-x86-mingw32) globalid (0.4.2)
font-awesome-sass (4.7.0)
sass (>= 3.2)
globalid (0.4.1)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
hashie (3.5.7) google-api-client (0.42.1)
addressable (~> 2.5, >= 2.5.1)
googleauth (~> 0.9)
httpclient (>= 2.8.1, < 3.0)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
signet (~> 0.12)
google-cloud-core (1.5.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.3.3)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.0.1)
google-cloud-storage (1.26.2)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-api-client (~> 0.33)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
mini_mime (~> 1.0)
googleauth (0.13.0)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (~> 0.14)
hashdiff (1.0.1)
hashie (4.1.0)
hiredis (0.6.3)
http_accept_language (2.1.1) http_accept_language (2.1.1)
i18n (1.0.1) httpclient (2.8.3)
i18n (1.8.5)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
jbuilder (2.7.0) i18n-language-mapping (0.1.2)
activesupport (>= 4.2.0) jbuilder (2.10.0)
multi_json (>= 1.2) activesupport (>= 5.0.0)
jquery-datatables-rails (3.4.0) jmespath (1.4.0)
actionpack (>= 3.1) jquery-rails (4.4.0)
jquery-rails
railties (>= 3.1)
sass-rails
jquery-rails (4.3.1)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
jquery-ui-rails (6.0.1) jquery-ui-rails (6.0.1)
railties (>= 3.2.16) railties (>= 3.2.16)
json (1.8.6) json (2.3.0)
json (1.8.6-java) json-jwt (1.13.0)
jwt (1.5.6) activesupport (>= 4.2)
libv8 (3.16.14.19) aes_key_wrap
bindata
jwt (2.2.1)
listen (3.0.8) listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4) rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7) rb-inotify (~> 0.9, >= 0.9.7)
lograge (0.9.0) lograge (0.11.2)
actionpack (>= 4) actionpack (>= 4)
activesupport (>= 4) activesupport (>= 4)
railties (>= 4) railties (>= 4)
request_store (~> 1.0) request_store (~> 1.0)
loofah (2.2.2) loofah (2.7.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.0) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
metaclass (0.0.4) marcel (0.3.3)
method_source (0.9.0) mimemagic (~> 0.3.2)
mime-types (3.1) memoist (0.16.2)
mime-types-data (~> 3.2015) method_source (1.0.0)
mime-types-data (3.2016.0521) mimemagic (0.3.5)
mimemagic (0.3.2) mini_mime (1.0.2)
mini_mime (1.0.0) mini_portile2 (2.5.0)
mini_portile2 (2.3.0) minitest (5.14.2)
minitest (5.11.3) msgpack (1.3.3)
mocha (1.3.0) multi_json (1.14.1)
metaclass (~> 0.0.1)
multi_json (1.13.1)
multi_xml (0.6.0) multi_xml (0.6.0)
multipart-post (2.0.0) multipart-post (2.1.1)
net-ldap (0.16.1) net-ldap (0.16.2)
nio4r (2.3.1) nio4r (2.5.4)
nio4r (2.3.1-java) nokogiri (1.11.1)
nokogiri (1.8.2) mini_portile2 (~> 2.5.0)
mini_portile2 (~> 2.3.0) racc (~> 1.4)
nokogiri (1.8.2-java)
nokogiri (1.8.2-x64-mingw32)
mini_portile2 (~> 2.3.0)
nokogiri (1.8.2-x86-mingw32)
mini_portile2 (~> 2.3.0)
oauth (0.5.4) oauth (0.5.4)
oauth2 (1.4.0) oauth2 (1.4.4)
faraday (>= 0.8, < 0.13) faraday (>= 0.8, < 2.0)
jwt (~> 1.0) jwt (>= 1.0, < 3.0)
multi_json (~> 1.3) multi_json (~> 1.3)
multi_xml (~> 0.5) multi_xml (~> 0.5)
rack (>= 1.2, < 3) rack (>= 1.2, < 3)
omniauth (1.6.1) omniauth (1.9.1)
hashie (>= 3.4.6, < 3.6.0) hashie (>= 3.4.6)
rack (>= 1.6.2, < 3) rack (>= 1.6.2, < 3)
omniauth-google-oauth2 (0.4.1) omniauth-bn-launcher (0.1.3)
jwt (~> 1.5.2) omniauth (~> 1.3, >= 1.3.2)
multi_json (~> 1.3) omniauth-oauth2 (= 1.5.0)
omniauth-bn-office365 (0.1.1)
omniauth (>= 1.3.2)
omniauth-oauth2 (>= 1.5.0)
omniauth-google-oauth2 (0.7.0)
jwt (>= 2.0)
omniauth (>= 1.1.1) omniauth (>= 1.1.1)
omniauth-oauth2 (>= 1.3.1) omniauth-oauth2 (>= 1.5)
omniauth-ldap (1.0.5)
net-ldap (~> 0.12)
omniauth (~> 1.0)
pyu-ruby-sasl (~> 0.0.3.2)
rubyntlm (~> 0.3.4)
omniauth-oauth (1.1.0) omniauth-oauth (1.1.0)
oauth oauth
omniauth (~> 1.0) omniauth (~> 1.0)
omniauth-oauth2 (1.5.0) omniauth-oauth2 (1.5.0)
oauth2 (~> 1.1) oauth2 (~> 1.1)
omniauth (~> 1.2) omniauth (~> 1.2)
omniauth-saml (1.8.1) omniauth-twitter (1.4.0)
omniauth (~> 1.3)
ruby-saml (~> 1.4, >= 1.4.3)
omniauth-twitter (1.2.1)
json (~> 1.3)
omniauth-oauth (~> 1.1) omniauth-oauth (~> 1.1)
paperclip (5.2.1) rack
activemodel (>= 4.2.0) omniauth_openid_connect (0.3.5)
activesupport (>= 4.2.0) addressable (~> 2.5)
cocaine (~> 0.5.5) omniauth (~> 1.9)
mime-types openid_connect (~> 1.1)
mimemagic (~> 0.3.0) openid_connect (1.2.0)
pg (1.0.0) activemodel
pg (1.0.0-x64-mingw32) attr_required (>= 1.0.0)
pg (1.0.0-x86-mingw32) json-jwt (>= 1.5.0)
puma (3.11.2) rack-oauth2 (>= 1.6.1)
puma (3.11.2-java) swd (>= 1.0.0)
pyu-ruby-sasl (0.0.3.3) tzinfo
rack (2.0.5) validate_email
rack-test (0.6.3) validate_url
rack (>= 1.0) webfinger (>= 1.0.1)
rails (5.0.7) os (1.1.0)
actioncable (= 5.0.7) pagy (3.8.1)
actionmailer (= 5.0.7) parallel (1.19.1)
actionpack (= 5.0.7) parser (2.7.1.3)
actionview (= 5.0.7) ast (~> 2.4.0)
activejob (= 5.0.7) pg (0.21.0)
activemodel (= 5.0.7) pluck_to_hash (1.0.2)
activerecord (= 5.0.7) activerecord (>= 4.0.2)
activesupport (= 5.0.7) activesupport (>= 4.0.2)
popper_js (1.16.0)
public_suffix (4.0.5)
puma (3.12.6)
racc (1.5.2)
rack (2.2.3)
rack-oauth2 (1.16.0)
activesupport
attr_required
httpclient
json-jwt (>= 1.11.0)
rack (>= 2.1.0)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.4.4)
actioncable (= 5.2.4.4)
actionmailer (= 5.2.4.4)
actionpack (= 5.2.4.4)
actionview (= 5.2.4.4)
activejob (= 5.2.4.4)
activemodel (= 5.2.4.4)
activerecord (= 5.2.4.4)
activestorage (= 5.2.4.4)
activesupport (= 5.2.4.4)
bundler (>= 1.3.0) bundler (>= 1.3.0)
railties (= 5.0.7) railties (= 5.2.4.4)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.4)
actionpack (>= 5.0.1.x)
actionview (>= 5.0.1.x)
activesupport (>= 5.0.1.x)
rails-dom-testing (2.0.3) rails-dom-testing (2.0.3)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.0.4) rails-html-sanitizer (1.3.0)
loofah (~> 2.2, >= 2.2.2) loofah (~> 2.3)
rails-timeago (2.16.0) railties (5.2.4.4)
actionpack (>= 3.1) actionpack (= 5.2.4.4)
activesupport (>= 3.1) activesupport (= 5.2.4.4)
railties (5.0.7)
actionpack (= 5.0.7)
activesupport (= 5.0.7)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.19.0, < 2.0)
rake (12.3.1) rainbow (3.0.0)
rb-fsevent (0.10.2) rake (13.0.1)
rb-inotify (0.9.10) random_password (0.1.1)
ffi (>= 0.5.0, < 2) rb-fsevent (0.10.4)
ref (2.0.0) rb-inotify (0.10.1)
request_store (1.4.0) ffi (~> 1.0)
recaptcha (5.5.0)
json
redcarpet (3.5.0)
redis (4.1.4)
remote_syslog_logger (1.0.4)
syslog_protocol
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
request_store (1.5.0)
rack (>= 1.4) rack (>= 1.4)
ruby-saml (1.4.3) retriable (3.1.2)
nokogiri (>= 1.5.10) rexml (3.2.4)
rubyntlm (0.3.4) rspec-core (3.9.2)
sass (3.5.5) rspec-support (~> 3.9.3)
sass-listen (~> 4.0.0) rspec-expectations (3.9.2)
sass-listen (4.0.0) diff-lcs (>= 1.2.0, < 2.0)
rb-fsevent (~> 0.9, >= 0.9.4) rspec-support (~> 3.9.0)
rb-inotify (~> 0.9, >= 0.9.7) rspec-mocks (3.9.1)
sass-rails (5.0.7) diff-lcs (>= 1.2.0, < 2.0)
railties (>= 4.0.0, < 6) rspec-support (~> 3.9.0)
sass (~> 3.1) rspec-rails (3.9.1)
sprockets (>= 2.8, < 4.0) actionpack (>= 3.0)
sprockets-rails (>= 2.0, < 4.0) activesupport (>= 3.0)
tilt (>= 1.1, < 3) railties (>= 3.0)
simplecov (0.15.1) rspec-core (~> 3.9.0)
docile (~> 1.1.0) rspec-expectations (~> 3.9.0)
rspec-mocks (~> 3.9.0)
rspec-support (~> 3.9.0)
rspec-support (3.9.3)
rubocop (0.84.0)
parallel (~> 1.10)
parser (>= 2.7.0.1)
rainbow (>= 2.2.2, < 4.0)
rexml
rubocop-ast (>= 0.0.3)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 2.0)
rubocop-ast (0.0.3)
parser (>= 2.7.0.1)
ruby-progressbar (1.10.1)
rubyzip (2.3.0)
safe_yaml (1.0.5)
sassc (2.3.0)
ffi (~> 1.9)
sassc-rails (2.1.2)
railties (>= 4.0.0)
sassc (>= 2.0)
sprockets (> 3.0)
sprockets-rails
tilt
sequel (5.32.0)
shoulda-matchers (3.1.3)
activesupport (>= 4.0.0)
signet (0.14.0)
addressable (~> 2.3)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3) json (>= 1.8, < 3)
simplecov-html (~> 0.10.0) simplecov-html (~> 0.10.0)
simplecov-html (0.10.2) simplecov-html (0.10.2)
slack-notifier (2.3.2) spring (2.1.0)
spring (2.0.2)
activesupport (>= 4.2)
spring-watcher-listen (2.0.1) spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0) listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0) spring (>= 1.2, < 3.0)
sprockets (3.7.1) sprockets (3.7.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.2.1) sprockets-rails (3.2.2)
actionpack (>= 4.0) actionpack (>= 4.0)
activesupport (>= 4.0) activesupport (>= 4.0)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sqlite3 (1.3.13) sqlite3 (1.3.13)
sqlite3 (1.3.13-x64-mingw32) swd (1.2.0)
sqlite3 (1.3.13-x86-mingw32) activesupport (>= 3)
sqlite3 (1.3.13-x86-mswin32-60) attr_required (>= 0.0.5)
therubyracer (0.12.3) httpclient (>= 2.4)
libv8 (~> 3.16.14.15) sync (0.5.0)
ref syslog_protocol (0.9.2)
thor (0.20.0) term-ansicolor (1.7.1)
tins (~> 1.0)
thor (1.0.1)
thread_safe (0.3.6) thread_safe (0.3.6)
thread_safe (0.3.6-java) tilt (2.0.10)
tilt (2.0.8) tins (1.25.0)
turbolinks (5.1.0) sync
turbolinks-source (~> 5.1) turbolinks (5.2.1)
turbolinks-source (5.1.0) turbolinks-source (~> 5.2)
tzinfo (1.2.5) turbolinks-source (5.2.0)
tzinfo (1.2.7)
thread_safe (~> 0.1) thread_safe (~> 0.1)
tzinfo-data (1.2017.3) tzinfo-data (1.2020.1)
tzinfo (>= 1.0.0) tzinfo (>= 1.0.0)
uglifier (4.1.3) uber (0.1.0)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
web-console (3.5.1) unicode-display_width (1.7.0)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
validate_url (1.0.13)
activemodel (>= 3.0.0)
public_suffix
web-console (3.7.0)
actionview (>= 5.0) actionview (>= 5.0)
activemodel (>= 5.0) activemodel (>= 5.0)
bindex (>= 0.4.0) bindex (>= 0.4.0)
railties (>= 5.0) railties (>= 5.0)
websocket-driver (0.6.5) webfinger (1.1.0)
websocket-extensions (>= 0.1.0)
websocket-driver (0.6.5-java)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)
xml-simple (1.1.5)
yt (0.28.5)
activesupport activesupport
httpclient (>= 2.4)
webmock (3.8.3)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.7.3)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
xml-simple (1.1.5)
PLATFORMS PLATFORMS
java
ruby ruby
x64-mingw32
x86-mingw32
x86-mswin32
DEPENDENCIES DEPENDENCIES
bigbluebutton-api-ruby action-cable-testing
bootstrap-sass (= 3.3.0.0) aws-sdk-s3 (~> 1.75)
bootstrap-social-rails (~> 4.12) bcrypt (~> 3.1.7)
browser bigbluebutton-api-ruby!
bn-ldap-authentication (~> 0.1.4)
bootsnap (>= 1.1.0)
bootstrap (~> 4.3.1)
byebug byebug
cancancan (~> 2.0)
coffee-rails (~> 4.2) coffee-rails (~> 4.2)
coveralls
dotenv-rails dotenv-rails
faraday factory_bot_rails
font-awesome-sass (= 4.7.0) faker
font-awesome-sass (~> 5.9.0)
google-cloud-storage (~> 1.26)
hiredis
http_accept_language http_accept_language
i18n-language-mapping (~> 0.1.1)
jbuilder (~> 2.5) jbuilder (~> 2.5)
jquery-datatables-rails (~> 3.4.0) jquery-rails (~> 4.4)
jquery-rails
jquery-ui-rails jquery-ui-rails
listen (~> 3.0.5) listen (~> 3.0.5)
lograge lograge
mocha net-ldap
omniauth (= 1.6.1) omniauth
omniauth-google-oauth2 (= 0.4.1) omniauth-bn-launcher (~> 0.1.3)
omniauth-ldap omniauth-bn-office365 (~> 0.1.1)
omniauth-saml omniauth-google-oauth2
omniauth-twitter (= 1.2.1) omniauth-twitter
paperclip (~> 5.1) omniauth_openid_connect
pg pagy
puma (~> 3.0) pg (~> 0.18)
rails (~> 5.0.0, >= 5.0.0.1) pluck_to_hash (~> 1.0.2)
rails-timeago (~> 2.0) puma (~> 3.12)
sass-rails (~> 5.0) rails (~> 5.2.4.4)
simplecov rails-controller-testing
slack-notifier random_password
recaptcha
redcarpet
redis
remote_syslog_logger
rspec-rails (~> 3.7)
rubocop
sassc-rails
sequel
shoulda-matchers (~> 3.1)
spring spring
spring-watcher-listen (~> 2.0.0) spring-watcher-listen (~> 2.0.0)
sqlite3 sprockets (< 4.0.0)
therubyracer sqlite3 (~> 1.3.6)
tabler-rubygem!
turbolinks (~> 5) turbolinks (~> 5)
tzinfo-data tzinfo-data
uglifier (>= 1.3.0) uglifier (>= 1.3.0)
web-console web-console (>= 3.3.0)
yt (~> 0.28.0) webmock
RUBY VERSION
ruby 2.4.0p0
BUNDLED WITH
1.16.1
+165
View File
@@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
+21 -16
View File
@@ -1,31 +1,36 @@
# Greenlight # Greenlight
GreenLight is a simple (but powerful) front-end interface for your BigBlueButton server. At its core, GreenLight provides a minimalistic web-based application that lets users ![Travis CI](https://travis-ci.org/bigbluebutton/greenlight.svg?branch=master)
![Coverage
!Status](https://coveralls.io/repos/github/bigbluebutton/greenlight/badge.svg?branch=master)
![Docker Pulls](https://img.shields.io/docker/pulls/bigbluebutton/greenlight.svg)
* Create a meeting Greenlight is a simple front-end interface for your BigBlueButton server. At its heart, Greenlight provides a minimalistic web-based application that allows users to:
* Invite others to the meeting
* Join a meeting
Furthermore, if you configure GreenLight to use either Google, Twitter (both via OAuth2) or LDAP for authentication, users can login to record meetings and manage recordings. * Signup/Login with Google, Office365, OpenID Connect, or through the application itself.
* Manage your account settings and user preferences.
* Create and manage your own personal rooms ([BigBlueButton](https://github.com/bigbluebutton/bigbluebutton) sessions).
* Invite others to your room using a simple URL.
* View recordings and share them with others.
## Overview video Interested? Try Greenlight out on our [demo server](https://demo.bigbluebutton.org/gl)!
For a overview of how GreenLight works, see the following video Greenlight is also completely configurable. This means you can turn on/off features to make Greenlight fit your specific use case. For more information on Greenlight and its features, see our [documentation](http://docs.bigbluebutton.org/greenlight/gl-install.html).
[![GreenLight Overview](https://img.youtube.com/vi/yGX3JCv7OVM/0.jpg)](https://youtu.be/yGX3JCv7OVM) For a overview of how Greenlight works, checkout our Introduction to Greenlight Video:
[![GreenLight Overview](https://img.youtube.com/vi/Hso8yLzkqj8/0.jpg)](https://youtu.be/Hso8yLzkqj8)
## Installation on the BigBlueButton server ## Installation on a BigBlueButton Server
We designed GreenLight to install on a [BigBlueButton 1.1-beta](http://docs.bigbluebutton.org/greenlight-v1.html) (or later) server. This means you don't need a separate server to run GreenLight.
For more informaiton see [Installing GreenLight](http://docs.bigbluebutton.org/greenlight-v1.html#installing-greenlight). Greenlight is designed to work on a [BigBlueButton 2.0](https://github.com/bigbluebutton/bigbluebutton) (or later) server.
# Source Code For information on installing Greenlight, checkout our [Installing Greenlight on a BigBlueButton Server](http://docs.bigbluebutton.org/greenlight/gl-install.html#installing-on-a-bigbluebutton-server) documentation.
GreenLight is a rails 5 application. ## Source Code & Contributing
Many developers already know Rails well, and we wanted to create both a full front-end to BigBlueButton but also a reference implementation of how to fully leverage the [BigBlueButton API](http://docs.bigbluebutton.org/dev/api.html). Greenlight is built using Ruby on Rails. Many developers already know Rails well, and we wanted to create both a full front-end to BigBlueButton but also a reference implementation of how to fully leverage the [BigBlueButton API](http://docs.bigbluebutton.org/dev/api.html).
We invite you to build upon GreenLight and help make it better. See [Contributing to BigBlueButton](http://docs.bigbluebutton.org/support/faq.html#contributing-to-bigbluebutton). We invite you to build upon Greenlight and help make it better. See [Contributing to BigBlueButton](http://docs.bigbluebutton.org/support/faq.html#contributing-to-bigbluebutton).
We invite your feedback, questions, and suggests about GreenLight too. Please post them to the [developer mailing list](https://groups.google.com/forum/#!forum/bigbluebutton-dev). We invite your feedback, questions, and suggests about Greenlight too. Please post them to the [developer mailing list](https://groups.google.com/forum/#!forum/bigbluebutton-dev).
+9
View File
@@ -1,6 +1,15 @@
# frozen_string_literal: true
# Add your own tasks in files placed in lib/tasks ending in .rake, # Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require_relative 'config/application' require_relative 'config/application'
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << "test"
t.test_files = FileList['test/test*.rb']
t.verbose = true
end
Rails.application.load_tasks Rails.application.load_tasks
+11
View File
@@ -0,0 +1,11 @@
# Security Policy
## Supported Versions
We support only the latest version of this project.
## Reporting a Vulnerability
If you think youve found a security issue with BigBlueButton or Greenlight, we ask that you do a [responsible disclosure](https://en.wikipedia.org/wiki/Responsible_disclosure) and e-mail us directly at security@bigbluebutton.org.
We will respond to you quickly, work with you to examine the scope of the issue, and give priority to fixing it as soon as possible.
+1 -1
View File
@@ -1,6 +1,6 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. // BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
// //
// Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). // Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
// //
// This program is free software; you can redistribute it and/or modify it under the // 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 // terms of the GNU Lesser General Public License as published by the Free Software
+93
View File
@@ -0,0 +1,93 @@
Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name Source.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

-236
View File
@@ -1,236 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
// Handles live updating and initial population of the previous meetings and active meetings lists on
// the landing page using custom Actioncable events.
var MEETINGS = {}
var WAITING = {}
var LOADING_DELAY = 1750 // milliseconds.
// Updates the previous meetings section.
var updatePreviousMeetings = function(){
$("ul.previously-joined li").each(function(idx, li) {
var previous_meeting = $(li);
if(Object.keys(MEETINGS).indexOf(previous_meeting.text()) > -1){
previous_meeting.remove()
}
});
}
// Ignore excess on either side of user_id.
var trimUserId = function(user_id){
components = user_id.split('_')
return components.sort(function (a, b) {return b.length - a.length;})[0]
}
// Finds a user by their user_id.
var findByUserId = function(users, user_id){
for(i = 0; i < users.length; i++){
if(trimUserId(users[i]['user_id']) == trimUserId(user_id)){
return i
}
}
return undefined
}
// Adds a user to a meeting.
var addUser = function(data){
if(data['role'] == 'MODERATOR'){
MEETINGS[data['meeting']]['moderators'].push({'name': data['user'], 'user_id': data['user_id']})
} else {
MEETINGS[data['meeting']]['participants'].push({'name':data['user'], 'user_id': data['user_id']})
}
updateMeetingText(MEETINGS[data['meeting']])
}
// Removes a user from a meeting.
var removeUser = function(data){
user = findByUserId(MEETINGS[data['meeting']]['moderators'], data['user_id'])
if(user == undefined){
user = findByUserId(MEETINGS[data['meeting']]['participants'], data['user_id']);
if(user == undefined){ return; }
MEETINGS[data['meeting']]['participants'].splice(user, 1);
} else {
MEETINGS[data['meeting']]['moderators'].splice(user, 1);
}
updateMeetingText(MEETINGS[data['meeting']])
}
// Updates the display text for an active meeting.
var updateMeetingText = function(m){
// If a meeting has a moderators property, it is running.
var body;
if(m.hasOwnProperty('moderators')){
var list;
if(m['moderators'].length + m['participants'].length == 0){
list = '(empty)'
} else {
list = m['moderators'].map(function(x){ return x['name']; }).join('(mod), ') +
(m['moderators'].length > 0 ? '(mod)' : '') +
(m['participants'].length > 0 && m['moderators'].length != 0 ? ', ' : '') +
(m['participants'].map(function(x){ return x['name']; }).join(', '))
}
body = '<a>' + m['name'] + '</a><i>: ' + list + '</i>'
// Otherwise it hasn't started (users waiting the join).
} else {
body = '<a>' + m['name'] + '</a><i> (not yet started): ' + m['users'].join(', ') + '</i>'
}
// If the item doesn't exist, add it and set up join meeting event.
if($("li[id='" + m['name'].replace(' ', '_') + "']").length == 0){
var meeting_item = $("<li>" + body + "</li>")
meeting_item.attr('id', m['name'].replace(' ', '_'))
$('.actives').append(meeting_item);
// Set up join on click.
meeting_item.click(function(){
joinMeeting(m['name']);
});
// Otherwise, just change the body.
} else {
$("li[id='" + m['name'].replace(' ', '_') + "']").html(body)
}
}
// Initially populates the active meetings when the page loads using the API.
var initialPopulate = function(){
// Only populate on room resources.
var chopped = window.location.href.split('/')
if (!window.location.href.includes('rooms') || chopped[chopped.length - 2] == $('body').data('current-user')) { return; }
$.post((window.location.href + '/statuses').replace('#', ''), {previously_joined: getPreviouslyJoined()})
.done(function(data) {
// Populate waiting meetings.
Object.keys(data['waiting']).forEach(function(key) {
WAITING[key] = {'name': key, 'users': data['waiting'][key]}
updateMeetingText(WAITING[key])
})
// Add the meetings to the active meetings list.
for(var i = 0; i < data['active'].length; i++){
var meeting = data['active'][i]
var name = meeting['name']
var participants = meeting['participants']
var moderators = meeting['moderators']
// Create meeting.
MEETINGS[name] = {'name': name, 'participants': participants, 'moderators': moderators}
updateMeetingText(MEETINGS[name])
}
// Remove from previous meetings if they are active.
updatePreviousMeetings();
$('.hidden-list').show();
$('.active-spinner').hide();
});
}
// Gets a list of known previously joined meetings.
var getPreviouslyJoined = function(){
var joinedMeetings = localStorage.getItem('joinedRooms-' + $('body').data('current-user'));
if (joinedMeetings == '' || joinedMeetings == null){ return []; }
return joinedMeetings.split(',')
}
// Removes an active meeting.
var removeActiveMeeting = function(meeting){
if(meeting){ $("li[id='" + meeting['name'].replace(' ', '_') + "']").remove() }
}
// Directly join a meeting from active meetings.
var joinMeeting = function(meeting_name){
if (meeting_name == undefined || meeting_name == null) { return; }
Meeting.getInstance().setUserName(localStorage.getItem('lastJoinedName'));
Meeting.getInstance().setMeetingId(meeting_name);
var jqxhr = Meeting.getInstance().getJoinMeetingResponse();
if (jqxhr) {
jqxhr.done(function(data) {
if (data.messageKey === 'wait_for_moderator') {
waitForModerator(Meeting.getInstance().getURL());
} else {
$(location).attr("href", data.response.join_url);
}
});
jqxhr.fail(function() {
console.info("meeting join failed");
});
} else {
$('.meeting-user-name').parent().addClass('has-error');
}
}
// Only need to register for logged in users.
$(document).on('turbolinks:load', function(){
if($('body').data('current-user')){
MEETINGS = {}
// Ensure actives is empty.
$('.actives').empty();
if(!App.messages){
// Setup actioncable.
App.messages = App.cable.subscriptions.create('RefreshMeetingsChannel', {
received: function(data) {
console.log('Recieved ' + data['method'] + ' action for ' + data['meeting'] + ' with room id ' + data['room'] + '.')
if(data['room'] == $('body').data('current-user')){
// Handle webhook event.
if(data['method'] == 'create'){
// Create an empty meeting.
MEETINGS[data['meeting']] = {'name': data['meeting'],
'participants': [],
'moderators': []}
updateMeetingText(MEETINGS[data['meeting']])
updatePreviousMeetings();
if (WAITING.hasOwnProperty(data['meeting'])){ delete WAITING[data['meeting']]; }
} else if(data['method'] == 'destroy'){
removeActiveMeeting(MEETINGS[data['meeting']])
PreviousMeetings.uniqueAdd([data['meeting']])
delete MEETINGS[data['meeting']]
} else if(data['method'] == 'join'){
addUser(data)
} else if(data['method'] == 'leave'){
removeUser(data)
} else if(data['method'] == 'waiting'){
// Handle waiting meeting.
if(WAITING.hasOwnProperty(data['meeting'])){
WAITING[data['meeting']]['users'].push(data['user'])
updateMeetingText(WAITING[data['meeting']])
} else {
WAITING[data['meeting']] = {'name': data['meeting'],
'users': [data['user']]}
updateMeetingText(WAITING[data['meeting']])
}
} else if((data['method'] == 'no_longer_waiting') && (WAITING.hasOwnProperty(data['meeting']))){
WAITING[data['meeting']]['users'].splice(WAITING[data['meeting']]['users'].indexOf(data['user']), 1)
updateMeetingText(WAITING[data['meeting']])
if(WAITING[data['meeting']]['users'].length == 0){
removeActiveMeeting(WAITING[data['meeting']])
delete WAITING[data['meeting']]
}
}
}
}
});
}
console.log('Populating active meetings.');
// Short delay to hide the previous meetings population.
setTimeout(initialPopulate, LOADING_DELAY);
}
});
+340
View File
@@ -0,0 +1,340 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
// Only run on the admins page.
if (controller == "admins") {
if(action == "index") {
//clear the role filter if user clicks on the x
$(".clear-role").click(function() {
var search = new URL(location.href).searchParams.get('search')
var url = window.location.pathname + "?page=1"
if (search) {
url += "&search=" + search
}
window.location.replace(url);
})
// Handle selected user tags
$(".manage-users-tab").click(function() {
$(".manage-users-tab").removeClass("selected")
$(this).addClass("selected")
updateTabParams(this.id)
})
$('.selectpicker').selectpicker({
liveSearchPlaceholder: getLocalizedString('javascript.search.start')
});
// Fixes turbolinks issue with bootstrap select
$(window).trigger('load.bs.select.data-api');
// Display merge accounts modal with correct info
$(".merge-user").click(function() {
// Update the path of save button
$("#merge-save-access").attr("data-path", $(this).data("path"))
let userInfo = $(this).data("info")
$("#merge-to").html("") // Clear current inputs
let spanName = document.createElement("span"),
spanEmail = document.createElement("span"),
spanUid = document.createElement("span");
spanName.innerText = userInfo.name
spanEmail.setAttribute('class', 'text-muted d-block')
spanEmail.innerText = userInfo.email
spanUid.setAttribute('class', 'text-muted d-block')
spanUid.innerText = userInfo.uid
$("#merge-to").append(spanName, spanEmail, spanUid)
})
$("#mergeUserModal").on("show.bs.modal", function() {
$(".selectpicker").selectpicker('val','')
})
$(".bootstrap-select").on("click", function() {
$(".bs-searchbox").siblings().hide()
})
$("#merge-user-select ~ button").on("click", function() {
$(".bs-searchbox").siblings().hide()
})
$(".bs-searchbox input").on("input", function() {
if ($(".bs-searchbox input").val() == '' || $(".bs-searchbox input").val().length < 3) {
$(".select-options").remove()
$(".bs-searchbox").siblings().hide()
} else {
// Manually populate the dropdown
$.get($("#merge-user-select").data("path"), { search: $(".bs-searchbox input").val() }, function(users) {
$(".select-options").remove()
if (users.length > 0) {
users.forEach(function(user) {
let opt = document.createElement("option")
$(opt).val(JSON.stringify({uid: user.uid, email: user.email, name: user.name}))
$(opt).text(user.name)
$(opt).addClass("select-options")
$(opt).attr("data-subtext", user.email)
$("#merge-user-select").append(opt)
})
// Only refresh the select dropdown if there are results to show
$('#merge-user-select').selectpicker('refresh');
}
$(".bs-searchbox").siblings().show()
})
}
})
// User selects an option from the Room Access dropdown
$(".bootstrap-select").on("changed.bs.select", function(){
// Get the uid of the selected user
let user = $(".selectpicker").selectpicker('val')
if (user != "") {
let userInfo = JSON.parse(user)
$("#merge-from").html("") // Clear current input
let spanName = document.createElement("span"),
spanEmail = document.createElement("span"),
spanUid = document.createElement("span");
spanName.innerText = userInfo.name
spanEmail.setAttribute('class', 'text-muted d-block')
spanEmail.innerText = userInfo.email
spanUid.setAttribute('class', 'text-muted d-block')
spanUid.id = 'from-uid'
spanUid.innerText = userInfo.uid
$("#merge-from").append(spanName, spanEmail, spanUid)
}
})
}
else if(action == "site_settings"){
var urlParams = new URLSearchParams(window.location.search);
// Only load the colour selectors if on the appearance tab
if (urlParams.get("tab") == null || urlParams.get("tab") == "appearance") {
loadColourSelectors()
}
}
else if (action == "roles"){
// Refreshes the new role modal
$("#newRoleButton").click(function(){
$("#createRoleName").val("")
})
// Updates the colour picker to the correct colour
let role_colour = $("#role-colorinput-regular").data("colour")
$("#role-colorinput-regular").css("background-color", role_colour);
$("#role-colorinput-regular").css("border-color", role_colour);
loadRoleColourSelector(role_colour, $("#role-colorinput-regular").data("disabled"));
// Loads the jquery sortable so users can manually sort roles
$("#rolesSelect").sortable({
items: "a:not(.sort-disabled)",
update: function() {
$.ajax({
url: $(this).data("url"),
type: 'PATCH',
data: $(this).sortable('serialize')
});
}
});
}
}
});
// Change the branding image to the image provided
function changeBrandingImage(path) {
var url = $("#branding-url").val()
$.post(path, {value: url, tab: "appearance"})
}
// Change the Legal URL to the one provided
function changeLegalURL(path) {
var url = $("#legal-url").val()
$.post(path, {value: url, tab: "administration"})
}
// Change the Privacy Policy URL to the one provided
function changePrivacyPolicyURL(path) {
var url = $("#privpolicy-url").val()
$.post(path, {value: url, tab: "administration"})
}
// Display the maintenance Banner
function displayMaintenanceBanner(path) {
var message = $("#maintenance-banner").val()
$.post(path, {value: message, tab: "administration"})
}
// Clear the maintenance Banner
function clearMaintenanceBanner(path) {
$.post(path, {value: "", tab: "administration"})
}
// Change the email mapping to the string provided
function changeEmailMapping(path) {
var url = $("#email-mapping").val()
$.post(path, {value: url, tab: "registration"})
}
function mergeUsers() {
let userToMerge = $("#from-uid").text()
$.post($("#merge-save-access").data("path"), {merge: userToMerge})
}
// Filters by role
function filterRole(role) {
var search = new URL(location.href).searchParams.get('search')
var url = window.location.pathname + "?page=1" + "&role=" + role
if (search) {
url += "&search=" + search
}
window.location.replace(url);
}
function updateTabParams(tab) {
var search_params = new URLSearchParams(window.location.search)
if (window.location.href.includes("tab=")) {
search_params.set("tab", tab)
} else {
search_params.append("tab", tab)
}
search_params.delete("page")
window.location.search = search_params.toString()
}
function loadColourSelectors() {
const pickrRegular = new Pickr({
el: '#colorinput-regular',
theme: 'monolith',
useAsButton: true,
lockOpacity: true,
defaultRepresentation: 'HEX',
closeWithKey: 'Enter',
default: $("#colorinput-regular").css("background-color"),
components: {
palette: true,
preview: true,
hue: true,
interaction: {
input: true,
save: true,
},
},
});
const pickrLighten = new Pickr({
el: '#colorinput-lighten',
theme: 'monolith',
useAsButton: true,
lockOpacity: true,
defaultRepresentation: 'HEX',
closeWithKey: 'Enter',
default: $("#colorinput-lighten").css("background-color"),
components: {
palette: true,
preview: true,
hue: true,
interaction: {
input: true,
save: true,
},
},
});
const pickrDarken = new Pickr({
el: '#colorinput-darken',
theme: 'monolith',
useAsButton: true,
lockOpacity: true,
defaultRepresentation: 'HEX',
closeWithKey: 'Enter',
default: $("#colorinput-darken").css("background-color"),
components: {
palette: true,
preview: true,
hue: true,
interaction: {
input: true,
save: true,
},
},
});
pickrRegular.on("save", (color, instance) => {
$.post($("#coloring-path-regular").val(), {value: color.toHEXA().toString()}).done(function() {
location.reload()
});
})
pickrLighten.on("save", (color, instance) => {
$.post($("#coloring-path-lighten").val(), {value: color.toHEXA().toString(), tab: "appearance"}).done(function() {
location.reload()
});
})
pickrDarken.on("save", (color, instance) => {
$.post($("#coloring-path-darken").val(), {value: color.toHEXA().toString(), tab: "appearance"}).done(function() {
location.reload()
});
})
}
function loadRoleColourSelector(role_colour, disabled) {
if (!disabled) {
const pickrRoleRegular = new Pickr({
el: '#role-colorinput-regular',
theme: 'monolith',
useAsButton: true,
lockOpacity: true,
defaultRepresentation: 'HEX',
closeWithKey: 'Enter',
default: role_colour,
components: {
palette: true,
preview: true,
hue: true,
interaction: {
input: true,
save: true,
},
},
});
// On save update the colour input's background colour and update the role colour input
pickrRoleRegular.on("save", (color, instance) => {
$("#role-colorinput-regular").css("background-color", color.toHEXA().toString());
$("#role-colorinput-regular").css("border-color", color.toHEXA().toString());
$("#role-colour").val(color.toHEXA().toString());
});
}
}
+21 -9
View File
@@ -1,6 +1,6 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. // BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
// //
// Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). // Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
// //
// This program is free software; you can redistribute it and/or modify it under the // 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 // terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,13 +14,25 @@
// You should have received a copy of the GNU Lesser General Public License along // You should have received a copy of the GNU Lesser General Public License along
// with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. // with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
//= require jquery2 // This is a manifest file that'll be compiled into application.js, which will include all the files
//= require jquery-ui // listed below.
//= require dataTables/jquery.dataTables //
//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
//= require rails-timeago-all // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//= require bootstrap-sprockets //
//= require qrcode/qrcode.js // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require turbolinks //= require turbolinks
//= require_self //= require jquery3
//= require tabler
//= require tabler.plugins
//= require jquery_ujs
//= require jquery-ui/widget
//= require jquery-ui/widgets/sortable
//= require pickr.min.js
//= require bootstrap-select.min.js
//= require_tree . //= require_tree .
-19
View File
@@ -1,19 +0,0 @@
# 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 <http://www.gnu.org/licenses/>.
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/
+4 -6
View File
@@ -1,6 +1,6 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. // BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
// //
// Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). // Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
// //
// This program is free software; you can redistribute it and/or modify it under the // 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 // terms of the GNU Lesser General Public License as published by the Free Software
@@ -22,13 +22,11 @@
//= require_tree ./channels //= require_tree ./channels
(function() { (function() {
var protocol = window.location.protocol === "https:" ? "wss://" : "ws://"; var protocol = (window.location.protocol === "https:" ? "wss://" : "ws://");
var host = window.GreenLight.WEBSOCKET_HOST || window.location.host + window.GreenLight.RELATIVE_ROOT; var host = window.GreenLight.WEBSOCKET_HOST || window.location.host + window.GreenLight.RELATIVE_ROOT;
var path = window.GreenLight.WEBSOCKET_PATH || '/cable'; var url = protocol + host + '/cable';
var url = protocol + host + path;
this.App || (this.App = {}); this.App || (this.App = {});
App.cable = ActionCable.createConsumer(url); App.cable = ActionCable.createConsumer(url);
}).call(this); }).call(this);
@@ -1,81 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
(function() {
var sessionStatusRefresh = function(url) {
$.get(url + "/session_status_refresh", function(html) {
$(".center-panel-wrapper").html(html);
displayRoomURL();
});
};
var enableMeetingUpdates = function() {
var meetingId = ''
if (!$(".page-wrapper.rooms").data('main-room')) {
meetingId = $(".page-wrapper.rooms").data('id');
}
App.meeting_update = App.cable.subscriptions.create({
channel: 'MeetingUpdatesChannel',
admin_id: $(".page-wrapper.rooms").data('admin-id'),
meeting_id: meetingId
},
{
received: function(data) {
if (data.action === 'moderator_joined') {
if (!Meeting.getInstance().getModJoined()) {
Meeting.getInstance().setModJoined(true);
if (Meeting.getInstance().getWaitingForMod()) {
loopJoin();
} else {
sessionStatusRefresh($('.meeting-url').val());
showAlert(I18n.meeting_started, 4000);
}
}
} else if (data.action === 'meeting_ended') {
sessionStatusRefresh($('.meeting-url').val());
showAlert(I18n.meeting_ended, 4000);
} else if (data.action === 'user_waiting') {
// show a browser notification only to the owner
if (isRoomOwner()) {
showNotification(I18n.user_waiting_title, {
body: I18n.user_waiting_body.replace(/%{user}/, data.user).replace(/%{meeting}/, '"'+data.meeting_name+'"')
});
}
} else if(data.action === 'unable_to_join') {
showAlert(I18n.unable_to_join_mobile, 6000)
}
}
});
};
var disableMeetingUpdates = function() {
App.meeting_update.unsubscribe();
delete App.meeting_update
};
$(document).on("turbolinks:load", function() {
// disable meeting updates if enabled from a previous page
if (App.meeting_update) {
disableMeetingUpdates();
}
if ($("body[data-controller=landing]").get(0)) {
if ($("body[data-action=rooms]").get(0)) {
enableMeetingUpdates();
}
}
});
}).call(this);
@@ -1,75 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
(function() {
var enableRecordingUpdates = function() {
App.recording_update = App.cable.subscriptions.create({
channel: 'RecordingUpdatesChannel',
admin_id: $(".page-wrapper.rooms").data('admin-id'),
meeting_id: $(".page-wrapper.rooms").data('id')
},
{
received: function(data) {
var recordings = Recordings.getInstance();
var table = recordings.table.api();
var row = table.row("#"+data.id);
if (data.action === 'update') {
var rowData = row.data();
rowData.published = data.published;
rowData.listed = data.listed;
table.row("#"+data.id).data(rowData);
recordings.draw();
var status = data.published ? (data.listed ? 'published' : 'unlisted') : 'unpublished';
showAlert(I18n['recording_'+status], 4000);
} else if (data.action === 'delete') {
row.remove();
recordings.draw();
showAlert(I18n.recording_deleted, 4000);
} else if (data.action === 'create') {
if (isRoomOwner() && row.length == 0) {
recordings.refresh();
showAlert(I18n.recording_created, 4000);
}
}
}
});
};
var disableRecordingUpdates = function() {
App.recording_update.unsubscribe();
delete App.recording_update
};
$(document).on("turbolinks:load", function() {
// disable recording updates if enabled from a previous page
if (App.recording_update) {
disableRecordingUpdates();
}
if ($("body[data-controller=landing]").get(0)) {
if ($("body[data-action=rooms]").get(0)) {
enableRecordingUpdates();
}
}
});
}).call(this);
+37
View File
@@ -0,0 +1,37 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
$("#cookies-agree-button").click(function() {
//create a cookie that lasts 1 year
var cookieDate = new Date();
cookieDate.setFullYear(cookieDate.getFullYear() + 1); //1 year from now
document.cookie = "cookie_consented=true; path=/; expires=" + cookieDate.toUTCString() + ";"
//hide the banner at the bottom
$(".cookies-banner").attr("style","display:none !important")
})
$("#maintenance-close").click(function(event) {
//create a cookie that lasts 1 day
var cookieDate = new Date()
cookieDate.setDate(cookieDate.getDate() + 1) //1 day from now
console.log("maintenance_window=" + $(event.target).data("date") + "; path=/; expires=" + cookieDate.toUTCString() + ";")
document.cookie = "maintenance_window=" + $(event.target).data("date") + "; path=/; expires=" + cookieDate.toUTCString() + ";"
})
})
+57
View File
@@ -0,0 +1,57 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
// Only run on the admins page.
if (controller == "admins" && action == "index") {
// show the modal with the correct form action url
$(".delete-user").click(function(){
$("#delete-confirm").parent().attr("action", $(this).data("path"))
if ($(this).data("delete") == "temp-delete") {
$("#perm-delete").hide()
$("#delete-warning").show()
} else {
$("#perm-delete").show()
$("#delete-warning").hide()
}
})
}
$(".delete-user").click(function(data){
document.getElementById("delete-checkbox").checked = false
$("#delete-confirm").prop("disabled", "disabled")
if ($(data.target).data("delete") == "temp-delete") {
$("#perm-delete").hide()
$("#delete-warning").show()
} else {
$("#perm-delete").show()
$("#delete-warning").hide()
}
})
$("#delete-checkbox").click(function(data){
if (document.getElementById("delete-checkbox").checked) {
$("#delete-confirm").removeAttr("disabled")
} else {
$("#delete-confirm").prop("disabled", "disabled")
}
})
})
@@ -1,6 +1,6 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. // BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
// //
// Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). // Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
// //
// This program is free software; you can redistribute it and/or modify it under the // 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 // terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,10 +14,23 @@
// You should have received a copy of the GNU Lesser General Public License along // You should have received a copy of the GNU Lesser General Public License along
// with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. // with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
.login { $(document).on('turbolinks:load', function(){
.center-panel { // Stores the current url when the user clicks the sign in button
.center-panel-size { $(".sign-in-button").click(function(){
max-width: 400px var url = location.href
} // Add the slash at the end if it's missing
} url += url.endsWith("/") ? "" : "/"
} document.cookie ="return_to=" + url
})
// Checks to see if the user provided an image url and displays it if they did
$("#user-image")
.on("load", function() {
$("#user-image").show()
$("#user-avatar").hide()
})
.on("error", function() {
$("#user-image").hide()
$("#user-avatar").show()
})
})
-297
View File
@@ -1,297 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
/** global: Meeting */
/** global: PreviousMeetings */
/** global: QRCode */
/** global: Recordings */
/** global: Turbolinks */
(function() {
var qrcode;
var waitForModerator = function(url) {
window.localStorage.setItem("waitingName", $('.meeting-user-name').val());
$.post(url + "/wait", {name: $('.meeting-user-name').val()}, function(html) {
$(".center-panel-wrapper").html(html);
});
if (!Meeting.getInstance().getWaitingForMod()) {
Meeting.getInstance().setWaitingForMod(true);
if (Meeting.getInstance().getModJoined()) {
loopJoin();
}
}
};
var init = function() {
Meeting.clear();
var nameInput = $('.meeting-user-name');
if (!nameInput.val()) {
var lastName = window.localStorage.getItem('lastJoinedName');
if (lastName !== 'undefined') {
nameInput.val(lastName);
}
}
// setup event handlers
$('.center-panel-wrapper').on ('click', '.meeting-join', function () {
var name = $('.meeting-user-name').val();
Meeting.getInstance().setUserName(name);
Meeting.getInstance().setMeetingId($(".page-wrapper").data('id'));
// a user name is set, join the user into the session
if (name !== undefined && name !== null) {
var jqxhr = Meeting.getInstance().getJoinMeetingResponse();
if (jqxhr) {
jqxhr.done(function(data) {
if (data.messageKey === 'wait_for_moderator') {
waitForModerator(Meeting.getInstance().getURL());
} else if (data.messageKey === 'ok') {
$(location).attr("href", data.response.join_url);
}
});
jqxhr.fail(function() {
console.info("meeting join failed");
});
} else {
$('.meeting-user-name').parent().addClass('has-error');
}
// if not user name was set it means we must ask for a name
} else {
$(location).attr("href", Meeting.getInstance().getURL());
}
});
$('.center-panel-wrapper').on ('click', '.meeting-start', function () {
Turbolinks.visit($('.meeting-url').val());
});
$('.center-panel-wrapper').on ('input', '.meeting-user-name', function () {
if ($(this).val() === '') {
$(this).parent().addClass('has-error')
} else {
$(this).parent().removeClass('has-error')
}
});
$('.center-panel-wrapper').on ('keypress', '.meeting-user-name', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
$('.meeting-join').click();
}
});
$('.center-panel-wrapper').on ('keypress', '.meeting-name', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
$('.meeting-start').click();
}
});
$('.center-panel-wrapper').on ('click', '.meeting-end', function () {
var jqxhr = Meeting.getInstance().endMeeting();
var btn = $(this);
btn.prop("disabled", true);
jqxhr.fail(function() {
console.info("meeting end failed");
});
});
$('.center-panel-wrapper').on ('click', '.meeting-url-copy', function () {
var meetingURLInput = $('.meeting-url');
// copy URL
meetingURLInput.select();
try {
var success = document.execCommand("copy");
if (success) {
meetingURLInput.blur();
$(this).trigger('hint', [$(this).data('copied-hint')]);
} else {
$(this).trigger('hint', [$(this).data('copy-error')]);
}
} catch (err) {
$(this).trigger('hint', [$(this).data('copy-error')]);
}
});
$('.center-panel-wrapper').on('hint', '.meeting-url-copy', function (event, msg) {
$(this).focus();
$(this).attr('title', msg)
.tooltip('fixTitle')
.tooltip('show')
.attr('title', $(this).data('copy-hint'))
.tooltip('fixTitle');
});
$('.center-panel-wrapper').on('mouseleave', '.meeting-url-copy', function () {
$(this).blur();
});
// button used to send invitations to the meeting (i.e. "mailto:" link)
$('.center-panel-wrapper').on('click', '.meeting-invite', function () {
var meetingURL = Meeting.getInstance().getURL();
var subject = $(this).data("invite-subject");
var body = $(this).data("invite-body").replace("&&URL&&", meetingURL);
var mailto = "mailto:?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body);
window.open(mailto);
});
$('.center-panel-wrapper').on ('click', '.meeting-url-qrcode', function () {
var meetingURL;
try {
meetingURL = $('.meeting-url').val();
if ($('.meeting-url-qrcode-group').is(':empty')) {
// generate code
qrcode = new QRCode($(".meeting-url-qrcode-group")[0], {
text: meetingURL,
width: 128,
height: 128,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.H
});
} else {
// clear the code.
qrcode.clear();
// make another code.
qrcode.makeCode(meetingURL);
}
$(this).trigger('hint', [$(this).data('qrcode-generated-hint')]);
} catch (err) {
$(this).trigger('hint', [$(this).data('qrcode-generate-error')]);
}
});
$('.center-panel-wrapper').on('hint', '.meeting-url-qrcode', function (event, msg) {
$(this).focus();
$(this).attr('title', msg)
.tooltip('fixTitle')
.tooltip('show')
.attr('title', $(this).data('qrcode-generate-hint'))
.tooltip('fixTitle');
});
$('.center-panel-wrapper').on('mouseleave', '.meeting-url-qrcode', function () {
$(this).blur();
});
$('.center-panel-wrapper').on('focus', '.meeting-url', function () {
$(this).select();
});
// only allow ctrl commands
$('.center-panel-wrapper').on('keydown', '.meeting-url', function (event) {
if(!event.ctrlKey) {
event.preventDefault();
}
});
// enable tooltips
var options = {
selector: '.has-tooltip',
container: 'body'
};
$(document).tooltip(options);
options = {
selector: '.bottom-tooltip',
container: 'body',
placement: 'bottom'
};
$(document).tooltip(options);
// focus name input or join button
if ($('.meeting-name').is(':visible')) {
$('.meeting-name').focus();
} else if ($('.meeting-user-name').is(':visible')) {
$('.meeting-user-name').focus();
} else {
$('.meeting-join').focus();
}
};
var initIndex = function() {
$('.center-panel-wrapper').on('input', '.meeting-name', function () {
var newId = $(this).val();
Meeting.getInstance().setMeetingId(newId);
$(".page-wrapper.meetings").data('id', newId);
$('.meeting-url').val(Meeting.getInstance().getURL());
$('.join-meeting-title').text('"'+newId+'"');
if (newId === '') {
$('.invite-join-wrapper').addClass('hidden');
} else {
$('.invite-join-wrapper').removeClass('hidden');
}
if (!$('.meeting-url-qrcode-group').is(':empty')) {
$('.meeting-url-qrcode-group').empty();
}
});
PreviousMeetings.init('joinedMeetings');
};
var initMeetings = function() {
$('.meeting-url').val(Meeting.getInstance().getURL());
};
var initRooms = function() {
displayRoomURL();
var roomAdmin = $('.page-wrapper.rooms').data('admin-id');
$('.center-panel-wrapper').on('input', '.meeting-name', function () {
var newId = $(this).val();
Meeting.getInstance().setMeetingId(newId);
$('.meeting-url').val(Meeting.getInstance().getURL());
$('.join-meeting-title').text('"'+newId+'"');
if (newId === '') {
$('.invite-join-wrapper').addClass('hidden');
} else {
$('.invite-join-wrapper').removeClass('hidden');
}
if (!$('.meeting-url-qrcode-group').is(':empty')) {
$('.meeting-url-qrcode-group').empty();
}
});
if ($(".page-wrapper.rooms").data('main-room')) {
PreviousMeetings.init('joinedRooms-'+roomAdmin);
if ($('input.meeting-name').val() !== '') {
$('input.meeting-name').trigger('input');
}
}
Recordings.getInstance().refresh();
Recordings.getInstance().setupActionHandlers();
};
$(document).on("turbolinks:load", function() {
if ($("body[data-controller=landing]").get(0)) {
init();
if ($("body[data-action=index]").get(0)) {
initIndex();
} else if ($("body[data-action=meetings]").get(0)) {
initMeetings();
} else if ($("body[data-action=rooms]").get(0)) {
initRooms();
}
}
});
}).call(this);
+51
View File
@@ -0,0 +1,51 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
$.rails.refreshCSRFTokens();
})
document.addEventListener("turbolinks:before-cache", function() {
$(".alert").remove()
})
// Gets the localized string
function getLocalizedString(key) {
var keyArr = key.split(".")
var translated = I18n
// Search current language for the key
try {
keyArr.forEach(function(k) {
translated = translated[k]
})
} catch (e) {
// Key is missing in selected language so default to english
translated = undefined;
}
// If key is not found, search the fallback language for the key
if (translated === null || translated === undefined) {
translated = I18nFallback
keyArr.forEach(function(k) {
translated = translated[k]
})
}
return translated
}
-135
View File
@@ -1,135 +0,0 @@
# 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 <http://www.gnu.org/licenses/>.
# Meeting class
_meetingInstance = null
class @Meeting
constructor: (@meetingId, @type, @userName, @adminId) ->
# Gets the current instance or creates a new one
@getInstance: ->
if _meetingInstance
return _meetingInstance
meetingId = $(".page-wrapper").data('id')
type = $("body").data('resource')
name = $('.meeting-user-name').val()
adminId = $(".page-wrapper").data('admin-id')
_meetingInstance = new Meeting(meetingId, type, name, adminId)
return _meetingInstance
@clear: ->
_meetingInstance = null
@buildMeetingURL: (meetingId, type, adminId) ->
fullId = ''
if adminId
fullId = encodeURIComponent(adminId) + '/' + encodeURIComponent(meetingId)
else
fullId = encodeURIComponent(meetingId)
return @buildRootURL() + '/' + type + '/' + fullId
@buildRootURL: ->
url = location.protocol + '//' + location.hostname
if location.port
url += ':' + location.port
if GreenLight.RELATIVE_ROOT
url += GreenLight.RELATIVE_ROOT
return url
# Sends the end meeting request
# Returns a response object
endMeeting: ->
return $.ajax({
url: @getURL() + "/end",
type: 'DELETE'
})
# Makes a call to get the join meeting url
# Returns a response object
# The response object contains the URL to join the meeting
getJoinMeetingResponse: ->
if !@userName
showAlert(I18n.enter_name, 4000, 'danger')
return false
return $.get @getURL() + "/join?name=" + @userName, (data) =>
# update name used to join meeting
localStorage.setItem('lastJoinedName', @getUserName())
if data.messageKey == 'ok'
key = ''
if @type == 'meetings'
key = 'joinedMeetings'
else if @type == 'rooms'
key = 'joinedRooms-'+@adminId
# update previously joined meetings/rooms on client
try
joinedMeetings = localStorage.getItem(key) || ''
joinedMeetings = joinedMeetings.split(',')
joinedMeetings = joinedMeetings.filter (item) => item != @meetingId.toString()
if joinedMeetings.length >= 5
joinedMeetings.splice(0, 1)
joinedMeetings.push(@meetingId)
localStorage.setItem(key, joinedMeetings.join(','))
catch err
localStorage.setItem(key, @meetingId)
getMeetingId: ->
return @meetingId
setMeetingId: (id) ->
@meetingId = id
return this
getAdminId: ->
return @adminId
setAdminId: (id) ->
@adminId = id
return this
getType: ->
return @type
setType: (type) ->
@type = type
return this
getURL: ->
return Meeting.buildMeetingURL(@meetingId, @type, @adminId)
getUserName: ->
return @userName
setUserName: (name) ->
@userName = name
return this
getModJoined: ->
return @modJoined
setModJoined: (modJoined) ->
@modJoined = modJoined
return this
getWaitingForMod: ->
return @waitingForMod
setWaitingForMod: (wMod) ->
@waitingForMod = wMod
return this
@@ -1,55 +0,0 @@
# 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 <http://www.gnu.org/licenses/>.
# Previous Meetings class
class @PreviousMeetings
MAX_MEETINGS = 5
# initializes and populates previous meetings list with entries from localStorage
@init: (type) ->
$('.center-panel-wrapper').off 'click', '.fill-meeting-name'
$('.center-panel-wrapper').on 'click', '.fill-meeting-name', (event, msg) ->
name = $(this).text()
$('input.meeting-name').val(name).trigger('input')
$('ul.previously-joined').empty()
joinedMeetings = localStorage.getItem(type)
if joinedMeetings && joinedMeetings.length > 0
joinedMeetings = joinedMeetings.split(',')
PreviousMeetings.append(joinedMeetings.reverse())
# adds to previous meetings list if its unique
@uniqueAdd: (names) ->
meetings = $('ul.previously-joined > li').toArray().map( (li) ->
return li.innerText
)
index = meetings.indexOf('')
if index > 1
meetings.splice(index, 1)
if Array.isArray(names)
names = names.filter( (value) ->
return $.inArray(value, meetings) == -1
)
PreviousMeetings.append(names)
@append: (meeting_names) ->
for m in meeting_names
if $('ul.previously-joined > li').length > MAX_MEETINGS
break
$('ul.previously-joined').append('<li><a class="fill-meeting-name">'+m+'</a></li>')
$('.center-panel-wrapper .previously-joined-wrapper').removeClass('hidden')
+48
View File
@@ -0,0 +1,48 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
// Handle changing of settings tabs.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
if (controller == "rooms" && action == "show"
|| controller == "rooms" && action == "update"
|| controller == "users" && action == "recordings"
|| controller == "admins" && action == "server_recordings"){
// Handle recording emails.
$('.email-link').each(function(){
$(this).click(function(){
var subject = $(".username").text() + " " + getLocalizedString('javascript.room.mailer.subject');
var body = getLocalizedString('javascript.room.mailer.body') + "\n\n" + $(this).attr("data-pres-link");
var autogenerated = getLocalizedString('javascript.room.mailer.autogenerated') + "\n";
var footer = getLocalizedString('javascript.room.mailer.footer');
var url = "mailto:?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body) + encodeURIComponent(autogenerated) + encodeURIComponent(footer);
var win = window.open(url, '_blank');
win.focus();
});
});
// Handle recording delete modal
$(".delete-rec").click(function() {
$("#delete-rec-confirm").parent().attr("action", $(this).data("path"))
})
}
});
-430
View File
@@ -1,430 +0,0 @@
# 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 <http://www.gnu.org/licenses/>.
# Recordings class
_recordingsInstance = null
class @Recordings
# adding or removing a column will require updates to all subsequent column positions
COLUMNS = [
'DATE',
'NAME',
'PREVIEW',
'DURATION',
'PARTICIPANTS',
'PLAYBACK',
'VISIBILITY',
'LISTED',
'ACTION'
]
COLUMN = {}
i = 0
for c in COLUMNS
COLUMN[c] = i++
constructor: ->
recordingsObject = this
# configure the datatable for recordings
this.table = $('#recordings').dataTable({
data: [],
rowId: 'id',
paging: false,
dom: 't',
info: false,
order: [[ COLUMN.DATE, "desc" ]],
language: {
emptyTable: '<h3>'+I18n.no_recordings_yet+'</h3>',
zeroRecords: '<h3>'+I18n.no_recordings+'</h3>'
},
columns: [
{ data: "start_time" },
{ data: "name", visible: $(".page-wrapper.rooms").data('main-room') },
{ data: "previews", orderable: false },
{ data: "duration" },
{ data: "participants" },
{ data: "playbacks", orderable: false },
{ data: "published" },
{ data: "listed", visible: false },
{ data: "id", orderable: false }
],
columnDefs: [
{
targets: COLUMN.DATE,
render: (data, type, row) ->
if type == 'display'
date = new Date(data)
title = date
.toLocaleString($('html').attr('lang'),
{month: 'long', day: 'numeric', year: 'numeric',
hour12: 'true', hour: '2-digit', minute: '2-digit'})
timeago = '<time datetime="'+date.toISOString()+'" data-time-ago="'+date.toISOString()+'">'+date.toISOString()+'</time>'
return title+'<span class="timeago">('+timeago+')</span>'
return data
},
{
targets: COLUMN.PREVIEW,
render: (data, type, row) ->
if type == 'display'
str = ''
if row.published
for d in data
str += '<img height="50" width="50" class="img-thumbnail" src="'+d.url+'" alt="'+d.alt+'"></img><img class="img-thumbnail large" src="'+d.url+'"></img>'
return str
return data
},
{
targets: COLUMN.PLAYBACK,
render: (data, type, row) ->
if type == 'display'
str = ''
if row.published
if data.length == 1
str = '<a class="btn btn-default play-tooltip" href="'+data[0].url+'" target="_blank"><i class="fa fa-play-circle"></i></a>'
else
for d in data
str += '<a href="'+d.url+'" target="_blank">'+d.type_i18n+'</a> '
return str
return data
},
{
targets: COLUMN.VISIBILITY,
render: (data, type, row) ->
visibility = ['unpublished', 'unlisted', 'published']
if row.published
if row.listed
state = visibility[2]
else
state = visibility[1]
else
state = visibility[0]
if type == 'display'
return I18n[state]
return state
},
{
targets: COLUMN.ACTION,
render: (data, type, row) ->
if type == 'display'
roomName = Meeting.getInstance().getMeetingId()
recordingActions = $('.hidden-elements').find('.recording-actions')
classes = ['recording-unpublished', 'recording-unlisted', 'recording-published']
if row.published
if row.listed
cls = classes[2]
else
cls = classes[1]
else
cls = classes[0]
trigger = recordingActions.find('.recording-update-trigger')
trigger.removeClass(classes.join(' '))
trigger.addClass(cls)
return recordingActions.html()
return data
}
]
})
options = {
selector: '.delete-tooltip',
placement: 'bottom',
title: I18n.delete_recording
};
$('#recordings').tooltip(options)
options.selector = '.visibility-tooltip'
options.title = I18n.change_visibility
$('#recordings').tooltip(options)
options.selector = '.play-tooltip'
options.title = I18n.play_recording
$('#recordings').tooltip(options)
options.selector = '.youtube-tooltip'
options.title = I18n.upload_youtube
$('#recordings').tooltip(options)
options.selector = '.upload-tooltip'
options.title = I18n.share
$('#recordings').tooltip(options)
options.selector = '.mail-tooltip'
options.title = I18n.mail_recording
$('#recordings').tooltip(options)
$(document).one "turbolinks:before-cache", =>
@getTable().api().clear().draw().destroy()
# enable popovers
# can't use trigger:'focus' because it doesn't work will with buttons inside
# the popover
options = {
selector: '.has-popover',
html: true,
trigger: 'click',
title: ->
return $(this).data("popover-title");
content: ->
bodySelector = $(this).data("popover-body")
return $(bodySelector).html()
}
$('#recordings').popover(options)
# close popovers manually when clicking outside of them or in buttons
# with [data-dismiss="popover"]
# careful to hide only the open popover and not all of them, otherwise they won't reopen
$('body').on 'click', (e) ->
$('.has-popover').each ->
if !$(this).is(e.target) and $(this).has(e.target).length == 0 and $('.popover.in').has(e.target).length == 0
if $(this).next(".popover.in").length > 0
$(this).popover('hide')
$(document).on 'click', '[data-dismiss="popover"]', (e) ->
$('.has-popover').each ->
if $(this).next(".popover.in").length > 0
$(this).popover('hide')
# Gets the current instance or creates a new one
@getInstance: ->
if _recordingsInstance && Recordings.initialized()
return _recordingsInstance
_recordingsInstance = new Recordings()
return _recordingsInstance
@initialize: ->
Recordings.getInstance()
@initialized: ->
return $.fn.DataTable.isDataTable('#recordings') && _recordingsInstance
draw: ->
if !@isOwner()
@table.api().columns(COLUMN.LISTED).search('true')
@table.api().columns.adjust().draw()
# refresh the recordings from the server
refresh: ->
table_api = this.table.api()
$.get @getRecordingsURL(), (data) =>
@setOwner(data.is_owner)
if !@owner
table_api.column(COLUMN.ACTION).visible(false)
table_api.column(COLUMN.VISIBILITY).visible(false)
for recording in data.recordings
# NOTE: Temporary fix for the minutes to milliseconds bug some recordings may have
# experienced when transitioning from BigBlueButton 1.1 to BigBlueButton 2.0.
recording.duration = if recording.duration < 1000 then recording.duration else parseInt(recording.length / 60000)
data.recordings.sort (a,b) ->
return new Date(b.start_time) - new Date(a.start_time)
table_api.clear()
table_api.rows.add(data.recordings)
@draw()
if $(".page-wrapper.rooms").data('main-room')
recording_names = data.recordings.map (r) ->
return r.name
output = {}
for key in [0...recording_names.length]
output[recording_names[key]] = recording_names[key]
PreviousMeetings.uniqueAdd(value for key, value of output)
# setup click handlers for the action buttons
setupActionHandlers: ->
table_api = this.table.api()
recordingsObject = this
selectedUpload = null
canUpload = false
@getTable().on 'click', '.recording-update', (event) ->
btn = $(this)
row = table_api.row($(this).closest('tr')).data()
url = recordingsObject.getRecordingsURL()
id = row.id
published = btn.data('visibility') == "unlisted" ||
btn.data('visibility') == "published"
listed = btn.data('visibility') == "published"
btn.prop('disabled', true)
data = { published: published.toString() }
data["meta_" + GreenLight.META_LISTED] = listed.toString();
$.ajax({
method: 'PATCH',
url: url+'/'+id,
data: data
}).done((data) ->
btn.prop('disabled', false)
).fail((xhr, text) ->
btn.prop('disabled', false)
)
@getTable().on 'click', '.recording-delete', (event) ->
btn = $(this)
row = table_api.row($(this).closest('tr'))
url = recordingsObject.getRecordingsURL()
id = row.data().id
btn.prop('disabled', true)
$.ajax({
method: 'DELETE',
url: url+'/'+id
}).done((data) ->
btn.prop('disabled', false)
).fail((xhr, text) ->
btn.prop('disabled', false)
if xhr.status == 404
row.remove();
recordingsObject.draw()
showAlert(I18n.recording_deleted, 4000);
)
@getTable().on 'click', '.upload-button', (event) ->
btn = $(this)
row = table_api.row($(this).closest('tr')).data()
url = recordingsObject.getRecordingsURL()
id = row.id
title = $('#video-title').val()
privacy_status = $('input[name=privacy_status]:checked').val()
if title == ''
title = row.name
$.ajax({
method: 'POST',
url: url+'/'+id
data: {video_title: title, privacy_status: privacy_status}
success: (data) ->
if data['url'] != null
window.location.href = data['url']
else
cloud = selectedUpload.find('.cloud-blue')
check = selectedUpload.find('.green-check')
spinner = selectedUpload.find('.load-spinner')
showAlert(I18n.successful_upload, 4000);
spinner.hide()
check.show()
setTimeout ( ->
cloud.show()
check.hide()
), 2500
})
selectedUpload.find('.cloud-blue').hide()
selectedUpload.find('.load-spinner').show()
@getTable().on 'click', '.mail-recording', (event) ->
btn = $(this)
row = table_api.row($(this).closest('tr')).data()
url = recordingsObject.getRecordingsURL()
id = row.id
# Take the username from the header.
username = $('#title-header').text().replace('Welcome ', '').trim()
recording_url = row.playbacks[0].url
webcams_url = getHostName(recording_url) + '/presentation/' + id + '/video/webcams.webm'
subject = username + I18n.recording_mail_subject
body = I18n.recording_mail_body + "\n\n" + recording_url + "\n\n" + I18n.email_footer_1 + "\n" + I18n.email_footer_2
mailto = "mailto:?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body);
window.open(mailto);
@getTable().on 'click', '.youtube-upload', (event) ->
row = table_api.row($(this).closest('tr')).data()
$('#video-title').attr('value', row.name)
@getTable().on 'click', '.cloud-upload', (event) ->
btn = $(this)
row = table_api.row($(this).closest('tr')).data()
id = row.id
selectedUpload = $(this)
# Determine if the recording can be uploaded to Youtube.
$.ajax({
method: 'POST',
data: {'rec_id': id},
async: false,
url: recordingsObject.getRecordingsURL() + '/can_upload'
}).success((res_data) ->
canUpload = res_data['uploadable']
)
youtube_button = $('.share-popover').find('.youtube-upload')
attr = $(this).attr('data-popover-body');
# Check if the cloud button has a popover body.
if (typeof attr == typeof undefined || attr == false)
switch canUpload
# We can upload the recording.
when 'true'
youtube_button.attr('title', I18n.upload_youtube)
youtube_button.removeClass('disabled-button')
youtube_button.addClass('has-popover')
youtube_button.show()
# Can't upload because uploading is disabled.
when 'uploading_disabled'
youtube_button.hide()
# Can't upload because account is not authenticated with Google.
when 'invalid_provider'
youtube_button.attr('title', I18n.invalid_provider)
youtube_button.addClass('disabled-button')
youtube_button.removeClass('has-popover')
youtube_button.show()
# Can't upload because recording does not contain video.
else
youtube_button.attr('title', I18n.no_video)
youtube_button.addClass('disabled-button')
youtube_button.removeClass('has-popover')
youtube_button.show()
$(this).attr('data-popover-body', '.share-popover')
$(this).popover('show')
else
$(this).popover('hide')
$(this).removeAttr('data-popover-body')
@getTable().on 'draw.dt', (event) ->
$('time[data-time-ago]').timeago();
getTable: ->
@table
getHostName = (url) ->
parser = document.createElement('a');
parser.href = url;
parser.origin;
getRecordingsURL: ->
if $(".page-wrapper.rooms").data('main-room')
base_url = Meeting.buildRootURL()+'/'+$('body').data('resource')+'/'+Meeting.getInstance().getAdminId()
else
base_url = $('.meeting-url').val()
base_url+'/recordings'
isOwner: ->
@owner
setOwner: (owner) ->
@owner = owner
+162
View File
@@ -0,0 +1,162 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
if(controller == "rooms" && action == "show"
|| controller == "rooms" && action == "update"
|| controller == "users" && action == "recordings"
|| controller == "admins" && action == "server_recordings"){
// Set a room header rename event
var configure_room_header = function(room_title){
function register_room_title_event(e){
// Remove current window events
$(window).off('mousedown keydown');
if(e.type == 'focusout'){
submit_rename_request(room_title);
return;
}
room_title.addClass("dotted_underline");
room_title.find('#user-text').fadeTo('medium', 0.7);
room_title.find('#user-text').attr("contenteditable", true);
room_title.find('#user-text').focus();
// Stop automatic refresh
e.preventDefault();
register_window_event(room_title, 'user-text', '#edit-room', 'edit-room');
}
room_title.find('#user-text').on('dblclick focusout', function(e){
if(room_title.find('#edit-room').length){
register_room_title_event(e);
}
});
room_title.find('.fa-edit').on('click', function(e){
register_room_title_event(e);
});
}
// Set a recording row rename event
var configure_recording_row = function(recording_title){
function register_recording_title_event(e){
// Remove current window events
$(window).off('mousedown keydown');
if(e.type == 'focusout'){
submit_rename_request(recording_title);
return;
}
recording_title.addClass("dotted_underline");
recording_title.fadeTo('medium', 0.7);
recording_title.find('span').attr("contenteditable", true);
recording_title.find('span').focus();
// Stop automatic refresh
e.preventDefault();
register_window_event(recording_title, 'recording-text', '#edit-record', 'edit-recordid');
}
recording_title.find('a').on('click focusout', function(e){
register_recording_title_event(e);
});
recording_title.find('#recording-text').on('dblclick focusout', function(e){
register_recording_title_event(e);
});
}
// Register window event to submit new name
// upon click or upon pressing the enter key
var register_window_event = function(element, textfield_id, edit_button_id, edit_button_data){
$(window).on('mousedown keydown', function(clickEvent){
// Return if the text is clicked
if(clickEvent.type == "mousedown" && clickEvent.target.id == textfield_id){
return;
}
// Return if the edit icon is clicked
if(clickEvent.type == "mousedown" && $(clickEvent.target).is(edit_button_id) &&
$(clickEvent.target).data(edit_button_data) === element.find(edit_button_id).data(edit_button_data)){
return;
}
// Check if event is keydown and enter key is not pressed
if(clickEvent.type == "keydown" && clickEvent.which !== 13){
return;
}
clickEvent.preventDefault();
submit_rename_request(element);
// Remove window event when ajax call to update name is submitted
$(window).off('mousedown keydown');
});
}
// Apply ajax request depending on the element that triggered the event
var submit_rename_request = function(element){
if(element.is('#room-title')){
submit_update_request({
setting: "rename_header",
name: element.find('#user-text').text(),
}, element.data('path'), "POST");
}
else if(element.is('#recording-title')){
submit_update_request({
setting: "rename_recording",
record_id: element.data('recordid'),
record_name: element.find('span').text(),
room_uid: element.data('room-uid'),
}, element.data('path'), "PATCH");
}
}
// Helper for submitting ajax requests
var submit_update_request = function(data, path, action){
// Send ajax request for update
$.ajax({
url: path,
type: action,
data: data,
});
}
// Elements that can be renamed
var room_title = $('#room-title');
var recording_rows = $('#recording-table').find('tr');
// Configure renaming for room header
configure_room_header(room_title);
// Configure renaming for recording rows
recording_rows.each(function(){
var recording_title = $(this).find('#recording-title');
configure_recording_row(recording_title);
});
}
});
+399
View File
@@ -0,0 +1,399 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
// Room specific js for copy button and email link.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
// highlight current room
$('.room-block').removeClass('current');
$('a[href="' + window.location.pathname + '"] .room-block').addClass('current');
// Only run on room pages.
if (controller == "rooms" && action == "show"){
// Display and update all fields related to creating a room in the createRoomModal
$("#create-room-block").click(function(){
showCreateRoom(this)
})
checkIfAutoJoin()
}
// Autofocus on the Room Name label when creating a room only
$('#createRoomModal').on('shown.bs.modal', function (){
if ($(".create-only").css("display") == "block"){
$('#create-room-name').focus()
}
})
if (controller == "rooms" && action == "show" || controller == "admins" && action == "server_rooms"){
// Display and update all fields related to creating a room in the createRoomModal
$(".update-room").click(function(){
showUpdateRoom(this)
})
$(".delete-room").click(function() {
showDeleteRoom(this)
})
$('.selectpicker').selectpicker({
liveSearchPlaceholder: getLocalizedString('javascript.search.start')
});
// Fixes turbolinks issue with bootstrap select
$(window).trigger('load.bs.select.data-api');
$(".share-room").click(function() {
// Update the path of save button
$("#save-access").attr("data-path", $(this).data("path"))
// Get list of users shared with and display them
displaySharedUsers($(this).data("users-path"))
})
$("#shareRoomModal").on("show.bs.modal", function() {
$(".selectpicker").selectpicker('val','')
})
$(".bootstrap-select").on("click", function() {
$(".bs-searchbox").siblings().hide()
})
$("#share-room-select ~ button").on("click", function() {
$(".bs-searchbox").siblings().hide()
})
$(".bs-searchbox input").on("input", function() {
if ($(".bs-searchbox input").val() == '' || $(".bs-searchbox input").val().length < 3) {
$(".select-options").remove()
$(".bs-searchbox").siblings().hide()
} else {
// Manually populate the dropdown
$.get($("#share-room-select").data("path"), { search: $(".bs-searchbox input").val() }, function(users) {
$(".select-options").remove()
if (users.length > 0) {
users.forEach(function(user) {
let opt = document.createElement("option")
$(opt).val(user.uid)
$(opt).text(user.name)
$(opt).addClass("select-options")
$(opt).attr("data-subtext", user.uid)
$("#share-room-select").append(opt)
})
// Only refresh the select dropdown if there are results to show
$('#share-room-select').selectpicker('refresh');
}
$(".bs-searchbox").siblings().show()
})
}
})
$(".remove-share-room").click(function() {
$("#remove-shared-confirm").parent().attr("action", $(this).data("path"))
})
// User selects an option from the Room Access dropdown
$(".bootstrap-select").on("changed.bs.select", function(){
// Get the uid of the selected user
let uid = $(".selectpicker").selectpicker('val')
// If the value was changed to blank, ignore it
if (uid == "") return
let currentListItems = $("#user-list li").toArray().map(user => $(user).data("uid"))
// Check to make sure that the user is not already there
if (!currentListItems.includes(uid)) {
// Create the faded list item and display it
let option = $("option[value='" + uid + "']")
let listItem = document.createElement("li")
listItem.setAttribute('class', 'list-group-item text-left not-saved add-access');
listItem.setAttribute("data-uid", uid)
let spanItemAvatar = document.createElement("span"),
spanItemName = document.createElement("span"),
spanItemUser = document.createElement("span");
spanItemAvatar.setAttribute('class', 'avatar float-left mr-2');
spanItemAvatar.innerText = option.text().charAt(0);
spanItemName.setAttribute('class', 'shared-user');
spanItemName.innerText = option.text();
spanItemUser.setAttribute('class', 'text-muted');
spanItemUser.innerText = option.data('subtext');
spanItemName.append(spanItemUser);
listItem.innerHTML = "<span class='text-primary float-right shared-user cursor-pointer' onclick='removeSharedUser(this)'><i class='fas fa-times'></i></span>"
listItem.prepend(spanItemName);
listItem.prepend(spanItemAvatar);
$("#user-list").append(listItem)
}
})
$("#presentation-upload").change(function(data) {
var file = data.target.files[0]
// Check file type and size to make sure they aren't over the limit
if (validFileUpload(file)) {
$("#presentation-upload-label").text(file.name)
} else {
$("#invalid-file-type").show()
$("#presentation-upload").val("")
$("#presentation-upload-label").text($("#presentation-upload-label").data("placeholder"))
}
})
$(".preupload-room").click(function() {
updatePreuploadPresentationModal(this)
})
$("#remove-presentation").click(function(data) {
removePreuploadPresentation($(this).data("remove"))
})
// trigger initial room filter
filterRooms();
}
});
function copyInvite() {
$('#invite-url').select()
if (document.execCommand("copy")) {
$('#invite-url').blur();
copy = $("#copy-invite")
copy.addClass('btn-success');
copy.html("<i class='fas fa-check mr-1'></i>" + getLocalizedString("copied"))
setTimeout(function(){
copy.removeClass('btn-success');
copy.html("<i class='fas fa-copy mr-1'></i>" + getLocalizedString("copy"))
}, 1000)
}
}
function copyAccess() {
$('#copy-code').attr("type", "text")
$('#copy-code').select()
if (document.execCommand("copy")) {
$('#copy-code').attr("type", "hidden")
copy = $("#copy-access")
copy.addClass('btn-success');
copy.html("<i class='fas fa-check mr-1'></i>" + getLocalizedString("copied"))
setTimeout(function(){
copy.removeClass('btn-success');
copy.html("<i class='fas fa-copy mr-1'></i>" + getLocalizedString("room.copy_access"))
}, 1000)
}
}
function showCreateRoom(target) {
$("#create-room-name").val("")
$("#create-room-access-code").text(getLocalizedString("modal.create_room.access_code_placeholder"))
$("#room_access_code").val(null)
$("#createRoomModal form").attr("action", $("body").data('relative-root'))
$("#room_mute_on_join").prop("checked", $("#room_mute_on_join").data("default"))
$("#room_require_moderator_approval").prop("checked", $("#room_require_moderator_approval").data("default"))
$("#room_anyone_can_start").prop("checked", $("#room_anyone_can_start").data("default"))
$("#room_all_join_moderator").prop("checked", $("#room_all_join_moderator").data("default"))
$("#room_recording").prop("checked", $("#room_recording").data("default"))
//show all elements & their children with a create-only class
$(".create-only").each(function() {
$(this).show()
if($(this).children().length > 0) { $(this).children().show() }
})
//hide all elements & their children with a update-only class
$(".update-only").each(function() {
$(this).attr('style',"display:none !important")
if($(this).children().length > 0) { $(this).children().attr('style',"display:none !important") }
})
}
function showUpdateRoom(target) {
var modal = $(target)
var update_path = modal.closest(".room-block").data("path")
var settings_path = modal.data("settings-path")
$("#create-room-name").val(modal.closest(".room-block").find(".room-name-text").text().trim())
$("#createRoomModal form").attr("action", update_path)
//show all elements & their children with a update-only class
$(".update-only").each(function() {
$(this).show()
if($(this).children().length > 0) { $(this).children().show() }
})
//hide all elements & their children with a create-only class
$(".create-only").each(function() {
$(this).attr('style',"display:none !important")
if($(this).children().length > 0) { $(this).children().attr('style',"display:none !important") }
})
updateCurrentSettings(settings_path)
var accessCode = modal.closest(".room-block").data("room-access-code")
if(accessCode){
$("#create-room-access-code").text(getLocalizedString("modal.create_room.access_code") + ": " + accessCode)
$("#room_access_code").val(accessCode)
} else {
$("#create-room-access-code").text(getLocalizedString("modal.create_room.access_code_placeholder"))
$("#room_access_code").val(null)
}
}
function showDeleteRoom(target) {
$("#delete-header").text(getLocalizedString("modal.delete_room.confirm").replace("%{room}", $(target).data("name")))
$("#delete-confirm").parent().attr("action", $(target).data("path"))
}
//Update the createRoomModal to show the correct current settings
function updateCurrentSettings(settings_path){
// Get current room settings and set checkbox
$.get(settings_path, function(settings) {
$("#room_mute_on_join").prop("checked", $("#room_mute_on_join").data("default") || settings.muteOnStart)
$("#room_require_moderator_approval").prop("checked", $("#room_require_moderator_approval").data("default") || settings.requireModeratorApproval)
$("#room_anyone_can_start").prop("checked", $("#room_anyone_can_start").data("default") || settings.anyoneCanStart)
$("#room_all_join_moderator").prop("checked", $("#room_all_join_moderator").data("default") || settings.joinModerator)
$("#room_recording").prop("checked", $("#room_recording").data("default") || Boolean(settings.recording))
})
}
function generateAccessCode(){
const accessCodeLength = 6
var validCharacters = "0123456789"
var accessCode = ""
for( var i = 0; i < accessCodeLength; i++){
accessCode += validCharacters.charAt(Math.floor(Math.random() * validCharacters.length));
}
$("#create-room-access-code").text(getLocalizedString("modal.create_room.access_code") + ": " + accessCode)
$("#room_access_code").val(accessCode)
}
function ResetAccessCode(){
$("#create-room-access-code").text(getLocalizedString("modal.create_room.access_code_placeholder"))
$("#room_access_code").val(null)
}
function saveAccessChanges() {
let listItemsToAdd = $("#user-list li:not(.remove-shared)").toArray().map(user => $(user).data("uid"))
$.post($("#save-access").data("path"), {add: listItemsToAdd})
}
// Get list of users shared with and display them
function displaySharedUsers(path) {
$.get(path, function(users) {
// Create list element and add to user list
var user_list_html = ""
users.forEach(function(user) {
user_list_html += "<li class='list-group-item text-left' data-uid='" + user.uid + "'>"
if (user.image) {
user_list_html += "<img id='user-image' class='avatar float-left mr-2' src='" + user.image + "'></img>"
} else {
user_list_html += "<span class='avatar float-left mr-2'>" + user.name.charAt(0) + "</span>"
}
user_list_html += "<span class='shared-user'>" + user.name + "<span class='text-muted ml-1'>" + user.uid + "</span></span>"
user_list_html += "<span class='text-primary float-right shared-user cursor-pointer' onclick='removeSharedUser(this)'><i class='fas fa-times'></i></span>"
user_list_html += "</li>"
})
$("#user-list").html(user_list_html)
});
}
// Removes the user from the list of shared users
function removeSharedUser(target) {
let parentLI = target.closest("li")
if (parentLI.classList.contains("not-saved")) {
parentLI.parentNode.removeChild(parentLI)
} else {
parentLI.removeChild(target)
parentLI.classList.add("remove-shared")
}
}
function updatePreuploadPresentationModal(target) {
$.get($(target).data("settings-path"), function(presentation) {
if(presentation.attached) {
$("#current-presentation").show()
$("#presentation-name").text(presentation.name)
$("#change-pres").show()
$("#use-pres").hide()
} else {
$("#current-presentation").hide()
$("#change-pres").hide()
$("#use-pres").show()
}
});
$("#preuploadPresentationModal form").attr("action", $(target).data("path"))
$("#remove-presentation").data("remove", $(target).data("remove"))
// Reset values to original to prevent confusion
$("#presentation-upload").val("")
$("#presentation-upload-label").text($("#presentation-upload-label").data("placeholder"))
$("#invalid-file-type").hide()
}
function removePreuploadPresentation(path) {
$.post(path, {})
}
function validFileUpload(file) {
return file.size/1024/1024 <= 30
}
// Automatically click the join button if this is an action cable reload
function checkIfAutoJoin() {
var url = new URL(window.location.href)
if (url.searchParams.get("reload") == "true") {
$("#joiner-consent").click()
$("#room-join").click()
}
}
function filterRooms() {
let search = $('#room-search').val()
if (search == undefined) { return }
let search_term = search.toLowerCase(),
rooms = $('#room_block_container > div:not(:last-child)');
clear_room_search = $('#clear-room-search');
if (search_term) {
clear_room_search.show();
} else {
clear_room_search.hide();
}
rooms.each(function(i, room) {
let text = $(this).find('h4').text();
room.style.display = (text.toLowerCase().indexOf(search_term) < 0) ? 'none' : 'block';
})
}
function clearRoomSearch() {
$('#room-search').val('');
filterRooms()
}
+103
View File
@@ -0,0 +1,103 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
if ((controller == "admins" && action == "index") ||
(controller == "rooms" && action == "show") ||
(controller == "rooms" && action == "update") ||
(controller == "rooms" && action == "join") ||
(controller == "users" && action == "recordings") ||
(controller == "admins" && action == "server_recordings") ||
(controller == "admins" && action == "server_rooms")) {
// Submit search if the user hits enter
$("#search-input").keypress(function(key) {
if (key.which == 13) {
searchPage()
}
})
// Add listeners for sort
$("th[data-order]").click(function(data){
var header_elem = $(data.target)
if(header_elem.data('order') === 'asc'){ // asc
header_elem.data('order', 'desc');
}
else if(header_elem.data('order') === 'desc'){ // desc
header_elem.data('order', 'none');
}
else{ // none
header_elem.data('order', 'asc');
}
var search = $("#search-input").val();
var url = window.location.pathname + "?page=1&search=" + search + "&column=" + header_elem.data("header") +
"&direction=" + header_elem.data('order')
window.location.replace(addRecordingTable(url))
})
if(controller === "rooms" && action === "show"){
$(".page-item > a").each(function(){
if(!$(this).attr('href').endsWith("#")){
$(this).attr('href', $(this).attr('href') + "#recordings-table")
}
})
}
}
})
// Searches the user table for the given string
function searchPage() {
var search = $("#search-input").val();
// Check if the user filtered by role
var role = new URL(location.href).searchParams.get('role')
var tab = new URL(location.href).searchParams.get('tab')
var url = window.location.pathname + "?page=1&search=" + search
if (role) { url += "&role=" + role }
if (tab) { url += "&tab=" + tab }
window.location.replace(addRecordingTable(url));
}
// Clears the search bar
function clearSearch() {
var role = new URL(location.href).searchParams.get('role')
var tab = new URL(location.href).searchParams.get('tab')
var url = window.location.pathname + "?page=1"
if (role) { url += "&role=" + role }
if (tab) { url += "&tab=" + tab }
window.location.replace(addRecordingTable(url));
var search_params = new URLSearchParams(window.location.search)
}
function addRecordingTable(url) {
if($("body").data('controller') === "rooms" && $("body").data('action') === "show") {
url += "#recordings-table"
}
return url
}
+42
View File
@@ -0,0 +1,42 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
// Handle changing of settings tabs.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
// Only run on the settings page.
if ((controller == "users" && action == "edit") || (controller == "users" && action == "update")){
var settingsButtons = $('.setting-btn');
var settingsViews = $('.setting-view');
settingsButtons.each(function(i, btn) {
if(!$(btn).hasClass("active")){ $(settingsViews[i]).hide(); }
$(btn).click(function(){
$(btn).addClass("active");
settingsViews.each(function(i, view){
if($(view).attr("id") == $(btn).attr("id")){
$(view).show();
} else {
$(settingsButtons[i]).removeClass("active");
$(view).hide();
}
});
});
});
}
});
-93
View File
@@ -1,93 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
var loopJoin = function() {
var jqxhr = Meeting.getInstance().getJoinMeetingResponse();
jqxhr.done(function(data) {
if (data.messageKey === 'wait_for_moderator') {
setTimeout(loopJoin, 5000);
} else {
$(location).attr("href", data.response.join_url);
}
});
jqxhr.fail(function(xhr, status, error) {
console.info("meeting join failed");
});
};
var alertTimeout = null;
var showAlert = function(html, timeout_delay, type) {
type = type || 'success'
if (!html) {
return;
}
$('.alert-template .alert-message').html(html);
$('.alert-template .alert').removeClass('alert-success alert-danger alert-info alert-warning').addClass('alert-'+type);
$('#alerts').html($('.alert-template').html());
if (timeout_delay) {
clearTimeout(alertTimeout);
alertTimeout = setTimeout(function() {
$('#alerts > .alert').alert('close');
}, timeout_delay);
}
};
// remove flash alerts after 5 seconds
var flashAlertDelayedDismiss = function() {
setTimeout(function(){
$('.flash-alerts').remove();
}, 5000);
};
var displayRoomURL = function() {
$('.meeting-url').val(Meeting.getInstance().getURL());
};
var showNotification = function(title, options) {
if (Notification.permission === "granted") {
var icon = '<%= asset_path("bbb-logo.png") %>';
options = $.extend(options, {
icon: icon,
tag: 'UserWaiting'
});
var notification = new Notification(title, options);
notification.onclick = function() {
window.focus();
};
}
};
var isRoomOwner = function() {
return $('body').data('current-user') === $('.page-wrapper.rooms').data('admin-id')
}
// For now there are notifications only for users signed in and when they
// are in their room's page
$(document).on("turbolinks:load", function() {
if (isRoomOwner()) {
Notification.requestPermission();
}
flashAlertDelayedDismiss();
});
+105
View File
@@ -0,0 +1,105 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
if(controller == "rooms" && action == "show"
|| controller == "rooms" && action == "update"
|| controller == "users" && action == "recordings"
|| controller == "admins" && action == "server_recordings"){
// Choose active header
// (Name, Length or Users)
$('th').each(function(){
if($(this).data("header")){
$(this).on('click', function(){
set_active_header($(this).data("header"));
sort_by($(this).data("header"), $(this).data('order'));
});
}
});
// Based on the header (Name, Length or Users) clicked,
// Modify the ui for the tables
var set_active_header = function(active_header){
$('th').each(function(){
if($(this).data("header") == active_header){
configure_order($(this));
}
else{
$(this).text($(this).data("header"));
$(this).data('order', 'none');
}
});
}
// Based on the header (Name, Length or Users) clicked,
// Modify the ui for the tables
var configure_order = function(header_elem){
if(header_elem.data('order') === 'asc'){ // asc
header_elem.data('order', 'desc');
}
else if(header_elem.data('order') === 'desc'){ // desc
header_elem.data('order', 'none');
}
else{ // none
header_elem.data('order', 'asc');
}
}
// Given a label and an order, sort recordings by order
// under a given label
var sort_by = function(label, order){
var recording_list_tbody = $('.table-responsive').find('tbody');
if(label === "Name"){
sort_recordings(recording_list_tbody, order, "#recording-title");
}
else if(label === "Length"){
sort_recordings(recording_list_tbody, order, "#recording-length");
}
else if(label === "Users"){
sort_recordings(recording_list_tbody, order, "#recording-users");
}
}
// Generalized function for sorting recordings
var sort_recordings = function(recording_list_tbody, order, recording_id){
recording_list_tbody.find('tr').sort(function(a, b){
var a_val, b_val;
if (recording_id == "#recording-length") {
a_val = $.trim($(a).find(recording_id).data("full-length"));
b_val = $.trim($(b).find(recording_id).data("full-length"));
} else {
a_val = $.trim($(a).find(recording_id).text());
b_val = $.trim($(b).find(recording_id).text());
}
if(order === "asc"){
return a_val.localeCompare(b_val);
}
else if(order === "desc"){
return b_val.localeCompare(a_val);
} else {
return undefined;
}
}).appendTo(recording_list_tbody);
}
}
});
+46
View File
@@ -0,0 +1,46 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
$(document).on('turbolinks:load', function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
if ((controller == "admins" && action == "edit_user") || (controller == "users" && action == "edit")) {
// Hack to make it play nice with turbolinks
if ($("#role-dropdown:visible").length == 0){
$(window).trigger('load.bs.select.data-api')
}
// Check to see if the role dropdown was set up
if ($("#role-dropdown").length != 0){
$("#role-dropdown").selectpicker('val', $("#user_role_id").val())
}
// Update hidden field with new value
$("#role-dropdown").on("changed.bs.select", function(){
$("#user_role_id").val($("#role-dropdown").selectpicker('val'))
})
// Update hidden field with new value
// $("#language-dropdown").on("show.bs.select", function(){
// $("#language-dropdown").selectpicker('val', $("#user_language").val())
// })
// Update hidden field with new value
$("#language-dropdown").on("changed.bs.select", function(){
$("#user_language").val($("#language-dropdown").selectpicker('val'))
})
}
})
+67
View File
@@ -0,0 +1,67 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
// Handle client request to join when meeting starts.
$(document).on("turbolinks:load", function(){
var controller = $("body").data('controller');
var action = $("body").data('action');
if(controller == "rooms" && action == "join"){
App.waiting = App.cable.subscriptions.create({
channel: "WaitingChannel",
roomuid: $(".background").attr("room"),
useruid: $(".background").attr("user")
}, {
connected: function() {
console.log("connected");
setTimeout(startRefreshTimeout, 120000);
},
disconnected: function(data) {
console.log("disconnected");
console.log(data);
},
rejected: function() {
console.log("rejected");
},
received: function(data){
console.log(data);
if(data.action == "started"){
request_to_join_meeting();
}
}
});
}
});
var join_attempts = 0;
function request_to_join_meeting() {
$.post(window.location.pathname, { join_name: $(".background").attr("join-name") }, function() {
//Successful post - set up retry incase
if(join_attempts < 4){ setTimeout(request_to_join_meeting, 10000); }
join_attempts++;
})
}
// Refresh the page after 2 mins and attempt to reconnect to ActionCable
function startRefreshTimeout() {
var url = new URL(window.location.href)
url.searchParams.set("reload","true")
window.location.href = url.href
}
@@ -0,0 +1,81 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
@import "tabler/functions";
@import "tabler/core";
@import "tabler/type";
@import "tabler/grid";
@import "tabler/layout";
@import "tabler/aside";
@import "tabler/header";
@import "tabler/footer";
@import "tabler/colors";
@import "tabler/text";
@import "tabler/utilities";
@import "tabler/nav";
@import "tabler/button";
@import "tabler/alert";
//@import "tabler/close";
//@import "tabler/badge";
@import "tabler/tables";
//@import "tabler/breadcrumb";
//@import "tabler/pagination";
@import "tabler/cards";
//@import "tabler/popover";
@import "tabler/dropdown";
@import "tabler/list";
@import "tabler/list-group";
@import "tabler/avatar";
//@import "tabler/product";
@import "tabler/progress";
@import "tabler/icon";
//@import "tabler/image";
//@import "tabler/link";
//@import "tabler/media";
@import "tabler/form";
//@import "tabler/sparkline";
@import "tabler/social";
//@import "tabler/maps";
//@import "tabler/statuses";
//@import "tabler/charts";
//@import "tabler/chips";
@import "tabler/stamp";
//@import "tabler/chat";
//@import "tabler/example";
@import "tabler/tag";
//@import "tabler/syntax";
//@import "tabler/infobox";
//@import "tabler/carousel";
//@import "tabler/forms/custom-range";
//@import "tabler/forms/custom-selectgroup";
@import "tabler/forms/custom-switch";
//@import "tabler/forms/custom-imagecheck";
@import "tabler/forms/custom-colorinput";
//@import "tabler/timeline";
//@import "tabler/browser";
//@import "tabler/flag";
//@import "tabler/payments";
//@import "tabler/jvectormap";
//@import "tabler/selectize";
//@import "tabler/fonts/feather";
+101
View File
@@ -0,0 +1,101 @@
// BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
//
// Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
#users-table {
.user-role {
color: white !important;
}
.user-email {
max-width: 250px;
}
}
#clear-search {
z-index: 9;
position: absolute;
right: 55px;
top: 8px;
&:hover {
cursor: pointer;
}
}
.tag i {
color: white !important;
}
#branding-image{
z-index: auto;
}
.authentication-required{
padding-top: 2px;
}
#site_settings {
.colorinput-color {
text-align: center;
padding-top: 4px;
height: 2rem;
width: 2rem;
}
}
.sort-disabled{
background: #e6e6e6 !important;
color: rgb(110, 118, 135) !important;
opacity: 0.75;
&:hover{
opacity: 0.9;
}
}
.form-disable{
background-color: #e6e6e6;
}
.role-colour-picker{
color: white !important;
}
.custom-role-tag{
color: white !important;
// Make it consistent with the manage users tab tags
padding-top: 1px;
padding-bottom: 1px;
}
.user-role-tag{
color: white !important;
}
#manage-users-nav.nav-tabs .nav-item {
margin-bottom: -1px;
}
#merge-account-arrow {
position: absolute;
top: 47%;
right: 47%;
z-index: 999;
background: white;
}
.admin-tabs {
justify-content: space-around;
}
-34
View File
@@ -1,34 +0,0 @@
/* 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 <http://www.gnu.org/licenses/>.
*/
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
* files in this directory. Styles in this file should be added after the last require_* statement.
* It is generally better to create a new file per style scope.
*
*= require jquery-ui
*= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
*= require_tree ./main
*= require_self
*/
+189
View File
@@ -0,0 +1,189 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
* files in this directory. Styles in this file should be added after the last require_* statement.
* It is generally better to create a new file per style scope.
*
*= require_self
*/
@import "tabler/variables";
@import "bootstrap";
@import "jquery-ui/sortable";
@import "tabler-custom";
@import "font-awesome-sprockets";
@import "font-awesome";
@import "monolith.min.scss";
@import "bootstrap-select.min";
@import "utilities/variables";
@import "admins";
@import "main";
@import "rooms";
@import "sessions";
@import "utilities/fonts";
@import "users";
* {
outline: none !important;
}
html, body {
font-family: "Source Sans Pro" !important;
position: relative;
width: 100%;
height: 100%;
background-color: white;
}
a {
text-decoration: none !important;
cursor: pointer;
}
.dotted_underline {
border-bottom: 3px dashed #d3d3d3;
width: 100%;
}
.disable-click {
pointer-events: none;
}
.header {
height: $header-height;
}
.wrapper {
position: relative;
height: auto;
min-height: calc(100% - #{$header-height} - #{$footer-height});
}
.footer {
height: $footer-height;
width: 100%;
}
.background {
background-color: $background-color;
}
.error-section {
background-color: $error-background-color;
}
.font-weight-400 {
font-weight: 400;
}
.subtitle {
font-size: 25px;
}
.force-bottom {
display: flex;
justify-content: flex-end;
flex-direction: column;
}
.invite-link-input {
width: 100%;
}
.no-border-top {
td {
border-top: none;
}
}
.force-text-normal {
color: #495057;
}
.terms {
overflow: scroll;
height: 55vh;
}
[contenteditable]:focus {
outline: 0px solid transparent;
}
.cookies-banner {
color: white;
background-color: $button-color-blue;
#cookies-agree-button {
margin: 0;
}
}
input:focus {
border-color: $primary !important;
}
.input-group button:focus {
box-shadow: none !important;
}
.list-group-item-action.active {
color: $primary;
}
.header .header-nav {
color: $text-muted !important;
&:hover {
padding-bottom: 21px;
border-bottom: 1px solid $primary;
}
&.active {
color: $primary !important;
padding-bottom: 21px;
border-bottom: 1px solid $primary;
}
}
table {
thead {
th[data-order]:hover {
cursor: pointer;
}
}
}
.cursor-pointer{
cursor: pointer;
}
#delete-confirm:disabled {
cursor: not-allowed;
}
.btn i {
transition: all .15s;
}
+20
View File
@@ -0,0 +1,20 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
// Place all the styles related to the Errors controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
-18
View File
@@ -1,18 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
@import "font-awesome-sprockets";
@import "font-awesome";
+178
View File
@@ -0,0 +1,178 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
// Place all the styles related to the Main controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.responsive-header {
font-size: 3.3vw;
}
.landing-section {
position: relative;
height: 40%;
}
.lead {
font-size:18px;
}
.feature-stamp {
.stamp {
padding:1em 1.5em;
height:auto;
}
}
.or-line {
div {
width: 100%;
height: 16px;
border-bottom: 1px solid #d3d3d3;
text-align: center;
span {
font-size: 120%;
background-color: #ffffff;
padding: 0 10px;
color: #d3d3d3
}
}
}
.display-4 {
font-weight: normal;
}
.customBtn {
display: block;
text-align: center;
background: #cccccc;
color: #ffffff;
box-shadow: 0 2px 4px 0 rgba(0,0,0,.25);
-webkit-transition: background-color .218s,border-color .218s,box-shadow .218s;
transition: background-color .218s,border-color .218s,box-shadow .218s;
white-space: nowrap;
border-radius: 2px;
border: 1px solid transparent;
margin-bottom:20px;
&:hover {
cursor: pointer;
color: #ffffff;
-webkit-box-shadow: 0 0 3px 3px rgba(66,133,244,.3);
box-shadow: 0 0 3px 3px rgba(66,133,244,.3);
}
.customBtn-icon {
display: inline-block;
vertical-align: middle;
padding:13px 15px 13px 15px;
float:left;
background: #ffffff;
}
.customBtn-text {
font-size: 19px;
line-height: 48px;
font-weight: 600;
letter-spacing: .21px;
padding:0 25px;
}
.customBtn-image {
background: #ffffff;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.customBtn-google {
@extend .customBtn;
background: #4688f1;
.customBtn-image {
background: #ffffff image-url("google-logo.png") no-repeat left top;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.customBtn-twitter {
@extend .customBtn;
background: #1da1f2;
.customBtn-image {
background: #ffffff image-url("twitter-logo.png") no-repeat left top;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.customBtn-office365 {
@extend .customBtn;
background: #f65314;
.customBtn-image {
background: #ffffff image-url("office365-logo.jpeg") no-repeat left top;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.customBtn-microsoft_windows {
@extend .customBtn;
background: #00a1f1;
.customBtn-image {
background: #ffffff image-url("windows-logo.png") no-repeat left top;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.customBtn-ldap {
@extend .customBtn;
background: #d61515;
.customBtn-image {
background: #ffffff image-url("ldap-logo.png") no-repeat left top;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.customBtn-openid_connect {
@extend .customBtn;
background: #ef8e1f;
.customBtn-image {
background: #ffffff image-url("openid-logo.png") no-repeat left top;
background-size: 18px 18px;
padding:10px 10px 10px 10px;
}
}
.signin-button {
font-size: 16px;
}
.table-responsive tbody td:first-child > *:first-child {
max-height: 3em;
overflow: hidden;
max-width: 200px;
display: flex;
}
-15
View File
@@ -1,15 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
-133
View File
@@ -1,133 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
.meeting-url-button-group {
padding-top: 5px;
width: 150px;
text-align: center;
}
.meeting-url-qrcode-group {
padding-top: 5px;
width: 128px;
text-align: center;
}
.previously-joined, .actives {
list-style-type: none;
margin:auto;
width: 200px;
padding: 0;
cursor: pointer;
}
.meetings {
}
.rooms {
.table-wrapper {
padding: 40px 50px 10px 50px;
#recordings {
thead {
th:after {
content: none; //removes the sort icon in table header
}
}
.dataTables_empty {
text-align: center;
}
.timeago {
margin-left: 5px;
font-size: 13px;
cursor: pointer;
color: #999;
}
}
}
}
.img-thumbnail{
padding: 4px;
background-color: white;
border: 1px solid #dddddd;
border-radius: 4px;
&.large{
display: none;
}
&:hover + &.large{
display: inline-block;
position: absolute;
z-index: 1;
}
}
.meeting-url-group {
position: relative;
}
.recording-update-trigger {
&.recording-unpublished {
color: red;
}
&.recording-unlisted {
color: #e3a91e;
}
&.recording-published {
color: green;
}
}
.fa-spinner {
width: 100%;
text-align: center;
}
.disabled-button {
opacity: 0.5;
}
.youtube-red {
color: red;
}
.cloud-blue {
color: cornflowerblue;
}
.green-check {
color: limegreen;
}
.top-buffer {
margin-top: 8px;
}
.tooltip-wrapper {
display: inline-block;
}
#youtube-footer{
font-size: 10px;
text-align: center;
margin-top: 10px;
}
-187
View File
@@ -1,187 +0,0 @@
// 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 <http://www.gnu.org/licenses/>.
@import "bootstrap-sprockets";
@import "bootstrap";
@import "bootstrap-social";
html, body {
width: 100%;
height: 100%;
background: #ffffff;
}
.container-fluid {
height: 100%;
}
.background {
height: 350px;
width: 100%;
background-position: center;
background-size: cover;
background-repeat: no-repeat;
}
body[data-controller=landing].app-background {
@extend .background;
}
#alerts {
position: absolute;
top: 10px;
left: 50%;
margin-left: -250px;
width: 500px;
z-index: 999;
}
.header {
padding: 20px 40px;
margin-bottom: 160px;
.logo {
max-width: 150px;
max-height: 50px;
}
}
.footer {
padding: 20px;
}
.center-block {
float: none;
}
.center-panel-wrapper {
height: 100%;
}
.center-panel {
height: 100%;
.center-panel-size {
max-width: 1200px
}
.center-panel-content-size {
height: 100%;
max-width: 1100px;
}
.panel {
position: relative;
overflow: hidden;
}
.input-spacing {
margin-top: 15px;
}
.panel-footer {
background-color: white;
}
.panel-body {
padding-bottom: 40px;
}
.title-wrapper {
margin-bottom: 30px;
}
.join-form-wrapper {
.center-block {
max-width: 400px;
}
.join-form {
width: 100%;
}
.btn {
width: initial;
}
}
.meeting-url-wrapper {
.meeting-url {
cursor: default;
}
}
.loading-wrapper {
text-align: center;
}
}
.popover {
max-width: none;
}
a.signin-link {
&:hover, &:focus {
cursor: pointer;
text-decoration: none;
}
}
.signin-link {
.signin-icon {
vertical-align: middle;
width: 35px;
height: 35px;
}
.signin-button {
background: white;
width: 250px;
border: thin solid #888;
border-radius: 2px;
white-space: nowrap;
padding: 5px;
margin-bottom: 14px;
}
.signin-icon-wrapper {
display: inline-block;
width: 40px;
}
.signin-text-wrapper {
display: inline-block;
width: 200px;
}
.signin-text {
font-family: 'Roboto', sans-serif;
vertical-align: middle;
font-size: 14px;
font-weight: bold;
color: #444;
}
}
.verticle-line {
// parent must be position relative to work
width: 1px;
background-color: lightgray;
height: 100%;
position: absolute;
left: 50%;
}
.invite-join-wrapper {
position: relative;
}
.help-link {
position: absolute;
top: 0;
right: 0;
padding-right: 3px;
}
+146
View File
@@ -0,0 +1,146 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
// Place all the styles related to the Rooms controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.start-button {
font-size: 26px !important;
}
.thumbnail {
height: 60px !important;
width: auto;
}
.join-form {
font-size: 20px !important;
}
.join-input {
height: 48px;
}
.home-indicator {
font-size: 22px !important;
}
.btn-del-room {
width: 70% !important;
}
.edit_hover_class a{
visibility: hidden;
}
.edit_hover_class:hover a {
visibility: visible;
}
#room-settings-dropdown-label {
vertical-align: middle;
padding-top: 12px;
}
.room-block {
&:not(.current) {
.stamp {
opacity: 0.5;
}
}
}
#create-room-block {
border: 1px dashed lightgray;
&:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.04);
}
}
.allow-icon-click{
pointer-events: auto;
}
.cant-create-rooms-title{
align-items: center;
justify-content: center;
}
.avatar-xxxl{
width: 8rem;
height: 8rem;
line-height: 8rem;
max-width: 8rem;
margin-top: -6rem;
font-size: 5rem;
}
.bootstrap-select .dropdown-menu li.active small.text-muted{
color: #9aa0ac !important
}
.not-saved {
color: grey;
background: rgba(0, 40, 100, 0.12);
}
.dropdown-menu.show {
min-height: 0px !important;
}
.remove-shared {
text-decoration: line-through;
}
.enabled-setting {
background: lightgray;
pointer-events: none;
}
#recording-table .edit_hover_class {
word-break: break-word;
white-space: normal;
}
#room-owner-name {
line-height: 12px;
}
.create-room-button {
width: 49%;
}
#presentation-upload-label {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
padding-right: 75px;
}
#clear-room-search {
z-index: 9;
position: absolute;
right: 15px;
top: 8px;
&:hover {
cursor: pointer;
}
}
+66
View File
@@ -0,0 +1,66 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
// Place all the styles related to the Sessions controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.login {
.center-panel {
.center-panel-size {
max-width: 400px;
}
}
}
a.signin-link {
&:hover, &:focus {
cursor: pointer;
text-decoration: none;
}
}
.signin-link {
.signin-icon {
vertical-align: middle;
width: 35px;
height: 35px;
}
.signin-button {
background: white;
width: 250px;
border: thin solid #888;
border-radius: 2px;
white-space: nowrap;
padding: 5px;
margin-bottom: 14px;
}
.signin-icon-wrapper {
display: inline-block;
width: 40px;
}
.signin-text-wrapper {
display: inline-block;
width: 200px;
}
.signin-text {
vertical-align: middle;
font-size: 14px;
font-weight: bold;
color: #444;
}
}
+32
View File
@@ -0,0 +1,32 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
// Place all the styles related to the Users controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.user-role-tag{
color: white !important;
}
.shared-user {
line-height: 30px;
}
.bootstrap-select {
border: 1px solid rgba(0, 40, 100, 0.12);
}
@@ -0,0 +1,504 @@
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-LightItalic.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Italic.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBoldItalic.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: italic;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-BoldItalic.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Light.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Regular.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-SemiBold.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
font-display: swap;
src: asset-url(font-path('SourceSansPro/SourceSansPro-Bold.ttf')) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@@ -0,0 +1,24 @@
/* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
*
* Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
*/
// Declare all variables here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
$background-color: #F5F7FB;
$error-background-color: #EFE6E6;
$button-color-blue: #467FCF;
$header-height: 65px;
$footer-height: 65px;
+3 -1
View File
@@ -1,6 +1,8 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. # BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
# #
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). # Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
# #
# This program is free software; you can redistribute it and/or modify it under the # 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 # terms of the GNU Lesser General Public License as published by the Free Software
+3 -1
View File
@@ -1,6 +1,8 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. # BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
# #
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). # Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
# #
# This program is free software; you can redistribute it and/or modify it under the # 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 # terms of the GNU Lesser General Public License as published by the Free Software
@@ -1,6 +1,8 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. # BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
# #
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). # Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
# #
# This program is free software; you can redistribute it and/or modify it under the # 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 # terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,8 +16,8 @@
# You should have received a copy of the GNU Lesser General Public License along # You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. # with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
class RefreshMeetingsChannel < ApplicationCable::Channel class WaitingChannel < ApplicationCable::Channel
def subscribed def subscribed
stream_from "refresh_meetings" stream_from "#{params[:roomuid]}_waiting_channel"
end end
end end
@@ -0,0 +1,78 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
class AccountActivationsController < ApplicationController
include Emailer
include Authenticator
before_action :ensure_unauthenticated
before_action :find_user_by_token, only: :edit
before_action :find_user_by_digest, only: :resend
# GET /account_activations
def show
end
# GET /account_activations/edit
def edit
# If the user exists and is not verified and provided the correct token
if @user && !@user.activated?
# Verify user
@user.set_role(initial_user_role(@user.email)) if @user.role.nil?
@user.activate
# Redirect user to root with account pending flash if account is still pending
return redirect_to root_path,
flash: { success: I18n.t("registration.approval.signup") } if @user.has_role?(:pending)
# Redirect user to sign in path with success flash
redirect_to signin_path, flash: { success: I18n.t("verify.activated") + " " + I18n.t("verify.signin") }
else
redirect_to root_path, flash: { alert: I18n.t("verify.invalid") }
end
end
# POST /account_activations/resend
def resend
if @user.activated?
# User is already verified
flash[:alert] = I18n.t("verify.already_verified")
else
# Resend
send_activation_email(@user, @user.create_activation_token)
end
redirect_to root_path
end
private
def find_user_by_token
return redirect_to root_path, flash: { alert: I18n.t("verify.invalid") } unless params[:token].present?
@user = User.find_by!(activation_digest: User.hash_token(params[:token]), provider: @user_domain)
end
def find_user_by_digest
@user = User.find_by!(activation_digest: params[:digest], provider: @user_domain)
end
def ensure_unauthenticated
redirect_to current_user.main_room || root_path if current_user
end
end
+372
View File
@@ -0,0 +1,372 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
class AdminsController < ApplicationController
include Pagy::Backend
include Themer
include Emailer
include Recorder
include Rolify
include Populator
manage_users = [:edit_user, :promote, :demote, :ban_user, :unban_user, :approve, :reset, :merge_user]
manage_deleted_users = [:undelete]
authorize_resource class: false
before_action :find_user, only: manage_users
before_action :find_deleted_user, only: manage_deleted_users
before_action :verify_admin_of_user, only: [manage_users, manage_deleted_users]
# GET /admins
def index
# Initializa the data manipulation variables
@search = params[:search] || ""
@order_column = params[:column] && params[:direction] != "none" ? params[:column] : "created_at"
@order_direction = params[:direction] && params[:direction] != "none" ? params[:direction] : "DESC"
@tab = params[:tab] || "active"
@role = params[:role] ? Role.find_by(name: params[:role], provider: @user_domain) : nil
users = if @tab == "invited"
invited_users_list
else
manage_users_list
end
@pagy, @users = pagy(users)
end
# GET /admins/site_settings
def site_settings
@tab = params[:tab] || "appearance"
end
# GET /admins/server_recordings
def server_recordings
server_rooms = rooms_list_for_recordings
@search, @order_column, @order_direction, recs =
all_recordings(server_rooms, params.permit(:search, :column, :direction), true, true)
@pagy, @recordings = pagy_array(recs)
end
# GET /admins/rooms
def server_rooms
@search = params[:search] || ""
@order_column = params[:column] && params[:direction] != "none" ? params[:column] : "status"
@order_direction = params[:direction] && params[:direction] != "none" ? params[:direction] : "DESC"
begin
meetings = all_running_meetings[:meetings]
rescue BigBlueButton::BigBlueButtonException
flash[:alert] = I18n.t("administrator.rooms.timeout", server: I18n.t("bigbluebutton"))
meetings = []
end
@order_column = "created_at" if meetings.empty?
@running_room_bbb_ids = meetings.pluck(:meetingID)
@participants_count = {}
meetings.each do |meet|
@participants_count[meet[:meetingID]] = meet[:participantCount]
end
@pagy, @rooms = pagy_array(server_rooms_list)
end
# GET /admins/room_configuration
def room_configuration
end
# MANAGE USERS
# GET /admins/edit/:user_uid
def edit_user
session[:prev_url] = request.referer if request.referer.present?
end
# POST /admins/ban/:user_uid
def ban_user
@user.set_role :denied
redirect_back fallback_location: admins_path, flash: { success: I18n.t("administrator.flash.banned") }
end
# POST /admins/unban/:user_uid
def unban_user
@user.set_role :user
redirect_back fallback_location: admins_path, flash: { success: I18n.t("administrator.flash.unbanned") }
end
# POST /admins/approve/:user_uid
def approve
@user.set_role :user
send_user_approved_email(@user)
redirect_back fallback_location: admins_path, flash: { success: I18n.t("administrator.flash.approved") }
end
# POST /admins/approve/:user_uid
def undelete
# Undelete the user and all of his rooms
@user.undelete!
@user.rooms.deleted.each(&:undelete!)
redirect_back fallback_location: admins_path, flash: { success: I18n.t("administrator.flash.restored") }
end
# POST /admins/invite
def invite
emails = params[:invite_user][:email].split(",")
emails.each do |email|
invitation = create_or_update_invite(email)
send_invitation_email(current_user.name, email, invitation.invite_token)
end
redirect_back fallback_location: admins_path
end
# GET /admins/reset
def reset
send_password_reset_email(@user, @user.create_reset_digest)
if session[:prev_url].present?
redirect_path = session[:prev_url]
session.delete(:prev_url)
else
redirect_path = admins_path
end
redirect_to redirect_path, flash: { success: I18n.t("administrator.flash.reset_password") }
end
# POST /admins/merge/:user_uid
def merge_user
begin
# Get uid of user that will be merged into the other account
uid_to_merge = params[:merge]
logger.info "#{current_user.uid} is attempting to merge #{uid_to_merge} into #{@user.uid}"
# Check to make sure the 2 users are unique
raise "Can not merge the user into themself" if uid_to_merge == @user.uid
# Find user to merge
user_to_merge = User.find_by(uid: uid_to_merge)
# Move over user's rooms
user_to_merge.rooms.each do |room|
room.owner = @user
room.name = "(#{I18n.t('merged')}) #{room.name}"
room.save!
end
# Reload user to update merge rooms
user_to_merge.reload
# Delete merged user
user_to_merge.destroy(true)
rescue => e
logger.info "Failed to merge #{uid_to_merge} into #{@user.uid}: #{e}"
flash[:alert] = I18n.t("administrator.flash.merge_fail")
else
logger.info "#{current_user.uid} successfully merged #{uid_to_merge} into #{@user.uid}"
flash[:success] = I18n.t("administrator.flash.merge_success")
end
redirect_back fallback_location: admins_path
end
# GET /admins/merge_list
def merge_list
# Returns a list of users that can merged into another user
initial_list = User.without_role(:super_admin)
.where.not(uid: current_user.uid)
.merge_list_search(params[:search])
.pluck_to_hash(:uid, :name, :email)
initial_list = initial_list.where(provider: @user_domain) if Rails.configuration.loadbalanced_configuration
# Respond with JSON object of users
respond_to do |format|
format.json { render body: initial_list.to_json }
end
end
# SITE SETTINGS
# POST /admins/update_settings
def update_settings
tab = params[:tab] || "settings"
@settings.update_value(params[:setting], params[:value])
flash_message = I18n.t("administrator.flash.settings")
if params[:value] == "Default Recording Visibility"
flash_message += ". " + I18n.t("administrator.site_settings.recording_visibility.warning")
end
redirect_to admin_site_settings_path(tab: tab), flash: { success: flash_message }
end
# POST /admins/color
def coloring
@settings.update_value("Primary Color", params[:value])
@settings.update_value("Primary Color Lighten", color_lighten(params[:value]))
@settings.update_value("Primary Color Darken", color_darken(params[:value]))
redirect_to admin_site_settings_path(tab: "appearance"), flash: { success: I18n.t("administrator.flash.settings") }
end
# POST /admins/registration_method/:method
def registration_method
new_method = Rails.configuration.registration_methods[params[:value].to_sym]
# Only allow change to Join by Invitation if user has emails enabled
if !Rails.configuration.enable_email_verification && new_method == Rails.configuration.registration_methods[:invite]
redirect_to admin_site_settings_path(tab: "settings"),
flash: { alert: I18n.t("administrator.flash.invite_email_verification") }
else
@settings.update_value("Registration Method", new_method)
redirect_to admin_site_settings_path(tab: "settings"),
flash: { success: I18n.t("administrator.flash.registration_method_updated") }
end
end
# POST /admins/clear_auth
def clear_auth
User.include_deleted.where(provider: @user_domain).update_all(social_uid: nil)
redirect_to admin_site_settings_path(tab: "settings"), flash: { success: I18n.t("administrator.flash.settings") }
end
# POST /admins/clear_cache
def clear_cache
Rails.cache.delete("#{@user_domain}/getUser")
Rails.cache.delete("#{@user_domain}/getUserGreenlightCredentials")
redirect_to admin_site_settings_path(tab: "settings"), flash: { success: I18n.t("administrator.flash.settings") }
end
# POST /admins/log_level
def log_level
Rails.logger.level = params[:value].to_i
redirect_to admin_site_settings_path(tab: "administration"), flash: { success: I18n.t("administrator.flash.settings") }
end
# ROOM CONFIGURATION
# POST /admins/update_room_configuration
def update_room_configuration
@settings.update_value(params[:setting], params[:value])
flash_message = I18n.t("administrator.flash.room_configuration")
redirect_to admin_room_configuration_path, flash: { success: flash_message }
end
# ROLES
# GET /admins/roles
def roles
@roles = all_roles(params[:selected_role])
end
# POST /admins/role
# This method creates a new role scoped to the users provider
def new_role
new_role = create_role(params[:role][:name])
return redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_create") } if new_role.nil?
redirect_to admin_roles_path(selected_role: new_role.id)
end
# PATCH /admin/roles/order
# This updates the priority of a site's roles
# Note: A lower priority role will always get used before a higher priority one
def change_role_order
unless update_priority(params[:role])
redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_order") }
end
end
# POST /admin/role/:role_id
# This method updates the permissions assigned to a role
def update_role
role = Role.find(params[:role_id])
flash[:alert] = I18n.t("administrator.roles.invalid_update") unless update_permissions(role)
redirect_to admin_roles_path(selected_role: role.id)
end
# DELETE admins/role/:role_id
# This deletes a role
def delete_role
role = Role.find(params[:role_id])
# Make sure no users are assigned to the role and the role isn't a reserved role
# before deleting
if role.users.count.positive?
flash[:alert] = I18n.t("administrator.roles.role_has_users", user_count: role.users.count)
return redirect_to admin_roles_path(selected_role: role.id)
elsif Role::RESERVED_ROLE_NAMES.include?(role) || role.provider != @user_domain ||
role.priority <= current_user.role.priority
return redirect_to admin_roles_path(selected_role: role.id)
else
role.role_permissions.delete_all
role.delete
end
redirect_to admin_roles_path
end
private
def find_user
@user = User.find_by(uid: params[:user_uid])
end
def find_deleted_user
@user = User.deleted.find_by(uid: params[:user_uid])
end
# Verifies that admin is an administrator of the user in the action
def verify_admin_of_user
redirect_to admins_path,
flash: { alert: I18n.t("administrator.flash.unauthorized") } unless current_user.admin_of?(@user, "can_manage_users")
end
# Creates the invite if it doesn't exist, or updates the updated_at time if it does
def create_or_update_invite(email)
invite = Invitation.find_by(email: email, provider: @user_domain)
# Invite already exists
if invite.present?
# Updates updated_at to now
invite.touch
else
# Creates invite
invite = Invitation.create(email: email, provider: @user_domain)
end
invite
end
end
+272 -25
View File
@@ -1,6 +1,8 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. # BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
# #
# Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below). # Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
# #
# This program is free software; you can redistribute it and/or modify it under the # 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 # terms of the GNU Lesser General Public License as published by the Free Software
@@ -14,46 +16,291 @@
# You should have received a copy of the GNU Lesser General Public License along # You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. # with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
require 'bigbluebutton_api'
require 'digest/sha1'
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
protect_from_forgery with: :exception include BbbServer
before_action :set_locale include Errors
MEETING_NAME_LIMIT = 200
USER_NAME_LIMIT = 100
def set_locale before_action :block_unknown_hosts, :redirect_to_https, :set_user_domain, :set_user_settings, :maintenance_mode?,
I18n.locale = http_accept_language.language_region_compatible_from(I18n.available_locales) :migration_error?, :user_locale, :check_admin_password, :check_user_role
end
protect_from_forgery with: :exceptions
# Retrieves the current user.
def current_user def current_user
@current_user ||= User.find_by(id: session[:user_id]) @current_user ||= User.includes(:role, :main_room).find_by(id: session[:user_id])
if Rails.configuration.loadbalanced_configuration
if @current_user && !@current_user.has_role?(:super_admin) &&
@current_user.provider != @user_domain
@current_user = nil
session.clear
end
end
@current_user
end end
helper_method :current_user helper_method :current_user
def bbb_server
@bbb_server ||= Rails.configuration.loadbalanced_configuration ? bbb(@user_domain) : bbb("greenlight")
end
# Block unknown hosts to mitigate host header injection attacks
def block_unknown_hosts
return if Rails.configuration.hosts.blank?
raise UnsafeHostError, "#{request.host} is not a safe host" unless Rails.configuration.hosts.include?(request.host)
end
# Force SSL
def redirect_to_https
if Rails.configuration.loadbalanced_configuration && request.headers["X-Forwarded-Proto"] == "http"
redirect_to protocol: "https://"
end
end
# Sets the user domain variable
def set_user_domain
if Rails.env.test? || !Rails.configuration.loadbalanced_configuration
@user_domain = "greenlight"
else
@user_domain = parse_user_domain(request.host)
check_provider_exists
end
end
# Sets the settinfs variable
def set_user_settings
@settings = Setting.includes(:features).find_or_create_by(provider: @user_domain)
end
# Redirects the user to a Maintenance page if turned on
def maintenance_mode?
if ENV["MAINTENANCE_MODE"] == "true"
render "errors/greenlight_error", status: 503, formats: :html,
locals: {
status_code: 503,
message: I18n.t("errors.maintenance.message"),
help: I18n.t("errors.maintenance.help"),
}
end
maintenance_string = @settings.get_value("Maintenance Banner").presence || Rails.configuration.maintenance_window
if maintenance_string.present?
flash.now[:maintenance] = maintenance_string unless cookies[:maintenance_window] == maintenance_string
end
end
# Show an information page when migration fails and there is a version error.
def migration_error?
render :migration_error, status: 500 unless ENV["DB_MIGRATE_FAILED"].blank?
end
# Sets the appropriate locale.
def user_locale(user = current_user)
locale = if user && user.language != 'default'
user.language
else
Rails.configuration.default_locale.presence || http_accept_language.language_region_compatible_from(I18n.available_locales)
end
begin
I18n.locale = locale.tr('-', '_') unless locale.nil?
rescue
# Default to English if there are any issues in language
logger.error("Support: User locale is not supported (#{locale}")
I18n.locale = "en"
end
end
# Checks to make sure that the admin has changed his password from the default
def check_admin_password
if current_user&.has_role?(:admin) && current_user.email == "admin@example.com" &&
current_user&.greenlight_account? && current_user&.authenticate(Rails.configuration.admin_password_default)
flash.now[:alert] = I18n.t("default_admin",
edit_link: change_password_path(user_uid: current_user.uid)).html_safe
end
end
# Checks if the user is banned and logs him out if he is
def check_user_role
if current_user&.has_role? :denied
session.delete(:user_id)
redirect_to root_path, flash: { alert: I18n.t("registration.banned.fail") }
elsif current_user&.has_role? :pending
session.delete(:user_id)
redirect_to root_path, flash: { alert: I18n.t("registration.approval.fail") }
end
end
# Relative root helper (when deploying to subdirectory).
def relative_root def relative_root
Rails.configuration.relative_url_root || "" Rails.configuration.relative_url_root || ""
end end
helper_method :relative_root helper_method :relative_root
def meeting_name_limit # Determines if the BigBlueButton endpoint is configured (or set to default).
MEETING_NAME_LIMIT
end
helper_method :meeting_name_limit
def user_name_limit
USER_NAME_LIMIT
end
helper_method :user_name_limit
def bigbluebutton_endpoint_default? def bigbluebutton_endpoint_default?
return false if Rails.configuration.loadbalanced_configuration
Rails.configuration.bigbluebutton_endpoint_default == Rails.configuration.bigbluebutton_endpoint Rails.configuration.bigbluebutton_endpoint_default == Rails.configuration.bigbluebutton_endpoint
end end
helper_method :bigbluebutton_endpoint_default? helper_method :bigbluebutton_endpoint_default?
def qrcode_generation_enabled? def allow_greenlight_accounts?
Rails.configuration.enable_qrcode_generation return Rails.configuration.allow_user_signup unless Rails.configuration.loadbalanced_configuration
return false unless @user_domain && !@user_domain.empty? && Rails.configuration.allow_user_signup
return false if @user_domain == "greenlight"
# Proceed with retrieving the provider info
begin
provider_info = retrieve_provider_info(@user_domain, 'api2', 'getUserGreenlightCredentials')
provider_info['provider'] == 'greenlight'
rescue => e
logger.error "Error in checking if greenlight accounts are allowed: #{e}"
false
end
end
helper_method :allow_greenlight_accounts?
# Determine if Greenlight is configured to allow user signups.
def allow_user_signup?
Rails.configuration.allow_user_signup
end
helper_method :allow_user_signup?
# Gets all configured omniauth providers.
def configured_providers
Rails.configuration.providers.select do |provider|
Rails.configuration.send("omniauth_#{provider}")
end
end
helper_method :configured_providers
# Indicates whether users are allowed to share rooms
def shared_access_allowed
@settings.get_value("Shared Access") == "true"
end
helper_method :shared_access_allowed
# Indicates whether users are allowed to share rooms
def recording_consent_required?
@settings.get_value("Require Recording Consent") == "true"
end
helper_method :recording_consent_required?
# Returns a list of allowed file types
def allowed_file_types
Rails.configuration.allowed_file_types
end
helper_method :allowed_file_types
# Allows admins to edit a user's details
def can_edit_user?(user_to_edit, editting_user)
return user_to_edit.greenlight_account? if user_to_edit == editting_user
editting_user.admin_of?(user_to_edit, "can_manage_users")
end
helper_method :can_edit_user?
# Returns the page that the logo redirects to when clicked on
def home_page
return admins_path if current_user.has_role? :super_admin
return current_user.main_room if current_user.role.get_permission("can_create_rooms")
cant_create_rooms_path
end
helper_method :home_page
# Parses the url for the user domain
def parse_user_domain(hostname)
return hostname.split('.').first if Rails.configuration.url_host.empty?
Rails.configuration.url_host.split(',').each do |url_host|
return hostname.chomp(url_host).chomp('.') if hostname.include?(url_host)
end
''
end
# Include user domain in lograge logs
def append_info_to_payload(payload)
super
payload[:host] = @user_domain
end
# Manually handle BigBlueButton errors
rescue_from BigBlueButton::BigBlueButtonException do |ex|
logger.error "BigBlueButtonException: #{ex}"
render "errors/bigbluebutton_error"
end
# Manually deal with 401 errors
rescue_from CanCan::AccessDenied do |_exception|
if current_user
render "errors/greenlight_error"
else
# Store the current url as a cookie to redirect to after sigining in
cookies[:return_to] = request.url
# Get the correct signin path
path = if allow_greenlight_accounts?
signin_path
elsif Rails.configuration.loadbalanced_configuration
"#{Rails.configuration.relative_url_root}/auth/bn_launcher"
else
signin_path
end
redirect_to path
end
end
private
def check_provider_exists
# Checks to see if the user exists
begin
# Check if the session has already checked that the user exists
# and return true if they did for this domain
return if session[:provider_exists] == @user_domain
retrieve_provider_info(@user_domain, 'api2', 'getUserGreenlightCredentials')
# Add a session variable if the provider exists
session[:provider_exists] = @user_domain
rescue => e
logger.error "Error in retrieve provider info: #{e}"
@hide_signin = true
if e.message.eql? "No user with that id exists"
set_default_settings
render "errors/greenlight_error", locals: { message: I18n.t("errors.not_found.user_not_found.message"),
help: I18n.t("errors.not_found.user_not_found.help") }
elsif e.message.eql? "Provider not included."
set_default_settings
render "errors/greenlight_error", locals: { message: I18n.t("errors.not_found.user_missing.message"),
help: I18n.t("errors.not_found.user_missing.help") }
elsif e.message.eql? "That user has no configured provider."
if Setting.exists?(provider: @user_domain)
# Keep the branding
@settings = Setting.find_by(provider: @user_domain)
else
set_default_settings
end
render "errors/greenlight_error", locals: { status_code: 501,
message: I18n.t("errors.no_provider.message"),
help: I18n.t("errors.no_provider.help") }
else
set_default_settings
render "errors/greenlight_error", locals: { status_code: 500, message: I18n.t("errors.internal.message"),
help: I18n.t("errors.internal.help"), display_back: true }
end
end
end
def set_default_settings
# Use the default site settings
@user_domain = "greenlight"
@settings = Setting.find_or_create_by(provider: @user_domain)
end end
helper_method :qrcode_generation_enabled?
end end
-383
View File
@@ -1,383 +0,0 @@
# 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 <http://www.gnu.org/licenses/>.
class BbbController < ApplicationController
include BbbApi
before_action :authorize_recording_owner!, only: [:update_recordings, :delete_recordings]
before_action :load_and_authorize_room_owner!, only: [:end]
skip_before_action :verify_authenticity_token, only: :callback
# GET /:resource/:id/join
# GET /:resource/:room_id/:id/join
def join
if params[:name].blank?
return render_bbb_response(
messageKey: "missing_parameter",
message: "user name was not included",
status: :unprocessable_entity
)
elsif params[:name].size > user_name_limit
return render_bbb_response(
messageKey: "invalid_parameter",
message: "user name is too long",
status: :unprocessable_entity
)
elsif params[:id].size > meeting_name_limit
return render_bbb_response(
messageKey: "invalid_parameter",
message: "meeting name is too long",
status: :unprocessable_entity
)
else
if params[:room_id]
user = User.find_by encrypted_id: params[:room_id]
if !user
return render_bbb_response(
messageKey: "not_found",
message: "User Not Found",
status: :not_found
)
end
meeting_id = "#{params[:room_id]}-#{params[:id]}"
meeting_name = params[:id]
meeting_path = "#{URI.encode(params[:room_id])}/#{URI.encode(params[:id]).gsub('/','%2F')}"
else
user = User.find_by encrypted_id: params[:id]
meeting_id = params[:id]
meeting_path = URI.encode(meeting_id).gsub('/','%2F')
end
options = if user
{
wait_for_moderator: true,
meeting_recorded: true,
meeting_name: meeting_name,
room_owner: params[:room_id],
user_is_moderator: current_user == user
}
else
{
user_is_moderator: true
}
end
base_url = "#{request.base_url}#{relative_root}/#{params[:resource]}/#{meeting_path}"
options[:meeting_logout_url] = base_url
options[:hook_url] = "#{base_url}/callback"
options[:moderator_message] = t('moderator_default_message', url: "<a href=\"#{base_url}\" target=\"_blank\"><u>#{base_url}</u></a>")
bbb_res = bbb_join_url(
meeting_id,
params[:name],
options
)
# the user can join the meeting
if user
if bbb_res[:returncode] && current_user == user
JoinMeetingJob.perform_later(user, params[:id], base_url)
WaitingList.empty(options[:room_owner], options[:meeting_name])
# the user can't join because they are on mobile and HTML5 is not enabled.
elsif bbb_res[:messageKey] == 'unable_to_join'
NotifyUserCantJoinJob.perform_later(user.encrypted_id, params[:id], params[:name])
# user will be waiting for a moderator
else
NotifyUserWaitingJob.perform_later(user.encrypted_id, params[:id], params[:name])
end
end
render_bbb_response bbb_res, bbb_res[:response]
end
end
# POST /:resource/:room_id/:id/callback
# Endpoint for webhook calls from BigBlueButton
def callback
# respond with 200 anyway so BigBlueButton knows the hook call was ok
# but abort execution
head(:ok) && return unless validate_checksum
begin
event = params['event']
data = event.is_a?(String) ? JSON.parse(params['event']) : event
treat_callback_event(data)
rescue Exception => e
logger.error "Error parsing webhook data. Data: #{data}, exception: #{e.inspect}"
# respond with 200 anyway so BigBlueButton knows the hook call was ok
head(:ok) && return
end
end
# DELETE /rooms/:room_id/:id/end
def end
load_and_authorize_room_owner!
bbb_res = bbb_end_meeting "#{@user.encrypted_id}-#{params[:id]}"
if bbb_res[:returncode] || bbb_res[:status] == :not_found
EndMeetingJob.perform_later(@user.encrypted_id, params[:id])
bbb_res[:status] = :ok
end
render_bbb_response bbb_res
end
# GET /rooms/:room_id/recordings
# GET /rooms/:room_id/:id/recordings
def recordings
load_room!
# bbb_res = bbb_get_recordings "#{@user.encrypted_id}-#{params[:id]}"
options = { "meta_room-id": @user.encrypted_id }
if params[:id]
options["meta_meeting-name"] = params[:id]
end
bbb_res = bbb_get_recordings(options)
render_bbb_response bbb_res, bbb_res[:recordings]
end
# PATCH /rooms/:room_id/recordings/:record_id
# PATCH /rooms/:room_id/:id/recordings/:record_id
def update_recordings
published = params[:published] == 'true'
metadata = params.select{ |k, v| k.match(/^meta_/) }
bbb_res = bbb_update_recordings(params[:record_id], published, metadata)
if bbb_res[:returncode]
RecordingUpdatesJob.perform_later(@user.encrypted_id, params[:record_id])
end
render_bbb_response bbb_res
end
# DELETE /rooms/:room_id/recordings/:record_id
# DELETE /rooms/:room_id/:id/recordings/:record_id
def delete_recordings
recording = bbb_get_recordings({recordID: params[:record_id]})[:recordings].first
bbb_res = bbb_delete_recordings(params[:record_id])
if bbb_res[:returncode]
RecordingDeletesJob.perform_later(@user.encrypted_id, params[:record_id], recording[:metadata][:"meeting-name"])
end
render_bbb_response bbb_res
end
# POST /rooms/:room_id/recordings/:record_id
# POST /rooms/:room_id/:id/recordings/:record_id
def youtube_publish
# If we can't get the client, then they don't have a Youtube account.
begin
client = Yt::Account.new(access_token: current_user.token)
video = client.upload_video(get_webcams_url(params[:record_id]),
title: params[:video_title],
description: t('youtube_description', url: 'https://bigbluebutton.org/'),
privacy_status: params[:privacy_status])
rescue => e
errors = e.response_body['error']['errors']
# Many complications, start by getting them to refresh their token.
if errors.length > 1
redirect_url = user_login_url
else
error = errors[0]
if error['message'] == "Unauthorized"
redirect_url = 'https://m.youtube.com/create_channel'
else
# In this case, they don't have a youtube channel connected to their account, so prompt to create one.
redirect_url = user_login_url
end
end
end
render json: {:url => redirect_url}
end
# POST /rooms/:room_id/recordings/can_upload
def can_upload
# The recording is uploadable if it contains webcam data and they are logged in through Google.
if Rails.configuration.enable_youtube_uploading == false then
uploadable = 'uploading_disabled'
elsif current_user.provider != 'google'
uploadable = 'invalid_provider'
else
uploadable = (Faraday.head(get_webcams_url(params[:rec_id])).status == 200 && current_user.provider == 'google').to_s
end
render json: {:uploadable => uploadable}
end
def get_webcams_url(recording_id)
uri = URI.parse(Rails.configuration.bigbluebutton_endpoint)
uri.scheme + '://' + uri.host + '/presentation/' + recording_id + '/video/webcams.webm'
end
private
def load_room!
@user = User.find_by encrypted_id: params[:room_id]
if !@user
render head(:not_found) && return
end
end
def load_and_authorize_room_owner!
load_room!
if !current_user || current_user != @user
render head(:unauthorized) && return
end
end
def authorize_recording_owner!
load_and_authorize_room_owner!
recordings = bbb_get_recordings({recordID: params[:record_id]})[:recordings]
recordings.each do |recording|
if recording[:recordID] == params[:record_id]
return true
end
end
render head(:not_found) && return
end
def render_bbb_response(bbb_res, response={})
@messageKey = bbb_res[:messageKey]
@message = bbb_res[:message]
@status = bbb_res[:status]
@response = response
render status: @status
end
def read_body(request)
request.body.read.force_encoding("UTF-8")
end
def treat_callback_event(event)
# Check if the event is a BigBlueButton 2.0 event.
if event.has_key?('envelope')
eventName = (event.present? && event['envelope'].present?) ? event['envelope']['name'] : nil
else # The event came from BigBlueButton 1.1 (or earlier).
eventName = (event.present? && event['header'].present?) ? event['header']['name'] : nil
end
# a recording is ready
if eventName == "publish_ended"
if event['payload'] && event['payload']['metadata'] && event['payload']['meeting_id']
token = event['payload']['metadata'][META_TOKEN]
room_id = event['payload']['metadata']['room-id']
record_id = event['payload']['meeting_id']
duration_data = event['payload']['duration']
# the webhook event doesn't have all the data we need, so we need
# to send a getRecordings anyway
# TODO: if the webhooks included all data in the event we wouldn't need this
rec_info = bbb_get_recordings({recordID: record_id})
rec_info = rec_info[:recordings].first
RecordingCreatedJob.perform_later(token, room_id, parse_recording_for_view(rec_info))
rec_info[:duration] = duration_data.to_json
# send an email to the owner of this recording, if defined
if Rails.configuration.mail_notifications
owner = User.find_by(encrypted_id: room_id)
RecordingReadyEmailJob.perform_later(owner, parse_recording_for_view(rec_info)) if owner.present?
end
else
logger.error "Bad format for event #{event}, won't process"
end
elsif eventName == "meeting_created_message" || eventName == "MeetingCreatedEvtMsg"
# Fire an Actioncable event that updates _previously_joined for the client.
actioncable_event('create')
elsif eventName == "meeting_destroyed_event" || eventName == "MeetingEndedEvtMsg"
actioncable_event('destroy')
# Since the meeting is destroyed we have no way get the callback url to remove the meeting, so we must build it.
remove_url = build_callback_url(params[:id], params[:room_id])
# Remove webhook for the meeting.
webhook_remove(remove_url)
elsif eventName == "user_joined_message"
actioncable_event('join', {user_id: event['payload']['user']['extern_userid'], user: event['payload']['user']['name'], role: event['payload']['user']['role']})
elsif eventName == "UserJoinedMeetingEvtMsg"
actioncable_event('join', {user_id: event['core']['body']['intId'], user: event['core']['body']['name'], role: event['core']['body']['role']})
elsif eventName == "user_left_message"
actioncable_event('leave', {user_id: event['payload']['user']['extern_userid']})
elsif eventName == "UserLeftMeetingEvtMsg"
actioncable_event('leave', {user_id: event['core']['body']['intId']})
else
logger.info "Callback event will not be treated. Event name: #{eventName}"
end
render head(:ok) && return
end
def build_callback_url(id, room_id)
"#{request.base_url}#{relative_root}/rooms/#{room_id}/#{URI.encode(id)}/callback"
end
def actioncable_event(method, data = {})
data = {method: method, meeting: params[:id], room: params[:room_id]}.merge(data)
ActionCable.server.broadcast('refresh_meetings', data)
end
# Validates the checksum received in a callback call.
# If the checksum doesn't match, renders an ok and aborts execution.
def validate_checksum
secret = ENV['BIGBLUEBUTTON_SECRET']
checksum = params["checksum"]
return false unless checksum
# Message is only encoded if it comes from the bbb-webhooks node application.
# The post process script does not encode it's response body.
begin
# Decode and break the body into parts.
parts = URI.decode_www_form(read_body(request))
# Convert the data into the correct checksum format, replace ruby hash arrows.
converted_data = {parts[0][0]=>parts[0][1],parts[1][0]=>parts[1][1].to_i}.to_s.gsub!('=>', ':')
# Manually remove the space between the two elements.
converted_data[converted_data.rindex("timestamp") - 2] = ''
callback_url = uri_remove_param(request.original_url, "checksum")
checksum_str = "#{callback_url}#{converted_data}#{secret}"
rescue
# Data was not recieved encoded (sent from post process script).
data = read_body(request)
callback_url = uri_remove_param(request.original_url, "checksum")
checksum_str = "#{callback_url}#{data}#{secret}"
end
calculated_checksum = Digest::SHA1.hexdigest(checksum_str)
if calculated_checksum != checksum
logger.error "Checksum did not match. Calculated: #{calculated_checksum}, received: #{checksum}"
false
else
true
end
end
# Removes parameters from an URI
def uri_remove_param(uri, params = nil)
return uri unless params
params = Array(params)
uri_parsed = URI.parse(uri)
return uri unless uri_parsed.query
new_params = uri_parsed.query.gsub(/&amp;/, '&').split('&').reject { |q| params.include?(q.split('=').first) }
uri = uri.split('?').first
if new_params.count > 0
"#{uri}?#{new_params.join('&')}"
else
uri
end
end
end
+123
View File
@@ -0,0 +1,123 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
module Authenticator
extend ActiveSupport::Concern
# Logs a user into GreenLight.
def login(user)
migrate_twitter_user(user)
session[:user_id] = user.id
user.update(last_login: Time.zone.now)
logger.info("Support: #{user.email} has successfully logged in.")
# If there are not terms, or the user has accepted them, check for email verification
if !Rails.configuration.terms || user.accepted_terms
check_email_verified(user)
else
redirect_to terms_path
end
end
# If email verification is disabled, or the user has verified, go to their room
def check_email_verified(user)
# Admin users should be redirected to the admin page
if user.has_role? :super_admin
redirect_to admins_path
elsif user.activated?
# Dont redirect to any of these urls
dont_redirect_to = [root_url, signin_url, ldap_signin_url, ldap_callback_url, signup_url, unauthorized_url,
internal_error_url, not_found_url]
url = if cookies[:return_to] && !dont_redirect_to.include?(cookies[:return_to])
cookies[:return_to]
elsif user.role.get_permission("can_create_rooms")
user.main_room
else
cant_create_rooms_path
end
# Delete the cookie if it exists
cookies.delete :return_to if cookies[:return_to]
redirect_to url
else
redirect_to resend_path
end
end
def ensure_unauthenticated_except_twitter
redirect_to current_user.main_room || root_path if current_user && params[:old_twitter_user_id].nil?
end
# Logs current user out of GreenLight.
def logout
session.delete(:user_id) if current_user
end
# Check if the user is using local accounts
def auth_changed_to_local?(user)
Rails.configuration.loadbalanced_configuration && user.social_uid.present? && allow_greenlight_accounts?
end
# Check if the user exists under the same email with no social uid and that social accounts are allowed
def auth_changed_to_social?(email)
Rails.configuration.loadbalanced_configuration &&
User.exists?(email: email, provider: @user_domain, social_uid: nil) &&
!allow_greenlight_accounts?
end
# Sets the initial user role based on the email mapping
def initial_user_role(email)
mapping = @settings.get_value("Email Mapping")
return "user" unless mapping.present?
mapping.split(",").each do |map|
email_role = map.split("=")
return email_role[1] if email.ends_with?(email_role[0])
end
"user" # default to user if role not found
end
private
# Migrates all of the twitter users rooms to the new account
def migrate_twitter_user(user)
if !session["old_twitter_user_id"].nil? && user.provider != "twitter"
old_user = User.find(session["old_twitter_user_id"])
old_user.rooms.each do |room|
room.owner = user
room.name = "Old " + room.name if room.id == old_user.main_room.id
room.save!
end
# Query for the old user again so the migrated rooms don't get deleted
old_user.reload
old_user.destroy!
session["old_twitter_user_id"] = nil
flash[:success] = I18n.t("registration.deprecated.merge_success")
end
end
end
+120
View File
@@ -0,0 +1,120 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
require 'bigbluebutton_api'
module BbbServer
extend ActiveSupport::Concern
include BbbApi
META_LISTED = "gl-listed"
# Checks if a room is running on the BigBlueButton server.
def room_running?(bbb_id)
bbb_server.is_meeting_running?(bbb_id)
end
# Returns a list of all running meetings
def all_running_meetings
bbb_server.get_meetings
end
def get_recordings(meeting_id)
bbb_server.get_recordings(meetingID: meeting_id)
end
def get_multiple_recordings(meeting_ids)
bbb_server.get_recordings(meetingID: meeting_ids)
end
# Returns a URL to join a user into a meeting.
def join_path(room, name, options = {}, uid = nil)
# Create the meeting, even if it's running
start_session(room, options)
# Determine the password to use when joining.
password = options[:user_is_moderator] ? room.moderator_pw : room.attendee_pw
# Generate the join URL.
join_opts = {}
join_opts[:userID] = uid if uid
join_opts[:join_via_html5] = true
bbb_server.join_meeting_url(room.bbb_id, name, password, join_opts)
end
# Creates a meeting on the BigBlueButton server.
def start_session(room, options = {})
create_options = {
record: options[:record].to_s,
logoutURL: options[:meeting_logout_url] || '',
moderatorPW: room.moderator_pw,
attendeePW: room.attendee_pw,
moderatorOnlyMessage: options[:moderator_message],
"meta_#{META_LISTED}": options[:recording_default_visibility] || false,
"meta_bbb-origin-version": Greenlight::Application::VERSION,
"meta_bbb-origin": "Greenlight",
"meta_bbb-origin-server-name": options[:host]
}
create_options[:muteOnStart] = options[:mute_on_start] if options[:mute_on_start]
create_options[:guestPolicy] = "ASK_MODERATOR" if options[:require_moderator_approval]
# Send the create request.
begin
meeting = if room.presentation.attached?
modules = BigBlueButton::BigBlueButtonModules.new
url = rails_blob_url(room.presentation).gsub("&", "%26")
logger.info("Support: Room #{room.uid} starting using presentation: #{url}")
modules.add_presentation(:url, url)
bbb_server.create_meeting(room.name, room.bbb_id, create_options, modules)
else
bbb_server.create_meeting(room.name, room.bbb_id, create_options)
end
unless meeting[:messageKey] == 'duplicateWarning'
room.update_attributes(sessions: room.sessions + 1, last_session: DateTime.now)
end
rescue BigBlueButton::BigBlueButtonException => e
puts "BigBlueButton failed on create: #{e.key}: #{e.message}"
raise e
end
end
# Gets the number of recordings for this room
def recording_count(bbb_id)
bbb_server.get_recordings(meetingID: bbb_id)[:recordings].length
end
# Update a recording from a room
def update_recording(record_id, meta)
meta[:recordID] = record_id
bbb_server.send_api_request("updateRecordings", meta)
end
# Deletes a recording from a room.
def delete_recording(record_id)
bbb_server.delete_recordings(record_id)
end
# Deletes all recordings associated with the room.
def delete_all_recordings(bbb_id)
record_ids = bbb_server.get_recordings(meetingID: bbb_id)[:recordings].pluck(:recordID)
bbb_server.delete_recordings(record_ids) unless record_ids.empty?
end
end
+152
View File
@@ -0,0 +1,152 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
module Emailer
extend ActiveSupport::Concern
# Sends account activation email.
def send_activation_email(user, token)
begin
return unless Rails.configuration.enable_email_verification
UserMailer.verify_email(user, user_verification_link(token), @settings).deliver
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
else
flash[:success] = I18n.t("email_sent", email_type: t("verify.verification"))
end
end
# Sends password reset email.
def send_password_reset_email(user, token)
begin
return unless Rails.configuration.enable_email_verification
UserMailer.password_reset(user, reset_link(token), @settings).deliver_now
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
else
flash[:success] = I18n.t("email_sent", email_type: t("reset_password.subtitle"))
end
end
def send_user_promoted_email(user, role)
begin
return unless Rails.configuration.enable_email_verification
UserMailer.user_promoted(user, role, root_url, @settings).deliver_now
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
end
end
def send_user_demoted_email(user, role)
begin
return unless Rails.configuration.enable_email_verification
UserMailer.user_demoted(user, role, root_url, @settings).deliver_now
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
end
end
# Sends inivitation to join
def send_invitation_email(name, email, token)
begin
return unless Rails.configuration.enable_email_verification
UserMailer.invite_email(name, email, invitation_link(token), @settings).deliver_now
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
else
flash[:success] = I18n.t("administrator.flash.invite", email: email)
end
end
def send_user_approved_email(user)
begin
return unless Rails.configuration.enable_email_verification
UserMailer.approve_user(user, root_url, @settings).deliver_now
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
else
flash[:success] = I18n.t("email_sent", email_type: t("verify.verification"))
end
end
def send_approval_user_signup_email(user)
begin
return unless Rails.configuration.enable_email_verification
admin_emails = admin_emails()
UserMailer.approval_user_signup(user, admins_url(tab: "pending"),
admin_emails, @settings).deliver_now unless admin_emails.empty?
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
end
end
def send_invite_user_signup_email(user)
begin
return unless Rails.configuration.enable_email_verification
admin_emails = admin_emails()
UserMailer.invite_user_signup(user, admins_url, admin_emails, @settings).deliver_now unless admin_emails.empty?
rescue => e
logger.error "Support: Error in email delivery: #{e}"
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
end
end
private
# Returns the link the user needs to click to verify their account
def user_verification_link(token)
edit_account_activation_url(token: token)
end
def admin_emails
roles = Role.where(provider: @user_domain, role_permissions: { name: "can_manage_users", value: "true" })
.pluck(:name)
admins = User.with_role(roles - ["super_admin"])
admins = admins.where(provider: @user_domain) if Rails.configuration.loadbalanced_configuration
admins.collect(&:email).join(",")
end
def reset_link(token)
edit_password_reset_url(token)
end
def invitation_link(token)
if allow_greenlight_accounts?
signup_url(invite_token: token)
else
root_url(invite_token: token)
end
end
end
+5
View File
@@ -0,0 +1,5 @@
# frozen_string_literal: true
module Errors
class UnsafeHostError < StandardError; end
end
+110
View File
@@ -0,0 +1,110 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
module Joiner
extend ActiveSupport::Concern
# Displays the join room page to the user
def show_user_join
# Get users name
@name = if current_user
current_user.name
elsif cookies.encrypted[:greenlight_name]
cookies.encrypted[:greenlight_name]
else
""
end
@search, @order_column, @order_direction, pub_recs =
public_recordings(@room.bbb_id, params.permit(:search, :column, :direction), true)
@pagy, @public_recordings = pagy_array(pub_recs)
render :join
end
# create or update cookie to track the three most recent rooms a user joined
def save_recent_rooms
if current_user
recently_joined_rooms = cookies.encrypted["#{current_user.uid}_recently_joined_rooms"].to_a
cookies.encrypted["#{current_user.uid}_recently_joined_rooms"] =
recently_joined_rooms.prepend(@room.id).uniq[0..2]
end
end
def join_room(opts)
@room_settings = JSON.parse(@room[:room_settings])
if room_running?(@room.bbb_id) || @room.owned_by?(current_user) || room_setting_with_config("anyoneCanStart")
# Determine if the user needs to join as a moderator.
opts[:user_is_moderator] = @room.owned_by?(current_user) || room_setting_with_config("joinModerator") || @shared_room
opts[:record] = record_meeting
opts[:require_moderator_approval] = room_setting_with_config("requireModeratorApproval")
opts[:mute_on_start] = room_setting_with_config("muteOnStart")
if current_user
redirect_to join_path(@room, current_user.name, opts, current_user.uid)
else
join_name = params[:join_name] || params[@room.invite_path][:join_name]
redirect_to join_path(@room, join_name, opts, fetch_guest_id)
end
else
search_params = params[@room.invite_path] || params
@search, @order_column, @order_direction, pub_recs =
public_recordings(@room.bbb_id, search_params.permit(:search, :column, :direction), true)
@pagy, @public_recordings = pagy_array(pub_recs)
# They need to wait until the meeting begins.
render :wait
end
end
def incorrect_user_domain
Rails.configuration.loadbalanced_configuration && @room.owner.provider != @user_domain
end
# Default, unconfigured meeting options.
def default_meeting_options
invite_msg = I18n.t("invite_message")
{
user_is_moderator: false,
meeting_logout_url: request.base_url + logout_room_path(@room),
moderator_message: "#{invite_msg}<br> #{request.base_url + room_path(@room)}",
host: request.host,
recording_default_visibility: @settings.get_value("Default Recording Visibility") == "public"
}
end
private
def fetch_guest_id
return cookies[:guest_id] if cookies[:guest_id].present?
guest_id = "gl-guest-#{SecureRandom.hex(12)}"
cookies[:guest_id] = {
value: guest_id,
expires: 1.day.from_now
}
guest_id
end
end
+78
View File
@@ -0,0 +1,78 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
module Populator
extend ActiveSupport::Concern
# Returns a list of users that are in the same context of the current user
def manage_users_list
initial_list = case @tab
when "active"
User.without_role([:pending, :denied])
when "deleted"
User.deleted
when "pending"
User.with_role(:pending)
when "denied"
User.with_role(:denied)
else
User.all
end
initial_list = initial_list.with_role(@role.name) if @role.present?
initial_list = initial_list.without_role(:super_admin)
initial_list = initial_list.where(provider: @user_domain) if Rails.configuration.loadbalanced_configuration
initial_list.where.not(id: current_user.id)
.admins_search(@search)
.admins_order(@order_column, @order_direction)
end
# Returns a list of rooms that are in the same context of the current user
def server_rooms_list
if Rails.configuration.loadbalanced_configuration
Room.includes(:owner).where(users: { provider: @user_domain })
.admins_search(@search)
.admins_order(@order_column, @order_direction, @running_room_bbb_ids)
else
Room.includes(:owner).admins_search(@search).admins_order(@order_column, @order_direction, @running_room_bbb_ids)
end
end
# Returns list of rooms needed to get the recordings on the server
def rooms_list_for_recordings
if Rails.configuration.loadbalanced_configuration
Room.includes(:owner).where(users: { provider: @user_domain }).pluck(:bbb_id)
else
Room.pluck(:bbb_id)
end
end
# Returns a list off all current invitations
def invited_users_list
list = if Rails.configuration.loadbalanced_configuration
Invitation.where(provider: @user_domain)
else
Invitation.all
end
list.admins_search(@search).order(updated_at: :desc)
end
end
+132
View File
@@ -0,0 +1,132 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
module Recorder
extend ActiveSupport::Concern
include RecordingsHelper
# Fetches all recordings for a room.
def recordings(room_bbb_id, search_params = {}, ret_search_params = false)
res = get_recordings(room_bbb_id)
format_recordings(res, search_params, ret_search_params)
end
# Fetches a rooms public recordings.
def public_recordings(room_bbb_id, search_params = {}, ret_search_params = false)
search, order_col, order_dir, recs = recordings(room_bbb_id, search_params, ret_search_params)
[search, order_col, order_dir, recs.select { |r| r[:metadata][:"gl-listed"] == "true" }]
end
# Makes paginated API calls to get recordings
def all_recordings(room_bbb_ids, search_params = {}, ret_search_params = false, search_name = false)
res = { recordings: [] }
until room_bbb_ids.empty?
# bbb.get_recordings returns an object
# take only the array portion of the object that is returned
full_res = get_multiple_recordings(room_bbb_ids.pop(Rails.configuration.pagination_number))
res[:recordings].push(*full_res[:recordings])
end
format_recordings(res, search_params, ret_search_params, search_name)
end
# Format, filter, and sort recordings to match their current use in the app
def format_recordings(api_res, search_params, ret_search_params, search_name = false)
search = search_params[:search] || ""
order_col = search_params[:column] && search_params[:direction] != "none" ? search_params[:column] : "end_time"
order_dir = search_params[:column] && search_params[:direction] != "none" ? search_params[:direction] : "desc"
search = search.downcase
api_res[:recordings].each do |r|
next if r.key?(:error)
# Format playbacks in a more pleasant way.
r[:playbacks] = if !r[:playback] || !r[:playback][:format]
[]
elsif r[:playback][:format].is_a?(Array)
r[:playback][:format]
else
[r[:playback][:format]]
end
r.delete(:playback)
end
recs = filter_recordings(api_res, search, search_name)
recs = sort_recordings(recs, order_col, order_dir)
if ret_search_params
[search, order_col, order_dir, recs]
else
recs
end
end
def filter_recordings(api_res, search, search_name = false)
api_res[:recordings].select do |r|
(!r[:metadata].nil? && ((!r[:metadata][:name].nil? &&
r[:metadata][:name].downcase.include?(search)) ||
(r[:metadata][:"gl-listed"] == "true" && search == "public") ||
(r[:metadata][:"gl-listed"] == "false" && search == "unlisted"))) ||
((r[:metadata].nil? || r[:metadata][:name].nil?) &&
r[:name].downcase.include?(search)) ||
r[:participants].include?(search) ||
!r[:playbacks].select { |p| p[:type].downcase.include?(search) }.empty? ||
(search_name && recording_owner(r[:meetingID]).downcase.include?(search))
end
end
def sort_recordings(recs, order_col, order_dir)
recs = case order_col
when "end_time"
recs.sort_by { |r| r[:endTime] }
when "name"
recs.sort_by do |r|
if !r[:metadata].nil? && !r[:metadata][:name].nil?
r[:metadata][:name].downcase
else
r[:name].downcase
end
end
when "length"
recs.sort_by { |r| r[:playbacks].reject { |p| p[:type] == "statistics" }.first[:length] }
when "users"
recs.sort_by { |r| r[:participants] }
when "visibility"
recs.sort_by { |r| r[:metadata][:"gl-listed"] }
when "formats"
recs.sort_by { |r| r[:playbacks].first[:type].downcase }
else
recs.sort_by { |r| r[:endTime] }
end
if order_dir == 'asc'
recs
else
recs.reverse
end
end
private
# Gets the email of the room owner to which the recording belongs to
def recording_owner(room_id)
Room.find_by(bbb_id: room_id).owner.email.presence || Room.find_by(bbb_id: room_id).owner.username
end
end
+75
View File
@@ -0,0 +1,75 @@
# frozen_string_literal: true
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2018 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 <http://www.gnu.org/licenses/>.
module Registrar
extend ActiveSupport::Concern
def approval_registration
@settings.get_value("Registration Method") == Rails.configuration.registration_methods[:approval]
end
def invite_registration
@settings.get_value("Registration Method") == Rails.configuration.registration_methods[:invite]
end
# Returns a hash containing whether the user has been invited and if they
# signed up with the same email that they were invited with
def check_user_invited(email, token, domain)
return { present: true, verified: false } unless invite_registration
return { present: false, verified: false } if token.nil?
invite = Invitation.valid.find_by(invite_token: token, provider: domain)
if invite.present?
# Check if they used the same email to sign up
same_email = email.casecmp(invite.email).zero?
invite.destroy
{ present: true, verified: same_email }
else
{ present: false, verified: false }
end
end
# Checks if the user passes the requirements to be invited
def passes_invite_reqs
# check if user needs to be invited and IS invited
invitation = check_user_invited(@user.email, session[:invite_token], @user_domain)
@user.email_verified = true if invitation[:verified]
invitation[:present]
end
# Add validation errors to model if they exist
def valid_user_or_captcha
valid_user = @user.valid?
valid_captcha = Rails.configuration.recaptcha_enabled ? verify_recaptcha(model: @user) : true
logger.error("Support: #{@user.email} creation failed: User params are not valid.") unless valid_user
valid_user && valid_captcha
end
# Checks if the user trying to sign in with twitter account
def check_if_twitter_account(log_out = false)
unless params[:old_twitter_user_id].nil? && session[:old_twitter_user_id].nil?
logout if log_out
flash.now[:alert] = I18n.t("registration.deprecated.new_signin")
session[:old_twitter_user_id] = params[:old_twitter_user_id] unless params[:old_twitter_user_id].nil?
end
end
end

Some files were not shown because too many files have changed in this diff Show More