summaryrefslogtreecommitdiff
path: root/modules/installed/lib/auth_page.py
diff options
context:
space:
mode:
Diffstat (limited to 'modules/installed/lib/auth_page.py')
-rw-r--r--modules/installed/lib/auth_page.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/modules/installed/lib/auth_page.py b/modules/installed/lib/auth_page.py
new file mode 100644
index 0000000..6525dc6
--- /dev/null
+++ b/modules/installed/lib/auth_page.py
@@ -0,0 +1,49 @@
+import cherrypy
+import cfg
+from plugin_mount import PagePlugin
+from modules.forms import Form
+from auth import *
+# Controller to provide login and logout actions
+
+class AuthController(PagePlugin):
+ def __init__(self, *args, **kwargs):
+ PagePlugin.__init__(self, *args, **kwargs)
+ self.register_page("auth")
+
+ def on_login(self, username):
+ """Called on successful login"""
+
+ def on_logout(self, username):
+ """Called on logout"""
+
+ def get_loginform(self, username, msg='', from_page="/"):
+ form = Form(title="Login", action="/auth/login", message=msg)
+ form.text_input(name="from_page", value=from_page, type="hidden")
+ form.text_input("Username", name="username", value=username)
+ form.text_input("Passphrase", name="passphrase", type="password")
+ form.submit(label="Login")
+
+ return self.fill_template(main=form.render(), sidebar_right=" ")
+
+ @cherrypy.expose
+ def login(self, username=None, passphrase=None, from_page="/", **kwargs):
+ if username is None or passphrase is None:
+ return self.get_loginform("", from_page=from_page)
+
+ error_msg = check_credentials(username, passphrase)
+ if error_msg:
+ return self.get_loginform(username, error_msg, from_page)
+ else:
+ cherrypy.session[cfg.session_key] = cherrypy.request.login = username
+ self.on_login(username)
+ raise cherrypy.HTTPRedirect(from_page or "/")
+
+ @cherrypy.expose
+ def logout(self, from_page="/"):
+ sess = cherrypy.session
+ username = sess.get(cfg.session_key, None)
+ sess[cfg.session_key] = None
+ if username:
+ cherrypy.request.login = None
+ self.on_logout(username)
+ raise cherrypy.HTTPRedirect(from_page or "/")