def expire_sessions(self): """ Expires sessions. """ db = self.client.pycaptive.Sessions time_now = datetime.now() expired_sessions = [] try: sessions = db.find().distinct("ExpireTime") for session in sessions: data = db.find_one({"ExpireTime": session}, { "IpAddress": 1, "UserName": 1, "_id": 0 }) ip = data["IpAddress"] if session < time_now: db.delete_one({"ExpireTime": session}) expired_sessions.append(ip) log.info('%s %s %s %s', "mongodb", "expire_sessions", "OK", data) self.client.close() return expired_sessions except Exception as e: log.critical('%s %s %s', "mongodb", "expire_sessions", "EXCEPTION") log.critical('%s', e) return e
def login(self, username, password): """ Validating username and password for login. """ db = self.client.pycaptive.Users ts = datetime.now() try: hash_pass = db.find_one({"UserName": username}, { "Password": 1, "_id": 0 }) self.client.close() if hash_pass is not None: db_hash = hash_pass["Password"] new_hash = bcrypt.hashpw(password.encode("utf-8"), db_hash) if db_hash == new_hash: log.info('%s %s %s %s', "mongodb", "login", "OK", username) return 0 else: log.error('%s %s %s %s %s', "mongodb", "login", "NOK", username, "WRONG_PASS") return 2 else: log.error('%s %s %s %s %s', "mongodb", "login", "NOK", username, "NOT_FOUND") return 1 except Exception as e: log.critical('%s %s %s %s', "mongodb", "login", "EXCEPTION", username) log.critical('%s', e) return e
def add_rule(self, ip): """ Allowing Internet access to an IP address Parameters ---------- ip : string IP address provided via client request to PyCaptive. Returns ------- integer if 0: rule successfully deleted else: error while processing command """ rule = [ IPTABLES, "-t", TABLE, "-I", CHAIN, "-i", LAN, "-s", ip, "-m", "comment", "--comment", COMMENT, "-j", JUMP ] try: result = sp.call(rule) if result == 0: log.info('%s %s %s %s', "iptables", "add_rule", "OK", ip) else: log.error('%s %s %s %s', "iptables", "add_rule", "NOK", ip) return result except Exception as e: log.critical('%s %s %s %s', "iptables", "add_rule", "EXCEPTION", ip) log.critical('%s', e) return e
def main(config): """Console script for app.""" log.info("Started Kr15 Gtk App") log.info("app.cli.main") try: pass main_function(config) except Exception as e: log.critical(str(e)) return 1 return 0
def emit(self, event_name, *args, **kwargs): log.debug("Run for: " + event_name) receivers = self.receivers.get(event_name, None) if receivers is None: return False try: # TODO: add async [callback(*args, **kwargs) for callback in receivers] except Exception as e: log.critical(str(e)) raise e return True
def del_rules(self, ips): """ Deleting rules that grant Internet access to a list of IPs and destroying connections established for such IPs. See del_conntrack() for more info. Parameters ---------- ips : list IP addressess provided via scheduler (APScheduler). Returns ------- integer Number of deleted rules. """ try: rules = 0 for ip in ips: # deleting rule rule = [ IPTABLES, "-t", TABLE, "-D", CHAIN, "-i", LAN, "-s", ip, "-m", "comment", "--comment", COMMENT, "-j", JUMP ] result = sp.call(rule) if result == 0: log.info('%s %s %s %s', "iptables", "del_rules", "OK", ip) rules += 1 else: log.error('%s %s %s %s', "iptables", "del_rules", "NOK", ip) # destroying connection result = self.del_conntrack(ip) if result == 0: log.info('%s %s %s %s', "del_rules", "OK", "CONNECTIONS_DESTROYED", ip) else: log.error('%s %s %s %s', "del_rules", "NOK", "CONNECTIONS_PERSISTING", ip) return rules except Exception as e: log.critical('%s %s %s', "iptables", "del_rule", "EXCEPTION") log.critical('%s', e) return e
def add_session(self, username, client_ip, user_data): """ Adding session. """ db = self.client.pycaptive.Sessions login_time = datetime.now() expire_time = login_time + timedelta(seconds=SESSION_DURATION) session_id = None try: session_id = db.insert({ "UserName": username, "IpAddress": client_ip, "UserData": user_data, "LoginTime": login_time, "ExpireTime": expire_time }) self.client.close() log.info('%s %s %s %s %s %s', "mongodb", "add_session", "OK", username, client_ip, user_data) return session_id except Exception as e: log.critical('%s %s %s', "mongodb", "add_session", "EXCEPTION") log.critical('%s', e) return e