mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-13 11:14:23 +00:00
Adding language field to admin db and local variable
This commit is contained in:
@@ -53,7 +53,7 @@ Pour Les prochains lancement de defender vous devez utiliser la commande suivant
|
|||||||
$ cd IRC_DEFENDER_MODULES
|
$ cd IRC_DEFENDER_MODULES
|
||||||
$ python3 -m venv .pyenv
|
$ python3 -m venv .pyenv
|
||||||
$ source .pyenv/bin/activate
|
$ source .pyenv/bin/activate
|
||||||
(pyenv)$ pip install sqlalchemy, psutil, requests, faker, unrealircd_rpc_py
|
(pyenv)$ pip install sqlalchemy, psutil, requests, faker, unrealircd_rpc_py, pyyaml
|
||||||
|
|
||||||
# Créer un service nommé "defender.service"
|
# Créer un service nommé "defender.service"
|
||||||
# pour votre service et placer le dans "/PATH/TO/USER/.config/systemd/user/"
|
# pour votre service et placer le dans "/PATH/TO/USER/.config/systemd/user/"
|
||||||
|
|||||||
@@ -296,13 +296,14 @@ class Base:
|
|||||||
'password': password,
|
'password': password,
|
||||||
'hostname': '*',
|
'hostname': '*',
|
||||||
'vhost': '*',
|
'vhost': '*',
|
||||||
|
'language': 'EN',
|
||||||
'level': 5
|
'level': 5
|
||||||
}
|
}
|
||||||
self.db_execute_query(f"""
|
self.db_execute_query(f"""
|
||||||
INSERT INTO {self.Config.TABLE_ADMIN}
|
INSERT INTO {self.Config.TABLE_ADMIN}
|
||||||
(createdOn, user, password, hostname, vhost, level)
|
(createdOn, user, password, hostname, vhost, language, level)
|
||||||
VALUES
|
VALUES
|
||||||
(:createdOn, :user, :password, :hostname, :vhost, :level)"""
|
(:createdOn, :user, :password, :hostname, :vhost, :language, :level)"""
|
||||||
, mes_donnees)
|
, mes_donnees)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -152,4 +152,20 @@ class Admin:
|
|||||||
if record.uid == uidornickname:
|
if record.uid == uidornickname:
|
||||||
return record.nickname
|
return record.nickname
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_language(self, uidornickname: str) -> Optional[str]:
|
||||||
|
"""Get the language of the admin
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uidornickname (str): The user ID or the Nickname of the admin
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Optional[str]: The language selected by the admin.
|
||||||
|
"""
|
||||||
|
admin = self.get_admin(uidornickname)
|
||||||
|
|
||||||
|
if admin is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return admin.language
|
||||||
@@ -76,6 +76,7 @@ class MAdmin(MainModel):
|
|||||||
score_connexion: int = 0
|
score_connexion: int = 0
|
||||||
geoip: str = None
|
geoip: str = None
|
||||||
connexion_datetime: datetime = field(default=datetime.now())
|
connexion_datetime: datetime = field(default=datetime.now())
|
||||||
|
language: str = "EN"
|
||||||
level: int = 0
|
level: int = 0
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -362,5 +363,6 @@ class MSasl(MainModel):
|
|||||||
username: Optional[str] = None
|
username: Optional[str] = None
|
||||||
password: Optional[str] = None
|
password: Optional[str] = None
|
||||||
fingerprint: Optional[str] = None
|
fingerprint: Optional[str] = None
|
||||||
|
language: str = "EN"
|
||||||
auth_success: bool = False
|
auth_success: bool = False
|
||||||
level: int = 0
|
level: int = 0
|
||||||
29
core/irc.py
29
core/irc.py
@@ -313,15 +313,15 @@ class Irc:
|
|||||||
def db_get_admin_info(*, username: Optional[str] = None, password: Optional[str] = None, fingerprint: Optional[str] = None) -> Optional[dict[str, Any]]:
|
def db_get_admin_info(*, username: Optional[str] = None, password: Optional[str] = None, fingerprint: Optional[str] = None) -> Optional[dict[str, Any]]:
|
||||||
if fingerprint:
|
if fingerprint:
|
||||||
mes_donnees = {'fingerprint': fingerprint}
|
mes_donnees = {'fingerprint': fingerprint}
|
||||||
query = f"SELECT user, level FROM {self.Config.TABLE_ADMIN} WHERE fingerprint = :fingerprint"
|
query = f"SELECT user, level, language FROM {self.Config.TABLE_ADMIN} WHERE fingerprint = :fingerprint"
|
||||||
else:
|
else:
|
||||||
mes_donnees = {'user': username, 'password': self.Utils.hash_password(password)}
|
mes_donnees = {'user': username, 'password': self.Utils.hash_password(password)}
|
||||||
query = f"SELECT user, level FROM {self.Config.TABLE_ADMIN} WHERE user = :user AND password = :password"
|
query = f"SELECT user, level, language FROM {self.Config.TABLE_ADMIN} WHERE user = :user AND password = :password"
|
||||||
|
|
||||||
result = self.Base.db_execute_query(query, mes_donnees)
|
result = self.Base.db_execute_query(query, mes_donnees)
|
||||||
user_from_db = result.fetchone()
|
user_from_db = result.fetchone()
|
||||||
if user_from_db:
|
if user_from_db:
|
||||||
return {'user': user_from_db[0], 'level': user_from_db[1]}
|
return {'user': user_from_db[0], 'level': user_from_db[1], 'language': user_from_db[2]}
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -331,6 +331,7 @@ class Irc:
|
|||||||
if admin_info is not None:
|
if admin_info is not None:
|
||||||
s.auth_success = True
|
s.auth_success = True
|
||||||
s.level = admin_info.get('level', 0)
|
s.level = admin_info.get('level', 0)
|
||||||
|
s.language = admin_info.get('language', 'EN')
|
||||||
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} SASL {self.Settings.MAIN_SERVER_HOSTNAME} {s.client_uid} D S")
|
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} SASL {self.Settings.MAIN_SERVER_HOSTNAME} {s.client_uid} D S")
|
||||||
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} 903 {s.username} :SASL authentication successful")
|
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} 903 {s.username} :SASL authentication successful")
|
||||||
else:
|
else:
|
||||||
@@ -345,6 +346,7 @@ class Irc:
|
|||||||
s.auth_success = True
|
s.auth_success = True
|
||||||
s.level = admin_info.get('level', 0)
|
s.level = admin_info.get('level', 0)
|
||||||
s.username = admin_info.get('user', None)
|
s.username = admin_info.get('user', None)
|
||||||
|
s.language = admin_info.get('language', 'EN')
|
||||||
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} SASL {self.Settings.MAIN_SERVER_HOSTNAME} {s.client_uid} D S")
|
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} SASL {self.Settings.MAIN_SERVER_HOSTNAME} {s.client_uid} D S")
|
||||||
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} 903 {s.username} :SASL authentication successful")
|
self.Protocol.send2socket(f":{self.Config.SERVEUR_LINK} 903 {s.username} :SASL authentication successful")
|
||||||
else:
|
else:
|
||||||
@@ -380,14 +382,16 @@ class Irc:
|
|||||||
time.sleep(beat)
|
time.sleep(beat)
|
||||||
self.Base.execute_periodic_action()
|
self.Base.execute_periodic_action()
|
||||||
|
|
||||||
def insert_db_admin(self, uid: str, account: str, level: int) -> None:
|
def insert_db_admin(self, uid: str, account: str, level: int, language: str) -> None:
|
||||||
user_obj = self.User.get_user(uid)
|
user_obj = self.User.get_user(uid)
|
||||||
|
|
||||||
if user_obj is None:
|
if user_obj is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
self.Admin.insert(
|
self.Admin.insert(
|
||||||
self.Loader.Definition.MAdmin(
|
self.Loader.Definition.MAdmin(
|
||||||
**user_obj.to_dict(),
|
**user_obj.to_dict(),
|
||||||
|
language=language,
|
||||||
account=account,
|
account=account,
|
||||||
level=int(level)
|
level=int(level)
|
||||||
)
|
)
|
||||||
@@ -515,7 +519,7 @@ class Irc:
|
|||||||
sasl_obj = self.Sasl.get_sasl_obj(uid)
|
sasl_obj = self.Sasl.get_sasl_obj(uid)
|
||||||
if sasl_obj:
|
if sasl_obj:
|
||||||
if sasl_obj.auth_success:
|
if sasl_obj.auth_success:
|
||||||
self.insert_db_admin(sasl_obj.client_uid, sasl_obj.username, sasl_obj.level)
|
self.insert_db_admin(sasl_obj.client_uid, sasl_obj.username, sasl_obj.level, sasl_obj.language)
|
||||||
self.Protocol.send_priv_msg(nick_from=dnickname,
|
self.Protocol.send_priv_msg(nick_from=dnickname,
|
||||||
msg=tr("[ %sSASL AUTH%s ] - %s (%s) is now connected successfuly to %s", GREEN, NOGC, nickname, sasl_obj.username, dnickname),
|
msg=tr("[ %sSASL AUTH%s ] - %s (%s) is now connected successfuly to %s", GREEN, NOGC, nickname, sasl_obj.username, dnickname),
|
||||||
channel=dchanlog)
|
channel=dchanlog)
|
||||||
@@ -736,7 +740,7 @@ class Irc:
|
|||||||
|
|
||||||
if cmd_owner == config_owner and cmd_password == config_password:
|
if cmd_owner == config_owner and cmd_password == config_password:
|
||||||
self.Base.db_create_first_admin()
|
self.Base.db_create_first_admin()
|
||||||
self.insert_db_admin(current_uid, cmd_owner, 5)
|
self.insert_db_admin(current_uid, cmd_owner, 5, self.Config.LANG)
|
||||||
self.Protocol.send_priv_msg(
|
self.Protocol.send_priv_msg(
|
||||||
msg=f"[ {self.Config.COLORS.green}{str(current_command).upper()} ]{self.Config.COLORS.black} - {self.User.get_nickname(fromuser)} est désormais connecté a {dnickname}",
|
msg=f"[ {self.Config.COLORS.green}{str(current_command).upper()} ]{self.Config.COLORS.black} - {self.User.get_nickname(fromuser)} est désormais connecté a {dnickname}",
|
||||||
nick_from=dnickname,
|
nick_from=dnickname,
|
||||||
@@ -787,14 +791,15 @@ class Irc:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
mes_donnees = {'user': user_to_log, 'password': self.Loader.Utils.hash_password(password)}
|
mes_donnees = {'user': user_to_log, 'password': self.Loader.Utils.hash_password(password)}
|
||||||
query = f"SELECT id, user, level FROM {self.Config.TABLE_ADMIN} WHERE user = :user AND password = :password"
|
query = f"SELECT id, user, level, language FROM {self.Config.TABLE_ADMIN} WHERE user = :user AND password = :password"
|
||||||
result = self.Base.db_execute_query(query, mes_donnees)
|
result = self.Base.db_execute_query(query, mes_donnees)
|
||||||
user_from_db = result.fetchone()
|
user_from_db = result.fetchone()
|
||||||
|
|
||||||
if user_from_db:
|
if user_from_db:
|
||||||
account = user_from_db[1]
|
account = str(user_from_db[1])
|
||||||
level = user_from_db[2]
|
level = int(user_from_db[2])
|
||||||
self.insert_db_admin(current_client.uid, account, level)
|
language = str(user_from_db[3])
|
||||||
|
self.insert_db_admin(current_client.uid, account, level, language)
|
||||||
self.Protocol.send_priv_msg(nick_from=dnickname,
|
self.Protocol.send_priv_msg(nick_from=dnickname,
|
||||||
msg=f"[ {GREEN}{str(current_command).upper()}{NOGC} ] - {current_client.nickname} ({account}) est désormais connecté a {dnickname}",
|
msg=f"[ {GREEN}{str(current_command).upper()}{NOGC} ] - {current_client.nickname} ({account}) est désormais connecté a {dnickname}",
|
||||||
channel=dchanlog)
|
channel=dchanlog)
|
||||||
@@ -1269,7 +1274,7 @@ class Irc:
|
|||||||
self.Protocol.send_notice(
|
self.Protocol.send_notice(
|
||||||
nick_from=dnickname,
|
nick_from=dnickname,
|
||||||
nick_to=fromuser,
|
nick_to=fromuser,
|
||||||
msg=f"UID : {db_admin.uid} - Nickname: {db_admin.nickname} - Account: {db_admin.account} - Level: {db_admin.level} - Connection: {db_admin.connexion_datetime}"
|
msg=f"UID : {db_admin.uid} - Nickname: {db_admin.nickname} - Account: {db_admin.account} - Level: {db_admin.level} - Language: {db_admin.language} - Connection: {db_admin.connexion_datetime}"
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from core import installation
|
|||||||
# Requierements : #
|
# Requierements : #
|
||||||
# Python3.10 or higher #
|
# Python3.10 or higher #
|
||||||
# SQLAlchemy, requests, psutil #
|
# SQLAlchemy, requests, psutil #
|
||||||
# unrealircd-rpc-py #
|
# unrealircd-rpc-py, pyyaml #
|
||||||
# UnrealIRCD 6.2.2 or higher #
|
# UnrealIRCD 6.2.2 or higher #
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user