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
pull/276/head
brtbr 2024-06-02 00:11:27 +02:00 committed by Brtbr
parent d023ffa331
commit 684a676b7b
No known key found for this signature in database
5 changed files with 24 additions and 7 deletions

View File

@ -77,6 +77,7 @@ Key | Description
`app.shortener` | Value of your shortener service. Should start with `https://` and contain `{token}`. `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.path` | Absolute path to an optional avatar cache directory.
`avatar.url` | URL which serves `avatar.path` to be used as avatar cache. `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+) ### Avatar cache (v2.2+)
The generation of avatars puts a high load on your Nextcloud instance, since the 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. 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 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 server shuts down unexpected or you set `avatar.enabled` to `false` (via gui or manually) while a meeting was running,
command (example use: `./occ bbb:clear-avatar-cache`). we provide the `bbb:clear-avatar-cache` occ command (example use: `./occ bbb:clear-avatar-cache`).
## :bowtie: User guide ## :bowtie: User guide

View File

@ -131,11 +131,13 @@ class API {
} }
if ($uid) { if ($uid) {
$avatarUrl = $this->avatarRepository->getAvatarUrl($room, $uid);
$joinMeetingParams->setUserID($uid); $joinMeetingParams->setUserID($uid);
if ($this->config->getAppValue('bbb', 'avatar.enabled', 'true') === 'true') {
$avatarUrl = $this->avatarRepository->getAvatarUrl($room, $uid);
$joinMeetingParams->setAvatarURL($avatarUrl); $joinMeetingParams->setAvatarURL($avatarUrl);
} }
}
return $this->getServer()->getJoinMeetingURL($joinMeetingParams); return $this->getServer()->getJoinMeetingURL($joinMeetingParams);
} }

View File

@ -7,6 +7,7 @@ use OCA\BigBlueButton\Db\Room;
use OCA\BigBlueButton\Event\MeetingEndedEvent; use OCA\BigBlueButton\Event\MeetingEndedEvent;
use OCA\BigBlueButton\Event\RecordingReadyEvent; use OCA\BigBlueButton\Event\RecordingReadyEvent;
use OCA\BigBlueButton\Service\RoomService; use OCA\BigBlueButton\Service\RoomService;
use OCP\IConfig;
use OCP\AppFramework\Controller; use OCP\AppFramework\Controller;
use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventDispatcher;
use OCP\IRequest; use OCP\IRequest;
@ -27,18 +28,23 @@ class HookController extends Controller {
/** @var IEventDispatcher */ /** @var IEventDispatcher */
private $eventDispatcher; private $eventDispatcher;
/** @var IConfig */
private $config;
public function __construct( public function __construct(
string $appName, string $appName,
IRequest $request, IRequest $request,
RoomService $service, RoomService $service,
AvatarRepository $avatarRepository, AvatarRepository $avatarRepository,
IEventDispatcher $eventDispatcher IEventDispatcher $eventDispatcher,
IConfig $config
) { ) {
parent::__construct($appName, $request); parent::__construct($appName, $request);
$this->service = $service; $this->service = $service;
$this->avatarRepository = $avatarRepository; $this->avatarRepository = $avatarRepository;
$this->eventDispatcher = $eventDispatcher; $this->eventDispatcher = $eventDispatcher;
$this->config = $config;
} }
public function setToken(string $token): void { public function setToken(string $token): void {
@ -65,7 +71,9 @@ class HookController extends Controller {
$this->service->updateRunning($room->getId(), false); $this->service->updateRunning($room->getId(), false);
if ($this->config->getAppValue('bbb', 'avatar.enabled', 'true') === 'true') {
$this->avatarRepository->clearRoom($room->uid); $this->avatarRepository->clearRoom($room->uid);
}
$this->eventDispatcher->dispatch(MeetingEndedEvent::class, new MeetingEndedEvent($room, $recordingmarks)); $this->eventDispatcher->dispatch(MeetingEndedEvent::class, new MeetingEndedEvent($room, $recordingmarks));
} }

View File

@ -30,6 +30,7 @@ class Admin implements ISettings {
'join.theme' => $this->config->getAppValue('bbb', 'join.theme') === 'true' ? 'checked' : '', 'join.theme' => $this->config->getAppValue('bbb', 'join.theme') === 'true' ? 'checked' : '',
'app.shortener' => $this->config->getAppValue('bbb', 'app.shortener'), 'app.shortener' => $this->config->getAppValue('bbb', 'app.shortener'),
'join.mediaCheck' => $this->config->getAppValue('bbb', 'join.mediaCheck', 'true') === 'true' ? 'checked' : '', '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); return new TemplateResponse('bbb', 'admin', $parameters);

View File

@ -29,6 +29,11 @@ script('bbb', 'restrictions');
<label for="bbb-join-theme"><?php p($l->t('Use Nextcloud theme in BigBlueButton.')); ?></label> <label for="bbb-join-theme"><?php p($l->t('Use Nextcloud theme in BigBlueButton.')); ?></label>
</p> </p>
<p>
<input type="checkbox" name="avatar.enabled" id="bbb-avatar-enabled" class="checkbox bbb-setting" value="1" <?php p($_['avatar.enabled']); ?> />
<label for="bbb-avatar-enabled"><?php p($l->t('Use Nextcloud avatars in BBB rooms.')); ?></label>
</p>
<h3><?php p($l->t('Default Room Settings')); ?></h3> <h3><?php p($l->t('Default Room Settings')); ?></h3>
<p><?php p($l->t('Below you can change some default values, which are used to create a new room.')); ?></p> <p><?php p($l->t('Below you can change some default values, which are used to create a new room.')); ?></p>