urlGenerator = $urlGenerator; $this->trans = $trans; $this->logger = $logger; $this->config = $config; $this->crypt = $crypt; } /** * Print config section * * @return TemplateResponse */ public function index() { $formats = $this->formats(); $defFormats = array(); foreach ($formats as $format => $setting) { if (array_key_exists("edit", $setting) && $setting["edit"]) { $defFormats[$format] = array_key_exists("def", $setting) && $setting["def"]; } } $data = [ "documentserver" => $this->config->GetDocumentServerUrl(), "documentserverInternal" => $this->config->GetDocumentServerInternalUrl(true), "storageUrl" => $this->config->GetStorageUrl(), "secret" => $this->config->GetDocumentServerSecret(), "currentServer" => $this->urlGenerator->getAbsoluteURL("/"), "defFormats" => $defFormats, "sameTab" => $this->config->GetSameTab(), "encryption" => $this->checkEncryptionModule() ]; return new TemplateResponse($this->appName, "settings", $data, "blank"); } /** * Save app settings * * @param string $documentserver - document service address * @param string $documentserverInternal - document service address available from ownCloud * @param string $storageUrl - ownCloud address available from document server * @param string $secret - secret key for signature * @param string $defFormats - formats array with default action * * @return array */ public function SaveSettings($documentserver, $documentserverInternal, $storageUrl, $secret, $defFormats, $sameTab ) { $this->config->SetDocumentServerUrl($documentserver); $this->config->SetDocumentServerInternalUrl($documentserverInternal); $this->config->SetStorageUrl($storageUrl); $this->config->SetDocumentServerSecret($secret); $documentserver = $this->config->GetDocumentServerUrl(); if (!empty($documentserver)) { $error = $this->checkDocServiceUrl(); $this->config->SetSettingsError($error); } $this->config->DropSKey(); $this->config->SetDefaultFormats($defFormats); $this->config->SetSameTab($sameTab); if ($this->checkEncryptionModule()) { $this->logger->info("SaveSettings when encryption is enabled", array("app" => $this->appName)); } return [ "documentserver" => $this->config->GetDocumentServerUrl(), "documentserverInternal" => $this->config->GetDocumentServerInternalUrl(true), "storageUrl" => $this->config->GetStorageUrl(), "secret" => $this->config->GetDocumentServerSecret(), "error" => $error ]; } /** * Get app settings * * @return array * * @NoAdminRequired */ public function GetSettings() { $result = [ "formats" => $this->formats(), "sameTab" => $this->config->GetSameTab() ]; return $result; } /** * Get supported formats * * @return array * * @NoAdminRequired */ private function formats() { $defFormats = $this->config->GetDefaultFormats(); $result = $this->config->formats; foreach ($result as $format => $setting) { if (array_key_exists("edit", $setting) && $setting["edit"] && array_key_exists($format, $defFormats)) { $result[$format]["def"] = ($defFormats[$format] === true || $defFormats[$format] === "true"); } } return $result; } /** * Checking document service location * * @param string $documentServer - document service address * * @return string */ private function checkDocServiceUrl() { try { if (substr($this->urlGenerator->getAbsoluteURL("/"), 0, strlen("https")) === "https" && substr($this->config->GetDocumentServerUrl("/"), 0, strlen("https")) !== "https") { throw new \Exception($this->trans->t("Mixed Active Content is not allowed. HTTPS address for Document Server is required.")); } $documentService = new DocumentService($this->trans, $this->config); $commandResponse = $documentService->CommandRequest("version"); $this->logger->debug("CommandRequest on check: " . json_encode($commandResponse), array("app" => $this->appName)); if (empty($commandResponse)) { throw new \Exception($this->trans->t("Error occurred in the document service")); } $version = floatval($commandResponse->version); if ($version > 0.0 && $version < 4.2) { throw new \Exception($this->trans->t("Not supported version")); } $hashUrl = $this->crypt->GetHash(["action" => "empty"]); $fileUrl = $this->urlGenerator->linkToRouteAbsolute($this->appName . ".callback.emptyfile", ["doc" => $hashUrl]); if (!empty($this->config->GetStorageUrl())) { $fileUrl = str_replace($this->urlGenerator->getAbsoluteURL("/"), $this->config->GetStorageUrl(), $fileUrl); } $documentService->GetConvertedUri($fileUrl, "docx", "docx", "check_" . rand()); } catch (\Exception $e) { $this->logger->error("CommandRequest on check error: " . $e->getMessage(), array("app" => $this->appName)); return $e->getMessage(); } return ""; } /** * Checking encryption enabled */ private function checkEncryptionModule() { if (!App::isEnabled("encryption")) { return false; } if (!\OC::$server->getEncryptionManager()->isEnabled()) { return false; } $crypt = new \OCA\Encryption\Crypto\Crypt(\OC::$server->getLogger(), \OC::$server->getUserSession(), \OC::$server->getConfig(), \OC::$server->getL10N('encryption')); $util = new \OCA\Encryption\Util(new \OC\Files\View(), $crypt, \OC::$server->getLogger(), \OC::$server->getUserSession(), \OC::$server->getConfig(), \OC::$server->getUserManager()); if ($util->isMasterKeyEnabled()) { return false; } return true; } }