mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-13 11:14:23 +00:00
Fix server response, fix ircd parser aswell, update first setup on base.py
This commit is contained in:
3
Makefile
3
Makefile
@@ -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!"; \
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
'''
|
'''
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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}")
|
||||||
|
|
||||||
|
|||||||
62
core/irc.py
62
core/irc.py
@@ -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:
|
|
||||||
# If the received message is > 4070 then loop and add the value to the variable
|
while not eol:
|
||||||
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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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__))
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user