From 290d7123fd1f91ecde8fed6922f2f7dd6f2a31a0 Mon Sep 17 00:00:00 2001 From: adator <85586985+adator85@users.noreply.github.com> Date: Thu, 22 Aug 2024 14:51:06 +0200 Subject: [PATCH] install.py and installation.py: Fix method to check python version irc.py: Do not log a user with different nickname, even if the password is correct --- README.md | 26 +++++++++++++------------- core/installation.py | 17 +++++++++++------ core/irc.py | 13 +++++++++---- install.py | 32 ++++++++++++++++++++++---------- 4 files changed, 55 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 5dee40c..92373d9 100644 --- a/README.md +++ b/README.md @@ -24,26 +24,26 @@ Il permet aux opérateurs de gérer efficacement un canal, tout en offrant aux u # Installation automatique sur une machine Debian/Ubuntu Prérequis: - - Système d'exploitation Linux (Windows non supporté) - - Droits d'administrateur (root) pour l'exécution du script - - Python version 3.10 ou supérieure + - Système d'exploitation Linux (Windows non supporté) + - Droits d'administrateur (root) pour l'exécution du script + - Python version 3.10 ou supérieure Bash - $ git clone https://github.com/adator85/IRC_DEFENDER_MODULES.git - - Renommer le fichier exemple_configuration.json en configuration.json - - Configurer le fichier configuration.json - $ sudo python3 install.py + $ git clone https://github.com/adator85/IRC_DEFENDER_MODULES.git + - Renommer le fichier exemple_configuration.json en configuration.json + - Configurer le fichier configuration.json + $ sudo python3 install.py Si votre configuration est bonne, votre service est censé etre connecté a votre réseau IRC # Installation manuelle: Bash - $ git clone https://github.com/adator85/IRC_DEFENDER_MODULES.git - $ cd IRC_DEFENDER_MODULES - $ python3 -m venv .pyenv - $ source .pyenv/bin/activate - - Créer un service nommé "Defender.service" pour votre service et placer le dans "/etc/systemd/system/" - $ sudo systemctl start Defender + $ git clone https://github.com/adator85/IRC_DEFENDER_MODULES.git + $ cd IRC_DEFENDER_MODULES + $ python3 -m venv .pyenv + $ source .pyenv/bin/activate + - Créer un service nommé "Defender.service" pour votre service et placer le dans "/etc/systemd/system/" + $ sudo systemctl start Defender # Configuration diff --git a/core/installation.py b/core/installation.py index e50b008..24e5076 100644 --- a/core/installation.py +++ b/core/installation.py @@ -1,6 +1,6 @@ from importlib.util import find_spec from subprocess import check_call, run, CalledProcessError -from platform import python_version +from platform import python_version, python_version_tuple from sys import exit import os @@ -28,14 +28,19 @@ class Install: Returns: bool: True si la version de python est autorisé sinon False """ - python_required_version = self.PYTHON_MIN_VERSION.split('.') - python_current_version = python_version().split('.') + # Current system version + sys_major, sys_minor, sys_patch = python_version_tuple() - if int(python_current_version[0]) < int(python_required_version[0]): + # min python version required + python_required_version = self.PYTHON_MIN_VERSION.split('.') + min_major, min_minor = tuple((python_required_version[0], python_required_version[1])) + + if int(sys_major) < int(min_major): print(f"## Your python version must be greather than or equal to {self.PYTHON_MIN_VERSION} ##") return False - elif int(python_current_version[1]) < int(python_required_version[1]): - print(f"### Your python version must be greather than or equal to {self.PYTHON_MIN_VERSION} ###") + + elif (int(sys_major) <= int(min_major)) and (int(sys_minor) < int(min_minor)): + print(f"## Your python version must be greather than or equal to {self.PYTHON_MIN_VERSION} ##") return False print(f"===> Version of python : {python_version()} ==> OK") diff --git a/core/irc.py b/core/irc.py index 22dc206..bc8af51 100644 --- a/core/irc.py +++ b/core/irc.py @@ -28,8 +28,8 @@ class Irc: # Liste des commandes internes du bot self.commands_level = { - 0: ['help', 'auth', 'copyright'], - 1: ['load','reload','unload', 'deauth', 'uptime', 'checkversion'], + 0: ['help', 'auth', 'copyright', 'uptime'], + 1: ['load','reload','unload', 'deauth', 'checkversion'], 2: ['show_modules', 'show_timers', 'show_threads', 'show_channels'], 3: ['quit', 'restart','addaccess','editaccess', 'delaccess'] } @@ -887,8 +887,8 @@ class Irc: def _hcmds(self, user: str, cmd:list, fullcmd: list = []) -> None: - fromuser = self.User.get_nickname(user) # Nickname qui a lancé la commande - uid = self.User.get_uid(fromuser) # Récuperer le uid de l'utilisateur + fromuser = self.User.get_nickname(user) # Nickname qui a lancé la commande + uid = self.User.get_uid(fromuser) # Récuperer le uid de l'utilisateur # Defender information dnickname = self.Config.SERVICE_NICKNAME # Defender nickname @@ -931,6 +931,11 @@ class Irc: user_to_log = self.User.get_nickname(cmd[1]) password = cmd[2] + if fromuser != user_to_log: + # If the current nickname is different from the nickname you want to log in with + self.send2socket(f":{self.Config.SERVICE_NICKNAME} NOTICE {fromuser} :Your current nickname is different from the nickname you want to log in with") + return False + if not user_to_log is None: mes_donnees = {'user': user_to_log, 'password': self.Base.crypt_password(password)} query = f"SELECT id, level FROM {self.Config.table_admin} WHERE user = :user AND password = :password" diff --git a/install.py b/install.py index a279768..6d18c22 100644 --- a/install.py +++ b/install.py @@ -1,8 +1,12 @@ from subprocess import check_call, run, CalledProcessError, PIPE -from platform import python_version +from platform import python_version, python_version_tuple, system from sys import exit -import os, logging, shutil, pwd +import os, logging, shutil +try: + import pwd +except ModuleNotFoundError as err: + print(err) class Install: @@ -16,6 +20,7 @@ class Install: self.venv_dependencies: list[str] = ['sqlalchemy','psutil','requests'] self.install_folder = os.getcwd() self.osname = os.name + self.system_name = system() self.cmd_linux_requirements: list[str] = ['apt', 'install', '-y', 'python3', 'python3-pip', 'python3-venv'] self.venv_pip_full_path = os.path.join(self.venv_name, f'bin{os.sep}pip') self.venv_python_full_path = os.path.join(self.venv_name, f'bin{os.sep}python') @@ -28,6 +33,7 @@ class Install: if self.osname == 'nt': print('/!\\ Windows OS is not supported by this automatic installation /!\\') self.Logs.critical('/!\\ Windows OS is not supported by this automatic install /!\\') + print(self.system_name) exit(5) if not self.is_root(): @@ -47,7 +53,7 @@ class Install: self.install_linux_dependencies() # Check python version - self.checkPythonVersion() + self.check_python_version() # Create systemd service file self.create_service_file() @@ -142,23 +148,29 @@ class Install: self.Logs.critical(f"Command failed :{e.returncode}") exit(5) - def checkPythonVersion(self) -> bool: + def check_python_version(self) -> bool: """Test si la version de python est autorisée ou non Returns: bool: True si la version de python est autorisé sinon False """ - python_required_version = self.python_min_version.split('.') - python_current_version = python_version().split('.') self.Logs.debug(f'The current python version is: {python_version()}') - if int(python_current_version[0]) < int(python_required_version[0]): - print(f"## Your python version must be greather than or equal to {self.python_min_version} ##") + # Current system version + sys_major, sys_minor, sys_patch = python_version_tuple() + + # min python version required + python_required_version = self.PYTHON_MIN_VERSION.split('.') + min_major, min_minor = tuple((python_required_version[0], python_required_version[1])) + + if int(sys_major) < int(min_major): + print(f"## Your python version must be greather than or equal to {self.PYTHON_MIN_VERSION} ##") self.Logs.critical(f'Your python version must be greather than or equal to {self.python_min_version}') return False - elif int(python_current_version[1]) < int(python_required_version[1]): - print(f"### Your python version must be greather than or equal to {self.python_min_version} ###") + + elif (int(sys_major) <= int(min_major)) and (int(sys_minor) < int(min_minor)): + print(f"## Your python version must be greather than or equal to {self.PYTHON_MIN_VERSION} ##") self.Logs.critical(f'Your python version must be greather than or equal to {self.python_min_version}') return False