commit
2bf5774964
@ -72,7 +72,6 @@ var documentsMain = {
|
||||
loadErrorHint : '',
|
||||
renderComplete: false, // false till page is rendered with all required data about the document(s)
|
||||
toolbar : '<div id="ocToolbar"><div id="ocToolbarInside"></div><span id="toolbar" class="claro"></span></div>',
|
||||
returnToDir : null, // directory where we started from in the 'Files' app
|
||||
|
||||
UI : {
|
||||
/* Editor wrapper HTML */
|
||||
@ -119,7 +118,7 @@ var documentsMain = {
|
||||
}
|
||||
|
||||
// WOPISrc - URL that loolwsd will access (ie. pointing to ownCloud)
|
||||
var wopiurl = window.location.protocol + '//' + window.location.host + OC.generateUrl('apps/richdocuments/wopi/files/{file_id}_{instanceId}', {file_id: fileId, instanceId: instanceId});
|
||||
var wopiurl = window.location.protocol + '//' + window.location.host + OC.generateUrl('apps/richdocuments/wopi/files/{file_id}', {file_id: fileId});
|
||||
var wopisrc = encodeURIComponent(wopiurl);
|
||||
|
||||
// urlsrc - the URL from discovery xml that we access for the particular
|
||||
@ -163,7 +162,6 @@ var documentsMain = {
|
||||
if (version === 0) {
|
||||
formattedTimestamp = t('richdocuments', 'Latest revision');
|
||||
downloadUrl = OC.generateUrl('apps/files/download'+ documentPath);
|
||||
fileId = fileId.replace(/_.*/, '');
|
||||
} else {
|
||||
downloadUrl = OC.generateUrl('apps/files_versions/download.php?file={file}&revision={revision}',
|
||||
{file: documentPath, revision: version});
|
||||
@ -268,12 +266,8 @@ var documentsMain = {
|
||||
documentsMain.UI.notify(t('richdocuments', 'Failed to revert the document to older version'));
|
||||
}
|
||||
|
||||
// generate file id with returnToDir information in it, if any
|
||||
var fileid = e.currentTarget.parentElement.dataset.fileid.replace(/_.*/, '') +
|
||||
(documentsMain.returnToDir ? '_' + documentsMain.returnToDir : '');
|
||||
|
||||
// load the file again, it should get reverted now
|
||||
window.location = OC.generateUrl('apps/richdocuments/index#{fileid}', {fileid: fileid});
|
||||
window.location = OC.generateUrl('apps/richdocuments/index#{fileid}', {fileid: e.currentTarget.parentElement.dataset.fileid});
|
||||
window.location.reload();
|
||||
documentsMain.overlay.documentOverlay('hide');
|
||||
}
|
||||
@ -426,11 +420,6 @@ var documentsMain = {
|
||||
// Does anything indicate that we need to autostart a session?
|
||||
fileId = getURLParameter('fileid').replace(/^\W*/, '');
|
||||
|
||||
if (fileId.indexOf('_') >= 0) {
|
||||
documentsMain.returnToDir = unescape(fileId.replace(/^[^_]*_/, ''));
|
||||
fileId = fileId.replace(/_.*/, '');
|
||||
}
|
||||
|
||||
documentsMain.show(fileId);
|
||||
|
||||
if (fileId) {
|
||||
|
@ -77,7 +77,7 @@ var odfViewer = {
|
||||
);
|
||||
} else {
|
||||
viewer = OC.generateUrl(
|
||||
'apps/richdocuments/index?fileId={fileId}_{dir}&requesttoken={requesttoken}',
|
||||
'apps/richdocuments/index?fileId={fileId}&requesttoken={requesttoken}',
|
||||
{
|
||||
fileId: fileId,
|
||||
dir: fileDir,
|
||||
|
@ -21,7 +21,9 @@
|
||||
|
||||
namespace OCA\Richdocuments\Controller;
|
||||
|
||||
use OC\Files\View;
|
||||
use OCA\Richdocuments\Db\Wopi;
|
||||
use OCA\Richdocuments\Helper;
|
||||
use OCA\Richdocuments\WOPI\Parser;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http;
|
||||
@ -50,29 +52,6 @@ class WopiController extends Controller {
|
||||
$this->rootFolder = $rootFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $fileId
|
||||
* @return array
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function parseFileId($fileId) {
|
||||
$arr = explode('_', $fileId, 2);
|
||||
if (count($arr) === 2) {
|
||||
list($fileId, $instanceId) = $arr;
|
||||
$version = '0';
|
||||
} else if (count($arr) === 3) {
|
||||
list($fileId, $instanceId, $version) = $arr;
|
||||
} else {
|
||||
throw new \Exception('$fileId has not the expected format');
|
||||
}
|
||||
|
||||
return [
|
||||
$fileId,
|
||||
$instanceId,
|
||||
$version,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns general info about a file.
|
||||
*
|
||||
@ -86,12 +65,9 @@ class WopiController extends Controller {
|
||||
public function checkFileInfo($fileId) {
|
||||
$token = $this->request->getParam('access_token');
|
||||
|
||||
list($fileId, , $version) = $this->parseFileId($fileId);
|
||||
|
||||
$row = new Wopi();
|
||||
$row->loadBy('token', $token);
|
||||
|
||||
$res = $row->getPathForToken($fileId, $version, $token);
|
||||
list($fileId, , $version) = Helper::parseFileId($fileId);
|
||||
$db = new Wopi();
|
||||
$res = $db->getPathForToken($fileId, $token);
|
||||
if ($res === false) {
|
||||
return new JSONResponse([], Http::STATUS_FORBIDDEN);
|
||||
}
|
||||
@ -136,18 +112,32 @@ class WopiController extends Controller {
|
||||
*/
|
||||
public function getFile($fileId,
|
||||
$access_token) {
|
||||
list($fileId, , $version) = $this->parseFileId($fileId);
|
||||
|
||||
list($fileId, , $version) = Helper::parseFileId($fileId);
|
||||
$row = new Wopi();
|
||||
$row->loadBy('token', $access_token);
|
||||
|
||||
$res = $row->getPathForToken($fileId, $version, $access_token);
|
||||
|
||||
$res = $row->getPathForToken($fileId, $access_token);
|
||||
try {
|
||||
/** @var File $file */
|
||||
$userFolder = $this->rootFolder->getUserFolder($res['owner']);
|
||||
$file = $userFolder->getById($fileId)[0];
|
||||
$response = new StreamResponse($file->fopen('rb'));
|
||||
|
||||
if ($version !== '0')
|
||||
{
|
||||
$view = new View('/' . $res['owner'] . '/files');
|
||||
$relPath = $view->getRelativePath($file->getPath());
|
||||
$versionPath = '/files_versions/' . $relPath . '.v' . $version;
|
||||
$view = new View('/' . $res['owner']);
|
||||
if ($view->file_exists($versionPath)){
|
||||
$response = new StreamResponse($view->fopen($versionPath, 'rb'));
|
||||
}
|
||||
else {
|
||||
$response->setStatus(Http::STATUS_NOT_FOUND);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$response = new StreamResponse($file->fopen('rb'));
|
||||
}
|
||||
$response->addHeader('Content-Disposition', 'attachment');
|
||||
$response->addHeader('Content-Type', 'application/octet-stream');
|
||||
return $response;
|
||||
@ -169,12 +159,12 @@ class WopiController extends Controller {
|
||||
*/
|
||||
public function putFile($fileId,
|
||||
$access_token) {
|
||||
list($fileId, , $version) = $this->parseFileId($fileId);
|
||||
list($fileId, , $version) = Helper::parseFileId($fileId);
|
||||
|
||||
$row = new Wopi();
|
||||
$row->loadBy('token', $access_token);
|
||||
|
||||
$res = $row->getPathForToken($fileId, $version, $access_token);
|
||||
$res = $row->getPathForToken($fileId, $access_token);
|
||||
if (!$res['canwrite']) {
|
||||
return new JSONResponse([], Http::STATUS_FORBIDDEN);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
namespace OCA\Richdocuments;
|
||||
|
||||
use OC\Share\Constants;
|
||||
use OCA\Richdocuments\Helper;
|
||||
use OCA\Richdocuments\Db\Wopi;
|
||||
use OCA\Richdocuments\WOPI\Parser;
|
||||
use OCP\Files\File;
|
||||
@ -64,12 +65,7 @@ class TokenManager {
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getToken($fileId, $shareToken = null) {
|
||||
$arr = explode('_', $fileId, 2);
|
||||
$version = '0';
|
||||
if (count($arr) === 2) {
|
||||
list($fileId, $version) = $arr;
|
||||
}
|
||||
|
||||
list($fileId,, $version) = Helper::parseFileId($fileId);
|
||||
// if the user is not logged-in do use the sharers storage
|
||||
if($shareToken !== null) {
|
||||
/** @var File $file */
|
||||
|
@ -56,7 +56,7 @@ class Wopi extends \OCA\Richdocuments\Db{
|
||||
* constructs and validates the path.
|
||||
* Returns the path, if valid, else false.
|
||||
*/
|
||||
public function getPathForToken($fileId, $version, $token){
|
||||
public function getPathForToken($fileId, $token){
|
||||
|
||||
$wopi = new Wopi();
|
||||
$row = $wopi->loadBy('token', $token)->getData();
|
||||
@ -75,11 +75,6 @@ class Wopi extends \OCA\Richdocuments\Db{
|
||||
//$wopi->deleteBy('id', $row['id']);
|
||||
//return false;
|
||||
}
|
||||
if ($row['fileid'] !== $fileId || $row['version'] !== $version){
|
||||
// File unknown / user unauthorized (for the requested file).
|
||||
http_response_code(404);
|
||||
return false;
|
||||
}
|
||||
|
||||
return array(
|
||||
'owner' => $row['owner_uid'],
|
||||
|
@ -14,6 +14,33 @@ namespace OCA\Richdocuments;
|
||||
class Helper {
|
||||
const APP_ID = 'richdocuments';
|
||||
|
||||
/**
|
||||
* @param string $fileId
|
||||
* @return array
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function parseFileId($fileId) {
|
||||
$arr = explode('_', $fileId);
|
||||
if (count($arr) === 1) {
|
||||
$fileId = $arr[0];
|
||||
$version = '0';
|
||||
} else if (count($arr) === 2) {
|
||||
list($fileId, $instanceId) = $arr;
|
||||
$version = '0';
|
||||
} else if (count($arr) === 3) {
|
||||
list($fileId, $instanceId, $version) = $arr;
|
||||
} else {
|
||||
throw new \Exception('$fileId has not the expected format');
|
||||
}
|
||||
|
||||
return [
|
||||
$fileId,
|
||||
$instanceId,
|
||||
$version,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public static function getNewFileName($view, $path, $prepend = ' '){
|
||||
$fileNum = 1;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user