render login form at root

- redirect to server, if running (hub home, otherwise)
This commit is contained in:
Min RK
2015-03-21 19:50:57 -04:00
parent cffdf89327
commit 24fd843c3c
5 changed files with 34 additions and 37 deletions

View File

@@ -19,23 +19,27 @@ class LogoutHandler(BaseHandler):
class LoginHandler(BaseHandler): class LoginHandler(BaseHandler):
"""Render the login page.""" """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', return self.render_template('login.html',
next=url_escape(self.get_argument('next', default='')), next=url_escape(self.get_argument('next', default='')),
username=username, username=username,
message=message, login_error=login_error,
custom_html=self.authenticator.custom_html, custom_login_form=self.authenticator.custom_html,
) )
def get(self): def get(self):
next_url = self.get_argument('next', False) 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 # set new login cookie
# because single-user cookie may have been cleared or incorrect # because single-user cookie may have been cleared or incorrect
self.set_login_cookie(self.get_current_user()) self.set_login_cookie(self.get_current_user())
self.redirect(next_url, permanent=False) 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: else:
username = self.get_argument('username', default='') username = self.get_argument('username', default='')
self.finish(self._render(username=username)) self.finish(self._render(username=username))
@@ -63,7 +67,7 @@ class LoginHandler(BaseHandler):
else: else:
self.log.debug("Failed login for %s", username) self.log.debug("Failed login for %s", username)
html = self._render( html = self._render(
message={'error': 'Invalid username or password'}, login_error='Invalid username or password',
username=username, username=username,
) )
self.finish(html) self.finish(html)

View File

@@ -13,19 +13,25 @@ from .base import BaseHandler
class RootHandler(BaseHandler): class RootHandler(BaseHandler):
"""Render the Hub root page. """Render the Hub root page.
Currently redirects to home if logged in, If logged in, redirects to:
shows big fat login button otherwise.
- single-user server if running
- hub home, otherwise
Otherwise, renders login page.
""" """
def get(self): def get(self):
if self.get_current_user(): user = self.get_current_user()
self.redirect( if user:
url_path_join(self.hub.server.base_url, 'home'), if user.running:
permanent=False, url = user.server.base_url
) else:
url = url_path_join(self.hub.server.base_url, 'home')
self.redirect(url, permanent=False)
return return
html = self.render_template('login.html',
html = self.render_template('index.html',
login_url=self.settings['login_url'], login_url=self.settings['login_url'],
custom_html=self.authenticator.custom_html,
) )
self.finish(html) self.finish(html)

View File

@@ -24,7 +24,7 @@
outline-color: @jupyter-orange; outline-color: @jupyter-orange;
} }
.message { .login_error {
color: orangered; color: orangered;
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;

View File

@@ -1,16 +0,0 @@
{% extends "page.html" %}
{% block login_widget %}
{% endblock %}
{% block main %}
<div class="container">
<div class="row">
<div class="text-center">
<a id="login" class="btn btn-lg btn-primary" href="{{login_url}}">Log in</a>
</div>
</div>
</div>
{% endblock %}

View File

@@ -5,18 +5,19 @@
{% block main %} {% block main %}
{% block login %}
<div id="login-main" class="container"> <div id="login-main" class="container">
{% if custom_html %} {% if custom_html %}
{{custom_html}} {{ custom_html }}
{% else %} {% else %}
<form action="{{login_url}}?next={{next}}" method="post" role="form"> <form action="{{login_url}}?next={{next}}" method="post" role="form">
<div class="auth-form-header"> <div class="auth-form-header">
Sign in Sign in
</div> </div>
<div class='auth-form-body'> <div class='auth-form-body'>
{% if message %} {% if login_error %}
<p class="message"> <p class="login_error">
{{message.error}} {{login_error}}
</p> </p>
{% endif %} {% endif %}
<label for="username_input">Username:</label> <label for="username_input">Username:</label>
@@ -50,7 +51,9 @@
</div> </div>
</form> </form>
{% endif %} {% endif %}
{% endif %}
</div> </div>
{% endblock login %}
{% endblock %} {% endblock %}