From 684a676b7b3960b60c6d29abd3977ee53f88023c Mon Sep 17 00:00:00 2001
From: brtbr
Date: Sun, 2 Jun 2024 00:11:27 +0200
Subject: [PATCH] feat: add option to not use avatars in BBB rooms
This commit adds an admin option to disable the use of Nextcloud avatars
in BBB rooms.
If an avatar-cache is configured and a meeting is running while changing
this setting, the avatars of these meetings will not be cleared. In that
case the command-line argument (see README) needs to be used.
Fixes issue #268
---
README.md | 5 +++--
lib/BigBlueButton/API.php | 8 +++++---
lib/Controller/HookController.php | 12 ++++++++++--
lib/Settings/Admin.php | 1 +
templates/admin.php | 5 +++++
5 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 493b2ff2..0145d5b1 100644
--- a/README.md
+++ b/README.md
@@ -77,6 +77,7 @@ Key | Description
`app.shortener` | Value of your shortener service. Should start with `https://` and contain `{token}`.
`avatar.path` | Absolute path to an optional avatar cache directory.
`avatar.url` | URL which serves `avatar.path` to be used as avatar cache.
+`avatar.enabled` | Set to `false` if you want to disable the use of Nextcloud avatars in BBB rooms.
### Avatar cache (v2.2+)
The generation of avatars puts a high load on your Nextcloud instance, since the
@@ -111,8 +112,8 @@ For additional security, we recommend to disable directory listing, symlinks and
any language interpreter such as php for the cache directory.
Cached avatars are usually deleted as soon as the meeting ends. In cases the BBB
-server shuts down unexpected, we provide the `bbb:clear-avatar-cache` occ
-command (example use: `./occ bbb:clear-avatar-cache`).
+server shuts down unexpected or you set `avatar.enabled` to `false` (via gui or manually) while a meeting was running,
+we provide the `bbb:clear-avatar-cache` occ command (example use: `./occ bbb:clear-avatar-cache`).
## :bowtie: User guide
diff --git a/lib/BigBlueButton/API.php b/lib/BigBlueButton/API.php
index 4912f4ce..71aebf7a 100644
--- a/lib/BigBlueButton/API.php
+++ b/lib/BigBlueButton/API.php
@@ -131,10 +131,12 @@ public function createJoinUrl(Room $room, float $creationTime, string $displayna
}
if ($uid) {
- $avatarUrl = $this->avatarRepository->getAvatarUrl($room, $uid);
-
$joinMeetingParams->setUserID($uid);
- $joinMeetingParams->setAvatarURL($avatarUrl);
+
+ if ($this->config->getAppValue('bbb', 'avatar.enabled', 'true') === 'true') {
+ $avatarUrl = $this->avatarRepository->getAvatarUrl($room, $uid);
+ $joinMeetingParams->setAvatarURL($avatarUrl);
+ }
}
return $this->getServer()->getJoinMeetingURL($joinMeetingParams);
diff --git a/lib/Controller/HookController.php b/lib/Controller/HookController.php
index f3a16146..48aa5c8c 100644
--- a/lib/Controller/HookController.php
+++ b/lib/Controller/HookController.php
@@ -7,6 +7,7 @@
use OCA\BigBlueButton\Event\MeetingEndedEvent;
use OCA\BigBlueButton\Event\RecordingReadyEvent;
use OCA\BigBlueButton\Service\RoomService;
+use OCP\IConfig;
use OCP\AppFramework\Controller;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IRequest;
@@ -27,18 +28,23 @@ class HookController extends Controller {
/** @var IEventDispatcher */
private $eventDispatcher;
+ /** @var IConfig */
+ private $config;
+
public function __construct(
string $appName,
IRequest $request,
RoomService $service,
AvatarRepository $avatarRepository,
- IEventDispatcher $eventDispatcher
+ IEventDispatcher $eventDispatcher,
+ IConfig $config
) {
parent::__construct($appName, $request);
$this->service = $service;
$this->avatarRepository = $avatarRepository;
$this->eventDispatcher = $eventDispatcher;
+ $this->config = $config;
}
public function setToken(string $token): void {
@@ -65,7 +71,9 @@ public function meetingEnded($recordingmarks = false): void {
$this->service->updateRunning($room->getId(), false);
- $this->avatarRepository->clearRoom($room->uid);
+ if ($this->config->getAppValue('bbb', 'avatar.enabled', 'true') === 'true') {
+ $this->avatarRepository->clearRoom($room->uid);
+ }
$this->eventDispatcher->dispatch(MeetingEndedEvent::class, new MeetingEndedEvent($room, $recordingmarks));
}
diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php
index 0fbc2037..e4bbff5a 100644
--- a/lib/Settings/Admin.php
+++ b/lib/Settings/Admin.php
@@ -30,6 +30,7 @@ public function getForm() {
'join.theme' => $this->config->getAppValue('bbb', 'join.theme') === 'true' ? 'checked' : '',
'app.shortener' => $this->config->getAppValue('bbb', 'app.shortener'),
'join.mediaCheck' => $this->config->getAppValue('bbb', 'join.mediaCheck', 'true') === 'true' ? 'checked' : '',
+ 'avatar.enabled' => $this->config->getAppValue('bbb', 'avatar.enabled', 'true') === 'true' ? 'checked' : '',
];
return new TemplateResponse('bbb', 'admin', $parameters);
diff --git a/templates/admin.php b/templates/admin.php
index a517aced..41de087f 100644
--- a/templates/admin.php
+++ b/templates/admin.php
@@ -29,6 +29,11 @@
+
+ />
+
+
+
t('Default Room Settings')); ?>
t('Below you can change some default values, which are used to create a new room.')); ?>