From 91a621869229308f8a37d37c7e38f81725e0d58c Mon Sep 17 00:00:00 2001 From: adator85 <85586985+adator85@users.noreply.github.com> Date: Fri, 2 Feb 2024 22:52:06 +0100 Subject: [PATCH] Bug - Correction de la commande .code --- core/irc.py | 108 +++++++++++++++++++++++++++---------------- mods/mod_defender.py | 23 ++++++--- 2 files changed, 84 insertions(+), 47 deletions(-) diff --git a/core/irc.py b/core/irc.py index 5d69a15..545cc31 100644 --- a/core/irc.py +++ b/core/irc.py @@ -27,7 +27,7 @@ class Irc: self.commands_level = { 0: ['help', 'auth', 'copyright'], 1: ['load','reload','unload', 'deauth', 'uptime'], - 2: ['show_sessions','show_modules', 'show_timers', 'show_threads'], + 2: ['show_modules', 'show_timers', 'show_threads', 'sentinel'], 3: ['quit', 'restart','addaccess','editaccess', 'delaccess'] } @@ -348,6 +348,8 @@ class Irc: except ModuleNotFoundError as moduleNotFound: self.debug(f"MODULE_NOT_FOUND: {moduleNotFound}") self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :[ {self.Config.CONFIG_COLOR['rouge']}MODULE_NOT_FOUND{self.Config.CONFIG_COLOR['noire']} ]: {moduleNotFound}") + except: + self.debug(f"Something went wrong with a module you want to load") def insert_db_uid(self, uid:str, nickname:str, username:str, hostname:str, umodes:str, vhost:str, isWebirc: bool) -> None: @@ -739,6 +741,9 @@ class Irc: self.insert_db_uid(uid, nickname, username, hostname, umodes, vhost, isWebirc) + for classe_name, classe_object in self.loaded_classes.items(): + classe_object.cmd(cmd_to_send) + case 'PRIVMSG': try: # Supprimer la premiere valeur @@ -810,9 +815,10 @@ class Irc: case _: pass - # Envoyer la commande aux classes dynamiquement chargées - for classe_name, classe_object in self.loaded_classes.items(): - classe_object.cmd(cmd_to_send) + if cmd[2] != 'UID': + # Envoyer la commande aux classes dynamiquement chargées + for classe_name, classe_object in self.loaded_classes.items(): + classe_object.cmd(cmd_to_send) except IndexError as ie: self.debug(f"IRC CMD -> IndexError : {ie} - {cmd} - length {str(len(cmd))}") @@ -1023,37 +1029,12 @@ class Irc: case 'unload': # unload mod_dktmb - module_name = str(cmd[1]).lower() # Le nom du module. exemple: mod_defender - class_name = module_name.split('_')[1].capitalize() # Nom de la class. exemple: Defender + try: + module_name = str(cmd[1]).lower() # Le nom du module. exemple: mod_defender + class_name = module_name.split('_')[1].capitalize() # Nom de la class. exemple: Defender - if class_name in self.loaded_classes: - - for level, command in self.loaded_classes[class_name].commands_level.items(): - # Supprimer la commande de la variable commands - for c in self.loaded_classes[class_name].commands_level[level]: - self.commands.remove(c) - self.commands_level[level].remove(c) - - del self.loaded_classes[class_name] - - # Supprimer le module de la base de données - self.Base.db_delete_module(module_name) - - self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} supprimé") - - case 'reload': - # reload mod_dktmb - module_name = str(cmd[1]).lower() # ==> mod_defender - class_name = module_name.split('_')[1].capitalize() # ==> Defender - - if 'mods.' + module_name in sys.modules: - self.debug('Module Already Loaded ... reload the module ...') - the_module = sys.modules['mods.' + module_name] - importlib.reload(the_module) - - # Supprimer la class déja instancier if class_name in self.loaded_classes: - # Supprimer les commandes déclarer dans la classe + for level, command in self.loaded_classes[class_name].commands_level.items(): # Supprimer la commande de la variable commands for c in self.loaded_classes[class_name].commands_level[level]: @@ -1062,14 +1043,45 @@ class Irc: del self.loaded_classes[class_name] - my_class = getattr(the_module, class_name, None) - new_instance = my_class(self.ircObject) - self.loaded_classes[class_name] = new_instance + # Supprimer le module de la base de données + self.Base.db_delete_module(module_name) - self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} rechargé") - return False - else: - self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} n'est pas chargé !") + self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} supprimé") + except: + self.debug(f"Something went wrong with a module you want to load") + + case 'reload': + # reload mod_dktmb + try: + module_name = str(cmd[1]).lower() # ==> mod_defender + class_name = module_name.split('_')[1].capitalize() # ==> Defender + + if 'mods.' + module_name in sys.modules: + self.debug('Module Already Loaded ... reload the module ...') + the_module = sys.modules['mods.' + module_name] + importlib.reload(the_module) + + # Supprimer la class déja instancier + if class_name in self.loaded_classes: + # Supprimer les commandes déclarer dans la classe + for level, command in self.loaded_classes[class_name].commands_level.items(): + # Supprimer la commande de la variable commands + for c in self.loaded_classes[class_name].commands_level[level]: + self.commands.remove(c) + self.commands_level[level].remove(c) + + del self.loaded_classes[class_name] + + my_class = getattr(the_module, class_name, None) + new_instance = my_class(self.ircObject) + self.loaded_classes[class_name] = new_instance + + self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} rechargé") + return False + else: + self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} n'est pas chargé !") + except: + self.debug(f"Something went wrong with a module you want to reload") case 'quit': try: @@ -1142,5 +1154,21 @@ class Irc: case 'copyright': self.send2socket(f':{dnickname} NOTICE {fromuser} : # Defender V.{self.Config.DEFENDER_VERSION} Developped by adator® and dktmb® #') + case 'sentinel': + # .sentinel on + activation = str(cmd[1]).lower() + service_id = self.Config.SERVICE_ID + + channel_to_dont_quit = [self.Config.SALON_JAIL, dchanlog] + + if activation == 'on': + for chan in self.db_chan: + if not chan in channel_to_dont_quit: + self.send2socket(f":{service_id} JOIN {chan}") + if activation == 'off': + for chan in self.db_chan: + if not chan in channel_to_dont_quit: + self.send2socket(f":{service_id} PART {chan}") + case _: pass diff --git a/mods/mod_defender.py b/mods/mod_defender.py index cf38645..72d0338 100644 --- a/mods/mod_defender.py +++ b/mods/mod_defender.py @@ -773,7 +773,6 @@ class Defender(): command = str(cmd[0]).lower() fromuser = user - # print(command) dnickname = self.Config.SERVICE_NICKNAME # Defender nickname dchanlog = self.Config.SERVICE_CHANLOG # Defender chan log @@ -810,6 +809,10 @@ class Defender(): release_code = cmd[1] jailed_nickname = self.Irc.get_nickname(fromuser) jailed_UID = self.Irc.get_uid(fromuser) + if not jailed_UID in self.db_reputation: + self.Irc.send2socket(f":{dnickname} NOTICE {fromuser} : No code is requested ...") + return False + jailed_IP = self.db_reputation[jailed_UID]['ip'] jailed_salon = self.Config.SALON_JAIL reputation_seuil = self.defConfig['reputation_seuil'] @@ -846,8 +849,11 @@ class Defender(): except IndexError: self.Irc.debug('_hcmd code: out of index') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : Right command : /msg {dnickname} code [code]') + except KeyError as ke: + self.Irc.debug(f'_hcmd code: KeyError {ke}') + # self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : Right command : /msg {dnickname} code [code]') pass - pass + case 'reputation': # .reputation [on/off] --> activate or deactivate reputation system @@ -1076,16 +1082,19 @@ class Defender(): self.Irc.debug(f"{self.__class__.__name__} Value Error : {ve}") case 'status': + color_green = self.Config.CONFIG_COLOR['verte'] + color_red = self.Config.CONFIG_COLOR['rouge'] + color_black = self.Config.CONFIG_COLOR['noire'] try: - self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : Reputation ==> {self.defConfig["reputation"]}') + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : [{color_green if self.defConfig["reputation"] == 1 else color_red}Reputation{color_black}] ==> {self.defConfig["reputation"]}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : reputation_seuil ==> {self.defConfig["reputation_seuil"]}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : reputation_ban_all_chan ==> {self.defConfig["reputation_ban_all_chan"]}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : reputation_timer ==> {self.defConfig["reputation_timer"]}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : [Proxy_scan]') - self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : local_scan ==> {self.defConfig["local_scan"]}') - self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : psutil_scan ==> {self.defConfig["psutil_scan"]}') - self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : abuseipdb_scan ==> {self.defConfig["abuseipdb_scan"]}') - self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : Flood ==> {self.defConfig["flood"]}') + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : {color_green if self.defConfig["local_scan"] == 1 else color_red}local_scan{color_black} ==> {self.defConfig["local_scan"]}') + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : {color_green if self.defConfig["psutil_scan"] == 1 else color_red}psutil_scan{color_black} ==> {self.defConfig["psutil_scan"]}') + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : {color_green if self.defConfig["abuseipdb_scan"] == 1 else color_red}abuseipdb_scan{color_black} ==> {self.defConfig["abuseipdb_scan"]}') + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : [{color_green if self.defConfig["flood"] == 1 else color_red}Flood{color_black}] ==> {self.defConfig["flood"]}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : flood_action ==> Coming soon') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : flood_message ==> {self.defConfig["flood_message"]}') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : flood_time ==> {self.defConfig["flood_time"]}')