adding admin manager script since admin dashboard in server itself cannot do same shit that manager does

This commit is contained in:
2025-10-18 10:56:20 +03:00
parent c22713040f
commit 2ccb49a33c

278
admin_manager.py Normal file
View File

@@ -0,0 +1,278 @@
#!/usr/bin/env python3
"""
Скрипт для управления административными учетными записями OldMarket
"""
import sys
import os
import sqlite3
from getpass import getpass
import hashlib
from datetime import datetime
# Добавляем путь к текущей директории для импорта моделей
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
def hash_password(password: str) -> str:
"""Хеширование пароля"""
return hashlib.sha256(password.encode()).hexdigest()
def get_db_connection():
"""Подключение к базе данных"""
db_path = "oldmarket.db"
if not os.path.exists(db_path):
print(f"❌ База данных {db_path} не найдена!")
sys.exit(1)
return sqlite3.connect(db_path)
def list_admins():
"""Показать список всех администраторов"""
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute("SELECT id, username, created_at FROM admin_users ORDER BY id")
admins = cursor.fetchall()
if not admins:
print("📭 В системе нет администраторов")
return
print("\n📋 Список администраторов:")
print("-" * 50)
print(f"{'ID':<3} {'Имя пользователя':<20} {'Дата создания'}")
print("-" * 50)
for admin in admins:
admin_id, username, created_at = admin
print(f"{admin_id:<3} {username:<20} {created_at}")
def create_admin():
"""Создать нового администратора"""
print("\n👤 Создание нового администратора")
username = input("Введите имя пользователя: ").strip()
if not username:
print("❌ Имя пользователя не может быть пустым!")
return
password = getpass("Введите пароль: ")
if not password:
print("❌ Пароль не может быть пустым!")
return
confirm_password = getpass("Подтвердите пароль: ")
if password != confirm_password:
print("❌ Пароли не совпадают!")
return
conn = get_db_connection()
cursor = conn.cursor()
# Проверяем, существует ли пользователь
cursor.execute("SELECT id FROM admin_users WHERE username = ?", (username,))
if cursor.fetchone():
print(f"❌ Пользователь '{username}' уже существует!")
conn.close()
return
# Создаем нового администратора
password_hash = hash_password(password)
created_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute(
"INSERT INTO admin_users (username, password_hash, created_at) VALUES (?, ?, ?)",
(username, password_hash, created_at)
)
conn.commit()
conn.close()
print(f"✅ Администратор '{username}' успешно создан!")
def delete_admin():
"""Удалить администратора"""
list_admins()
admin_id = input("\nВведите ID администратора для удаления: ").strip()
if not admin_id.isdigit():
print("❌ ID должен быть числом!")
return
conn = get_db_connection()
cursor = conn.cursor()
# Получаем информацию об администраторе
cursor.execute("SELECT username FROM admin_users WHERE id = ?", (admin_id,))
admin = cursor.fetchone()
if not admin:
print(f"❌ Администратор с ID {admin_id} не найден!")
conn.close()
return
username = admin[0]
# Проверяем, не пытаемся ли удалить последнего администратора
cursor.execute("SELECT COUNT(*) FROM admin_users")
admin_count = cursor.fetchone()[0]
if admin_count <= 1:
print("❌ Нельзя удалить последнего администратора!")
conn.close()
return
# Подтверждение удаления
confirm = input(f"⚠️ Вы уверены, что хотите удалить администратора '{username}' (ID: {admin_id})? (y/N): ")
if confirm.lower() != 'y':
print("❌ Удаление отменено")
conn.close()
return
# Удаляем администратора
cursor.execute("DELETE FROM admin_users WHERE id = ?", (admin_id,))
conn.commit()
conn.close()
print(f"✅ Администратор '{username}' успешно удален!")
def change_password():
"""Изменить пароль администратора"""
list_admins()
admin_id = input("\nВведите ID администратора для смены пароля: ").strip()
if not admin_id.isdigit():
print("❌ ID должен быть числом!")
return
conn = get_db_connection()
cursor = conn.cursor()
# Проверяем существование администратора
cursor.execute("SELECT username FROM admin_users WHERE id = ?", (admin_id,))
admin = cursor.fetchone()
if not admin:
print(f"❌ Администратор с ID {admin_id} не найден!")
conn.close()
return
username = admin[0]
# Запрашиваем новый пароль
new_password = getpass(f"Введите новый пароль для '{username}': ")
if not new_password:
print("❌ Пароль не может быть пустым!")
conn.close()
return
confirm_password = getpass("Подтвердите новый пароль: ")
if new_password != confirm_password:
print("❌ Пароли не совпадают!")
conn.close()
return
# Обновляем пароль
new_password_hash = hash_password(new_password)
cursor.execute(
"UPDATE admin_users SET password_hash = ? WHERE id = ?",
(new_password_hash, admin_id)
)
conn.commit()
conn.close()
print(f"✅ Пароль для администратора '{username}' успешно изменен!")
def reset_default_admin():
"""Сбросить пароль дефолтного администратора"""
print("\n🔄 Сброс пароля дефолтного администратора")
conn = get_db_connection()
cursor = conn.cursor()
# Проверяем существование администратора 'admin'
cursor.execute("SELECT id FROM admin_users WHERE username = 'admin'")
admin = cursor.fetchone()
if not admin:
# Создаем дефолтного администратора
password_hash = hash_password("admin123")
created_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute(
"INSERT INTO admin_users (username, password_hash, created_at) VALUES (?, ?, ?)",
("admin", password_hash, created_at)
)
conn.commit()
conn.close()
print("✅ Дефолтный администратор 'admin' создан!")
print("🔑 Логин: admin")
print("🔑 Пароль: admin123")
print("⚠️ Смените пароль после первого входа!")
return
# Сбрасываем пароль
new_password = "admin123"
new_password_hash = hash_password(new_password)
cursor.execute(
"UPDATE admin_users SET password_hash = ? WHERE username = 'admin'",
(new_password_hash,)
)
conn.commit()
conn.close()
print("✅ Пароль дефолтного администратора сброшен!")
print("🔑 Логин: admin")
print("🔑 Пароль: admin123")
print("⚠️ Смените пароль после входа!")
def show_menu():
"""Показать меню управления"""
print("\n" + "="*50)
print("👑 УПРАВЛЕНИЕ АДМИНИСТРАТОРАМИ OLDMARKET")
print("="*50)
print("1. 📋 Список администраторов")
print("2. 👤 Создать администратора")
print("3. 🗑️ Удалить администратора")
print("4. 🔑 Изменить пароль")
print("5. 🔄 Сбросить дефолтного администратора")
print("6. ❌ Выход")
print("="*50)
def main():
"""Главная функция"""
try:
while True:
show_menu()
choice = input("\nВыберите действие (1-6): ").strip()
if choice == '1':
list_admins()
elif choice == '2':
create_admin()
elif choice == '3':
delete_admin()
elif choice == '4':
change_password()
elif choice == '5':
reset_default_admin()
elif choice == '6':
print("\n👋 До свидания!")
break
else:
print("❌ Неверный выбор! Попробуйте снова.")
input("\nНажмите Enter для продолжения...")
except KeyboardInterrupt:
print("\n\n👋 Программа прервана пользователем!")
except Exception as e:
print(f"\n❌ Произошла ошибка: {e}")
if __name__ == "__main__":
main()