diff options
author | Rainer Jung <rainer.jung@kippdata.de> | 2019-04-29 18:46:01 +0300 |
---|---|---|
committer | Rainer Jung <rainer.jung@kippdata.de> | 2019-08-15 12:29:03 +0300 |
commit | fbcf8802f2c8d262168af99d621eac08e363e05d (patch) | |
tree | 9836b714d50284dce18ec4392a30f1bd34681d5b /lib | |
parent | e414e0c8401a93605db3da67b7f918e7528ec9dc (diff) |
Add new config item public_wopi_url.
It will be used in addAllowedFrameDomain() and automatically
determined from the Capabilities URL in the discovery response.
Signed-off-by: Rainer Jung <rainer.jung@kippdata.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Controller/DirectViewController.php | 2 | ||||
-rw-r--r-- | lib/Controller/DocumentController.php | 6 | ||||
-rw-r--r-- | lib/Controller/SettingsController.php | 29 |
3 files changed, 28 insertions, 9 deletions
diff --git a/lib/Controller/DirectViewController.php b/lib/Controller/DirectViewController.php index d685b43a..0d5f8c71 100644 --- a/lib/Controller/DirectViewController.php +++ b/lib/Controller/DirectViewController.php @@ -138,7 +138,7 @@ class DirectViewController extends Controller { $response = new TemplateResponse('richdocuments', 'documents', $params, 'empty'); $policy = new ContentSecurityPolicy(); $policy->allowInlineScript(true); - $policy->addAllowedFrameDomain($this->appConfig->getAppValue('wopi_url')); + $policy->addAllowedFrameDomain($this->appConfig->getAppValue('public_wopi_url')); $response->setContentSecurityPolicy($policy); return $response; } catch (\Exception $e) { diff --git a/lib/Controller/DocumentController.php b/lib/Controller/DocumentController.php index 734ad41d..b9609793 100644 --- a/lib/Controller/DocumentController.php +++ b/lib/Controller/DocumentController.php @@ -198,7 +198,7 @@ class DocumentController extends Controller { $response = new TemplateResponse('richdocuments', 'documents', $params, 'empty'); $policy = new ContentSecurityPolicy(); - $policy->addAllowedFrameDomain($this->domainOnly($this->appConfig->getAppValue('wopi_url'))); + $policy->addAllowedFrameDomain($this->domainOnly($this->appConfig->getAppValue('public_wopi_url'))); $policy->allowInlineScript(true); $response->setContentSecurityPolicy($policy); return $response; @@ -255,7 +255,7 @@ class DocumentController extends Controller { $response = new TemplateResponse('richdocuments', 'documents', $params, 'empty'); $policy = new ContentSecurityPolicy(); - $policy->addAllowedFrameDomain($this->domainOnly($this->appConfig->getAppValue('wopi_url'))); + $policy->addAllowedFrameDomain($this->domainOnly($this->appConfig->getAppValue('public_wopi_url'))); $policy->allowInlineScript(true); $response->setContentSecurityPolicy($policy); return $response; @@ -302,7 +302,7 @@ class DocumentController extends Controller { $response = new TemplateResponse('richdocuments', 'documents', $params, 'empty'); $policy = new ContentSecurityPolicy(); - $policy->addAllowedFrameDomain($this->domainOnly($this->appConfig->getAppValue('wopi_url'))); + $policy->addAllowedFrameDomain($this->domainOnly($this->appConfig->getAppValue('public_wopi_url'))); $policy->allowInlineScript(true); $response->setContentSecurityPolicy($policy); return $response; diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 0ad2301f..5050d548 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -13,6 +13,7 @@ namespace OCA\Richdocuments\Controller; use OCA\Richdocuments\Service\CapabilitiesService; use OCA\Richdocuments\WOPI\DiscoveryManager; +use OCA\Richdocuments\WOPI\Parser; use \OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; @@ -32,6 +33,8 @@ class SettingsController extends Controller{ private $config; /** @var DiscoveryManager */ private $discoveryManager; + /** @var Parser */ + private $wopiParser; /** @var string */ private $userId; /** @var CapabilitiesService */ @@ -44,7 +47,9 @@ class SettingsController extends Controller{ * @param AppConfig $appConfig * @param IConfig $config * @param DiscoveryManager $discoveryManager + * @param Parser $wopiParser * @param string $userId + * @param CapabilitiesService $capabilitiesService */ public function __construct($appName, IRequest $request, @@ -52,6 +57,7 @@ class SettingsController extends Controller{ AppConfig $appConfig, IConfig $config, DiscoveryManager $discoveryManager, + Parser $wopiParser, $userId, CapabilitiesService $capabilitiesService) { parent::__construct($appName, $request); @@ -59,6 +65,7 @@ class SettingsController extends Controller{ $this->appConfig = $appConfig; $this->config = $config; $this->discoveryManager = $discoveryManager; + $this->wopiParser = $wopiParser; $this->userId = $userId; $this->capabilitiesService = $capabilitiesService; } @@ -89,6 +96,7 @@ class SettingsController extends Controller{ public function getSettings() { return new JSONResponse([ 'wopi_url' => $this->appConfig->getAppValue('wopi_url'), + 'public_wopi_url' => $this->appConfig->getAppValue('public_wopi_url'), 'disable_certificate_verification' => $this->appConfig->getAppValue('disable_certificate_verification'), 'edit_groups' => $this->appConfig->getAppValue('edit_groups'), 'use_groups' => $this->appConfig->getAppValue('use_groups'), @@ -117,11 +125,6 @@ class SettingsController extends Controller{ if ($wopi_url !== null){ $this->appConfig->setAppValue('wopi_url', $wopi_url); - - $colon = strpos($wopi_url, ':', 0); - if ($this->request->getServerProtocol() !== substr($wopi_url, 0, $colon)){ - $message = $this->l10n->t('Saved with error: Collabora Online should use the same protocol as the server installation.'); - } } if ($disable_certificate_verification !== null) { @@ -152,6 +155,22 @@ class SettingsController extends Controller{ } $this->discoveryManager->refretch(); + try { + $capaUrlSrc = $this->wopiParser->getUrlSrc('Capabilities'); + if (is_array($capaUrlSrc) && $capaUrlSrc['action'] === 'getinfo') { + // XXX Works, but probably better to strip trailing '/hosting/capabilities' + $public_wopi_url = $capaUrlSrc['urlsrc']; + if ($public_wopi_url !== null) { + $this->appConfig->setAppValue('public_wopi_url', $public_wopi_url); + $colon = strpos($public_wopi_url, ':', 0); + if ($this->request->getServerProtocol() !== substr($public_wopi_url, 0, $colon)){ + $message = $this->l10n->t('Saved with error: Collabora Online should use the same protocol as the server installation.'); + } + } + } + } catch (\Exception $e){ + // Ignore + } $this->capabilitiesService->clear(); $this->capabilitiesService->refretch(); |