mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-13 19:24:23 +00:00
V6.1.1 Updates
This commit is contained in:
209
core/irc.py
209
core/irc.py
@@ -98,6 +98,7 @@ class Irc:
|
||||
self.build_command(0, 'core', 'firstauth', 'First authentication of the Service')
|
||||
self.build_command(0, 'core', 'register', f'Register your nickname /msg {self.Config.SERVICE_NICKNAME} REGISTER <password> <email>')
|
||||
self.build_command(0, 'core', 'identify', f'Identify yourself with your password /msg {self.Config.SERVICE_NICKNAME} IDENTIFY <account> <password>')
|
||||
self.build_command(0, 'core', 'logout', 'Reverse the effect of the identify command')
|
||||
self.build_command(1, 'core', 'load', 'Load an existing module')
|
||||
self.build_command(1, 'core', 'unload', 'Unload a module')
|
||||
self.build_command(1, 'core', 'reload', 'Reload a module')
|
||||
@@ -136,6 +137,7 @@ class Irc:
|
||||
ircInstance (Irc): Instance of Irc object.
|
||||
"""
|
||||
try:
|
||||
self.init_service_user()
|
||||
self.__create_socket()
|
||||
self.__connect_to_irc(ircInstance)
|
||||
except AssertionError as ae:
|
||||
@@ -1233,79 +1235,151 @@ class Irc:
|
||||
|
||||
case 'register':
|
||||
# Register PASSWORD EMAIL
|
||||
password = cmd[1]
|
||||
email = cmd[2]
|
||||
user_obj = self.User.get_User(fromuser)
|
||||
try:
|
||||
|
||||
if len(cmd) < 3:
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f'/msg {self.Config.SERVICE_NICKNAME} {command.upper()} <PASSWORD> <EMAIL>'
|
||||
)
|
||||
return None
|
||||
|
||||
password = cmd[1]
|
||||
email = cmd[2]
|
||||
|
||||
if not self.Base.is_valid_email(email_to_control=email):
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg='The email is not valid. You must provide a valid email address (first.name@email.extension)'
|
||||
)
|
||||
return None
|
||||
|
||||
user_obj = self.User.get_User(fromuser)
|
||||
|
||||
if user_obj is None:
|
||||
self.Logs.error(f"Nickname ({fromuser}) doesn't exist, it is impossible to register this nickname")
|
||||
return None
|
||||
|
||||
# If the account already exist.
|
||||
if self.Client.db_is_account_exist(fromuser):
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f"Your account already exist, please try to login instead /msg {self.Config.SERVICE_NICKNAME} IDENTIFY <account> <password>"
|
||||
)
|
||||
return None
|
||||
|
||||
# If the account doesn't exist then insert into database
|
||||
data_to_record = {
|
||||
'createdOn': self.Base.get_datetime(), 'account': fromuser,
|
||||
'nickname': user_obj.nickname, 'hostname': user_obj.hostname, 'vhost': user_obj.vhost, 'realname': user_obj.realname, 'email': email,
|
||||
'password': self.Base.crypt_password(password=password), 'level': 0
|
||||
}
|
||||
|
||||
insert_to_db = self.Base.db_execute_query(f"""
|
||||
INSERT INTO {self.Config.TABLE_CLIENT}
|
||||
(createdOn, account, nickname, hostname, vhost, realname, email, password, level)
|
||||
VALUES
|
||||
(:createdOn, :account, :nickname, :hostname, :vhost, :realname, :email, :password, :level)
|
||||
""", data_to_record)
|
||||
|
||||
if insert_to_db.rowcount > 0:
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f"You have register your nickname successfully"
|
||||
)
|
||||
|
||||
if user_obj is None:
|
||||
self.Logs.error(f"Nickname ({fromuser}) doesn't exist, it is impossible to register this nickname")
|
||||
return None
|
||||
|
||||
# If the account already exist.
|
||||
if self.Client.db_is_account_exist(fromuser):
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f"Your account already exist, please try to login instead /msg {self.Config.SERVICE_NICKNAME} IDENTIFY <account> <password>"
|
||||
)
|
||||
return None
|
||||
|
||||
# If the account doesn't exist then insert into database
|
||||
data_to_record = {
|
||||
'createdOn': self.Base.get_datetime(), 'account': fromuser,
|
||||
'nickname': user_obj.nickname, 'hostname': user_obj.hostname, 'vhost': user_obj.vhost, 'realname': user_obj.realname, 'email': email,
|
||||
'password': self.Base.crypt_password(password=password), 'level': 0
|
||||
}
|
||||
|
||||
insert_to_db = self.Base.db_execute_query(f"""
|
||||
INSERT INTO {self.Config.TABLE_CLIENT}
|
||||
(createdOn, account, nickname, hostname, vhost, realname, email, password, level)
|
||||
VALUES
|
||||
(:createdOn, :account, :nickname, :hostname, :vhost, :realname, :email, :password, :level)
|
||||
""", data_to_record)
|
||||
|
||||
if insert_to_db.rowcount > 0:
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f"You have register your nickname successfully"
|
||||
)
|
||||
|
||||
return None
|
||||
except ValueError as ve:
|
||||
self.Logs.error(f"Value Error : {ve}")
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f" {self.Config.SERVICE_PREFIX}{command.upper()} <PASSWORD> <EMAIL>")
|
||||
|
||||
case 'identify':
|
||||
# Identify NICKNAME password
|
||||
nickname = str(cmd[1])
|
||||
encrypted_password = self.Base.crypt_password(cmd[2])
|
||||
client_obj = self.Client.get_Client(nickname)
|
||||
user_obj = self.User.get_User(fromuser)
|
||||
# Identify ACCOUNT PASSWORD
|
||||
try:
|
||||
if len(cmd) < 3:
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f'/msg {self.Config.SERVICE_NICKNAME} {command.upper()} <ACCOUNT> <PASSWORD>'
|
||||
)
|
||||
return None
|
||||
|
||||
account = str(cmd[1]) # account
|
||||
encrypted_password = self.Base.crypt_password(cmd[2])
|
||||
user_obj = self.User.get_User(fromuser)
|
||||
client_obj = self.Client.get_Client(user_obj.uid)
|
||||
|
||||
if client_obj is not None:
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"You are already logged in")
|
||||
return None
|
||||
|
||||
db_query = f"SELECT account FROM {self.Config.TABLE_CLIENT} WHERE account = :account AND password = :password"
|
||||
db_param = {'account': account, 'password': encrypted_password}
|
||||
exec_query = self.Base.db_execute_query(
|
||||
db_query,
|
||||
db_param
|
||||
)
|
||||
result_query = exec_query.fetchone()
|
||||
if result_query:
|
||||
account = result_query[0]
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"You are now logged in")
|
||||
client = self.Loader.Definition.MClient(
|
||||
uid=user_obj.uid, account=account, nickname=fromuser,
|
||||
username=user_obj.username, realname=user_obj.realname, hostname=user_obj.hostname, umodes=user_obj.umodes, vhost=user_obj.vhost,
|
||||
isWebirc=user_obj.isWebirc, isWebsocket=user_obj.isWebsocket, remote_ip=user_obj.remote_ip, score_connexion=user_obj.score_connexion,
|
||||
geoip=user_obj.geoip, connexion_datetime=user_obj.connexion_datetime
|
||||
)
|
||||
self.Client.insert(client)
|
||||
self.Protocol.send_svs_mode(nickname=fromuser, user_mode='+r')
|
||||
else:
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"Wrong password or account")
|
||||
|
||||
if client_obj is not None:
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"You are already logged in")
|
||||
return None
|
||||
|
||||
db_query = f"SELECT account FROM {self.Config.TABLE_CLIENT} WHERE nickname = :nickname AND password = :password"
|
||||
db_param = {'nickname': nickname, 'password': encrypted_password}
|
||||
exec_query = self.Base.db_execute_query(
|
||||
db_query,
|
||||
db_param
|
||||
)
|
||||
result_query = exec_query.fetchone()
|
||||
if result_query:
|
||||
account = result_query[0]
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"You are now logged in")
|
||||
client = self.Loader.Definition.MClient(
|
||||
uid=user_obj.uid, account=account, nickname=nickname,
|
||||
username=user_obj.username, realname=user_obj.realname, hostname=user_obj.hostname, umodes=user_obj.umodes, vhost=user_obj.vhost,
|
||||
isWebirc=user_obj.isWebirc, isWebsocket=user_obj.isWebsocket, remote_ip=user_obj.remote_ip, score_connexion=user_obj.score_connexion,
|
||||
geoip=user_obj.geoip, connexion_datetime=user_obj.connexion_datetime
|
||||
)
|
||||
self.Client.insert(client)
|
||||
self.Protocol.send_svs_mode(nickname=nickname, user_mode='+r')
|
||||
else:
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"Wrong password or account")
|
||||
except ValueError as ve:
|
||||
self.Logs.error(f"Value Error: {ve}")
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
msg=f'/msg {self.Config.SERVICE_NICKNAME} {command.upper()} <ACCOUNT> <PASSWORD>'
|
||||
)
|
||||
|
||||
return None
|
||||
except Exception as err:
|
||||
self.Logs.error(f"General Error: {err}")
|
||||
|
||||
case 'logout':
|
||||
try:
|
||||
# LOGOUT <account>
|
||||
if len(cmd) < 2:
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"/msg {dnickname} {command.upper()} <account>")
|
||||
return None
|
||||
|
||||
user_obj = self.User.get_User(fromuser)
|
||||
if user_obj is None:
|
||||
self.Logs.error(f"The User [{fromuser}] is not available in the database")
|
||||
return None
|
||||
|
||||
client_obj = self.Client.get_Client(user_obj.uid)
|
||||
|
||||
if client_obj is None:
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg="Nothing to logout. please login first")
|
||||
return None
|
||||
|
||||
self.Protocol.send_svs_mode(nickname=fromuser, user_mode='-r')
|
||||
self.Client.delete(user_obj.uid)
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"You have been logged out successfully")
|
||||
|
||||
except ValueError as ve:
|
||||
self.Logs.error(f"Value Error: {ve}")
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"/msg {dnickname} {command.upper()} <account>")
|
||||
except Exception as err:
|
||||
self.Logs.error(f"General Error: {err}")
|
||||
self.Protocol.send_notice(nick_from=dnickname, nick_to=fromuser, msg=f"/msg {dnickname} {command.upper()} <account>")
|
||||
|
||||
case 'help':
|
||||
|
||||
@@ -1352,6 +1426,9 @@ class Irc:
|
||||
self.Base.shutdown()
|
||||
self.Base.execute_periodic_action()
|
||||
|
||||
for chan_name in self.Channel.UID_CHANNEL_DB:
|
||||
self.Protocol.send_mode_chan(chan_name.name, '-l')
|
||||
|
||||
self.Protocol.send_notice(
|
||||
nick_from=dnickname,
|
||||
nick_to=fromuser,
|
||||
@@ -1403,7 +1480,7 @@ class Irc:
|
||||
current_version = self.Config.CURRENT_VERSION
|
||||
latest_version = self.Config.LATEST_VERSION
|
||||
|
||||
mods = ["core.config", "core.base", "core.classes.protocols.unreal6", "core.classes.protocol"]
|
||||
mods = ["core.definition", "core.config", "core.base", "core.classes.protocols.unreal6", "core.classes.protocol"]
|
||||
|
||||
mod_unreal6 = sys.modules['core.classes.protocols.unreal6']
|
||||
mod_protocol = sys.modules['core.classes.protocol']
|
||||
@@ -1426,7 +1503,7 @@ class Irc:
|
||||
config_dict: dict = self.Config.__dict__
|
||||
|
||||
for key, value in conf_bkp_dict.items():
|
||||
if config_dict[key] != value:
|
||||
if config_dict[key] != value and key != 'COLORS':
|
||||
self.Protocol.send_priv_msg(
|
||||
nick_from=self.Config.SERVICE_NICKNAME,
|
||||
msg=f'[{key}]: {value} ==> {config_dict[key]}',
|
||||
|
||||
Reference in New Issue
Block a user