[ create a new paste ] login | about

Link: http://codepad.org/X6yrnQKM    [ raw code | fork ]

Python, pasted on Jul 15:
#!/usr/bin/env python

from circuits import handler, Event, Component
from circuits.web import redirect, Controller, Server, Sessions, Static

from jinja2 import Environment, FileSystemLoader


defaults = {
    "appname": "MyApp",
    "version": "0.0.1",
}


class render(Event):
    """render Event"""


class JinjaRenderer(Component):

    channel = "web"

    def init(self, env, defaults):
        self.env = env
        self.defaults = defaults

    def render(self, name, **data):
        context = self.defaults.copy()
        context.update(data)
        template = self.env.get_template("{0:s}.html".format(name))

        return template.render(**context)


class Root(Controller):

    def GET(self, view=None):
        return self.fire(render(view or "index", session=self.session), "web")


class Login(Controller):

    channel = "/login"

    def GET(self):
        return self.fire(render("login"), "web")

    def POST(self, username=None, password=None):
        if username == "admin" and password == "admin":
            self.session.update(active=True, username=username)

            return self.redirect("/")

        error = "Invalid Username or Password!"

        return self.fire(render("login", error=error), "web")


class Logout(Controller):

    channel = "/logout"

    def GET(self):
        return self.fire(render("logout"), "web")

    def POST(self):
        self.session.clear()

        return self.redirect("/login")


class LoginManager(Component):

    channel = "web"

    def init(self, login="/login", logout="/logout"):
        self.login = login
        self.logout = logout

        Login(self.login).register(self)
        Logout(self.logout).register(self)

    @handler("request", priority=0.2)
    def _on_request(self, event, req, res):
        if req.path == self.login:
            return

        if not req.session.get("active", False):
            event.stop()
            return redirect(req, res, self.login)


def main():
    app = Server(("0.0.0.0", 8000), secure=True, certfile="cert.pem")

    Root().register(app)
    Static(docroot="static").register(app)

    env = Environment(loader=FileSystemLoader("templates"))
    JinjaRenderer(env, defaults).register(app)

    Sessions().register(app)
    LoginManager().register(app)

    app.run()


if __name__ == "__main__":
    main()


Create a new paste based on this one


Comments: