diff --git a/jupyterhub/handlers/login.py b/jupyterhub/handlers/login.py index ceb86a34..bc1c2ca9 100644 --- a/jupyterhub/handlers/login.py +++ b/jupyterhub/handlers/login.py @@ -19,23 +19,27 @@ class LogoutHandler(BaseHandler): class LoginHandler(BaseHandler): """Render the login page.""" - def _render(self, message=None, username=None): + def _render(self, login_error=None, username=None): return self.render_template('login.html', next=url_escape(self.get_argument('next', default='')), username=username, - message=message, - custom_html=self.authenticator.custom_html, + login_error=login_error, + custom_login_form=self.authenticator.custom_html, ) def get(self): next_url = self.get_argument('next', False) - if next_url and self.get_current_user(): + user = self.get_current_user() + if user: + if not next_url: + if user.running: + next_url = user.server.base_url + else: + next_url = self.hub.server.base_url # set new login cookie # because single-user cookie may have been cleared or incorrect self.set_login_cookie(self.get_current_user()) self.redirect(next_url, permanent=False) - elif not next_url and self.get_current_user(): - self.redirect(self.hub.server.base_url, permanent=False) else: username = self.get_argument('username', default='') self.finish(self._render(username=username)) @@ -63,7 +67,7 @@ class LoginHandler(BaseHandler): else: self.log.debug("Failed login for %s", username) html = self._render( - message={'error': 'Invalid username or password'}, + login_error='Invalid username or password', username=username, ) self.finish(html) diff --git a/jupyterhub/handlers/pages.py b/jupyterhub/handlers/pages.py index 72ee223c..a8bd58c0 100644 --- a/jupyterhub/handlers/pages.py +++ b/jupyterhub/handlers/pages.py @@ -13,19 +13,25 @@ from .base import BaseHandler class RootHandler(BaseHandler): """Render the Hub root page. - Currently redirects to home if logged in, - shows big fat login button otherwise. + If logged in, redirects to: + + - single-user server if running + - hub home, otherwise + + Otherwise, renders login page. """ def get(self): - if self.get_current_user(): - self.redirect( - url_path_join(self.hub.server.base_url, 'home'), - permanent=False, - ) + user = self.get_current_user() + if user: + if user.running: + url = user.server.base_url + else: + url = url_path_join(self.hub.server.base_url, 'home') + self.redirect(url, permanent=False) return - - html = self.render_template('index.html', + html = self.render_template('login.html', login_url=self.settings['login_url'], + custom_html=self.authenticator.custom_html, ) self.finish(html) diff --git a/share/jupyter/hub/static/less/login.less b/share/jupyter/hub/static/less/login.less index 7ef883fe..71ff1f6a 100644 --- a/share/jupyter/hub/static/less/login.less +++ b/share/jupyter/hub/static/less/login.less @@ -24,7 +24,7 @@ outline-color: @jupyter-orange; } - .message { + .login_error { color: orangered; font-weight: bold; text-align: center; diff --git a/share/jupyter/hub/templates/index.html b/share/jupyter/hub/templates/index.html deleted file mode 100644 index 49e3888a..00000000 --- a/share/jupyter/hub/templates/index.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "page.html" %} - -{% block login_widget %} -{% endblock %} - -{% block main %} - -
-
-
- Log in -
-
-
- -{% endblock %} diff --git a/share/jupyter/hub/templates/login.html b/share/jupyter/hub/templates/login.html index f4d40384..636727c7 100644 --- a/share/jupyter/hub/templates/login.html +++ b/share/jupyter/hub/templates/login.html @@ -5,18 +5,19 @@ {% block main %} +{% block login %}
{% if custom_html %} -{{custom_html}} +{{ custom_html }} {% else %}
Sign in
- {% if message %} -

- {{message.error}} + {% if login_error %} +

{% endif %} @@ -50,7 +51,9 @@
{% endif %} +{% endif %}
+{% endblock login %} {% endblock %}