Как добавить функцию блокировки (ban) при подборе логина и пароля в Python
Как добавить функцию блокировки (ban) при попытке подбора логина и пароля, к примеру если пользователь пытался войти 15 раз с неверным логином и паролем (if not result:)
Функция входа:
def access_password_username(message, username):
сon = sqlite3.connect(settings.DATA_BASE)
cur = con.cursor()
sql = """SELECT full_name from users WHERE username = ? AND password = ?;"""
cur.execute(sql)
result = cur.fetchall()
if not result:
msg = "⚠️ Ошибка.\n Неверно веден Логин или Пароль."
bot.send_message(message.chat.id, msg, reply_markup=st, parse_mode='HTML')
else:
for ln in result:
msg = f"✅ Вход выполнен под {ln[0]}"
bot.send_message(message.chat.id, msg, reply_markup=kb_student, parse_mode='HTML')
return
Есть такая функция ban:
def blocked(message):
try:
db = sqlite3.connect(settings.DATABASE, check_same_thread=False)
sql = db.cursor()
sql.execute("SELECT user_id FROM USERS WHERE messageid = ?",(message.reply_to_message.message_id,))
db.commit()
Lusers = sql.fetchall()
for i in Lusers:
sql.execute("SELECT user_id FROM blocked WHERE user_id = ?",(i[0],))
if sql.fetchone() is None:
try:
bot.send_message(i[0],settings.BAN)
bot.send_message(message.chat.id, settings.Y_BAN + str(i[0]))
sql.execute("INSERT INTO blocked VALUES (?)",(i[0],))
db.commit()
except:
bot.send_message(message.chat.id, settings.Y_BAN + str(i[0]))
sql.execute("INSERT INTO blocked VALUES (?)",(i[0],))
db.commit()
continue
sql.close()
db.close()
except Exception as ee:
# print("error in block" + str(ee))
return
Ответы (1 шт):
Автор решения: Last_Arkhangel
→ Ссылка
Сделал такой функционал, NUMBER_OF_BAN_TO_SAVE = 15, в if not result: добавил add_saved_ban(user_id, username, password)
def get_saved_ban(user_id):
sql = """SELECT user_id FROM saved_ban WHERE user_id = ?"""
saved_ban_raw = DBManager.execute_sql(sql, (user_id,)) or []
saved_ban = []
for ban in saved_ban_raw:
saved_ban.append(ban[0])
return saved_ban
def add_saved_ban(user_id, username, password):
user_saved_ban = get_saved_ban(user_id)
if username in user_saved_ban:
return
sql = """INSERT INTO saved_ban(user_id, username, password) VALUES (?, ?, ?)"""
DBManager.execute_sql(sql, (user_id, username, password,))
if len(user_saved_ban) == (settings.NUMBER_OF_BAN_TO_SAVE - 1):
add_user_ban(user_id)
def add_user_ban(user_id):
sql = """INSERT INTO USER_BAN (user_id) VALUES (?)"""
return DBManager.execute_sql(sql, (user_id,))