diff --git a/lib/BigBlueButton/API.php b/lib/BigBlueButton/API.php index efd27cc..f197845 100644 --- a/lib/BigBlueButton/API.php +++ b/lib/BigBlueButton/API.php @@ -14,6 +14,7 @@ use OCA\BigBlueButton\Event\MeetingStartedEvent; use OCA\BigBlueButton\Db\Room; use OCA\BigBlueButton\Permission; use OCA\BigBlueButton\Crypto; +use OCA\BigBlueButton\UrlHelper; use OCP\IConfig; use OCP\IURLGenerator; use OCP\IL10N; @@ -40,13 +41,17 @@ class API { /** @var IL10N */ private $l10n; + /** @var UrlHelper */ + private $urlHelper; + public function __construct( IConfig $config, IURLGenerator $urlGenerator, Permission $permission, Crypto $crypto, IEventDispatcher $eventDispatcher, - IL10N $l10n + IL10N $l10n, + UrlHelper $urlHelper ) { $this->config = $config; $this->urlGenerator = $urlGenerator; @@ -54,6 +59,7 @@ class API { $this->crypto = $crypto; $this->eventDispatcher = $eventDispatcher; $this->l10n = $l10n; + $this->urlHelper = $urlHelper; } private function getServer() { @@ -132,7 +138,7 @@ class API { $recordingReadyUrl = $this->urlGenerator->linkToRouteAbsolute('bbb.hook.recordingReady', ['token' => $room->uid, 'mac' => $mac]); $createMeetingParams->setRecordingReadyCallbackUrl($recordingReadyUrl); - $invitationUrl = $this->urlGenerator->linkToRouteAbsolute('bbb.join.index', ['token' => $room->uid]); + $invitationUrl = $this->urlHelper->linkToInvitationAbsolute($room); $createMeetingParams->setModeratorOnlyMessage($this->l10n->t('To invite someone to the meeting, send them this link: %s', [$invitationUrl])); if (!empty($room->welcome)) { diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index c42440e..49e95f1 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -5,10 +5,16 @@ namespace OCA\BigBlueButton\Controller; use OCP\IRequest; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Controller; +use OCP\IConfig; class PageController extends Controller { - public function __construct(string $appName, IRequest $request) { + /** @var IConfig */ + private $config; + + public function __construct(string $appName, IRequest $request, IConfig $config) { parent::__construct($appName, $request); + + $this->config = $config; } /** @@ -16,6 +22,8 @@ class PageController extends Controller { * @NoCSRFRequired */ public function index() { - return new TemplateResponse($this->appName, 'manager'); + return new TemplateResponse($this->appName, 'manager', [ + 'shortener' => $this->config->getAppValue('bbb', 'app.shortener', ''), + ]); } } diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 2ffb63f..cf090ab 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -28,6 +28,7 @@ class Admin implements ISettings { 'api.url' => $this->config->getAppValue('bbb', 'api.url'), 'api.secret' => $this->config->getAppValue('bbb', 'api.secret'), 'app.navigation' => $this->config->getAppValue('bbb', 'app.navigation') === 'true' ? 'checked' : '', + 'app.shortener' => $this->config->getAppValue('bbb', 'app.shortener'), ]; return new TemplateResponse('bbb', 'admin', $parameters); diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php index bfdc4ab..b0f416d 100644 --- a/lib/Settings/Personal.php +++ b/lib/Settings/Personal.php @@ -34,7 +34,10 @@ class Personal implements ISettings { $warning = $this->l->t('API URL or secret not configured. Please contact your administrator.'); } - return new TemplateResponse('bbb', 'manager', ['warning' => $warning]); + return new TemplateResponse('bbb', 'manager', [ + 'warning' => $warning, + 'shortener' => $this->config->getAppValue('bbb', 'app.shortener', ''), + ]); } /** diff --git a/lib/UrlHelper.php b/lib/UrlHelper.php new file mode 100644 index 0000000..3f0b7cb --- /dev/null +++ b/lib/UrlHelper.php @@ -0,0 +1,44 @@ +config = $config; + $this->urlGenerator = $urlGenerator; + } + + public function linkToInvitationAbsolute(Room $room): string { + $url = $this->config->getAppValue('bbb', 'app.shortener', ''); + + if (empty($url) || strpos($url, 'https://') !== 0 || strpos($url, '{token}') === false) { + return $this->urlGenerator->linkToRouteAbsolute('bbb.join.index', ['token' => $room->getUid()]); + } + + $placeholders = []; + $replacements = [ + 'token' => $room->getUid(), + 'user' => $room->getUserId(), + ]; + + + foreach ($replacements as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + } + + return str_replace($placeholders, $replacements, $url); + } +} diff --git a/templates/admin.php b/templates/admin.php index 1e77b70..74e8589 100644 --- a/templates/admin.php +++ b/templates/admin.php @@ -11,12 +11,12 @@ script('bbb', 'restrictions');
t('Get your API URL and secret by executing "sudo bbb-conf --secret" on your BigBlueButton server.')); ?>
-@@ -24,6 +24,18 @@ script('bbb', 'restrictions');
+t('If you like to use shorter urls, you can enter a forwarding proxy below.')); ?>
+ + +${generateExampleShortener(value)}
+#Apache with mod_rewrite +ServerName ${url.hostname} +RewriteEngine on +RewriteRule "${rewritePath}" "${target}" [R=307,L] + +#Nginx config +server_name ${url.hostname}; +rewrite ${rewritePath} ${target} last; +return 307;