Merge pull request #17451 from owncloud/apps-disablebrokenappafterenable
Disable app that bricks the server after enabling
This commit is contained in:
commit
256dfd27b6
20
lib/base.php
20
lib/base.php
|
@ -823,12 +823,28 @@ class OC {
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$request = \OC::$server->getRequest()->getPathInfo();
|
$request = \OC::$server->getRequest();
|
||||||
if (substr($request, -3) !== '.js') { // we need these files during the upgrade
|
$requestPath = $request->getPathInfo();
|
||||||
|
if (substr($requestPath, -3) !== '.js') { // we need these files during the upgrade
|
||||||
self::checkMaintenanceMode();
|
self::checkMaintenanceMode();
|
||||||
self::checkUpgrade();
|
self::checkUpgrade();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// emergency app disabling
|
||||||
|
if ($requestPath === '/disableapp'
|
||||||
|
&& $request->getMethod() === 'POST'
|
||||||
|
&& ((string)$request->getParam('appid')) !== ''
|
||||||
|
) {
|
||||||
|
\OCP\JSON::callCheck();
|
||||||
|
\OCP\JSON::checkAdminUser();
|
||||||
|
$appId = (string)$request->getParam('appid');
|
||||||
|
$appId = \OC_App::cleanAppId($appId);
|
||||||
|
|
||||||
|
\OC_App::disable($appId);
|
||||||
|
\OC_JSON::success();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
// Always load authentication apps
|
// Always load authentication apps
|
||||||
OC_App::loadApps(['authentication']);
|
OC_App::loadApps(['authentication']);
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ Handlebars.registerHelper('score', function() {
|
||||||
if(this.score) {
|
if(this.score) {
|
||||||
var score = Math.round( this.score / 10 );
|
var score = Math.round( this.score / 10 );
|
||||||
var imageName = 'rating/s' + score + '.png';
|
var imageName = 'rating/s' + score + '.png';
|
||||||
|
|
||||||
return new Handlebars.SafeString('<img src="' + OC.imagePath('core', imageName) + '">');
|
return new Handlebars.SafeString('<img src="' + OC.imagePath('core', imageName) + '">');
|
||||||
}
|
}
|
||||||
return new Handlebars.SafeString('');
|
return new Handlebars.SafeString('');
|
||||||
|
@ -212,7 +212,19 @@ OC.Settings.Apps = OC.Settings.Apps || {
|
||||||
return app.types && app.types.indexOf(type) !== -1;
|
return app.types && app.types.indexOf(type) !== -1;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks the server health.
|
||||||
|
*
|
||||||
|
* If the promise fails, the server is broken.
|
||||||
|
*
|
||||||
|
* @return {Promise} promise
|
||||||
|
*/
|
||||||
|
_checkServerHealth: function() {
|
||||||
|
return $.get(OC.generateUrl('apps/files'));
|
||||||
|
},
|
||||||
|
|
||||||
enableApp:function(appId, active, element, groups) {
|
enableApp:function(appId, active, element, groups) {
|
||||||
|
var self = this;
|
||||||
OC.Settings.Apps.hideErrorMessage(appId);
|
OC.Settings.Apps.hideErrorMessage(appId);
|
||||||
groups = groups || [];
|
groups = groups || [];
|
||||||
var appItem = $('div#app-'+appId+'');
|
var appItem = $('div#app-'+appId+'');
|
||||||
|
@ -242,6 +254,8 @@ OC.Settings.Apps = OC.Settings.Apps || {
|
||||||
}
|
}
|
||||||
},'json');
|
},'json');
|
||||||
} else {
|
} else {
|
||||||
|
// TODO: display message to admin to not refresh the page!
|
||||||
|
// TODO: lock UI to prevent further operations
|
||||||
$.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appId, groups: groups},function(result) {
|
$.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appId, groups: groups},function(result) {
|
||||||
if(!result || result.status !== 'success') {
|
if(!result || result.status !== 'success') {
|
||||||
if (result.data && result.data.message) {
|
if (result.data && result.data.message) {
|
||||||
|
@ -254,35 +268,55 @@ OC.Settings.Apps = OC.Settings.Apps || {
|
||||||
element.val(t('settings','Enable'));
|
element.val(t('settings','Enable'));
|
||||||
appItem.addClass('appwarning');
|
appItem.addClass('appwarning');
|
||||||
} else {
|
} else {
|
||||||
if (result.data.update_required) {
|
self._checkServerHealth().done(function() {
|
||||||
OC.Settings.Apps.showReloadMessage();
|
if (result.data.update_required) {
|
||||||
|
OC.Settings.Apps.showReloadMessage();
|
||||||
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
location.reload();
|
location.reload();
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
|
||||||
|
|
||||||
OC.Settings.Apps.rebuildNavigation();
|
|
||||||
appItem.data('active',true);
|
|
||||||
element.data('active',true);
|
|
||||||
appItem.addClass('active');
|
|
||||||
element.val(t('settings','Disable'));
|
|
||||||
var app = OC.Settings.Apps.State.apps[appId];
|
|
||||||
app.active = true;
|
|
||||||
|
|
||||||
if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
|
|
||||||
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
|
|
||||||
element.parent().find(".groups-enable").attr('checked', null);
|
|
||||||
element.parent().find(".groups-enable").hide();
|
|
||||||
element.parent().find('#group_select').hide().val(null);
|
|
||||||
} else {
|
|
||||||
element.parent().find("#groups-enable").show();
|
|
||||||
if (groups) {
|
|
||||||
appItem.data('groups', JSON.stringify(groups));
|
|
||||||
} else {
|
|
||||||
appItem.data('groups', '');
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
OC.Settings.Apps.rebuildNavigation();
|
||||||
|
appItem.data('active',true);
|
||||||
|
element.data('active',true);
|
||||||
|
appItem.addClass('active');
|
||||||
|
element.val(t('settings','Disable'));
|
||||||
|
var app = OC.Settings.Apps.State.apps[appId];
|
||||||
|
app.active = true;
|
||||||
|
|
||||||
|
if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
|
||||||
|
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
|
||||||
|
element.parent().find(".groups-enable").attr('checked', null);
|
||||||
|
element.parent().find(".groups-enable").hide();
|
||||||
|
element.parent().find('#group_select').hide().val(null);
|
||||||
|
} else {
|
||||||
|
element.parent().find("#groups-enable").show();
|
||||||
|
if (groups) {
|
||||||
|
appItem.data('groups', JSON.stringify(groups));
|
||||||
|
} else {
|
||||||
|
appItem.data('groups', '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).fail(function() {
|
||||||
|
// server borked, emergency disable app
|
||||||
|
$.post(OC.webroot + '/index.php/disableapp', {appid: appId}, function() {
|
||||||
|
OC.Settings.Apps.showErrorMessage(
|
||||||
|
appId,
|
||||||
|
t('settings', 'Error: this app cannot be enabled because it makes the server unstable')
|
||||||
|
);
|
||||||
|
appItem.data('errormsg', t('settings', 'Error while enabling app'));
|
||||||
|
element.val(t('settings','Enable'));
|
||||||
|
appItem.addClass('appwarning');
|
||||||
|
}).fail(function() {
|
||||||
|
OC.Settings.Apps.showErrorMessage(
|
||||||
|
appId,
|
||||||
|
t('settings', 'Error: could not disable broken app')
|
||||||
|
);
|
||||||
|
appItem.data('errormsg', t('settings', 'Error while disabling broken app'));
|
||||||
|
element.val(t('settings','Enable'));
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},'json')
|
},'json')
|
||||||
.fail(function() {
|
.fail(function() {
|
||||||
|
|
Loading…
Reference in New Issue