コード例 #1
0
ファイル: firewall.py プロジェクト: alessandrod/cattivo
class Firewall(Loggable):
    def __init__(self, bouncer_address, bouncer_port, clientList):
        Loggable.__init__(self)
        self.clientList = clientList
        self.systemFirewall = IPTablesFirewall(bouncer_address, bouncer_port)
        self.holes = Holes(self.systemFirewall)

    def initialize(self):
        self.holes.removeAll()
        dfr = self.systemFirewall.initialize()
        dfr.addCallback(self._systemFirewallInitializeCb)

        return dfr

    def clean(self):
        self.holes.removeAll()
        dfr = self.systemFirewall.clean()

        return dfr

    def _systemFirewallInitializeCb(self, result):
        dfr = self.clientList.getClientList()
        dfr.addCallback(self._getClientListCb)

        return dfr

    def _getClientListCb(self, client_list):
        for client_status in client_list:
            self._addClientHole(client_status)

        return defer.succeed(True)

    def clientAllowed(self, client_id):
        self.debug("checking if %s is allowed" % str(client_id))

        try:
            hole = self.holes.find(client_id)
            return defer.succeed(True)
        except HoleError:
            pass
        else:
            # this should NEVER happen
            self.warning("existing hole for %s isn't really working"
                    % str(client_id))
            return defer.succeed(False)

        dfr = self.clientList.getClient(client_id)
        dfr.addCallback(self._getClientCb)
        dfr.addErrback(self._getClientEb)

        return dfr

    def removeClient(self, client_id):
        try:
            self.holes.remove(client_id)
        except HoleError:
            return False

        return True

    def _addClientHole(self, client_status):
        client_id = client_status['client_id']
        login_time = client_status['login_time']
        expiration = client_status['expiration']
        if expiration > 0:
            time_left = expiration - (self.holes.now() - login_time)
            if time_left > 0:
                hole = Hole(client_id, time_left)
                self.holes.add(hole)
                return True

        return False

    def _getClientCb(self, client_status):
        res = self._addClientHole(client_status)

        return defer.succeed(res)

    def _getClientEb(self, failure):
        self.warning("get client failed: %s " % getFailureMessage(failure))

        return defer.succeed(False)
コード例 #2
0
ファイル: firewall.py プロジェクト: alessandrod/cattivo
 def __init__(self, bouncer_address, bouncer_port, clientList):
     Loggable.__init__(self)
     self.clientList = clientList
     self.systemFirewall = IPTablesFirewall(bouncer_address, bouncer_port)
     self.holes = Holes(self.systemFirewall)
コード例 #3
0
ファイル: test_holes.py プロジェクト: alessandrod/cattivo
 def __init__(self):
     Holes.__init__(self, firewall=None)
     self.test_expired = []
     self.test_now = 0