From 19fbff9dd1ba9889e144e2613c7ec85928e00c85 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Thu, 29 Nov 2018 17:01:43 +0100 Subject: [PATCH] Add check for missing .woff2 rule in Nginx via setup check Signed-off-by: Morris Jobke --- core/js/setupchecks.js | 31 ++++++++++++++++++++++++++ core/js/tests/specs/setupchecksSpec.js | 27 ++++++++++++++++++++++ settings/js/admin.js | 5 +++-- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js index ca7d979f5f3..c50781f1485 100644 --- a/core/js/setupchecks.js +++ b/core/js/setupchecks.js @@ -87,6 +87,37 @@ return deferred.promise(); }, + /** + * Check whether the WOFF2 URLs works. + * + * @param url the URL to test + * @param placeholderUrl the placeholder URL - can be found at oc_defaults.docPlaceholderUrl + * @return $.Deferred object resolved with an array of error messages + */ + checkWOFF2Loading: function(url, placeholderUrl) { + var deferred = $.Deferred(); + + var afterCall = function(xhr) { + var messages = []; + if (xhr.status !== 200) { + var docUrl = placeholderUrl.replace('PLACEHOLDER', 'admin-nginx'); + messages.push({ + msg: t('core', 'Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our documentation.', { docLink: docUrl, url: url }), + type: OC.SetupChecks.MESSAGE_TYPE_WARNING + }); + } + deferred.resolve(messages); + }; + + $.ajax({ + type: 'GET', + url: url, + complete: afterCall, + allowAuthErrors: true + }); + return deferred.promise(); + }, + /** * Runs setup checks on the server side * diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js index 47443e5e727..b8a2164de54 100644 --- a/core/js/tests/specs/setupchecksSpec.js +++ b/core/js/tests/specs/setupchecksSpec.js @@ -107,6 +107,33 @@ describe('OC.SetupChecks tests', function() { }); }); + describe('checkWOFF2Loading', function() { + it('should fail with another response status code than the expected one', function(done) { + var async = OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/Nunito-Regular.woff2'), 'http://example.org/PLACEHOLDER'); + + suite.server.requests[0].respond(302); + + async.done(function( data, s, x ){ + expect(data).toEqual([{ + msg: 'Your web server is not properly set up to deliver .woff2 files. This is typically an issue with the Nginx configuration. For Nextcloud 15 it needs an adjustement to also deliver .woff2 files. Compare your Nginx configuration to the recommended configuration in our documentation.', + type: OC.SetupChecks.MESSAGE_TYPE_WARNING + }]); + done(); + }); + }); + + it('should return no error with the expected response status code', function(done) { + var async = OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/Nunito-Regular.woff2'), 'http://example.org/PLACEHOLDER'); + + suite.server.requests[0].respond(200); + + async.done(function( data, s, x ){ + expect(data).toEqual([]); + done(); + }); + }); + }); + describe('checkDataProtected', function() { oc_dataURL = "data"; diff --git a/settings/js/admin.js b/settings/js/admin.js index 1c766ef51a5..2f3cc0356c9 100644 --- a/settings/js/admin.js +++ b/settings/js/admin.js @@ -252,9 +252,10 @@ $(document).ready(function(){ OC.SetupChecks.checkWellKnownUrl('/.well-known/carddav', oc_defaults.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true), OC.SetupChecks.checkSetup(), OC.SetupChecks.checkGeneric(), + OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/Nunito-Regular.woff2'), oc_defaults.docPlaceholderUrl), OC.SetupChecks.checkDataProtected() - ).then(function(check1, check2, check3, check4, check5, check6, check7) { - var messages = [].concat(check1, check2, check3, check4, check5, check6, check7); + ).then(function(check1, check2, check3, check4, check5, check6, check7, check8) { + var messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8); var $el = $('#postsetupchecks'); $('#security-warning-state-loading').addClass('hidden');