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)
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 __init__(self): Holes.__init__(self, firewall=None) self.test_expired = [] self.test_now = 0