Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

allows password and prefix for notebook #2073

Merged
merged 2 commits into from

3 participants

@Carreau
Owner

fixes #1997

@minrk
Owner

In the HTML, base_project_url should be used, not simply replacing '/' by ''.

@Carreau
Owner

done.

@ellisonbg
Owner

Was this feature just broken before?

@minrk
Owner

@ellisonbg yes, it has always been impossible to use url prefix and a password.

@Carreau
Owner

You were not able to use both as the same time (at least not easily), you were redirected to the page without prefix, raising a 404.

@Carreau
Owner

Is anybody against merging this ?
I'll merge in 24h+ is there is no objections.

@ellisonbg
Owner

I'm Ok with this merging.

@minrk
Owner

looks good to me.

@Carreau
Owner

Ok, let's not wait and merge then.

@Carreau Carreau merged commit 93c6c0f into from
@Carreau Carreau referenced this pull request from a commit in Carreau/ipython
@Carreau Carreau allows both password and prefix for notebook
fixes #1997

backported to 0.13.1 from PR #2073
f089018
@minrk minrk referenced this pull request from a commit
Commit has since been removed from the repository and is no longer available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jul 1, 2012
  1. @Carreau
  2. @Carreau
This page is out of date. Refresh to see the latest.
View
6 IPython/frontend/html/notebook/handlers.py
@@ -208,7 +208,7 @@ class LoginHandler(AuthenticatedHandler):
def _render(self, message=None):
self.render('login.html',
- next=self.get_argument('next', default='/'),
+ next=self.get_argument('next', default=self.application.ipython_app.base_project_url),
read_only=self.read_only,
logged_in=self.logged_in,
login_available=self.login_available,
@@ -218,7 +218,7 @@ def _render(self, message=None):
def get(self):
if self.current_user:
- self.redirect(self.get_argument('next', default='/'))
+ self.redirect(self.get_argument('next', default=self.application.ipython_app.base_project_url))
else:
self._render()
@@ -231,7 +231,7 @@ def post(self):
self._render(message={'error': 'Invalid password'})
return
- self.redirect(self.get_argument('next', default='/'))
+ self.redirect(self.get_argument('next', default=self.application.ipython_app.base_project_url))
class LogoutHandler(AuthenticatedHandler):
View
19 IPython/frontend/html/notebook/notebookapp.py
@@ -140,15 +140,6 @@ def __init__(self, ipython_app, kernel_manager, notebook_manager,
(r"/clusters/%s/%s" % (_profile_regex, _cluster_action_regex), ClusterActionHandler),
(r"/clusters/%s" % _profile_regex, ClusterProfileHandler),
]
- settings = dict(
- template_path=os.path.join(os.path.dirname(__file__), "templates"),
- static_path=os.path.join(os.path.dirname(__file__), "static"),
- cookie_secret=os.urandom(1024),
- login_url="/login",
- )
-
- # allow custom overrides for the tornado web app.
- settings.update(settings_overrides)
# Python < 2.6.5 doesn't accept unicode keys in f(**kwargs), and
# base_project_url will always be unicode, which will in turn
@@ -160,6 +151,16 @@ def __init__(self, ipython_app, kernel_manager, notebook_manager,
# and thus guaranteed to be ASCII: 'héllo' is really 'h%C3%A9llo'.
base_project_url = py3compat.unicode_to_str(base_project_url, 'ascii')
+ settings = dict(
+ template_path=os.path.join(os.path.dirname(__file__), "templates"),
+ static_path=os.path.join(os.path.dirname(__file__), "static"),
+ cookie_secret=os.urandom(1024),
+ login_url="%s/login"%(base_project_url.rstrip('/')),
+ )
+
+ # allow custom overrides for the tornado web app.
+ settings.update(settings_overrides)
+
# prepend base_project_url onto the patterns that we match
new_handlers = []
for handler in handlers:
View
5 IPython/frontend/html/notebook/static/js/loginwidget.js
@@ -10,6 +10,7 @@
//============================================================================
var IPython = (function (IPython) {
+ var base_url = $('body').data('baseProjectUrl');
var LoginWidget = function (selector) {
this.selector = selector;
@@ -29,10 +30,10 @@ var IPython = (function (IPython) {
LoginWidget.prototype.bind_events = function () {
var that = this;
this.element.find("button#logout").click(function () {
- window.location = "/logout";
+ window.location = base_url+"logout";
});
this.element.find("button#login").click(function () {
- window.location = "/login";
+ window.location = base_url+"login";
});
};
View
2  IPython/frontend/html/notebook/templates/login.html
@@ -16,7 +16,7 @@
<div id="main_app">
{% if login_available %}
- <form action="/login?next={{url_escape(next)}}" method="post">
+ <form action="{{base_project_url}}login?next={{url_escape(next)}}" method="post">
Password: <input type="password" class='ui-widget ui-widget-content' name="password" id="password_input">
<input type="submit" value="Log in" id="login_submit">
</form>
View
4 IPython/frontend/html/notebook/templates/logout.html
@@ -23,9 +23,9 @@
{% end %}
{% if read_only or not login_available %}
- Proceed to the <a href="/">dashboard</a>.
+ Proceed to the <a href="{{base_project_url}}">dashboard</a>.
{% else %}
- Proceed to the <a href="/login">login page</a>.
+ Proceed to the <a href="{{base_project_url}}login">login page</a>.
{% end %}
Something went wrong with that request. Please try again.