Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/richdocuments.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRainer Jung <rainer.jung@kippdata.de>2019-04-29 18:46:01 +0300
committerRainer Jung <rainer.jung@kippdata.de>2019-08-15 12:29:03 +0300
commitfbcf8802f2c8d262168af99d621eac08e363e05d (patch)
tree9836b714d50284dce18ec4392a30f1bd34681d5b /lib
parente414e0c8401a93605db3da67b7f918e7528ec9dc (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.php2
-rw-r--r--lib/Controller/DocumentController.php6
-rw-r--r--lib/Controller/SettingsController.php29
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();