Use full path when constructing "Other authentication methods"
[cascardo/ipsilon.git] / ipsilon / login / common.py
index 7cf0c2a..cd4f166 100644 (file)
@@ -85,7 +85,7 @@ class LoginManagerBase(ConfigHelper, PluginObject):
             trans.wipe()
         raise cherrypy.HTTPRedirect(redirect)
 
-    def auth_failed(self, trans):
+    def auth_failed(self, trans, message=None):
         # try with next module
         next_login = self.next_login()
         if next_login:
@@ -104,7 +104,7 @@ class LoginManagerBase(ConfigHelper, PluginObject):
         # destroy session and return error
         if 'login_return' not in transdata:
             session.logout(None)
-            raise cherrypy.HTTPError(401)
+            raise cherrypy.HTTPError(401, message)
 
         raise cherrypy.HTTPRedirect(transdata['login_return'])
 
@@ -184,7 +184,9 @@ class LoginFormBase(LoginPageBase):
         if other_login_stacks:
             other_stacks = list()
             for ls in other_login_stacks:
-                url = '%s?%s' % (ls.path, self.trans.get_GET_arg())
+                url = '%s/login/%s?%s' % (
+                    self.basepath, ls.path, self.trans.get_GET_arg()
+                )
                 name = ls.name
                 other_stacks.append({'url': url, 'name': name})
 
@@ -322,7 +324,7 @@ class LoginManagerInstaller(object):
         self.ptype = 'login'
         self.name = None
 
-    def unconfigure(self, opts):
+    def unconfigure(self, opts, changes):
         return
 
     def install_args(self, group):
@@ -331,7 +333,7 @@ class LoginManagerInstaller(object):
     def validate_args(self, args):
         return
 
-    def configure(self, opts):
+    def configure(self, opts, changes):
         raise NotImplementedError