mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
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 "/")
|