class Main(object): """ TODO: Doku """ def __init__(self, debug: bool = False) -> None: self.cfg = Config(CONFIG_PATH) loglevel = self.cfg.get_value("LOG", "level") to_stdout = self.cfg.get_value("LOG", "to_stdout") to_files = self.cfg.get_value("LOG", "to_files") logpath = self.cfg.get_value("LOG", "filepath") logfile = self.cfg.get_value("LOG", "filename") self.log = Log(str(loglevel), bool(to_stdout), bool(to_files), str(logpath), str(logfile)) self.login_attempts = self.cfg.get_value("WEB", "login_attempts") self.login_bantime = self.cfg.get_value("WEB", "login_bantime") self.ip_ban = IpBan(app=APP, ban_count=self.login_attempts, ban_seconds=self.login_bantime, ipc=True) self.ip_ban.url_pattern_add('^/static.*$', match_type='regex') info("starting easywall-web") self.rules_handler = RulesHandler() self.rules_handler.ensure_files_exist() if debug is True: port = self.cfg.get_value("WEB", "bindport") host = self.cfg.get_value("WEB", "bindip") APP.config.from_object('easywall_web.__main__.DevelopmentConfig') APP.run(str(host), str(port)) else: APP.config.from_object('easywall_web.__main__.ProductionConfig')
class Main(object): """ TODO: Doku """ def __init__(self, debug: bool = False) -> None: self.cfg = Config(CONFIG_PATH) loglevel = self.cfg.get_value("LOG", "level") to_stdout = self.cfg.get_value("LOG", "to_stdout") to_files = self.cfg.get_value("LOG", "to_files") logpath = self.cfg.get_value("LOG", "filepath") logfile = self.cfg.get_value("LOG", "filename") self.log = Log(str(loglevel), bool(to_stdout), bool(to_files), str(logpath), str(logfile)) info("starting easywall-web") self.is_first_run = not folder_exists("rules") self.rules_handler = RulesHandler() if self.is_first_run: self.rules_handler.ensure_files_exist() if debug is True: port = self.cfg.get_value("WEB", "bindport") host = self.cfg.get_value("WEB", "bindip") APP.config.from_object('easywall_web.__main__.DevelopmentConfig') APP.run(str(host), str(port)) else: APP.config.from_object('easywall_web.__main__.ProductionConfig')
class Main(object): """ TODO: Doku """ def __init__(self) -> None: self.cfg = Config(CONFIG_PATH) loglevel = self.cfg.get_value("LOG", "level") to_stdout = self.cfg.get_value("LOG", "to_stdout") to_files = self.cfg.get_value("LOG", "to_files") logpath = self.cfg.get_value("LOG", "filepath") logfile = self.cfg.get_value("LOG", "filename") self.log = Log(str(loglevel), bool(to_stdout), bool(to_files), str(logpath), str(logfile)) info("starting easywall") self.rules_handler = RulesHandler() self.rules_handler.ensure_files_exist() self.easywall = Easywall(self.cfg) self.event_handler = ModifiedHandler(self.apply) self.observer = Observer() self.stop_flag = False info("easywall has been started") def apply(self, filename: str) -> None: """ TODO: Doku """ info("starting apply process from easywall") delete_file_if_exists(filename) self.easywall.apply() def start_observer(self) -> None: """ this function is called to keep the main process running if someone is pressing ctrl + C the software will initiate the stop process """ self.observer.schedule(self.event_handler, ".") self.observer.start() try: while not self.stop_flag: sleep(2) except KeyboardInterrupt: info("KeyboardInterrupt received, starting shutdown") finally: self.shutdown() def shutdown(self) -> None: """ the function stops all threads and shuts the software down gracefully """ info("starting shutdown") self.observer.stop() delete_file_if_exists(".acceptance") self.observer.join() info("shutdown completed") self.log.close_logging()
class TestRulesHandler(unittest.TestCase): """ TODO: Doku """ def setUp(self) -> None: self.rules = RulesHandler() self.rules.ensure_files_exist() def test_firstrun(self) -> None: """ TODO: Doku """ self.rules.ensure_files_exist() def test_get_current_rules(self) -> None: """ TODO: Doku """ write_into_file("{}/current/tcp".format(self.rules.rulesfolder), """80 443 """) self.assertEqual(self.rules.get_current_rules("tcp"), ["80", "443"]) def test_get_new_rules(self) -> None: """ TODO: Doku """ write_into_file("{}/new/tcp".format(self.rules.rulesfolder), """80 443 """) self.assertEqual(self.rules.get_new_rules("tcp"), ["80", "443"]) def test_backup_current_rules(self) -> None: """ TODO: Doku """ write_into_file("{}/current/tcp".format(self.rules.rulesfolder), """80 443 """) write_into_file("{}/backup/tcp".format(self.rules.rulesfolder), "") self.rules.backup_current_rules() self.assertEqual(file_get_contents("{}/backup/tcp".format(self.rules.rulesfolder)), """80 443 """) def test_apply_new_rules(self) -> None: """ TODO: Doku """ write_into_file("{}/new/tcp".format(self.rules.rulesfolder), """80 443 """) write_into_file("{}/current/tcp".format(self.rules.rulesfolder), "") self.assertEqual(self.rules.get_current_rules("tcp"), []) self.rules.apply_new_rules() self.assertEqual(self.rules.get_current_rules("tcp"), ["80", "443"]) def test_rollback_from_backup(self) -> None: """ TODO: Doku """ write_into_file("{}/backup/tcp".format(self.rules.rulesfolder), """80 443 """) write_into_file("{}/current/tcp".format(self.rules.rulesfolder), "") self.assertEqual(self.rules.get_current_rules("tcp"), []) self.rules.rollback_from_backup() self.assertEqual(self.rules.get_current_rules("tcp"), ["80", "443"]) def test_get_rules_for_web(self) -> None: """ TODO: Doku """ write_into_file("{}/current/tcp".format(self.rules.rulesfolder), """80 443 """) self.assertEqual(self.rules.get_rules_for_web("tcp"), ["80", "443"]) write_into_file("{}/new/tcp".format(self.rules.rulesfolder), """80 443 8080 """) self.assertEqual(self.rules.get_rules_for_web("tcp"), ["80", "443", "8080"]) def test_save_new_rules(self) -> None: """ TODO: Doku """ self.rules.save_new_rules("tcp", ["80", "443"]) self.assertEqual(file_get_contents("{}/new/tcp".format(self.rules.rulesfolder)), "80\n443")