From b5545932e7efec24f36fae76ffe8924e31e1d55a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Fri, 27 Mar 2015 01:37:25 +0100
Subject: [PATCH] use StreamResponse to download the log file - fixes #14268

---
 settings/application.php                      |  3 +-
 settings/controller/logsettingscontroller.php | 42 +++----------------
 .../controller/logsettingscontrollertest.php  | 12 ++----
 3 files changed, 10 insertions(+), 47 deletions(-)

diff --git a/settings/application.php b/settings/application.php
index 6992742b8d..397e3b3de9 100644
--- a/settings/application.php
+++ b/settings/application.php
@@ -114,8 +114,7 @@ class Application extends App {
 				$c->query('AppName'),
 				$c->query('Request'),
 				$c->query('Config'),
-				$c->query('L10N'),
-				$c->query('TimeFactory')
+				$c->query('L10N')
 			);
 		});
 
diff --git a/settings/controller/logsettingscontroller.php b/settings/controller/logsettingscontroller.php
index b2493c46ba..f3de1fbb7c 100644
--- a/settings/controller/logsettingscontroller.php
+++ b/settings/controller/logsettingscontroller.php
@@ -25,9 +25,8 @@ namespace OC\Settings\Controller;
 use OCP\AppFramework\Controller;
 use OCP\AppFramework\Http;
 use OCP\AppFramework\Http\JSONResponse;
-use OCP\AppFramework\Http\DataDownloadResponse;
+use OCP\AppFramework\Http\StreamResponse;
 use OCP\IL10N;
-use OCP\AppFramework\Utility\ITimeFactory;
 use OCP\IRequest;
 use OCP\IConfig;
 
@@ -47,11 +46,6 @@ class LogSettingsController extends Controller {
 	 */
 	private $l10n;
 
-	/**
-	 * @var \OCP\ITimeFactory
-	 */
-	private $timefactory;
-
 	/**
 	 * @param string $appName
 	 * @param IRequest $request
@@ -60,13 +54,10 @@ class LogSettingsController extends Controller {
 	public function __construct($appName,
 								IRequest $request,
 								IConfig $config,
-								IL10N $l10n,
-								ITimeFactory $timeFactory) {
-
+								IL10N $l10n) {
 		parent::__construct($appName, $request);
 		$this->config = $config;
 		$this->l10n = $l10n;
-		$this->timefactory = $timeFactory;
 	}
 
 	/**
@@ -107,32 +98,11 @@ class LogSettingsController extends Controller {
 	 *
 	 * @NoCSRFRequired
 	 *
-	 * @return DataDownloadResponse
+	 * @return StreamResponse
 	 */
 	public function download() {
-		return new DataDownloadResponse(
-			json_encode(\OC_Log_Owncloud::getEntries(null, null)),
-			$this->getFilenameForDownload(),
-			'application/json'
-		);
-	}
-
-	/**
-	 * get filename for the logfile that's being downloaded
-	 *
-	 * @param int $timestamp (defaults to time())
-	 * @return string
-	 */
-	private function getFilenameForDownload($timestamp=null) {
-		$instanceId = $this->config->getSystemValue('instanceid');
-
-		$filename = implode([
-			'ownCloud',
-			$instanceId,
-			(!is_null($timestamp)) ? $timestamp : $this->timefactory->getTime()
-		], '-');
-		$filename .= '.log';
-
-		return $filename;
+		$resp = new StreamResponse(\OC_Log_Owncloud::getLogFilePath());
+		$resp->addHeader('Content-Disposition', 'attachment; filename="owncloud.log"');
+		return $resp;
 	}
 }
diff --git a/tests/settings/controller/logsettingscontrollertest.php b/tests/settings/controller/logsettingscontrollertest.php
index 84581bf578..60680ba464 100644
--- a/tests/settings/controller/logsettingscontrollertest.php
+++ b/tests/settings/controller/logsettingscontrollertest.php
@@ -66,15 +66,9 @@ class LogSettingsControllerTest extends \Test\TestCase {
 		];
 	}
 
-	public function testGetFilenameForDownload() {
-		$timestamp = 42;
-		$this->container['Config']
-			->expects($this->once())
-			->method('getSystemValue')
-			->with('instanceid')
-			->will($this->returnValue('0xF'));
-		$filename = \Test_Helper::invokePrivate($this->logSettingsController, 'getFilenameForDownload', [$timestamp]);
+	public function testDownload() {
+		$response = $this->logSettingsController->download();
 
-		$this->assertSame('ownCloud-0xF-42.log', $filename);
+		$this->assertInstanceOf('\OCP\AppFramework\Http\StreamResponse', $response);
 	}
 }
-- 
GitLab