Repository: ipython/ipython

Issue:
password cannot be used with url prefix
Originally brought up on the list, but making an Issue so we don't forget.

When IPython is re-routed behind a prefix (e.g. /ipython/), the login url is hardcoded, and will always fail, so if you are using a prefix, you cannot also use a password.



Discussion:

Resolving patch:
diff --git a/IPython/frontend/html/notebook/handlers.py b/IPython/frontend/html/notebook/handlers.py
--- a/IPython/frontend/html/notebook/handlers.py
+++ b/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):
diff --git a/IPython/frontend/html/notebook/notebookapp.py b/IPython/frontend/html/notebook/notebookapp.py
--- a/IPython/frontend/html/notebook/notebookapp.py
+++ b/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:


Test patch: