Proxy images through usercontent.apps.nextcloud.com

Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
This commit is contained in:
Lukas Reschke 2016-10-31 17:08:11 +01:00
parent 8acb54aa0b
commit a68595742b
No known key found for this signature in database
GPG Key ID: B9F6980CF6E759B1
3 changed files with 8 additions and 19 deletions

View File

@ -113,7 +113,7 @@ class AppSettingsController extends Controller {
$templateResponse = new TemplateResponse($this->appName, 'apps', $params, 'user'); $templateResponse = new TemplateResponse($this->appName, 'apps', $params, 'user');
$policy = new ContentSecurityPolicy(); $policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('*'); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
$templateResponse->setContentSecurityPolicy($policy); $templateResponse->setContentSecurityPolicy($policy);
return $templateResponse; return $templateResponse;
@ -234,18 +234,19 @@ class AppSettingsController extends Controller {
'missingMaxOwnCloudVersion' => false, 'missingMaxOwnCloudVersion' => false,
'missingMinOwnCloudVersion' => false, 'missingMinOwnCloudVersion' => false,
'canInstall' => true, 'canInstall' => true,
'preview' => $app['screenshots'][0]['url'], 'preview' => isset($app['screenshots'][0]['url']) ? 'https://usercontent.apps.nextcloud.com/'.base64_encode($app['screenshots'][0]['url']) : '',
'score' => $app['ratingOverall'], 'score' => $app['ratingOverall'],
'removable' => $existsLocally, 'removable' => $existsLocally,
'active' => $this->appManager->isEnabledForUser($app['id']), 'active' => $this->appManager->isEnabledForUser($app['id']),
'needsDownload' => !$existsLocally, 'needsDownload' => !$existsLocally,
'groups' => $groups, 'groups' => $groups,
'fromAppStore' => true,
]; ];
$appFetcher = \OC::$server->getAppFetcher(); $appFetcher = \OC::$server->getAppFetcher();
$newVersion = \OC\Installer::isUpdateAvailable($app['id'], $appFetcher); $newVersion = \OC\Installer::isUpdateAvailable($app['id'], $appFetcher);
if($newVersion) { if($newVersion && $this->appManager->isInstalled($app['id'])) {
$formattedApps[count($formattedApps)-1]['update'] = $newVersion; $formattedApps[count($formattedApps)-1]['update'] = $newVersion;
} }
} }

View File

@ -207,7 +207,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
currentImage.onload = function() { currentImage.onload = function() {
page.find('.app-image') page.find('.app-image')
.append(OC.Settings.Apps.imageUrl(app.preview, app.detailpage)) .append(OC.Settings.Apps.imageUrl(app.preview, app.fromAppStore))
.fadeIn(); .fadeIn();
}; };
} }
@ -244,7 +244,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
var img = '<svg width="72" height="72" viewBox="0 0 72 72">'; var img = '<svg width="72" height="72" viewBox="0 0 72 72">';
if (appfromstore) { if (appfromstore) {
img += '<image x="0" y="0" width="72" height="72" preserveAspectRatio="xMinYMin meet" xlink:href="' + url + '?v=' + oc_config.version + '" class="app-icon" /></svg>'; img += '<image x="0" y="0" width="72" height="72" preserveAspectRatio="xMinYMin meet" xlink:href="' + url + '" class="app-icon" /></svg>';
} else { } else {
img += '<image x="0" y="0" width="72" height="72" preserveAspectRatio="xMinYMin meet" filter="url(#invertIcon)" xlink:href="' + url + '?v=' + oc_config.version + '" class="app-icon"></image></svg>'; img += '<image x="0" y="0" width="72" height="72" preserveAspectRatio="xMinYMin meet" filter="url(#invertIcon)" xlink:href="' + url + '?v=' + oc_config.version + '" class="app-icon"></image></svg>';
} }

View File

@ -28,13 +28,11 @@ use OC\Settings\Controller\AppSettingsController;
use OCP\AppFramework\Http\ContentSecurityPolicy; use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\TemplateResponse;
use OCP\ICacheFactory;
use OCP\L10N\IFactory; use OCP\L10N\IFactory;
use Test\TestCase; use Test\TestCase;
use OCP\IRequest; use OCP\IRequest;
use OCP\IL10N; use OCP\IL10N;
use OCP\IConfig; use OCP\IConfig;
use OCP\ICache;
use OCP\INavigationManager; use OCP\INavigationManager;
use OCP\App\IAppManager; use OCP\App\IAppManager;
@ -52,8 +50,6 @@ class AppSettingsControllerTest extends TestCase {
private $l10n; private $l10n;
/** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config; private $config;
/** @var ICache|\PHPUnit_Framework_MockObject_MockObject */
private $cache;
/** @var INavigationManager|\PHPUnit_Framework_MockObject_MockObject */ /** @var INavigationManager|\PHPUnit_Framework_MockObject_MockObject */
private $navigationManager; private $navigationManager;
/** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */ /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */
@ -74,13 +70,6 @@ class AppSettingsControllerTest extends TestCase {
->method('t') ->method('t')
->will($this->returnArgument(0)); ->will($this->returnArgument(0));
$this->config = $this->createMock(IConfig::class); $this->config = $this->createMock(IConfig::class);
$cacheFactory = $this->createMock(ICacheFactory::class);
$this->cache = $this->createMock(ICache::class);
$cacheFactory
->expects($this->once())
->method('create')
->with('settings')
->will($this->returnValue($this->cache));
$this->navigationManager = $this->createMock(INavigationManager::class); $this->navigationManager = $this->createMock(INavigationManager::class);
$this->appManager = $this->createMock(IAppManager::class); $this->appManager = $this->createMock(IAppManager::class);
$this->categoryFetcher = $this->createMock(CategoryFetcher::class); $this->categoryFetcher = $this->createMock(CategoryFetcher::class);
@ -92,7 +81,6 @@ class AppSettingsControllerTest extends TestCase {
$this->request, $this->request,
$this->l10n, $this->l10n,
$this->config, $this->config,
$cacheFactory,
$this->navigationManager, $this->navigationManager,
$this->appManager, $this->appManager,
$this->categoryFetcher, $this->categoryFetcher,
@ -185,7 +173,7 @@ class AppSettingsControllerTest extends TestCase {
->with('core_apps'); ->with('core_apps');
$policy = new ContentSecurityPolicy(); $policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('*'); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
$expected = new TemplateResponse('settings', 'apps', ['category' => 'enabled', 'appstoreEnabled' => true], 'user'); $expected = new TemplateResponse('settings', 'apps', ['category' => 'enabled', 'appstoreEnabled' => true], 'user');
$expected->setContentSecurityPolicy($policy); $expected->setContentSecurityPolicy($policy);
@ -205,7 +193,7 @@ class AppSettingsControllerTest extends TestCase {
->with('core_apps'); ->with('core_apps');
$policy = new ContentSecurityPolicy(); $policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('*'); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
$expected = new TemplateResponse('settings', 'apps', ['category' => 'enabled', 'appstoreEnabled' => false], 'user'); $expected = new TemplateResponse('settings', 'apps', ['category' => 'enabled', 'appstoreEnabled' => false], 'user');
$expected->setContentSecurityPolicy($policy); $expected->setContentSecurityPolicy($policy);