Fix server response, fix ircd parser aswell, update first setup on base.py

This commit is contained in:
adator
2025-11-08 21:21:38 +01:00
parent b52a57f95a
commit 17cb2ada5f
8 changed files with 61 additions and 24 deletions

View File

@@ -43,6 +43,9 @@ endif
clean: clean:
ifeq ($(OS), Linux) ifeq ($(OS), Linux)
@export echo $DBUS_SESSION_BUS_ADDRESS && \
systemctl --user stop defender
$(info Defender has been stopped...)
@if [ -e .pyenv ]; then \ @if [ -e .pyenv ]; then \
rm -rf .pyenv; \ rm -rf .pyenv; \
echo "Virtual Env has been removed!"; \ echo "Virtual Env has been removed!"; \

View File

@@ -45,7 +45,10 @@ class Base:
self.install: bool = False # Initialisation de la variable d'installation self.install: bool = False # Initialisation de la variable d'installation
self.engine, self.cursor = self.db_init() # Initialisation de la connexion a la base de données self.engine, self.cursor = self.db_init() # Initialisation de la connexion a la base de données
self.__create_db() # Initialisation de la base de données # self.__create_db() # Initialisation de la base de données
def init(self) -> None:
self.__create_db()
def __set_current_defender_version(self) -> None: def __set_current_defender_version(self) -> None:
"""This will put the current version of Defender """This will put the current version of Defender
@@ -481,7 +484,7 @@ class Base:
engine = create_engine(f'sqlite:///{full_path_db}.db', echo=False) engine = create_engine(f'sqlite:///{full_path_db}.db', echo=False)
cursor = engine.connect() cursor = engine.connect()
self.logs.info("-- database connexion has been initiated") self.logs.info("-- Database connexion has been initiated")
return engine, cursor return engine, cursor
def __create_db(self) -> None: def __create_db(self) -> None:
@@ -535,6 +538,7 @@ class Base:
vhost TEXT, vhost TEXT,
password TEXT, password TEXT,
fingerprint TEXT, fingerprint TEXT,
language TEXT,
level INTEGER level INTEGER
) )
''' '''

View File

@@ -15,6 +15,7 @@ REHASH_MODULES = [
'core.base', 'core.base',
'core.classes.modules.commands', 'core.classes.modules.commands',
'core.classes.interfaces.iprotocol', 'core.classes.interfaces.iprotocol',
'core.classes.interfaces.imodule',
'core.classes.protocols.command_handler', 'core.classes.protocols.command_handler',
'core.classes.protocols.factory', 'core.classes.protocols.factory',
'core.classes.protocols.unreal6', 'core.classes.protocols.unreal6',

View File

@@ -34,7 +34,7 @@ class Unrealircd6(IProtocol):
tuple[int, Optional[str]]: The position and the command. tuple[int, Optional[str]]: The position and the command.
""" """
for index, token in enumerate(cmd): for index, token in enumerate(cmd):
if token.upper() in self.known_protocol: if token.upper() in self.known_protocol and index < 3:
return index, token.upper() return index, token.upper()
if log: if log:
@@ -216,9 +216,9 @@ class Unrealircd6(IProtocol):
self.send2socket(f":{server_id} PROTOCTL SID={server_id}") self.send2socket(f":{server_id} PROTOCTL SID={server_id}")
self.send2socket(f":{server_id} PROTOCTL BOOTED={unixtime}") self.send2socket(f":{server_id} PROTOCTL BOOTED={unixtime}")
self.send2socket(f":{server_id} SERVER {server_link} 1 :{service_info}") self.send2socket(f":{server_id} SERVER {server_link} 1 :{service_info}")
self.send2socket("EOS")
self.send2socket(f":{server_id} {service_nickname} :Reserved for services") self.send2socket(f":{server_id} {service_nickname} :Reserved for services")
self.send2socket(f":{server_id} UID {service_nickname} 1 {unixtime} {service_username} {service_hostname} {service_id} * {service_smodes} * * fwAAAQ== :{service_realname}") self.send2socket(f":{server_id} UID {service_nickname} 1 {unixtime} {service_username} {service_hostname} {service_id} * {service_smodes} * * fwAAAQ== :{service_realname}")
self.send2socket("EOS")
self.send_sjoin(service_channel_log) self.send_sjoin(service_channel_log)
self.send2socket(f":{server_id} TKL + Q * {service_nickname} {service_hostname} 0 {unixtime} :Reserved for services") self.send2socket(f":{server_id} TKL + Q * {service_nickname} {service_hostname} 0 {unixtime} :Reserved for services")
self.send2socket(f":{service_id} MODE {service_channel_log} {service_cmodes}") self.send2socket(f":{service_id} MODE {service_channel_log} {service_cmodes}")
@@ -1064,7 +1064,7 @@ class Unrealircd6(IProtocol):
self._Logs.error(f'Index Error {__name__}: {ie}') self._Logs.error(f'Index Error {__name__}: {ie}')
except ValueError as ve: except ValueError as ve:
self._Irc.first_score = 0 self._Irc.first_score = 0
self._Logs.error(f'Value Error {__name__}: {ve}') self._Logs.error(f'Value Error {__name__}: {ve}', exc_info=True)
except Exception as err: except Exception as err:
self._Logs.error(f"{__name__} - General Error: {err}") self._Logs.error(f"{__name__} - General Error: {err}")

View File

@@ -6,6 +6,7 @@ import time
from ssl import SSLSocket from ssl import SSLSocket
from datetime import datetime, timedelta from datetime import datetime, timedelta
from typing import TYPE_CHECKING, Any, Optional, Union from typing import TYPE_CHECKING, Any, Optional, Union
from xml.etree.ElementInclude import DEFAULT_MAX_INCLUSION_DEPTH
from core.classes.modules import rehash from core.classes.modules import rehash
from core.classes.interfaces.iprotocol import IProtocol from core.classes.interfaces.iprotocol import IProtocol
from core.utils import tr from core.utils import tr
@@ -178,14 +179,21 @@ class Irc:
# 4072 max what the socket can grab # 4072 max what the socket can grab
buffer_size = self.IrcSocket.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) buffer_size = self.IrcSocket.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
data_in_bytes = self.IrcSocket.recv(buffer_size) data_in_bytes = self.IrcSocket.recv(buffer_size)
data = data_in_bytes.splitlines(True) eol = True
count_bytes = len(data_in_bytes) if data_in_bytes[-2:] != b"\r\n":
eol = False
while count_bytes > 4070: while not eol:
# If the received message is > 4070 then loop and add the value to the variable
new_data = self.IrcSocket.recv(buffer_size) new_data = self.IrcSocket.recv(buffer_size)
data_in_bytes += new_data data_in_bytes += new_data
count_bytes = len(new_data) if data_in_bytes[-2:] == eol:
eol = False
# while count_bytes > 4070:
# # If the received message is > 4070 then loop and add the value to the variable
# new_data = self.IrcSocket.recv(buffer_size)
# data_in_bytes += new_data
# count_bytes = len(new_data)
data = data_in_bytes.splitlines(True) data = data_in_bytes.splitlines(True)
@@ -441,7 +449,7 @@ class Irc:
# Check if the user already exist # Check if the user already exist
if not self.Admin.db_is_admin_exist(nickname): if not self.Admin.db_is_admin_exist(nickname):
mes_donnees = {'datetime': self.Utils.get_sdatetime(), 'user': nickname, 'password': spassword, 'hostname': hostname, 'vhost': vhost, 'level': level, 'language': 'EN'} mes_donnees = {'datetime': self.Utils.get_sdatetime(), 'user': nickname, 'password': spassword, 'hostname': hostname, 'vhost': vhost, 'level': level, 'language': self.Config.LANG}
self.Base.db_execute_query(f'''INSERT INTO {self.Config.TABLE_ADMIN} self.Base.db_execute_query(f'''INSERT INTO {self.Config.TABLE_ADMIN}
(createdOn, user, password, hostname, vhost, level, language) VALUES (createdOn, user, password, hostname, vhost, level, language) VALUES
(:datetime, :user, :password, :hostname, :vhost, :level, :language) (:datetime, :user, :password, :hostname, :vhost, :level, :language)
@@ -840,17 +848,37 @@ class Irc:
case 'cert': case 'cert':
# Syntax !cert # Syntax !cert
try: try:
if len(cmd) < 2:
self.Protocol.send_notice(dnickname, fromuser, f"Right command : /msg {dnickname} cert add")
self.Protocol.send_notice(dnickname, fromuser, f"Right command : /msg {dnickname} cert del")
return None
admin_obj = self.Admin.get_admin(fromuser) admin_obj = self.Admin.get_admin(fromuser)
if admin_obj: param = cmd[1] # add or del
if admin_obj.fingerprint is not None: match param:
query = f'UPDATE {self.Config.TABLE_ADMIN} SET fingerprint = :fingerprint WHERE user = :user' case 'add':
r = self.Base.db_execute_query(query, {'fingerprint': admin_obj.fingerprint, 'user': admin_obj.account}) if admin_obj:
if r.rowcount > 0: if admin_obj.fingerprint is not None:
self.Protocol.send_notice(dnickname, fromuser, f'[ {GREEN}CERT{NOGC} ] Your new fingerprint has been attached to your account. {admin_obj.fingerprint}') query = f'UPDATE {self.Config.TABLE_ADMIN} SET fingerprint = :fingerprint WHERE user = :user'
else: r = self.Base.db_execute_query(query, {'fingerprint': admin_obj.fingerprint, 'user': admin_obj.account})
self.Protocol.send_notice(dnickname, fromuser, f'[ {RED}CERT{NOGC} ] Impossible to add your fingerprint.{admin_obj.fingerprint}') if r.rowcount > 0:
else: self.Protocol.send_notice(dnickname, fromuser, f'[ {GREEN}CERT{NOGC} ] Your new fingerprint has been attached to your account. {admin_obj.fingerprint}')
self.Protocol.send_notice(dnickname, fromuser, f'[ {RED}CERT{NOGC} ] There is no fingerprint to add.') else:
self.Protocol.send_notice(dnickname, fromuser, f'[ {RED}CERT{NOGC} ] Impossible to add your fingerprint.{admin_obj.fingerprint}')
else:
self.Protocol.send_notice(dnickname, fromuser, f'[ {RED}CERT{NOGC} ] There is no fingerprint to add.')
case 'del':
if admin_obj:
query = f"UPDATE {self.Config.TABLE_ADMIN} SET fingerprint = :fingerprint WHERE user =:user"
r = self.Base.db_execute_query(query, {'fingerprint': None, 'user': admin_obj.account})
if r.rowcount > 0:
self.Protocol.send_notice(dnickname, fromuser, f'[ {GREEN}CERT{NOGC} ] Your fingerprint has been removed from your account. {admin_obj.fingerprint}')
else:
self.Protocol.send_notice(dnickname, fromuser, f'[ {RED}CERT{NOGC} ] Impossible to remove your fingerprint.{admin_obj.fingerprint}')
case _:
self.Protocol.send_notice(dnickname, fromuser, f"Right command : /msg {dnickname} cert add")
self.Protocol.send_notice(dnickname, fromuser, f"Right command : /msg {dnickname} cert del")
return None
except Exception as e: except Exception as e:
self.Logs.error(e) self.Logs.error(e)

View File

@@ -3,7 +3,7 @@ traduction:
- orig: "Access denied!" - orig: "Access denied!"
trad: "Accès refusé." trad: "Accès refusé."
- orig: "Wrong password!" - orig: "Wrong password!"
tard: "Mot de passe incorrect!" trad: "Mot de passe incorrect!"
- orig: "%s - %sLoaded%s by %s on %s" - orig: "%s - %sLoaded%s by %s on %s"
trad: "%s - %sChargé%s par %s le %s" trad: "%s - %sChargé%s par %s le %s"
- orig: "%s - %sNot Loaded%s" - orig: "%s - %sNot Loaded%s"

View File

@@ -69,4 +69,6 @@ class Loader:
self.PFactory: factory.ProtocolFactorty = factory.ProtocolFactorty(self.Irc) self.PFactory: factory.ProtocolFactorty = factory.ProtocolFactorty(self.Irc)
self.Base.init()
self.Logs.debug(self.Utils.tr("Loader %s success", __name__)) self.Logs.debug(self.Utils.tr("Loader %s success", __name__))

View File

@@ -7,7 +7,6 @@ import mods.clone.schemas as schemas
from mods.clone.clone_manager import CloneManager from mods.clone.clone_manager import CloneManager
if TYPE_CHECKING: if TYPE_CHECKING:
from core.irc import Irc
from faker import Faker from faker import Faker
class Clone(IModule): class Clone(IModule):