summaryrefslogtreecommitdiff
path: root/modules/installed/lib/auth_page.py
blob: 6525dc6dc607011c8cef9a374d8110b808f9777f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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 "/")