commit
cd0314169c
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
\OCP\JSON::callCheck();
|
||||
\OCP\JSON::checkAdminUser();
|
||||
|
||||
$converter = isset($_POST['converter']) ? $_POST['converter'] : null;
|
||||
$url = isset($_POST['url']) ? $_POST['url'] : null;
|
||||
try {
|
||||
if (!is_null($converter)){
|
||||
Config::setConverter($converter);
|
||||
}
|
||||
|
||||
if (!is_null($url)){
|
||||
Config::setConverterUrl($url);
|
||||
}
|
||||
|
||||
if (Config::getConverter()!='local'){
|
||||
if (!Converter::checkConnection()){
|
||||
Helper::warnLog('Bad response from Format Filter Server');
|
||||
\OCP\JSON::error(array( 'data'=>
|
||||
array('message' => Config::getL10n()->t('Format filter server is down or misconfigured') )
|
||||
));
|
||||
exit();
|
||||
}
|
||||
} else {
|
||||
$targetFilter = 'odt:writer8';
|
||||
$targetExtension = 'odt';
|
||||
$input = '0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAKQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8hAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAAP7///8iAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAA/v///yoAAAD+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAAgAAAD+////CgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAP7///9FAAAA/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAAUAQAACQAAAAEAAABQAAAAAgAAAFgAAAAEAAAAvAAAAAgAAADIAAAACQAAANgAAAAKAAAA5AAAAAsAAADwAAAADAAAAPwAAAANAAAACAEAAAIAAADp/QAAHgAAAFwAAADQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LHQsNC90LrQvtCy0YHQutCw0Y8g0YHQuNGB0YLQtdC80LAgwqvQodCiLdCR0LDQvdC6wrsgAB4AAAADAAAAUEMAAB4AAAAHAAAAZnN2Y3h2AAAeAAAAAgAAADMAAABAAAAAAAAAAAAAAABAAAAAABzeaCTYywFAAAAAABzXRbJzzAFAAAAAwJREgxIAigAKAAEAWwAPAAIAAAAAAAAAegAAEPH/AgB6AAAABgBOAG8AcgBtAGEAbAAAACwAAAASZGgBAQADJANhJAMxJABehAAAXYQAAGCExQJBJAAqJAE3JAE1JAEzJAEvAEIqAE9KBABRSgQAQ0oYAG1IGQRzSBkEUEoEAF5KBABhShQAX0gBBG5IBAh0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AwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAyADQAXwA4ADMANAAxADAANgAwADMAOAAZAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2AF8AOAAzADQAMQAwADYAMAAzADgAGQBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADgAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADQAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ACgAXw
|
||||
AlAEQAMAAlAEEAMAAlAEQAMAAlAEIAOAAlAEQAMQAlADgAMQAlAEQAMQAlADgAMwAlAEQAMAAlAEIARAAlAEQAMAAlAEIARQAlAEQAMAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIANABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAzADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMAAyADkAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANAA0AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADYAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAwAF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMAAlAEIAMAA0ADEAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAANgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMAA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMwAxADMAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAxADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXw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AEAAIAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITcAAGICAAAAAAAAAAAAAIwzAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCHAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiGgAA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAshkAADgAAADMGgAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8DAAAB4AAABgMwAAGAAAAAAAAAAAAAAA6hkAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeDMAAAgAAAAAAAAAAAAAAIAzAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AGUAcwB0AAwAEwAgAFQATwBDACAAFAAVAAwACAANAA0ADQANAA0AEwAgAFAAQQBHAEUAIAAUADEAFQANAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKCAAADAgAABYIAAAYCAAAGggAABwIAAAeCAAAKAgAACoIAAA2CAAAOAgAADoIAAA8CAAAQggAAAD9AP39APgA8e7x7vEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDBKaQAADTBKaQADagAAAABVCAEJA2oAAAAAVQgBA1UIAQAOAAgAAAoIAAAcCAAAIAgAACIIAAAkCAAAJggAACgIAAA+CAAAQAgAAEIIAABECAAA+QAAAAAAAAAAAAAAAPcAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAPEAAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAA7QAAAAAAAAAAAAAAAOsAAAAAAAAAAAAAAADpAAAAAAAAAAAAAAAA5wAAAAAAAAAAAAAAAOUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAYAAAAEAAAABAAAAAQAAAAEAAAABgAAAAQAAAAV0AA3GBQAB6CkKAAs0AB+w0C8gsOA9IbBuBCKwaAIjkMUCGLDQAiSQUwMyUAAAMZBoATBwAAAAADNQAAAoMgAOMAA3AB+w0C8gsOA9IbBuBCKwaAIjkMUCGLDQAiSQUwMyUAAAMZBoATBwAAAAADNQAAAoMgAoMgAJMAA3AB+w0C8gsOA9IbBuBCKwaAIjkMUCGLDQAiSQUwMyUAAAMZBoATBwAAAAADNQAAAoMgAOMAAJMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/
|
||||
wAAAQACAAAAAAAAAAAAAAAAAAAAAAACAAAAAtXN1ZwuGxCTlwgAKyz5rkQAAAAF1c3VnC4bEJOXCAArLPmuXAAAABgAAAABAAAAAQAAABAAAAACAAAA6f0AABgAAAABAAAAAQAAABAAAAACAAAA6f0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYABQD//////////wEAAAAGCQIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAgBEAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAAIAAAAEAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqAAAAAAAAAAEATwBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIA/////wMAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABQAAAAAAAAAMQBUAGEAYgBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAgD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAgzkAAAAAAAAFAFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAUAAAAHAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABEAQAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIABgAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAKgOAAAAAAAATwBiAGoAZQBjAHQAUABvAG8AbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAQD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAFAEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAOAACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAB0AAAAAAAAAA==';
|
||||
|
||||
$infile = \OCP\Files::tmpFile();
|
||||
$outdir = \OCP\Files::tmpFolder();
|
||||
$outfile = $outdir . '/' . basename($infile) . '.' . $targetExtension;
|
||||
$cmd = Helper::findOpenOffice();
|
||||
|
||||
$params = ' --headless --convert-to ' . escapeshellarg($targetFilter) . ' --outdir '
|
||||
. escapeshellarg($outdir)
|
||||
. ' --writer '. escapeshellarg($infile)
|
||||
. ' -env:UserInstallation=file://' . escapeshellarg(get_temp_dir()) . ' 2>&1'
|
||||
;
|
||||
file_put_contents($infile, $input);
|
||||
|
||||
$result = shell_exec($cmd . $params);
|
||||
$exists = file_exists($outfile);
|
||||
|
||||
if (!$exists){
|
||||
Helper::warnLog('Conversion failed. Raw output:' . $result);
|
||||
\OCP\JSON::error(array( 'data'=>
|
||||
array('message' => Config::getL10n()->t('Conversion failed. Check log for details.') )
|
||||
));
|
||||
exit();
|
||||
} else {
|
||||
unlink($outfile);
|
||||
}
|
||||
}
|
||||
|
||||
\OCP\JSON::success(array( 'data'=>array('message'=>Config::getL10n()->t('Saved')) ));
|
||||
} catch (\Exception $e){
|
||||
\OCP\JSON::error(array( 'data'=>
|
||||
array('message' => $e->getMessage() )
|
||||
));
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
class Controller {
|
||||
|
||||
/**
|
||||
* Do security precheck
|
||||
* @param bool callcheck - whether security token check is needed
|
||||
* @return string userId of the currently logged in user
|
||||
*/
|
||||
public static function preDispatch($callcheck = true){
|
||||
if ($callcheck){
|
||||
\OCP\JSON::callCheck();
|
||||
}
|
||||
\OCP\JSON::checkAppEnabled('documents');
|
||||
\OCP\JSON::checkLoggedIn();
|
||||
return \OCP\User::getUser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Do security precheck for not logged in users
|
||||
* @param bool callcheck - whether security token check is needed
|
||||
*/
|
||||
public static function preDispatchGuest($callcheck = true){
|
||||
if ($callcheck){
|
||||
\OCP\JSON::callCheck();
|
||||
}
|
||||
\OCP\JSON::checkAppEnabled('documents');
|
||||
}
|
||||
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
\OCP\JSON::checkLoggedIn();
|
||||
|
||||
$path = Helper::getArrayValueByKey($_GET, 'path');
|
||||
if (!empty($path)){
|
||||
if (\OC\Files\Filesystem::getMimeType($path) !== \OCA\Documents\Filter\Office::NATIVE_MIMETYPE){
|
||||
$fileInfo = \OC\Files\Filesystem::getFileInfo($path);
|
||||
$file = new File($fileInfo->getId());
|
||||
$genesis = new Genesis($file);
|
||||
$fullPath = $genesis->getPath();
|
||||
} else {
|
||||
$fullPath = '/files' . $path;
|
||||
}
|
||||
$download = new Download(\OCP\User::getUser(), $fullPath);
|
||||
$download->sendResponse();
|
||||
}
|
||||
exit();
|
@ -1,19 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
\OCP\JSON::success(
|
||||
array( 'mimes' => Filter::getAll())
|
||||
);
|
||||
|
||||
exit();
|
@ -1,120 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
class BadRequestException extends \Exception {
|
||||
|
||||
protected $body = "";
|
||||
|
||||
public function setBody($body){
|
||||
$this->body = $body;
|
||||
}
|
||||
|
||||
public function getBody(){
|
||||
return $this->body;
|
||||
}
|
||||
}
|
||||
|
||||
$response = array();
|
||||
|
||||
try{
|
||||
$request = new Request();
|
||||
$esId = $request->getParam('args/es_id');
|
||||
|
||||
$session = new Db\Session();
|
||||
$session->load($esId);
|
||||
|
||||
$memberId = $request->getParam('args/member_id');
|
||||
$member = new Db\Member();
|
||||
$member->load($memberId);
|
||||
|
||||
if ($member->getIsGuest() || is_null($member->getIsGuest())){
|
||||
Controller::preDispatchGuest(false);
|
||||
} else {
|
||||
Controller::preDispatch(false);
|
||||
}
|
||||
|
||||
try {
|
||||
$file = new File($session->getFileId());
|
||||
} catch (\Exception $e){
|
||||
Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage());
|
||||
$ex = new BadRequestException();
|
||||
$ex->setBody($request->getRawRequest());
|
||||
throw $ex;
|
||||
}
|
||||
|
||||
$command = $request->getParam('command');
|
||||
switch ($command){
|
||||
case 'sync_ops':
|
||||
$seqHead = (string) $request->getParam('args/seq_head');
|
||||
if (!is_null($seqHead)){
|
||||
$ops = $request->getParam('args/client_ops');
|
||||
$hasOps = is_array($ops) && count($ops)>0;
|
||||
|
||||
$op = new Db\Op();
|
||||
$currentHead = $op->getHeadSeq($esId);
|
||||
|
||||
try {
|
||||
$member->updateActivity($memberId);
|
||||
} catch (\Exception $e){
|
||||
//Db error. Not critical
|
||||
}
|
||||
|
||||
// TODO handle the case ($currentHead == "") && ($seqHead != "")
|
||||
if ($seqHead == $currentHead) {
|
||||
// matching heads
|
||||
if ($hasOps) {
|
||||
// incoming ops without conflict
|
||||
// Add incoming ops, respond with a new head
|
||||
$newHead = Db\Op::addOpsArray($esId, $memberId, $ops);
|
||||
$response["result"] = 'added';
|
||||
$response["head_seq"] = $newHead ? $newHead : $currentHead;
|
||||
} else {
|
||||
// no incoming ops (just checking for new ops...)
|
||||
$response["result"] = 'new_ops';
|
||||
$response["ops"] = array();
|
||||
$response["head_seq"] = $currentHead;
|
||||
}
|
||||
} else { // HEADs do not match
|
||||
$response["ops"] = $op->getOpsAfterJson($esId, $seqHead);
|
||||
$response["head_seq"] = $currentHead;
|
||||
$response["result"] = $hasOps ? 'conflict' : 'new_ops';
|
||||
}
|
||||
|
||||
$inactiveMembers = $member->updateByTimeout($esId);
|
||||
foreach ($inactiveMembers as $inactive){
|
||||
$op->removeCursor($esId, $inactive);
|
||||
$op->removeMember($esId, $inactive);
|
||||
}
|
||||
|
||||
} else {
|
||||
// Error - no seq_head passed
|
||||
throw new BadRequestException();
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
$ex = new BadRequestException();
|
||||
$ex->setBody($request->getRawRequest());
|
||||
throw $ex;
|
||||
break;
|
||||
}
|
||||
|
||||
\OCP\JSON::success($response);
|
||||
} catch (BadRequestException $e){
|
||||
header('HTTP/1.1 400: BAD REQUEST');
|
||||
\OCP\JSON::error( array(
|
||||
'err' => 'bad request:[' . $e->getBody() . ']',
|
||||
));
|
||||
}
|
||||
exit();
|
@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
\OCP\JSON::callCheck();
|
||||
\OCP\JSON::checkLoggedIn();
|
||||
|
||||
$l = \OC_L10N::get('documents');
|
||||
|
||||
$savePath = isset($_POST['savePath']) ? $_POST['savePath'] : null;
|
||||
if (!is_null($savePath)){
|
||||
if (\OC\Files\Filesystem::file_exists($savePath) ===false ){
|
||||
if(!\OC\Files\Filesystem::mkdir($savePath)){
|
||||
\OCP\JSON::error(
|
||||
array(
|
||||
'data' => array('message'=> $l->t('An error occurred while changing directory.'))
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
\OCP\Config::setUserValue(\OCP\User::getUser(), 'documents', 'save_path', $savePath);
|
||||
\OCP\JSON::success(
|
||||
array(
|
||||
'data' => array('message'=> $l->t('Directory saved successfully.'))
|
||||
)
|
||||
);
|
||||
exit();
|
||||
}
|
||||
|
||||
exit();
|
@ -1,176 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
class SessionController extends Controller{
|
||||
|
||||
public static function joinAsGuest($args){
|
||||
self::preDispatchGuest();
|
||||
|
||||
$uid = Helper::getArrayValueByKey($_POST, 'name');
|
||||
$uid = substr($uid, 0, 16);
|
||||
|
||||
try {
|
||||
$token = Helper::getArrayValueByKey($args, 'token');
|
||||
$file = File::getByShareToken($token);
|
||||
if ($file->isPasswordProtected() && !$file->checkPassword('')){
|
||||
throw new \Exception('Not authorized');
|
||||
}
|
||||
$session = Db\Session::start($uid, $file);
|
||||
\OCP\JSON::success($session);
|
||||
} catch (\Exception $e){
|
||||
Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage());
|
||||
\OCP\JSON::error();
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
public static function joinAsUser($args){
|
||||
$uid = self::preDispatch();
|
||||
$fileId = Helper::getArrayValueByKey($args, 'file_id');
|
||||
|
||||
try {
|
||||
$view = \OC\Files\Filesystem::getView();
|
||||
$path = $view->getPath($fileId);
|
||||
|
||||
if ($view->isUpdatable($path)) {
|
||||
$file = new File($fileId);
|
||||
$session = Db\Session::start($uid, $file);
|
||||
\OCP\JSON::success($session);
|
||||
} else {
|
||||
$info = $view->getFileInfo($path);
|
||||
\OCP\JSON::success(array(
|
||||
'permissions' => $info['permissions'],
|
||||
'id' => $fileId
|
||||
));
|
||||
}
|
||||
exit();
|
||||
} catch (\Exception $e){
|
||||
Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage());
|
||||
\OCP\JSON::error();
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store the document content to its origin
|
||||
*/
|
||||
public static function save(){
|
||||
try {
|
||||
$esId = @$_SERVER['HTTP_WEBODF_SESSION_ID'];
|
||||
if (!$esId){
|
||||
throw new \Exception('Session id can not be empty');
|
||||
}
|
||||
|
||||
$memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID'];
|
||||
$currentMember = new Db\Member();
|
||||
$currentMember->load($memberId);
|
||||
if (is_null($currentMember->getIsGuest()) || $currentMember->getIsGuest()){
|
||||
self::preDispatchGuest();
|
||||
} else {
|
||||
$uid = self::preDispatch();
|
||||
}
|
||||
|
||||
//check if member belongs to the session
|
||||
if ($esId != $currentMember->getEsId()){
|
||||
throw new \Exception($memberId . ' does not belong to session ' . $esId);
|
||||
}
|
||||
|
||||
// Extra info for future usage
|
||||
// $sessionRevision = Helper::getArrayValueByKey($_SERVER, 'HTTP_WEBODF_SESSION_REVISION');
|
||||
|
||||
$stream = fopen('php://input','r');
|
||||
if (!$stream){
|
||||
throw new \Exception('New content missing');
|
||||
}
|
||||
$content = stream_get_contents($stream);
|
||||
|
||||
$session = new Db\Session();
|
||||
$session->load($esId);
|
||||
|
||||
if (!$session->getEsId()){
|
||||
throw new \Exception('Session does not exist');
|
||||
}
|
||||
|
||||
try {
|
||||
if ($currentMember->getIsGuest()){
|
||||
$file = File::getByShareToken($currentMember->getToken());
|
||||
} else {
|
||||
$file = new File($session->getFileId());
|
||||
}
|
||||
|
||||
list($view, $path) = $file->getOwnerViewAndPath(true);
|
||||
} catch (\Exception $e){
|
||||
//File was deleted or unshared. We need to save content as new file anyway
|
||||
//Sorry, but for guests it would be lost :(
|
||||
if (isset($uid)){
|
||||
$view = new \OC\Files\View('/' . $uid . '/files');
|
||||
|
||||
$dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', '');
|
||||
$path = Helper::getNewFileName($view, $dir . 'New Document.odt');
|
||||
}
|
||||
}
|
||||
|
||||
$member = new Db\Member();
|
||||
$members = $member->getActiveCollection($esId);
|
||||
$memberIds = array_map(
|
||||
function($x){
|
||||
return ($x['member_id']);
|
||||
},
|
||||
$members
|
||||
);
|
||||
|
||||
// Active users except current user
|
||||
$memberCount = count($memberIds) - 1;
|
||||
|
||||
if ($view->file_exists($path)){
|
||||
$proxyStatus = \OC_FileProxy::$enabled;
|
||||
\OC_FileProxy::$enabled = false;
|
||||
$currentHash = sha1($view->file_get_contents($path));
|
||||
\OC_FileProxy::$enabled = $proxyStatus;
|
||||
|
||||
if (!Helper::isVersionsEnabled() && $currentHash !== $session->getGenesisHash()){
|
||||
// Original file was modified externally. Save to a new one
|
||||
$path = Helper::getNewFileName($view, $path, '-conflict');
|
||||
}
|
||||
|
||||
$mimetype = $view->getMimeType($path);
|
||||
} else {
|
||||
$mimetype = Storage::MIMETYPE_LIBREOFFICE_WORDPROCESSOR;
|
||||
}
|
||||
|
||||
$data = Filter::write($content, $mimetype);
|
||||
|
||||
if ($view->file_put_contents($path, $data['content'])){
|
||||
// Not a last user
|
||||
if ($memberCount>0){
|
||||
// Update genesis hash to prevent conflicts
|
||||
Helper::debugLog('Update hash');
|
||||
$session->updateGenesisHash($esId, sha1($data['content']));
|
||||
} else {
|
||||
// Last user. Kill session data
|
||||
Db\Session::cleanUp($esId);
|
||||
}
|
||||
|
||||
$view->touch($path);
|
||||
}
|
||||
\OCP\JSON::success();
|
||||
} catch (\Exception $e){
|
||||
Helper::warnLog('Saving failed. Reason:' . $e->getMessage());
|
||||
//\OCP\JSON::error(array('message'=>$e->getMessage()));
|
||||
\OC_Response::setStatus(500);
|
||||
}
|
||||
exit();
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
\OCP\JSON::callCheck();
|
||||
|
||||
$unstable = isset($_POST['unstable']) ? $_POST['unstable'] : null;
|
||||
if (!is_null($unstable)){
|
||||
\OCP\JSON::checkAdminUser();
|
||||
\OCP\Config::setAppValue('documents', 'unstable', $unstable);
|
||||
\OCP\JSON::success();
|
||||
exit();
|
||||
}
|
||||
|
||||
if (isset($_GET['unstable'])){
|
||||
\OCP\JSON::success(array(
|
||||
'value' => \OCP\Config::getAppValue('documents', 'unstable', 'false')
|
||||
));
|
||||
}
|
||||
exit();
|
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2014 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents\AppInfo;
|
||||
|
||||
use \OCP\AppFramework\App;
|
||||
|
||||
use \OCA\Documents\Controller\UserController;
|
||||
use \OCA\Documents\Controller\SessionController;
|
||||
use \OCA\Documents\Controller\DocumentController;
|
||||
use \OCA\Documents\Controller\SettingsController;
|
||||
|
||||
class Application extends App {
|
||||
public function __construct (array $urlParams = array()) {
|
||||
parent::__construct('documents', $urlParams);
|
||||
|
||||
$container = $this->getContainer();
|
||||
|
||||
/**
|
||||
* Controllers
|
||||
*/
|
||||
$container->registerService('UserController', function($c) {
|
||||
return new UserController(
|
||||
$c->query('AppName'),
|
||||
$c->query('Request')
|
||||
);
|
||||
});
|
||||
$container->registerService('SessionController', function($c) {
|
||||
return new SessionController(
|
||||
$c->query('AppName'),
|
||||
$c->query('Request'),
|
||||
$c->query('Logger'),
|
||||
$c->query('UserId')
|
||||
);
|
||||
});
|
||||
$container->registerService('DocumentController', function($c) {
|
||||
return new DocumentController(
|
||||
$c->query('AppName'),
|
||||
$c->query('Request'),
|
||||
$c->query('CoreConfig'),
|
||||
$c->query('L10N'),
|
||||
$c->query('UserId')
|
||||
);
|
||||
});
|
||||
$container->registerService('SettingsController', function($c) {
|
||||
return new SettingsController(
|
||||
$c->query('AppName'),
|
||||
$c->query('Request'),
|
||||
$c->query('CoreConfig'),
|
||||
$c->query('Logger'),
|
||||
$c->query('L10N'),
|
||||
$c->query('UserId')
|
||||
);
|
||||
});
|
||||
|
||||
/**
|
||||
* Core
|
||||
*/
|
||||
$container->registerService('Logger', function($c) {
|
||||
return $c->query('ServerContainer')->getLogger();
|
||||
});
|
||||
$container->registerService('CoreConfig', function($c) {
|
||||
return $c->query('ServerContainer')->getConfig();
|
||||
});
|
||||
$container->registerService('L10N', function($c) {
|
||||
return $c->query('ServerContainer')->getL10N($c->query('AppName'));
|
||||
});
|
||||
$container->registerService('UserId', function() {
|
||||
return \OCP\User::getUser();
|
||||
});
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,325 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2014 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents\Controller;
|
||||
|
||||
use \OCP\AppFramework\Controller;
|
||||
use \OCP\IRequest;
|
||||
use \OCP\AppFramework\Http;
|
||||
use \OCP\AppFramework\Http\JSONResponse;
|
||||
|
||||
|
||||
use \OCA\Documents\Db;
|
||||
use \OCA\Documents\File;
|
||||
use \OCA\Documents\Helper;
|
||||
use OCA\Documents\Filter;
|
||||
|
||||
class BadRequestException extends \Exception {
|
||||
|
||||
protected $body = "";
|
||||
|
||||
public function setBody($body){
|
||||
$this->body = $body;
|
||||
}
|
||||
|
||||
public function getBody(){
|
||||
return $this->body;
|
||||
}
|
||||
}
|
||||
|
||||
class SessionController extends Controller{
|
||||
|
||||
protected $uid;
|
||||
protected $logger;
|
||||
|
||||
public function __construct($appName, IRequest $request, $logger, $uid){
|
||||
parent::__construct($appName, $request);
|
||||
$this->uid = $uid;
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
* @PublicPage
|
||||
*/
|
||||
public function joinAsGuest($token, $name){
|
||||
$uid = substr($name, 0, 16);
|
||||
|
||||
try {
|
||||
$file = File::getByShareToken($token);
|
||||
if ($file->isPasswordProtected() && !$file->checkPassword('')){
|
||||
throw new \Exception('Not authorized');
|
||||
}
|
||||
|
||||
$response = array_merge(
|
||||
Db\Session::start($uid, $file),
|
||||
array('status'=>'success')
|
||||
);
|
||||
} catch (\Exception $e){
|
||||
$this->logger->warning('Starting a session failed. Reason: ' . $e->getMessage(), array('app' => $this->appName));
|
||||
$response = array (
|
||||
'status'=>'error'
|
||||
);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function joinAsUser($fileId){
|
||||
try {
|
||||
$view = \OC\Files\Filesystem::getView();
|
||||
$path = $view->getPath($fileId);
|
||||
|
||||
if ($view->isUpdatable($path)) {
|
||||
$file = new File($fileId);
|
||||
$response = Db\Session::start($this->uid, $file);
|
||||
} else {
|
||||
$info = $view->getFileInfo($path);
|
||||
$response = array(
|
||||
'permissions' => $info['permissions'],
|
||||
'id' => $fileId
|
||||
);
|
||||
}
|
||||
$response = array_merge(
|
||||
$response,
|
||||
array('status'=>'success')
|
||||
);
|
||||
} catch (\Exception $e){
|
||||
$this->logger->warning('Starting a session failed. Reason: ' . $e->getMessage(), array('app' => $this->appName));
|
||||
$response = array (
|
||||
'status'=>'error'
|
||||
);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function poll($command, $args){
|
||||
$response = new JSONResponse();
|
||||
|
||||
try{
|
||||
$esId = isset($args['es_id']) ? $args['es_id'] : null;
|
||||
|
||||
$session = new Db\Session();
|
||||
$session->load($esId);
|
||||
|
||||
$memberId = isset($args['member_id']) ? $args['member_id'] : null;
|
||||
$member = new Db\Member();
|
||||
$member->load($memberId);
|
||||
|
||||
if (!$member->getIsGuest()){
|
||||
\OCP\JSON::checkLoggedIn();
|
||||
}
|
||||
|
||||
try {
|
||||
$file = new File($session->getFileId());
|
||||
} catch (\Exception $e){
|
||||
$this->logger->warning('Error. Session no longer exists. ' . $e->getMessage(), array('app' => $this->appName));
|
||||
$ex = new BadRequestException();
|
||||
$ex->setBody(
|
||||
implode(',', $this->request->getParams())
|
||||
);
|
||||
throw $ex;
|
||||
}
|
||||
|
||||
switch ($command){
|
||||
case 'sync_ops':
|
||||
$seqHead = (string) isset($args['seq_head']) ? $args['seq_head'] : null;
|
||||
if (!is_null($seqHead)){
|
||||
$ops = isset($args['client_ops']) ? $args['client_ops'] : null;
|
||||
$hasOps = is_array($ops) && count($ops)>0;
|
||||
|
||||
$op = new Db\Op();
|
||||
$currentHead = $op->getHeadSeq($esId);
|
||||
|
||||
try {
|
||||
$member->updateActivity($memberId);
|
||||
} catch (\Exception $e){
|
||||
//Db error. Not critical
|
||||
}
|
||||
|
||||
// TODO handle the case ($currentHead == "") && ($seqHead != "")
|
||||
if ($seqHead == $currentHead) {
|
||||
// matching heads
|
||||
if ($hasOps) {
|
||||
// incoming ops without conflict
|
||||
// Add incoming ops, respond with a new head
|
||||
$newHead = Db\Op::addOpsArray($esId, $memberId, $ops);
|
||||
$response->setData(
|
||||
array(
|
||||
'result' => 'added',
|
||||
'head_seq' => $newHead ? $newHead : $currentHead
|
||||
)
|
||||
);
|
||||
} else {
|
||||
// no incoming ops (just checking for new ops...)
|
||||
$response->setData(
|
||||
array(
|
||||
'result' => 'new_ops',
|
||||
'ops' => array(),
|
||||
'head_seq' => $currentHead
|
||||
)
|
||||
);
|
||||
}
|
||||
} else { // HEADs do not match
|
||||
$response->setData(
|
||||
array(
|
||||
'result' => $hasOps ? 'conflict' : 'new_ops',
|
||||
'ops' => $op->getOpsAfterJson($esId, $seqHead),
|
||||
'head_seq' => $currentHead,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$inactiveMembers = $member->updateByTimeout($esId);
|
||||
foreach ($inactiveMembers as $inactive){
|
||||
$op->removeCursor($esId, $inactive);
|
||||
$op->removeMember($esId, $inactive);
|
||||
}
|
||||
} else {
|
||||
// Error - no seq_head passed
|
||||
throw new BadRequestException();
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
$ex = new BadRequestException();
|
||||
$ex->setBody(
|
||||
implode(',', $this->request->getParams())
|
||||
);
|
||||
throw $ex;
|
||||
break;
|
||||
}
|
||||
} catch (BadRequestException $e){
|
||||
$response->setStatus(Http::STATUS_BAD_REQUEST);
|
||||
$response->setData(
|
||||
array('err' => 'bad request:[' . $e->getBody() . ']')
|
||||
);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
* @PublicPage
|
||||
* Store the document content to its origin
|
||||
*/
|
||||
public function save(){
|
||||
try {
|
||||
$esId = $this->request->server['HTTP_WEBODF_SESSION_ID'];
|
||||
if (!$esId){
|
||||
throw new \Exception('Session id can not be empty');
|
||||
}
|
||||
|
||||
$memberId = $this->request->server['HTTP_WEBODF_MEMBER_ID'];
|
||||
$currentMember = new Db\Member();
|
||||
$currentMember->load($memberId);
|
||||
|
||||
//check if member belongs to the session
|
||||
if ($esId != $currentMember->getEsId()){
|
||||
throw new \Exception($memberId . ' does not belong to session ' . $esId);
|
||||
}
|
||||
|
||||
// Extra info for future usage
|
||||
// $sessionRevision = $this->request->server['HTTP_WEBODF_SESSION_REVISION'];
|
||||
|
||||
//NB ouch! New document content is passed as an input stream content
|
||||
$stream = fopen('php://input','r');
|
||||
if (!$stream){
|
||||
throw new \Exception('New content missing');
|
||||
}
|
||||
$content = stream_get_contents($stream);
|
||||
|
||||
$session = new Db\Session();
|
||||
$session->load($esId);
|
||||
|
||||
if (!$session->getEsId()){
|
||||
throw new \Exception('Session does not exist');
|
||||
}
|
||||
|
||||
try {
|
||||
if ($currentMember->getIsGuest()){
|
||||
$file = File::getByShareToken($currentMember->getToken());
|
||||
} else {
|
||||
$file = new File($session->getFileId());
|
||||
}
|
||||
|
||||
list($view, $path) = $file->getOwnerViewAndPath(true);
|
||||
} catch (\Exception $e){
|
||||
//File was deleted or unshared. We need to save content as new file anyway
|
||||
//Sorry, but for guests it would be lost :(
|
||||
if ($this->uid){
|
||||
$view = new \OC\Files\View('/' . $this->uid . '/files');
|
||||
|
||||
$dir = \OCP\Config::getUserValue($this->uid, 'documents', 'save_path', '');
|
||||
$path = Helper::getNewFileName($view, $dir . 'New Document.odt');
|
||||
} else {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
$member = new Db\Member();
|
||||
$members = $member->getActiveCollection($esId);
|
||||
$memberIds = array_map(
|
||||
function($x){
|
||||
return ($x['member_id']);
|
||||
},
|
||||
$members
|
||||
);
|
||||
|
||||
// Active users except current user
|
||||
$memberCount = count($memberIds) - 1;
|
||||
|
||||
if ($view->file_exists($path)){
|
||||
$proxyStatus = \OC_FileProxy::$enabled;
|
||||
\OC_FileProxy::$enabled = false;
|
||||
$currentHash = sha1($view->file_get_contents($path));
|
||||
\OC_FileProxy::$enabled = $proxyStatus;
|
||||
|
||||
if (!Helper::isVersionsEnabled() && $currentHash !== $session->getGenesisHash()){
|
||||
// Original file was modified externally. Save to a new one
|
||||
$path = Helper::getNewFileName($view, $path, '-conflict');
|
||||
}
|
||||
|
||||
$mimetype = $view->getMimeType($path);
|
||||
} else {
|
||||
$mimetype = Storage::MIMETYPE_LIBREOFFICE_WORDPROCESSOR;
|
||||
}
|
||||
|
||||
$data = Filter::write($content, $mimetype);
|
||||
|
||||
if ($view->file_put_contents($path, $data['content'])){
|
||||
// Not a last user
|
||||
if ($memberCount>0){
|
||||
// Update genesis hash to prevent conflicts
|
||||
$this->logger->debug('Update hash', array('app' => $this->appName));
|
||||
$session->updateGenesisHash($esId, sha1($data['content']));
|
||||
} else {
|
||||
// Last user. Kill session data
|
||||
Db\Session::cleanUp($esId);
|
||||
}
|
||||
|
||||
$view->touch($path);
|
||||
}
|
||||
$response = array('status'=>'success');
|
||||
} catch (\Exception $e){
|
||||
$this->logger->warning('Saving failed. Reason:' . $e->getMessage(), array('app' => $this->appName));
|
||||
\OC_Response::setStatus(500);
|
||||
$response = array();
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2014 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents\Controller;
|
||||
|
||||
use \OCP\AppFramework\Controller;
|
||||
use \OCP\IRequest;
|
||||
use \OCP\IConfig;
|
||||
use \OCP\IL10N;
|
||||
use \OCP\AppFramework\Http\JSONResponse;
|
||||
|
||||
use OCA\Documents\Converter;
|
||||
use OCA\Documents\Config;
|
||||
use OCA\Documents\Filter;
|
||||
|
||||
class SettingsController extends Controller{
|
||||
|
||||
private $uid;
|
||||
private $settings;
|
||||
private $logger;
|
||||
private $l10n;
|
||||
|
||||
public function __construct($appName, IRequest $request, IConfig $settings, $logger, IL10N $l10n, $uid){
|
||||
parent::__construct($appName, $request);
|
||||
$this->uid = $uid;
|
||||
$this->settings = $settings;
|
||||
$this->logger = $logger;
|
||||
$this->l10n = $l10n;
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function getSupportedMimes(){
|
||||
return array(
|
||||
'status' => 'success',
|
||||
'mimes' => Filter::getAll()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function savePersonal($savePath){
|
||||
if (is_null($savePath)){
|
||||
$savePath = '/';
|
||||
}
|
||||
$status = true;
|
||||
if (\OC\Files\Filesystem::file_exists($savePath) === false ){
|
||||
$status = \OC\Files\Filesystem::mkdir($savePath);
|
||||
}
|
||||
|
||||
if ($status){
|
||||
$this->settings->setUserValue($this->uid, $this->appName, 'save_path', $savePath);
|
||||
$response = array(
|
||||
'status' => 'success',
|
||||
'data' => array('message'=> $this->l10n->t('Directory saved successfully.'))
|
||||
);
|
||||
} else {
|
||||
$response = array(
|
||||
'status' => 'error',
|
||||
'data' => array(
|
||||
'message'=> $this->l10n->t('An error occurred while changing directory.')
|
||||
)
|
||||
);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function setUnstable($unstable){
|
||||
if (!is_null($unstable)){
|
||||
$this->settings->setAppValue($this->appName, 'unstable', $unstable);
|
||||
}
|
||||
return array('status' => 'success');
|
||||
}
|
||||
|
||||
public function setConverter($converter, $url){
|
||||
if (!is_null($converter)){
|
||||
$this->settings->setAppValue($this->appName, 'converter', $converter);
|
||||
}
|
||||
|
||||
if (!is_null($url)){
|
||||
$this->settings->setAppValue($this->appName, 'converter_url', $url);
|
||||
}
|
||||
|
||||
$response = array(
|
||||
'status' => 'success',
|
||||
'data' => array('message' => (string) $this->l10n->t('Saved'))
|
||||
);
|
||||
|
||||
if ($this->settings->getAppValue($this->appName, 'converter', 'local') != 'local'){
|
||||
if (!Converter::checkConnection()){
|
||||
$this->logger->warning('Bad response from Format Filter Server', array('app' => $this->appName));
|
||||
$response = array(
|
||||
'status' => 'error',
|
||||
'data'=>
|
||||
array('message' => (string) $this->l10n->t('Format filter server is down or misconfigured') )
|
||||
);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
if (!Config::testConversion()){
|
||||
$response = array(
|
||||
'status' => 'error',
|
||||
'data'=>
|
||||
array('message' => (string) $this->l10n->t('Conversion failed. Check log for details.') )
|
||||
);
|
||||
}
|
||||
} catch (\Exception $e){
|
||||
$response = array(
|
||||
'status' => 'error',
|
||||
'data'=> array('message' => $e->getMessage())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -1,113 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
/**
|
||||
* Generic download class
|
||||
*/
|
||||
class Download {
|
||||
|
||||
/**
|
||||
* Filesystem view
|
||||
* @var \OC\Files\View
|
||||
*/
|
||||
protected $view;
|
||||
|
||||
/**
|
||||
* Path to the File to be served, relative to the view
|
||||
* @var string
|
||||
*/
|
||||
protected $filepath;
|
||||
|
||||
/**
|
||||
* Subclassed object
|
||||
* @var
|
||||
*/
|
||||
protected $instance;
|
||||
|
||||
/**
|
||||
* Build download model according to the headers
|
||||
* @param type $view - filesystem view
|
||||
* @param type $filepath - path to the file relative to this view root
|
||||
*/
|
||||
public function __construct($owner, $filepath){
|
||||
$this->filepath = $filepath;
|
||||
|
||||
if (isset($_SERVER['HTTP_RANGE'])) {
|
||||
$this->instance = new Download\Range($owner, $filepath);
|
||||
} else {
|
||||
$this->instance = new Download\Simple($owner, $filepath);
|
||||
}
|
||||
|
||||
$this->view = $this->getView($owner);
|
||||
}
|
||||
|
||||
protected function getView($owner){
|
||||
return new View('/' . $owner);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the requested content
|
||||
*/
|
||||
public function sendResponse(){
|
||||
\OCP\Response::disableCaching();
|
||||
|
||||
if (!$this->fileExists()){
|
||||
$this->sendNotFound();
|
||||
}
|
||||
|
||||
$this->instance->sendResponse();
|
||||
exit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the requested file
|
||||
* @return String
|
||||
*/
|
||||
protected function getFilename(){
|
||||
return basename($this->filepath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size of the requested file
|
||||
*/
|
||||
protected function getFilesize(){
|
||||
return $this->view->filesize($this->filepath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mimetype of the requested file
|
||||
* @return string
|
||||
*/
|
||||
protected function getMimeType(){
|
||||
return $this->view->getMimeType($this->filepath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the requested file exists
|
||||
* @return bool
|
||||
*/
|
||||
protected function fileExists(){
|
||||
return $this->view->file_exists($this->filepath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send 404 Response
|
||||
*/
|
||||
protected function sendNotFound(){
|
||||
header("HTTP/1.0 404 Not Found");
|
||||
$tmpl = new \OCP\Template('', '404', 'guest');
|
||||
$tmpl->assign('file', $this->filepath);
|
||||
$tmpl->printPage();
|
||||
exit;
|
||||
}
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents\Download;
|
||||
|
||||
/**
|
||||
* Class processing range HTTP request (partial download)
|
||||
*/
|
||||
class Range extends \OCA\Documents\Download {
|
||||
|
||||
// Start of the range
|
||||
protected $start;
|
||||
// End of the range
|
||||
protected $end;
|
||||
|
||||
/**
|
||||
* Build download model to serve HTTP_RANGE
|
||||
* @param type $view - filesystem view
|
||||
* @param type $filepath - path to the file relative to this view root
|
||||
*/
|
||||
public function __construct($owner, $filepath){
|
||||
$this->view = $this->getView($owner);
|
||||
$this->filepath = $filepath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the requested parts of the file
|
||||
*/
|
||||
public function sendResponse(){
|
||||
if (!preg_match('/^bytes=\d*-\d*(,\d*-\d*)*$/', $_SERVER['HTTP_RANGE'])){
|
||||
$this->sendNotSatisfiable();
|
||||
}
|
||||
|
||||
$mimetype = $this->getMimeType();
|
||||
$content = $this->view->file_get_contents($this->filepath);
|
||||
$data = \OCA\Documents\Filter::read($content, $mimetype);
|
||||
$size = strlen($data['content']);
|
||||
|
||||
$ranges = explode(',', substr($_SERVER['HTTP_RANGE'], 6));
|
||||
foreach ($ranges as $range){
|
||||
$parts = explode('-', $range);
|
||||
|
||||
if ($parts[0]==='' && $parts[1]=='') {
|
||||
$this->sendNotSatisfiable();
|
||||
}
|
||||
if ($parts[0]==='') {
|
||||
$start = $size - $parts[1];
|
||||
$end = $size - 1;
|
||||
}
|
||||
else {
|
||||
$start = $parts[0];
|
||||
$end = ($parts[1]==='') ? $size - 1 : $parts[1];
|
||||
}
|
||||
|
||||
if ($start > $end){
|
||||
$this->sendNotSatisfiable();
|
||||
}
|
||||
|
||||
$buffer = substr($data['content'], $start, $end - $start);
|
||||
$md5Sum = md5($buffer);
|
||||
|
||||
// send the headers and data
|
||||
header("Content-Length: " . ($end - $start));
|
||||
header("Content-md5: " . $md5Sum);
|
||||
header("Accept-Ranges: bytes");
|
||||
header('Content-Range: bytes ' . $start . '-' . ($end) . '/' . $size);
|
||||
header("Connection: close");
|
||||
header("Content-type: " . $data['mimetype']);
|
||||
header('Content-Disposition: attachment; filename=' . $this->getFilename());
|
||||
\OC_Util::obEnd();
|
||||
echo $buffer;
|
||||
flush();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send 416 if we can't satisfy the requested ranges
|
||||
*/
|
||||
protected function sendNotSatisfiable(){
|
||||
header('HTTP/1.1 416 Requested Range Not Satisfiable');
|
||||
header('Content-Range: bytes */' . $this->getFilesize()); // Required in 416.
|
||||
exit;
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents\Download;
|
||||
|
||||
/**
|
||||
* Class processing complete download
|
||||
*/
|
||||
class Simple extends \OCA\Documents\Download {
|
||||
|
||||
public function __construct($owner, $filepath){
|
||||
$this->view = $this->getView($owner);
|
||||
$this->filepath = $filepath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the whole file content as a response
|
||||
*/
|
||||
public function sendResponse(){
|
||||
$mimetype = $this->getMimeType();
|
||||
$content = $this->view->file_get_contents($this->filepath);
|
||||
$data = \OCA\Documents\Filter::read($content, $mimetype);
|
||||
|
||||
header( 'Content-Type:' . $data['mimetype'] );
|
||||
|
||||
$encodedName = rawurlencode($this->getFilename());
|
||||
if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])){
|
||||
header(
|
||||
'Content-Disposition: attachment; filepath="' . $encodedName . '"'
|
||||
);
|
||||
} else {
|
||||
header('Content-Disposition: attachment; filepath*=UTF-8\'\'' . $encodedName
|
||||
. '; filepath="' . $encodedName . '"');
|
||||
}
|
||||
|
||||
header('Content-Length: ' . strlen($data['content']));
|
||||
|
||||
\OC_Util::obEnd();
|
||||
|
||||
echo $data['content'];
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2014 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
use \OCP\AppFramework\Http;
|
||||
|
||||
class DownloadResponse extends \OCP\AppFramework\Http\Response {
|
||||
private $request;
|
||||
private $view;
|
||||
private $path;
|
||||
|
||||
public function __construct($request, $user, $path) {
|
||||
$this->request = $request;
|
||||
$this->user = $user;
|
||||
$this->path = $path;
|
||||
$this->view = new View('/' . $user);
|
||||
if (!$this->view->file_exists($path)){
|
||||
$this->setStatus(Http::STATUS_NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
public function render(){
|
||||
if ($this->status === Http::STATUS_NOT_FOUND){
|
||||
return '';
|
||||
}
|
||||
|
||||
$info = $this->view->getFileInfo($this->path);
|
||||
$this->ETag = $info['etag'];
|
||||
|
||||
$content = $this->view->file_get_contents($this->path);
|
||||
$data = \OCA\Documents\Filter::read($content, $info['mimetype']);
|
||||
$size = strlen($data['content']);
|
||||
|
||||
|
||||
if (!is_null($this->request->server['HTTP_RANGE'])){
|
||||
$isValidRange = preg_match('/^bytes=\d*-\d*(,\d*-\d*)*$/', $this->request->server['HTTP_RANGE']);
|
||||
if (!$isValidRange){
|
||||
return $this->sendRangeNotSatisfiable($size);
|
||||
}
|
||||
|
||||
$ranges = explode(',', substr($this->request->server['HTTP_RANGE'], 6));
|
||||
foreach ($ranges as $range){
|
||||
$parts = explode('-', $range);
|
||||
|
||||
if ($parts[0]==='' && $parts[1]=='') {
|
||||
$this->sendNotSatisfiable($size);
|
||||
}
|
||||
if ($parts[0]==='') {
|
||||
$start = $size - $parts[1];
|
||||
$end = $size - 1;
|
||||
} else {
|
||||
$start = $parts[0];
|
||||
$end = ($parts[1]==='') ? $size - 1 : $parts[1];
|
||||
}
|
||||
|
||||
if ($start > $end){
|
||||
$this->sendNotSatisfiable($size);
|
||||
}
|
||||
|
||||
$buffer = substr($data['content'], $start, $end - $start);
|
||||
$md5Sum = md5($buffer);
|
||||
|
||||
// send the headers and data
|
||||
$this->addHeader('Content-Length', $end - $start);
|
||||
$this->addHeader('Content-md5', $md5Sum);
|
||||
$this->addHeader('Accept-Ranges', 'bytes');
|
||||
$this->addHeader('Content-Range', 'bytes ' . $start . '-' . ($end) . '/' . $size);
|
||||
$this->addHeader('Connection', 'close');
|
||||
$this->addHeader('Content-Type', $data['mimetype']);
|
||||
$this->addContentDispositionHeader();
|
||||
return $buffer;
|
||||
}
|
||||
}
|
||||
|
||||
$this->addHeader('Content-Type', $data['mimetype']);
|
||||
$this->addContentDispositionHeader();
|
||||
$this->addHeader('Content-Length', $size);
|
||||
|
||||
return $data['content'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Send 416 if we can't satisfy the requested ranges
|
||||
*/
|
||||
protected function sendRangeNotSatisfiable($filesize){
|
||||
$this->setStatus(Http::STATUS_REQUEST_RANGE_NOT_SATISFIABLE);
|
||||
$this->addHeader('Content-Range', 'bytes */' . $filesize); // Required in 416.
|
||||
return '';
|
||||
}
|
||||
|
||||
protected function addContentDispositionHeader(){
|
||||
$encodedName = rawurlencode(basename($this->path));
|
||||
$isIE = preg_match("/MSIE/", $this->request->server["HTTP_USER_AGENT"]);
|
||||
if ($isIE){
|
||||
$this->addHeader(
|
||||
'Content-Disposition',
|
||||
'attachment; filename="' . $encodedName . '"'
|
||||
);
|
||||
} else {
|
||||
$this->addHeader(
|
||||
'Content-Disposition',
|
||||
'attachment; filename*=UTF-8\'\'' . $encodedName . '; filepath="' . $encodedName . '"'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* ownCloud - Documents App
|
||||
*
|
||||
* @author Victor Dubiniuk
|
||||
* @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
*/
|
||||
|
||||
namespace OCA\Documents;
|
||||
|
||||
class Request {
|
||||
protected $data = array();
|
||||
|
||||
protected $rawRequest = '';
|
||||
|
||||
public function __construct(){
|
||||
$this->rawRequest = file_get_contents('php://input');
|
||||
$this->data = json_decode($this->rawRequest, true);
|
||||
}
|
||||
|
||||
public function getRawRequest(){
|
||||
return $this->rawRequest;
|
||||
}
|
||||
|
||||
public function getParam($name){
|
||||
if (empty($name)){
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
$path = explode('/', $name);
|
||||
|
||||
reset($path);
|
||||
$index = current($path);
|
||||
$param = $this->data;
|
||||
do {
|
||||
if (!array_key_exists($index, $param)){
|
||||
return null;
|
||||
}
|
||||
$param = $param[$index];
|
||||
} while (($index = next($path)) !== false);
|
||||
|
||||
return $param;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue