plugin-manager: Use relative URL to access Gerrit base URL The plugin-manager plugin was not working properly for setups with a reverse-proxy with a non-root base path. Use a relative URL for calculating the base path, so that any reverse-proxy configuration with a non-root path can automatically get to the main location correctly. Rewrite of Change-Id: If382fe16 with a simplified implementation. Bug: Issue 13521 Change-Id: I5181098bfb2d4a27eef3b51fc8780cc8f294d1c3
diff --git a/src/main/resources/static/js/plugin-manager.js b/src/main/resources/static/js/plugin-manager.js index 0fb97a2..d786e90 100644 --- a/src/main/resources/static/js/plugin-manager.js +++ b/src/main/resources/static/js/plugin-manager.js
@@ -35,8 +35,19 @@ return pluginIndex; } + $scope.getBaseUrl = function () { + // Using a relative URL for allowing to reach Gerrit base URL + // which could be a non-root path when behind a reverse proxy + // on a path location. + // The use of a relative URL is for allowing a flexible way + // to reach the root even when accessed outside the canonical web + // URL (e.g. accessing on node directly with the hostname instead + // of the FQDN) + return window.location.pathname + '/../../../..'; + } + $scope.refreshInstalled = function(refreshPluginId) { - $http.get('/plugins/?all', plugins.httpConfig).then( + $http.get($scope.getBaseUrl() + '/plugins/?all', plugins.httpConfig).then( function successCallback(response) { angular.forEach(response.data, function(plugin) { @@ -74,7 +85,7 @@ } $scope.refreshAvailable = function(refreshPluginId) { - $http.get('/plugins/plugin-manager/available', plugins.httpConfig) + $http.get($scope.getBaseUrl() + '/plugins/plugin-manager/available', plugins.httpConfig) .then( function successCallback(response) { @@ -118,7 +129,7 @@ }; $("button#" + id).addClass("hidden"); $("span#installing-" + id).removeClass("hidden"); - $http.put('/a/plugins/' + id + ".jar", pluginInstallData).then( + $http.put($scope.getBaseUrl() + '/a/plugins/' + id + ".jar", pluginInstallData).then( function successCallback(response) { $("span#installing-" + id).addClass("hidden"); $("span#installed-" + id).removeClass("hidden");