#!/usr/bin/env python
from circuits import Component, Debugger, handler
from circuits.web import Controller, Server
from circuits.web.errors import forbidden


class ACL(Component):
    allowed = ['127.0.0.1']

    @handler('request', priority=1.0)
    def on_request(self, event, request, response):
        """
        Filter Requests applying IP based Authorization

        Filter any incoming requests at a higher priority than the
        default dispatcher and apply IP based Authorization returning
        a 403 Forbidden response if the Remote IP Address does not
        match the allowed set.
        """
        if request.remote.ip not in self.allowed:
            event.stop()
            return forbidden(request, response)
        return None


class Root(Controller):
    def index(self):
        return 'Hello World!'


app = Server(('0.0.0.0', 8000))
ACL().register(app)
Root().register(app)
Debugger().register(app)
app.run()
