diff --git a/config.py b/config.py index a1ecb2d52..ea65ad54e 100644 --- a/config.py +++ b/config.py @@ -20,7 +20,7 @@ CLIENT_WHITELIST = ['SERVER_HOSTNAME', 'PREFERRED_URL_SCHEME', 'MIXPANEL_KEY', 'STRIPE_PUBLISHABLE_KEY', 'ENTERPRISE_LOGO_URL', 'SENTRY_PUBLIC_DSN', 'AUTHENTICATION_TYPE', 'REGISTRY_TITLE', 'REGISTRY_TITLE_SHORT', 'CONTACT_INFO', 'AVATAR_KIND', 'LOCAL_OAUTH_HANDLER', 'DOCUMENTATION_LOCATION', - 'DOCUMENTATION_METADATA'] + 'DOCUMENTATION_METADATA', 'SETUP_COMPLETE'] def frontend_visible_config(config_dict): diff --git a/static/js/core-config-setup.js b/static/js/core-config-setup.js index 8e3e2521a..889e13341 100644 --- a/static/js/core-config-setup.js +++ b/static/js/core-config-setup.js @@ -228,9 +228,7 @@ angular.module("core-config-setup", ['angularFileUpload']) box.find("input").focus(); box.find("form").submit(function() { if (!$('#validatePassword').val()) { return; } - box.modal('hide'); - verifyNow(); }); }); }; diff --git a/static/js/pages/landing.js b/static/js/pages/landing.js index 53c0e733e..e0f2c4d45 100644 --- a/static/js/pages/landing.js +++ b/static/js/pages/landing.js @@ -12,6 +12,11 @@ $scope.currentScreenshot = 'repo-view'; $scope.userRegistered = false; + if (!Config['SETUP_COMPLETE'] && !Features.BILLING) { + $location.path('/setup'); + return; + } + UserService.updateUserIn($scope, function(user) { if (!user.anonymous) { $location.path('/repository'); diff --git a/static/js/pages/setup.js b/static/js/pages/setup.js index 3dfb817d3..90e32a403 100644 --- a/static/js/pages/setup.js +++ b/static/js/pages/setup.js @@ -93,6 +93,8 @@ $scope.stepProgress = []; $scope.hasSSL = false; $scope.hostname = null; + $scope.currentConfig = null; + $scope.currentState = { 'hasDatabaseSSLCert': false }; @@ -147,6 +149,8 @@ $scope.configurationSaved = function(config) { $scope.hasSSL = config['PREFERRED_URL_SCHEME'] == 'https'; $scope.hostname = config['SERVER_HOSTNAME']; + $scope.currentConfig = config; + $scope.currentStep = $scope.States.VALID_CONFIG; }; @@ -298,7 +302,7 @@ $scope.checkStatus = function() { ContainerService.checkStatus(function(resp) { $scope.currentStep = resp['status']; - }, $scope.hasSSL); + }, $scope.currentConfig); }; // Load the initial status. diff --git a/static/js/pages/superuser.js b/static/js/pages/superuser.js index 7ba61b308..5976e3c60 100644 --- a/static/js/pages/superuser.js +++ b/static/js/pages/superuser.js @@ -30,12 +30,14 @@ $scope.logsScrolled = false; $scope.csrf_token = encodeURIComponent(window.__token); $scope.dashboardActive = false; + $scope.currentConfig = null; $scope.setDashboardActive = function(active) { $scope.dashboardActive = active; }; - $scope.configurationSaved = function() { + $scope.configurationSaved = function(config) { + $scope.currentConfig = config; $scope.requiresRestart = true; }; @@ -321,6 +323,7 @@ $scope.requiresRestart = resp['requires_restart']; if ($scope.configStatus == 'ready') { + $scope.currentConfig = null; $scope.loadUsers(); } else { var message = "Installation of this product has not yet been completed." + @@ -331,7 +334,7 @@ var title = "Installation Incomplete"; CoreDialog.fatal(title, message); } - }); + }, $scope.currentConfig); }; // Load the initial status. diff --git a/static/js/services/api-service.js b/static/js/services/api-service.js index 14878a874..82dfb2547 100644 --- a/static/js/services/api-service.js +++ b/static/js/services/api-service.js @@ -47,7 +47,7 @@ angular.module('quay').factory('ApiService', ['Restangular', '$q', 'UtilService' return resource; }; - var buildUrl = function(path, parameters, opt_forcessl) { + var buildUrl = function(path, parameters) { // We already have /api/v1/ on the URLs, so remove them from the paths. path = path.substr('/api/v1/'.length, path.length); @@ -87,11 +87,6 @@ angular.module('quay').factory('ApiService', ['Restangular', '$q', 'UtilService' } } - // If we are forcing SSL, return an absolutel URL with an SSL prefix. - if (opt_forcessl) { - path = 'https://' + window.location.host + '/api/v1/' + path; - } - return url; }; @@ -216,8 +211,8 @@ angular.module('quay').factory('ApiService', ['Restangular', '$q', 'UtilService' var urlPath = path['x-path']; // Add the operation itself. - apiService[operationName] = function(opt_options, opt_parameters, opt_background, opt_forcessl) { - var one = Restangular.one(buildUrl(urlPath, opt_parameters, opt_forcessl)); + apiService[operationName] = function(opt_options, opt_parameters, opt_background) { + var one = Restangular.one(buildUrl(urlPath, opt_parameters)); if (opt_background) { one.withHttpConfig({ 'ignoreLoadingBar': true diff --git a/static/js/services/container-service.js b/static/js/services/container-service.js index 3d9036d29..a62bb5835 100644 --- a/static/js/services/container-service.js +++ b/static/js/services/container-service.js @@ -1,9 +1,9 @@ /** * Helper service for working with the registry's container. Only works in enterprise. */ -angular.module('quay').factory('ContainerService', ['ApiService', '$timeout', +angular.module('quay').factory('ContainerService', ['ApiService', '$timeout', 'Restangular', -function(ApiService, $timeout) { +function(ApiService, $timeout, Restangular) { var containerService = {}; containerService.restartContainer = function(callback) { ApiService.scShutdownContainer(null, null).then(function(resp) { @@ -11,25 +11,34 @@ function(ApiService, $timeout) { }, ApiService.errorDisplay('Cannot restart container. Please report this to support.')) }; - containerService.scheduleStatusCheck = function(callback) { + containerService.scheduleStatusCheck = function(callback, opt_config) { $timeout(function() { - containerService.checkStatus(callback); + containerService.checkStatus(callback, opt_config); }, 2000); }; - containerService.checkStatus = function(callback, force_ssl) { + containerService.checkStatus = function(callback, opt_config) { var errorHandler = function(resp) { if (resp.status == 404 || resp.status == 502) { // Container has not yet come back up, so we schedule another check. - containerService.scheduleStatusCheck(callback); + containerService.scheduleStatusCheck(callback, opt_config); return; } return ApiService.errorDisplay('Cannot load status. Please report this to support')(resp); }; - ApiService.scRegistryStatus(null, null) - .then(callback, errorHandler, /* background */true, /* force ssl*/force_ssl); + // If config is specified, override the API base URL from this point onward. + // TODO(jschorr): Find a better way than this. This is safe, since this will only be called + // for a restart, but it is still ugly. + if (opt_config && opt_config['SERVER_HOSTNAME']) { + var scheme = opt_config['PREFERRED_URL_SCHEME'] || 'http'; + var baseUrl = scheme + '://' + opt_config['SERVER_HOSTNAME'] + '/api/v1/'; + Restangular.setBaseUrl(baseUrl); + } + + ApiService.scRegistryStatus(null, null, /* background */true) + .then(callback, errorHandler); }; return containerService; diff --git a/static/partials/super-user.html b/static/partials/super-user.html index d4c5df1f1..6933ad538 100644 --- a/static/partials/super-user.html +++ b/static/partials/super-user.html @@ -47,7 +47,7 @@
+ configuration-saved="configurationSaved(config)">