summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-12-13 18:25:05 +0100
committerGitHub <noreply@github.com>2017-12-13 18:25:05 +0100
commit784d256103d5777db817aded96afcbd3a2362a10 (patch)
treee0cc8702b99f840cd8cb4a3d6ef35519d744c4cf
parent66391d65a68d89f5351c1be7810cd4abd0e82989 (diff)
parentee20741526eccc1a02ee48fea6d917d17c1cfe58 (diff)
downloadnextcloud-server-784d256103d5777db817aded96afcbd3a2362a10.tar.gz
nextcloud-server-784d256103d5777db817aded96afcbd3a2362a10.zip
Merge pull request #7480 from nextcloud/fix_7454
Check for FreeType functions required for avatars
-rw-r--r--core/js/setupchecks.js9
-rw-r--r--core/js/tests/specs/setupchecksSpec.js59
-rw-r--r--settings/Controller/CheckSetupController.php9
-rw-r--r--tests/Settings/Controller/CheckSetupControllerTest.php6
4 files changed, 73 insertions, 10 deletions
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index 44bf33dd711..439826161d8 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -174,6 +174,15 @@
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
});
}
+ if (!data.hasFreeTypeSupport) {
+ messages.push({
+ msg: t(
+ 'core',
+ 'Your PHP does not have freetype support. This will result in broken profile pictures and settings interface.'
+ ),
+ type: OC.SetupChecks.MESSAGE_TYPE_INFO
+ })
+ }
} else {
messages.push({
msg: t('core', 'Error occurred while checking server setup'),
diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js
index 0114f7d868f..00bc84f2a8f 100644
--- a/core/js/tests/specs/setupchecksSpec.js
+++ b/core/js/tests/specs/setupchecksSpec.js
@@ -156,7 +156,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -189,7 +190,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -223,7 +225,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -255,7 +258,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -285,7 +289,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: false,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -315,7 +320,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -345,7 +351,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: false
+ isSettimelimitAvailable: false,
+ hasFreeTypeSupport: true
})
);
@@ -396,7 +403,8 @@ describe('OC.SetupChecks tests', function() {
isCorrectMemcachedPHPModuleInstalled: true,
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: true,
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -427,7 +435,8 @@ describe('OC.SetupChecks tests', function() {
hasPassedCodeIntegrityCheck: true,
isOpcacheProperlySetup: false,
phpOpcacheDocumentation: 'https://example.org/link/to/doc',
- isSettimelimitAvailable: true
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: true
})
);
@@ -439,6 +448,38 @@ describe('OC.SetupChecks tests', function() {
done();
});
});
+
+ it('should return an info if server has no freetype support', function(done) {
+ var async = OC.SetupChecks.checkSetup();
+
+ suite.server.requests[0].respond(
+ 200,
+ {
+ 'Content-Type': 'application/json'
+ },
+ JSON.stringify({
+ isUrandomAvailable: true,
+ securityDocs: 'https://docs.owncloud.org/myDocs.html',
+ serverHasInternetConnection: true,
+ isMemcacheConfigured: true,
+ forwardedForHeadersWorking: true,
+ isCorrectMemcachedPHPModuleInstalled: true,
+ hasPassedCodeIntegrityCheck: true,
+ isOpcacheProperlySetup: true,
+ phpOpcacheDocumentation: 'https://example.org/link/to/doc',
+ isSettimelimitAvailable: true,
+ hasFreeTypeSupport: false
+ })
+ );
+
+ async.done(function( data, s, x ){
+ expect(data).toEqual([{
+ msg: 'Your PHP does not have freetype support. This will result in broken profile pictures and settings interface.',
+ type: OC.SetupChecks.MESSAGE_TYPE_INFO
+ }]);
+ done();
+ });
+ });
});
describe('checkGeneric', function() {
diff --git a/settings/Controller/CheckSetupController.php b/settings/Controller/CheckSetupController.php
index 5b7953bf392..06b9e80294b 100644
--- a/settings/Controller/CheckSetupController.php
+++ b/settings/Controller/CheckSetupController.php
@@ -410,6 +410,14 @@ Raw output
}
/**
+ * Check if the required FreeType functions are present
+ * @return bool
+ */
+ protected function hasFreeTypeSupport() {
+ return function_exists('imagettfbbox') && function_exists('imagettftext');
+ }
+
+ /**
* @return DataResponse
*/
public function check() {
@@ -430,6 +438,7 @@ Raw output
'isOpcacheProperlySetup' => $this->isOpcacheProperlySetup(),
'phpOpcacheDocumentation' => $this->urlGenerator->linkToDocs('admin-php-opcache'),
'isSettimelimitAvailable' => $this->isSettimelimitAvailable(),
+ 'hasFreeTypeSupport' => $this->hasFreeTypeSupport(),
]
);
}
diff --git a/tests/Settings/Controller/CheckSetupControllerTest.php b/tests/Settings/Controller/CheckSetupControllerTest.php
index f0e203e714b..3f47819bcbd 100644
--- a/tests/Settings/Controller/CheckSetupControllerTest.php
+++ b/tests/Settings/Controller/CheckSetupControllerTest.php
@@ -96,7 +96,7 @@ class CheckSetupControllerTest extends TestCase {
$this->checker,
$this->logger
])
- ->setMethods(['getCurlVersion', 'isPhpOutdated', 'isOpcacheProperlySetup'])->getMock();
+ ->setMethods(['getCurlVersion', 'isPhpOutdated', 'isOpcacheProperlySetup', 'hasFreeTypeSupport'])->getMock();
}
public function testIsInternetConnectionWorkingDisabledViaConfig() {
@@ -321,6 +321,9 @@ class CheckSetupControllerTest extends TestCase {
->method('linkToDocs')
->with('admin-php-opcache')
->willReturn('http://docs.example.org/server/go.php?to=admin-php-opcache');
+ $this->checkSetupController
+ ->method('hasFreeTypeSupport')
+ ->willReturn(false);
$expected = new DataResponse(
[
@@ -342,6 +345,7 @@ class CheckSetupControllerTest extends TestCase {
'isOpcacheProperlySetup' => false,
'phpOpcacheDocumentation' => 'http://docs.example.org/server/go.php?to=admin-php-opcache',
'isSettimelimitAvailable' => true,
+ 'hasFreeTypeSupport' => false,
]
);
$this->assertEquals($expected, $this->checkSetupController->check());