Merge branch 'v2.7.x-release' into v2.7.x-release

This commit is contained in:
Anton Georgiev 2023-11-27 09:10:42 -05:00 committed by GitHub
commit 3daf0ba7d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 121 additions and 124 deletions

View File

@ -13,7 +13,7 @@ This issue tracker is only for bbb development or docs related issues.-->
**Link to the portion of the docs that is out of date** **Link to the portion of the docs that is out of date**
If applicable, link to the section of the docs that is out of date. If applicable, link to the section of the docs that is out of date.
**Describe what you belive the correct version should be** **Describe what you believe the correct version should be**
**Screenshots** **Screenshots**
If applicable, add screenshots to help explain your concern. If applicable, add screenshots to help explain your concern.

View File

@ -121,7 +121,7 @@ class MobileAppModal extends Component {
color="primary" color="primary"
disabled={url === ''} disabled={url === ''}
label={intl.formatMessage(intlMessages.openApp)} label={intl.formatMessage(intlMessages.openApp)}
onClick={() => window.open(`${BBB_TABLET_APP_CONFIG.iosAppUrlScheme}://${meetingName}/${encodeURIComponent(url)}`, '_blank')} onClick={() => window.open(`${BBB_TABLET_APP_CONFIG.iosAppUrlScheme}://${encodeURIComponent(meetingName)}/${encodeURIComponent(url)}`, '_blank')}
role="button" role="button"
size="lg" size="lg"
/> />

View File

@ -25,19 +25,22 @@ const Cursor = (props) => {
_y = (y + tldrawCamera?.point[1]) * tldrawCamera?.zoom; _y = (y + tldrawCamera?.point[1]) * tldrawCamera?.zoom;
} }
const transitionStyle = owner ? { transition: 'left 0.3s ease-out, top 0.3s ease-out' } : {};
return ( return (
<> <>
<div <div
style={{ style={{
zIndex: z, zIndex: z,
position: 'absolute', position: 'absolute',
left: (_x || x) - pointerDiameter/2, left: (_x || x) - pointerDiameter / 2,
top: (_y || y) - pointerDiameter/2, top: (_y || y) - pointerDiameter / 2,
width: pointerDiameter, width: pointerDiameter,
height: pointerDiameter, height: pointerDiameter,
borderRadius: '50%', borderRadius: '50%',
background: `${color}`, background: `${color}`,
pointerEvents: 'none', pointerEvents: 'none',
...transitionStyle,
}} }}
/> />
@ -57,6 +60,7 @@ const Cursor = (props) => {
color: '#FFF', color: '#FFF',
backgroundColor: color, backgroundColor: color,
border: `1px solid ${color}`, border: `1px solid ${color}`,
...transitionStyle,
}} }}
data-test="whiteboardCursorIndicator" data-test="whiteboardCursorIndicator"
> >

View File

@ -76,8 +76,8 @@
"app.timer.hours": "ordu", "app.timer.hours": "ordu",
"app.timer.minutes": "minutu", "app.timer.minutes": "minutu",
"app.timer.seconds": "segundo", "app.timer.seconds": "segundo",
"app.timer.songs": "Soinuak", "app.timer.music": "Musika",
"app.timer.noTrack": "Soinurik gabe", "app.timer.noTrack": "Musikarik ez",
"app.timer.track1": "Erlaxazioa", "app.timer.track1": "Erlaxazioa",
"app.timer.track2": "Lasaitasuna", "app.timer.track2": "Lasaitasuna",
"app.timer.track3": "Zoriontasuna", "app.timer.track3": "Zoriontasuna",
@ -436,6 +436,7 @@
"app.muteWarning.label": "Klikatu {0} zure ahotsa aktibatzeko", "app.muteWarning.label": "Klikatu {0} zure ahotsa aktibatzeko",
"app.muteWarning.disableMessage": "Abisuen isiltzea inaktiboa egongo da zure ahotsa aktibatu arte", "app.muteWarning.disableMessage": "Abisuen isiltzea inaktiboa egongo da zure ahotsa aktibatu arte",
"app.muteWarning.tooltip": "Egin klik abisuak ixteko eta desgaitzeko zure ahotsa berriro aktibatu arte", "app.muteWarning.tooltip": "Egin klik abisuak ixteko eta desgaitzeko zure ahotsa berriro aktibatu arte",
"app.navBar.leaveMeetingBtnLabel": "Irten",
"app.navBar.settingsDropdown.optionsLabel": "Aukerak", "app.navBar.settingsDropdown.optionsLabel": "Aukerak",
"app.navBar.settingsDropdown.fullscreenLabel": "Pantaila osoko aplikazioa", "app.navBar.settingsDropdown.fullscreenLabel": "Pantaila osoko aplikazioa",
"app.navBar.settingsDropdown.settingsLabel": "Ezarpenak", "app.navBar.settingsDropdown.settingsLabel": "Ezarpenak",
@ -1167,6 +1168,7 @@
"app.videoDock.webcamDisableLabelAllCams": "Desgaitu norberaren ikuspegia (kamera guztiak)", "app.videoDock.webcamDisableLabelAllCams": "Desgaitu norberaren ikuspegia (kamera guztiak)",
"app.videoDock.webcamEnableLabel": "Gaitu norberaren ikuspegia", "app.videoDock.webcamEnableLabel": "Gaitu norberaren ikuspegia",
"app.videoDock.webcamDisableDesc": "Norberaren ikuspegia desaktibatu da", "app.videoDock.webcamDisableDesc": "Norberaren ikuspegia desaktibatu da",
"app.videoDock.webcamDisableWarning": "Zure webcam-a oraindik ikusgai dago besteentzat! Zure tokiko ikuspegia soilik dago desgaituta.",
"app.videoDock.webcamPinLabel": "Ainguratu", "app.videoDock.webcamPinLabel": "Ainguratu",
"app.videoDock.webcamPinDesc": "Ainguratu hautatutako webkamera", "app.videoDock.webcamPinDesc": "Ainguratu hautatutako webkamera",
"app.videoDock.webcamFullscreenLabel": "Pantaila osoko web-kamera", "app.videoDock.webcamFullscreenLabel": "Pantaila osoko web-kamera",

View File

@ -76,8 +76,8 @@
"app.timer.hours": "heures", "app.timer.hours": "heures",
"app.timer.minutes": "minutes", "app.timer.minutes": "minutes",
"app.timer.seconds": "secondes", "app.timer.seconds": "secondes",
"app.timer.songs": "Chansons", "app.timer.music": "Musique",
"app.timer.noTrack": "Pas de chansons", "app.timer.noTrack": "Aucune musique",
"app.timer.track1": "Détente", "app.timer.track1": "Détente",
"app.timer.track2": "Calme", "app.timer.track2": "Calme",
"app.timer.track3": "Heureux", "app.timer.track3": "Heureux",
@ -436,6 +436,7 @@
"app.muteWarning.label": "Cliquez sur {0} pour réactiver votre micro.", "app.muteWarning.label": "Cliquez sur {0} pour réactiver votre micro.",
"app.muteWarning.disableMessage": "Les alertes de micro éteint sont désactivées jusqu'à la réactivation du micro.", "app.muteWarning.disableMessage": "Les alertes de micro éteint sont désactivées jusqu'à la réactivation du micro.",
"app.muteWarning.tooltip": "Cliquez pour fermer et désactiver les alertes jusqu'à la prochaine activation du micro", "app.muteWarning.tooltip": "Cliquez pour fermer et désactiver les alertes jusqu'à la prochaine activation du micro",
"app.navBar.leaveMeetingBtnLabel": "Quitter",
"app.navBar.settingsDropdown.optionsLabel": "Options", "app.navBar.settingsDropdown.optionsLabel": "Options",
"app.navBar.settingsDropdown.fullscreenLabel": "Application en plein écran", "app.navBar.settingsDropdown.fullscreenLabel": "Application en plein écran",
"app.navBar.settingsDropdown.settingsLabel": "Paramètres", "app.navBar.settingsDropdown.settingsLabel": "Paramètres",
@ -1167,6 +1168,7 @@
"app.videoDock.webcamDisableLabelAllCams": "Désactiver l'affichage de soi (toutes les caméras)", "app.videoDock.webcamDisableLabelAllCams": "Désactiver l'affichage de soi (toutes les caméras)",
"app.videoDock.webcamEnableLabel": "Activer la vision de soi", "app.videoDock.webcamEnableLabel": "Activer la vision de soi",
"app.videoDock.webcamDisableDesc": "Vision de soi désactivée", "app.videoDock.webcamDisableDesc": "Vision de soi désactivée",
"app.videoDock.webcamDisableWarning": "Votre webcam est toujours visible des autres! Son affichage est désactivé seulement localement.",
"app.videoDock.webcamPinLabel": "Épingler", "app.videoDock.webcamPinLabel": "Épingler",
"app.videoDock.webcamPinDesc": "Épingler la caméra sélectionnée", "app.videoDock.webcamPinDesc": "Épingler la caméra sélectionnée",
"app.videoDock.webcamFullscreenLabel": "Webcam en plein écran", "app.videoDock.webcamFullscreenLabel": "Webcam en plein écran",

View File

@ -34,6 +34,14 @@
"app.chat.two.typing": "{0} ve {1} yazıyor...", "app.chat.two.typing": "{0} ve {1} yazıyor...",
"app.chat.copySuccess": "Sohbet yazışmaları kopyalandı", "app.chat.copySuccess": "Sohbet yazışmaları kopyalandı",
"app.chat.copyErr": "Sohbet yazışmaları kopyalanamadı", "app.chat.copyErr": "Sohbet yazışmaları kopyalanamadı",
"app.timer.toolTipTimerStopped": "Zamanlayıcı durduruldu.",
"app.timer.toolTipTimerRunning": "Zamanlayıcı çalışıyor.",
"app.timer.toolTipStopwatchStopped": "Kronometre durduruldu.",
"app.timer.toolTipStopwatchRunning": "Kronometre çalışıyor.",
"app.timer.toolTipTimerStoppedMod": "Zamanlayıcıyı sürdürmek için basın.",
"app.timer.toolTipTimerRunningMod": "Zamanlayıcıyı duraklatmak için basın.",
"app.timer.toolTipStopwatchStoppedMod": "Kronometreyi sürdürmek için basın.",
"app.timer.toolTipStopwatchRunningMod": "Kronometreyi duraklatmak için basın.",
"app.emojiPicker.search": "Arama", "app.emojiPicker.search": "Arama",
"app.emojiPicker.notFound": "Herhangi bir emoji bulunamadı", "app.emojiPicker.notFound": "Herhangi bir emoji bulunamadı",
"app.emojiPicker.skintext": "Varsayılan ten renginizi seçin", "app.emojiPicker.skintext": "Varsayılan ten renginizi seçin",
@ -68,8 +76,8 @@
"app.timer.hours": "saat", "app.timer.hours": "saat",
"app.timer.minutes": "dakika", "app.timer.minutes": "dakika",
"app.timer.seconds": "saniye", "app.timer.seconds": "saniye",
"app.timer.songs": "Şarkılar", "app.timer.music": "Müzik",
"app.timer.noTrack": "Şarkı yok", "app.timer.noTrack": "Müzik yok",
"app.timer.track1": "Rahatlatıcı", "app.timer.track1": "Rahatlatıcı",
"app.timer.track2": "Sakin", "app.timer.track2": "Sakin",
"app.timer.track3": "Mutlu", "app.timer.track3": "Mutlu",
@ -287,15 +295,15 @@
"app.presentationUploader.sent": "Gönderildi", "app.presentationUploader.sent": "Gönderildi",
"app.presentationUploader.exportingTimeout": "Dışa aktarma işlemi çok uzun sürüyor...", "app.presentationUploader.exportingTimeout": "Dışa aktarma işlemi çok uzun sürüyor...",
"app.presentationUploader.export": "Sohbete gönder", "app.presentationUploader.export": "Sohbete gönder",
"app.presentationUploader.exportCurrentStatePresentation": "Sunumun geçerli durumundaki indirme bağlantısını gönder", "app.presentationUploader.exportCurrentStatePresentation": "Sunumun tahta notlarının da bulunduğu indirme bağlantısını gönder",
"app.presentationUploader.enableOriginalPresentationDownload": "Özgün sunum indirilebilsin", "app.presentationUploader.enableOriginalPresentationDownload": "Sunum ({0}) indirilebilsin",
"app.presentationUploader.disableOriginalPresentationDownload": "Özgün sunum indirilemesin", "app.presentationUploader.disableOriginalPresentationDownload": "Özgün sunum ({0}) indirilemesin",
"app.presentationUploader.dropdownExportOptions": "Dışa aktarma seçenekleri", "app.presentationUploader.dropdownExportOptions": "Dışa aktarma seçenekleri",
"app.presentationUploader.export.linkAvailable": "{0} indirmek için bağlantıyı herkese açık sohbette bulabilirsiniz.", "app.presentationUploader.export.linkAvailable": "{0} indirmek için bağlantıyı herkese açık sohbette bulabilirsiniz.",
"app.presentationUploader.export.downloadButtonAvailable": "{0} sunumu için indirme düğmesi kullanılabilir.", "app.presentationUploader.export.downloadButtonAvailable": "{0} sunumu için indirme düğmesi kullanılabilir.",
"app.presentationUploader.export.notAccessibleWarning": "erişilebilirlik uyumluluğu olmayabilir", "app.presentationUploader.export.notAccessibleWarning": "erişilebilirlik uyumluluğu olmayabilir",
"app.presentationUploader.export.originalLabel": "Özgün", "app.presentationUploader.export.originalLabel": "Özgün",
"app.presentationUploader.export.withWhiteboardAnnotations": "Geçerli durumda", "app.presentationUploader.export.withWhiteboardAnnotations": "tahta notları ile birlikte",
"app.presentationUploader.currentPresentationLabel": "Geçerli sunum", "app.presentationUploader.currentPresentationLabel": "Geçerli sunum",
"app.presentationUploder.extraHint": "ÖNEMLİ: Her bir dosya {0} MB boyutundan ve {1} sayfadan küçük olmalıdır.", "app.presentationUploder.extraHint": "ÖNEMLİ: Her bir dosya {0} MB boyutundan ve {1} sayfadan küçük olmalıdır.",
"app.presentationUploder.uploadLabel": "Yükle", "app.presentationUploder.uploadLabel": "Yükle",
@ -421,13 +429,14 @@
"app.polling.pollAnswerLabel": "Oylama yanıtı {0}", "app.polling.pollAnswerLabel": "Oylama yanıtı {0}",
"app.polling.pollAnswerDesc": "Bu seçeneği kullanarak {0} için oy verin", "app.polling.pollAnswerDesc": "Bu seçeneği kullanarak {0} için oy verin",
"app.failedMessage": "Özür dileriz, sunucu ile bağlantı kurma sorunu var.", "app.failedMessage": "Özür dileriz, sunucu ile bağlantı kurma sorunu var.",
"app.downloadPresentationButton.label": "Özgün sunumu indir", "app.downloadPresentationButton.label": "Sunumu indir",
"app.connectingMessage": "Bağlantı kuruluyor...", "app.connectingMessage": "Bağlantı kuruluyor...",
"app.waitingMessage": "Bağlantı kesildi. {0} saniye içinde yeniden bağlantı kurulmaya çalışılacak...", "app.waitingMessage": "Bağlantı kesildi. {0} saniye içinde yeniden bağlantı kurulmaya çalışılacak...",
"app.retryNow": "Şimdi yeniden dene", "app.retryNow": "Şimdi yeniden dene",
"app.muteWarning.label": "Sesinizi açmak için {0} üzerine tıklayın.", "app.muteWarning.label": "Sesinizi açmak için {0} üzerine tıklayın.",
"app.muteWarning.disableMessage": "Ses açılıncaya kadar uyarı sesini kapatma devre dışı bırakıldı", "app.muteWarning.disableMessage": "Ses açılıncaya kadar uyarı sesini kapatma devre dışı bırakıldı",
"app.muteWarning.tooltip": "Kapatmak için tıklayın ve ses yeniden açılana kadar uyarıyı devre dışı bırakın", "app.muteWarning.tooltip": "Kapatmak için tıklayın ve ses yeniden açılana kadar uyarıyı devre dışı bırakın",
"app.navBar.leaveMeetingBtnLabel": "Ayrıl",
"app.navBar.settingsDropdown.optionsLabel": "Seçenekler", "app.navBar.settingsDropdown.optionsLabel": "Seçenekler",
"app.navBar.settingsDropdown.fullscreenLabel": "Uygulamayı tam ekran görüntüle", "app.navBar.settingsDropdown.fullscreenLabel": "Uygulamayı tam ekran görüntüle",
"app.navBar.settingsDropdown.settingsLabel": "Ayarlar", "app.navBar.settingsDropdown.settingsLabel": "Ayarlar",
@ -641,6 +650,7 @@
"app.actionsBar.reactions.reactionsButtonLabel": "Tepki çubuğu", "app.actionsBar.reactions.reactionsButtonLabel": "Tepki çubuğu",
"app.actionsBar.reactions.raiseHand": "El kaldır", "app.actionsBar.reactions.raiseHand": "El kaldır",
"app.actionsBar.reactions.lowHand": "Eli indir", "app.actionsBar.reactions.lowHand": "Eli indir",
"app.actionsBar.reactions.autoCloseReactionsBarLabel": "Tepki çubuğu otomatik kapatılsın",
"app.actionsBar.emojiMenu.statusTriggerLabel": "Durumu ayarla", "app.actionsBar.emojiMenu.statusTriggerLabel": "Durumu ayarla",
"app.actionsBar.emojiMenu.awayLabel": "Uzakta", "app.actionsBar.emojiMenu.awayLabel": "Uzakta",
"app.actionsBar.emojiMenu.awayDesc": "Durumunuzu uzakta yapar", "app.actionsBar.emojiMenu.awayDesc": "Durumunuzu uzakta yapar",
@ -869,11 +879,10 @@
"app.toast.meetingMuteOn.label": "Tüm kullanıcıların sesi kapatıldı", "app.toast.meetingMuteOn.label": "Tüm kullanıcıların sesi kapatıldı",
"app.toast.meetingMuteOnViewers.label": "Tüm izleyicilerin sesi kapatıldı", "app.toast.meetingMuteOnViewers.label": "Tüm izleyicilerin sesi kapatıldı",
"app.toast.meetingMuteOff.label": "Toplantının sesi açıldı", "app.toast.meetingMuteOff.label": "Toplantının sesi açıldı",
"app.toast.wakeLock.offerTitle": "Toplantı süresince aygıtınızın ekranıık kalsın mı?",
"app.toast.wakeLock.offerAccept": "Evet!",
"app.toast.wakeLock.offerDecline": "Şimdi değil",
"app.toast.wakeLock.acquireSuccess": "Uyandurma kilidi açık! Ayarlar menüsünden kapatabilirsiniz.", "app.toast.wakeLock.acquireSuccess": "Uyandurma kilidi açık! Ayarlar menüsünden kapatabilirsiniz.",
"app.toast.wakeLock.acquireFailed": "Uyandırma kilidi açılırken sorun çıktı.", "app.toast.wakeLock.acquireFailed": "Uyanma kilidi açılırken sorun çıktı",
"app.toast.wakeLock.notSupported": "Tarayıcınız uyanma kilidini desteklemiyor",
"app.toast.wakeLock.disclaimer": "{0}. Ekranınız kapandıktan sonra çağrıdan çıkarılacaksınız.",
"app.toast.setEmoji.raiseHand": "Elinizi kaldırdınız", "app.toast.setEmoji.raiseHand": "Elinizi kaldırdınız",
"app.toast.setEmoji.lowerHand": "Eliniz indirildi", "app.toast.setEmoji.lowerHand": "Eliniz indirildi",
"app.toast.setEmoji.away": "Durumunuzu uzakta olarak ayarladınız", "app.toast.setEmoji.away": "Durumunuzu uzakta olarak ayarladınız",
@ -1159,6 +1168,7 @@
"app.videoDock.webcamDisableLabelAllCams": "Kendini görmeyi kapat (tüm kameralar)", "app.videoDock.webcamDisableLabelAllCams": "Kendini görmeyi kapat (tüm kameralar)",
"app.videoDock.webcamEnableLabel": "Kendini görmeyi aç", "app.videoDock.webcamEnableLabel": "Kendini görmeyi aç",
"app.videoDock.webcamDisableDesc": "Kendini görme kapalı", "app.videoDock.webcamDisableDesc": "Kendini görme kapalı",
"app.videoDock.webcamDisableWarning": "Başkaları kamera görüntünüzü görmeyi sürdürebilir! Yalnızca yerel görünümünüz kapatılır.",
"app.videoDock.webcamPinLabel": "Sabitle", "app.videoDock.webcamPinLabel": "Sabitle",
"app.videoDock.webcamPinDesc": "Seçilmiş kamera görüntüsünü sabitler", "app.videoDock.webcamPinDesc": "Seçilmiş kamera görüntüsünü sabitler",
"app.videoDock.webcamFullscreenLabel": "Kamerayı tam ekran görüntüle", "app.videoDock.webcamFullscreenLabel": "Kamerayı tam ekran görüntüle",

View File

@ -9,7 +9,7 @@ buildscript {
dependencies { dependencies {
classpath "org.grails:grails-gradle-plugin:${grailsGradlePluginVersion}" classpath "org.grails:grails-gradle-plugin:${grailsGradlePluginVersion}"
classpath "org.grails.plugins:hibernate5:${gormVersion}" classpath "org.grails.plugins:hibernate5:${gormVersion}"
classpath "com.bertramlabs.plugins:asset-pipeline-gradle:4.0.0" classpath "com.bertramlabs.plugins:asset-pipeline-gradle:4.3.0"
classpath "gradle.plugin.com.github.erdi.webdriver-binaries:webdriver-binaries-gradle-plugin:2.6" classpath "gradle.plugin.com.github.erdi.webdriver-binaries:webdriver-binaries-gradle-plugin:2.6"
classpath "org.grails.plugins:views-gradle:2.1.1" classpath "org.grails.plugins:views-gradle:2.1.1"
classpath "org.grails.plugins:views-json:2.1.1" classpath "org.grails.plugins:views-json:2.1.1"
@ -53,10 +53,10 @@ repositories {
} }
dependencies { dependencies {
runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:4.0.0" runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:4.3.0"
implementation "org.springframework:spring-core:5.3.21" implementation "org.springframework:spring-core:5.3.31"
implementation "org.springframework:spring-context:5.3.27" implementation "org.springframework:spring-context:5.3.31"
implementation "org.springframework.boot:spring-boot:${springVersion}" implementation "org.springframework.boot:spring-boot:${springVersion}"
implementation "org.springframework.boot:spring-boot-starter-logging:${springVersion}" implementation "org.springframework.boot:spring-boot-starter-logging:${springVersion}"
implementation "org.springframework.boot:spring-boot-autoconfigure:${springVersion}" implementation "org.springframework.boot:spring-boot-autoconfigure:${springVersion}"
@ -65,7 +65,7 @@ dependencies {
implementation "org.springframework.boot:spring-boot-starter-tomcat:${springVersion}" implementation "org.springframework.boot:spring-boot-starter-tomcat:${springVersion}"
implementation "org.grails:grails-web-boot:5.2.5" implementation "org.grails:grails-web-boot:5.2.5"
implementation "org.springframework:spring-webmvc:5.3.27" implementation "org.springframework:spring-webmvc:5.3.31"
implementation "org.grails:grails-logging" implementation "org.grails:grails-logging"
implementation "org.grails:grails-plugin-rest:5.2.5" implementation "org.grails:grails-plugin-rest:5.2.5"
@ -79,7 +79,7 @@ dependencies {
implementation "org.grails.plugins:views-json:2.1.1" implementation "org.grails.plugins:views-json:2.1.1"
implementation "org.grails.plugins:cache" implementation "org.grails.plugins:cache"
implementation "org.apache.xmlbeans:xmlbeans:5.0.3" implementation "org.apache.xmlbeans:xmlbeans:5.0.3"
implementation "org.grails:grails-gradle-plugin:5.1.4" implementation "org.grails:grails-gradle-plugin:${grailsGradlePluginVersion}"
implementation "org.grails.plugins:async" implementation "org.grails.plugins:async"
implementation "org.grails.plugins:scaffolding" implementation "org.grails.plugins:scaffolding"
implementation "org.grails.plugins:events" implementation "org.grails.plugins:events"
@ -109,7 +109,7 @@ dependencies {
//--- BigBlueButton Dependencies End //--- BigBlueButton Dependencies End
console "org.grails:grails-console:5.2.0" console "org.grails:grails-console:5.2.0"
profile "org.grails.profiles:web" profile "org.grails.profiles:web"
runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:4.0.0" runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:4.3.0"
testImplementation "org.grails:grails-gorm-testing-support" testImplementation "org.grails:grails-gorm-testing-support"
testImplementation "org.grails.plugins:geb" testImplementation "org.grails.plugins:geb"
testImplementation "org.grails:grails-web-testing-support" testImplementation "org.grails:grails-web-testing-support"
@ -127,6 +127,8 @@ configurations.implementation {
exclude group: 'io.micronaut', module: 'micronaut-aop' exclude group: 'io.micronaut', module: 'micronaut-aop'
exclude group: 'com.h2database', module: 'h2' exclude group: 'com.h2database', module: 'h2'
exclude group: 'org.graalvm.sdk', module: 'graal-sdk' exclude group: 'org.graalvm.sdk', module: 'graal-sdk'
exclude group: 'io.github.gradle-nexus', module: 'publish-plugin'
exclude group: 'org.grails', module: 'grails-shell'
} }
configurations { configurations {

View File

@ -1,7 +1,7 @@
grailsVersion=5.3.3 grailsVersion=6.1.0
gormVersion=7.3.1 gormVersion=7.3.1
gradleWrapperVersion=7.3.1 gradleWrapperVersion=7.6.3
grailsGradlePluginVersion=5.0.0 grailsGradlePluginVersion=6.1.0
groovyVersion=3.0.19 groovyVersion=3.0.19
tomcatEmbedVersion=9.0.82 tomcatEmbedVersion=9.0.82
springVersion=2.7.17 springVersion=2.7.17

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip

View File

@ -10,7 +10,7 @@ keywords:
## Introduction ## Introduction
`bbb-conf` is BigBlueButton's configuration tool. It makes it easi for you to modify parts of BigBlueButton's configuration, manage the BigBlueButton system (start/stop/reset), and troubleshoot potential problems with your setup. `bbb-conf` is BigBlueButton's configuration tool. It makes it easy for you to modify parts of BigBlueButton's configuration, manage the BigBlueButton system (start/stop/reset), and troubleshoot potential problems with your setup.
As a historical note, this tool was created early in the development of BigBlueButton. The core developers wrote this tool to quickly update BigBlueButton's configuration files for setup and testing. As a historical note, this tool was created early in the development of BigBlueButton. The core developers wrote this tool to quickly update BigBlueButton's configuration files for setup and testing.

View File

@ -1074,7 +1074,7 @@ $ sudo apt-get purge bbb-demo
The default HTML landing page is located in The default HTML landing page is located in
```bash ```bash
/var/www/bigbluebutton-default/index.html /var/www/bigbluebutton-default/assets/index.html
``` ```
Change this page to create your own landing page (and keep a back-up copy of it as it will be overwritten during package updates to `bbb-conf`). Change this page to create your own landing page (and keep a back-up copy of it as it will be overwritten during package updates to `bbb-conf`).

View File

@ -41,7 +41,7 @@ If you are setting up BigBlueButton for local development on your workstation, y
- 50G of disk space - 50G of disk space
- IPV4 address only - IPV4 address only
Regardless of your environment, the setup steps will include configuring a SSL certificate on the nginx server. Why? All browsers now require a valid SSL certificate from the web server when a page requests access to the user's webcam or microphone via web real-time communications (WebRTC). If you try to access a BigBlueButton server with an IP address only, the browsers will block BigBlueButton client from accessing your webcam or microhone. Regardless of your environment, the setup steps will include configuring a SSL certificate on the nginx server. Why? All browsers now require a valid SSL certificate from the web server when a page requests access to the user's webcam or microphone via web real-time communications (WebRTC). If you try to access a BigBlueButton server with an IP address only, the browsers will block BigBlueButton client from accessing your webcam or microphone.
### Pre-installation checks ### Pre-installation checks
@ -59,8 +59,8 @@ LANG="en_US.UTF-8"
If you don't see `LANG="en_US.UTF-8"`, enter the following commands to set the local to `en_US.UTF-8`. If you don't see `LANG="en_US.UTF-8"`, enter the following commands to set the local to `en_US.UTF-8`.
```bash ```bash
$ sudo apt-get install -y language-pack-en sudo apt-get install -y language-pack-en
$ sudo update-locale LANG=en_US.UTF-8 sudo update-locale LANG=en_US.UTF-8
``` ```
and then log out and log in again to your SSH session -- this will reload the locale configuration for your session. Run the above command `cat /etc/default/locale` again. Verify you see only the single line `LANG="en_US.UTF-8"`. and then log out and log in again to your SSH session -- this will reload the locale configuration for your session. Run the above command `cat /etc/default/locale` again. Verify you see only the single line `LANG="en_US.UTF-8"`.
@ -145,10 +145,12 @@ $ sudo ufw status
``` ```
If you don't see these lines, you need to open them by If you don't see these lines, you need to open them by
```bash ```bash
sudo ufw allow 80 sudo ufw allow 80
sudo ufw allow 443 sudo ufw allow 443
``` ```
Sometimes we get asked "Why are you only supporting Ubuntu 20.04 64-bit?". The answer is based on choosing quality over quantity. Long ago we concluded that its better for the project to have solid, well-tested, well-documented installation for a specific version of Linux that works really, really well than to try and support may variants of Linux and have none of them work well. Sometimes we get asked "Why are you only supporting Ubuntu 20.04 64-bit?". The answer is based on choosing quality over quantity. Long ago we concluded that its better for the project to have solid, well-tested, well-documented installation for a specific version of Linux that works really, really well than to try and support may variants of Linux and have none of them work well.
At the moment, the requirement for docker may preclude running 2.7 within some virtualized environments; however, it ensures libreoffice runs within a restricted sandbox for document conversion. We are exploring if we can run libreoffice within systemd (such as systemd-nspawn). At the moment, the requirement for docker may preclude running 2.7 within some virtualized environments; however, it ensures libreoffice runs within a restricted sandbox for document conversion. We are exploring if we can run libreoffice within systemd (such as systemd-nspawn).
@ -344,8 +346,8 @@ If you are upgrading BigBlueButton 2.4 or 2.3 we recommend you set up a new Ubun
You can restart and check your BigBlueButton server at any time using the commands You can restart and check your BigBlueButton server at any time using the commands
```bash ```bash
$ sudo bbb-conf --restart sudo bbb-conf --restart
$ sudo bbb-conf --check sudo bbb-conf --check
``` ```
The `bbb-conf --check` scans some of the log files for error messages. Again, any output that followed `Potential problems` **may** indicate configuration errors or installation errors. In many cases, the messages will give you recommendations on how to resolve the issue. The `bbb-conf --check` scans some of the log files for error messages. Again, any output that followed `Potential problems` **may** indicate configuration errors or installation errors. In many cases, the messages will give you recommendations on how to resolve the issue.
@ -403,8 +405,8 @@ Large scale deployments must include several other components in addition to the
See the [Server customization page](/administration/customize) for things you can do to adapt BigBlueButton to your environment or enable optional features after installation. For example See the [Server customization page](/administration/customize) for things you can do to adapt BigBlueButton to your environment or enable optional features after installation. For example
* [Install additional recording processing formats](/administration/customize#install-additional-recording-processing-formats) - [Install additional recording processing formats](/administration/customize#install-additional-recording-processing-formats)
* [Enable generating mp4 (H.264) video output](/administration/customize#enable-generating-mp4-h264-video-output) - [Enable generating mp4 (H.264) video output](/administration/customize#enable-generating-mp4-h264-video-output)
## Troubleshooting ## Troubleshooting

View File

@ -139,11 +139,12 @@ SMTP configuration requires following the guidelines provided by your SMTP serve
### OpenID Connect Setup ### OpenID Connect Setup
| Variable Name | Description | Default Value | | Variable Name | Description | Default Value |
|---------------|---------------------------------------------------------------------------------------------------------------------------------------|---------------| |---------------|-----------------------------------------------------------------------------------------------------|--------------|
| OPENID_CONNECT_CLIENT_ID | The client ID of the OpenID issuer | - | | OPENID_CONNECT_CLIENT_ID | The client ID of the OpenID issuer | - |
| OPENID_CONNECT_CLIENT_SECRET | The secret to use to authenticate to the OpenID issuer | - | | OPENID_CONNECT_CLIENT_SECRET | The secret to use to authenticate to the OpenID issuer | - |
| OPENID_CONNECT_ISSUER | The URL for the OpenID issuer. It is required to be HTTPS URL using the default HTTPS port (TCP 443) | - | | OPENID_CONNECT_ISSUER | The URL for the OpenID issuer. It is required to be HTTPS URL using the default HTTPS port (TCP 443) | - |
| OPENID_CONNECT_REDIRECT | The Redirect URI after successful authentication. It should be the URL to Greenlight | - | | OPENID_CONNECT_REDIRECT | The Redirect URI after successful authentication. It should be the URL to Greenlight | - |
| OPENID_CONNECT_UID_FIELD | The field of the user info response to be used as the unique identifier in Greenlight | 'sub' |
### HCaptcha Setup ### HCaptcha Setup

View File

@ -39,6 +39,19 @@ The migration system consists of multiples **rake tasks** and **a restful API**:
Before the migration process, make sure that the Greenlight v3 server is running and accessible through your network. Before the migration process, make sure that the Greenlight v3 server is running and accessible through your network.
### Updating v2 to the latest version
Before begin your upgrade, it is crucial that you update Greenlight v2 to the latest version. This ensures that you are using the latest version of the migration scripts.
To do so, run the following commands on your v2 machine:
```bash
cd ~/greenlight
docker-compose pull
docker-compose down
docker-compose up -d
```
### Configuring the Environment ### Configuring the Environment
In Greenlight v2 **.env** file, add the following variables: In Greenlight v2 **.env** file, add the following variables:
@ -47,47 +60,9 @@ In Greenlight v2 **.env** file, add the following variables:
![env_migration_endpoints.png](/img/greenlight/v3/migration/env_migration_endpoints.png) ![env_migration_endpoints.png](/img/greenlight/v3/migration/env_migration_endpoints.png)
### The rake migration task file ### Understanding the Migrations
**If your Greenlight v2 deployment is up to date with the official latest release, you can skip to [Migration Steps](#migration-steps).** **The migrations must be run in the following order: roles, users, rooms, settings.**
Else, you will need to to load the rake migration task file into your directory.
To do so, follow the steps below:
1) Navigate to your Greenlight v2 directory
2) Download the migration rake tasks with the following command:
```bash
wget -P lib/tasks/migrations https://raw.githubusercontent.com/bigbluebutton/greenlight/v2/lib/tasks/migrations/migrations.rake
```
The file **migrations.rake** should now be present in your **/lib/tasks/migrations** directory.
**To include our changes directly in the Docker container:**
3) Edit the volumes partition in the **docker-compose.yaml** to add the new migration file as follow:
```yaml
services:
app:
volumes:
- ./log:/usr/src/app/log
- ./storage:/usr/src/app/storage
- ./lib/tasks/migrations:/usr/src/app/lib/tasks/migrations
```
4) Save the changes and restart Greenlight v2 by running:
```bash
sudo docker-compose down && sudo docker-compose up -d
```
## Migration Steps
**It is required to run the migrations in the following order: roles, users, rooms, settings.**
The logs will indicate the status of the migrated resources in real-time, in the console. The logs will indicate the status of the migrated resources in real-time, in the console.
@ -105,7 +80,7 @@ However, a failed migration resource should not hinder the whole migration proce
**If re-running the migration does not solve the issue, the error message should give you a clue of what went wrong.** **If re-running the migration does not solve the issue, the error message should give you a clue of what went wrong.**
### Roles Migration ## Roles Migration
The custom Roles and the corresponding Role Permissions will be migrated. The custom Roles and the corresponding Role Permissions will be migrated.
@ -121,30 +96,51 @@ sudo docker exec -it greenlight-v2 bundle exec rake migrations:roles
**If you have an error, try re-running the migration task to resolve any failed resources migration.** **If you have an error, try re-running the migration task to resolve any failed resources migration.**
**Also, make sure that the Greenlight v3 server is running and accessible through your network.** **Also, make sure that the Greenlight v3 server is running and accessible through your network.**
### Users Migration ## Users Migration
The Users will be migrated with their corresponding role. The Users will be migrated with their corresponding role.
Important notes: Important notes:
- **The accounts passwords can't be migrated from Greenlight v2. A rake task that sends an email to all the users and prompts them to reset their password is provided for Greenlight v3. When the migration is completed, please jump to [After the Migration](#after-the-migration). Please note that if you are using external accounts, like Google or Microsoft, this is not applicable.**- Pending, denied and deleted users will not be migrated to Greenlight v3.
- Both local and external users will be migrated. - Both local and external users will be migrated.
### Local Accounts
** If you only have external users (google, office365, LDAP, SAML, etc..), please skip to the next section.**
When migrating local accounts from GLv2 to GLv3, the password_digest field will be securely transferred from v2 to v3. This ensures that local customers can seamlessly sign in using the exact same password as in v2.
To enable this, it's crucial that both GLv2 and GLv3 share the same value for the SECRET_KEY_BASE environment variable, which is set in the .env file.
Follow these steps:
1. **Retrieve GLv2's `SECRET_KEY_BASE`:**
On your GLv2 machine, execute the following command in the terminal:
```bash
cd ~/greenlight
cat .env | grep SECRET_KEY_BASE
```
Copy the value that is returned.
2. **Update GLv2 `.env` file:**
Edit the .env file on your GLv2 machine and replace the value of `V3_SECRET_KEY_BASE` with the copied value.
3. **Update GLv3 `.env` file:**
On your GLv3 machine, replace the `SECRET_KEY_BASE` in your .env file with the same value that you copied from GLv2.
Ensure that the `SECRET_KEY_BASE` values for GLv2, GLv3, and the `V3_SECRET_KEY_BASE` variable in GLv2's `.env` file are now synchronized.
### Migrating Users
**To migrate all of your v2 users to v3, run the following command:** **To migrate all of your v2 users to v3, run the following command:**
```bash ```bash
sudo docker exec -it greenlight-v2 bundle exec rake migrations:users sudo docker exec -it greenlight-v2 bundle exec rake migrations:users
``` ```
**To migrate only a portion of the users starting from *FIRST_USER_ID* to *LAST_USER_ID*, run this command instead:**
```bash
sudo docker exec -it greenlight-v2 bundle exec rake migrations:users\[<FIRST_USER_ID>,<LAST_USER_ID>]
```
*Administrators can use the last command to migrate resources in parallel, the same migration task can be run in separate processes each migrating a portion of the resources class simultaneously.*
**If you have an error, try re-running the migration task to resolve any failed resources migration.** **If you have an error, try re-running the migration task to resolve any failed resources migration.**
**Also, make sure that the Roles migration has been successful.** **Also, make sure that the Roles migration has been successful.**
### Rooms Migration ## Rooms Migration
The Rooms will be migrated with their corresponding Room Settings. Also, the Shared Accesses will be migrated. The Rooms will be migrated with their corresponding Room Settings. Also, the Shared Accesses will be migrated.
Important notes: Important notes:
@ -159,20 +155,10 @@ Important notes:
sudo docker exec -it greenlight-v2 bundle exec rake migrations:rooms sudo docker exec -it greenlight-v2 bundle exec rake migrations:rooms
``` ```
**To migrate only a portion of users starting from **FIRST_ROOM_ID** to **LAST_ROOM_ID**, run this command instead**:**
```bash
sudo docker exec -it greenlight-v2 bundle exec rake migrations:rooms\[<FIRST_ROOM_ID>,<LAST_ROOM_ID>]
```
*Note: The partitioning is based on resources id value and not there position in the database, so calling **rake migrations:rooms[1, 100]** will not migrate the first 100 active users rooms but rather active users rooms having an id of 1 to 100 if existed.*
*Administrators can use the last command to migrate resources in parallel, the same migration task can be run in separate processes each migrating a portion of the resources class simultaneously.*
**If you have an error, try re-running the migration task to resolve any failed resources migration.** **If you have an error, try re-running the migration task to resolve any failed resources migration.**
**Also, make sure that the Users migration has been successful.** **Also, make sure that the Users migration has been successful.**
### Settings Migration ## Settings Migration
The Site Settings and the Rooms Configuration will be migrated. The Site Settings and the Rooms Configuration will be migrated.
- The *Site Settings* are customisable settings related to the Greenlight application, such as the Brand colors, the Brand image, the Registration method, the Terms & Conditions. - The *Site Settings* are customisable settings related to the Greenlight application, such as the Brand colors, the Brand image, the Registration method, the Terms & Conditions.
@ -192,21 +178,9 @@ sudo docker exec -it greenlight-v2 bundle exec rake migrations:settings
**If you have an error, try re-running the migration task to resolve any failed resources migration.** **If you have an error, try re-running the migration task to resolve any failed resources migration.**
## After the Migration ## After the Migration
Having completed the migration successfully, it is now imperative to inform users of the need to reset their Greenlight account passwords. Having completed the migration successfully, the final step is to import the recordings into v3.
This can be achieved through the utilization of the rake task available in Greenlight v3.
**It is important to note, however, that this is not applicable for users who utilize external accounts such as Google or Microsoft.**
To send a reset password email to all your users, run the following command: To re-sync the list of recordings, run the following command **on the v3 machine**:
```bash
sudo docker exec -it greenlight-v3 bundle exec rake migration:reset_password_email\[<BASE URL>]
```
The &lt;BASE URL&gt; in the command above should be replaced with your Greenlight domain name.
Also, please note that the BigBlueButton recordings list will now be empty.
To re-sync the list of recordings, run the following command:
```bash ```bash
sudo docker exec -it greenlight-v3 bundle exec rake server_recordings_sync sudo docker exec -it greenlight-v3 bundle exec rake server_recordings_sync