Added reset password because - I do not wanna talk about it
This commit is contained in:
103
reset_password.py
Executable file
103
reset_password.py
Executable file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Password Reset Script for Mailcow Alias Manager
|
||||
Usage: python3 reset_password.py [new_password]
|
||||
"""
|
||||
|
||||
import sys
|
||||
import sqlite3
|
||||
import bcrypt
|
||||
from pathlib import Path
|
||||
|
||||
# Database location
|
||||
project_dir = Path(__file__).parent
|
||||
filepath = project_dir.joinpath('data')
|
||||
database = filepath.joinpath('malias2.db')
|
||||
|
||||
def reset_password(new_password):
|
||||
"""Reset the admin password"""
|
||||
|
||||
if not database.exists():
|
||||
print(f"❌ Error: Database not found at {database}")
|
||||
print(" Make sure the application has been run at least once to create the database.")
|
||||
return False
|
||||
|
||||
try:
|
||||
# Hash the new password
|
||||
password_hash = bcrypt.hashpw(new_password.encode('utf-8'), bcrypt.gensalt())
|
||||
|
||||
# Update database
|
||||
conn = sqlite3.connect(database)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Check if auth table exists
|
||||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='auth'")
|
||||
if not cursor.fetchone():
|
||||
print("❌ Error: Auth table not found in database")
|
||||
conn.close()
|
||||
return False
|
||||
|
||||
# Update password
|
||||
cursor.execute('UPDATE auth SET password_hash = ? WHERE id = 0', (password_hash.decode('utf-8'),))
|
||||
|
||||
# Verify update
|
||||
if cursor.rowcount == 0:
|
||||
print("❌ Error: No password record found. Creating new one...")
|
||||
cursor.execute('INSERT INTO auth VALUES (?, ?)', (0, password_hash.decode('utf-8')))
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
print("=" * 60)
|
||||
print(" ✅ Password Reset Successful!")
|
||||
print("=" * 60)
|
||||
print(f" New password: {new_password}")
|
||||
print(f" Database: {database}")
|
||||
print("=" * 60)
|
||||
print()
|
||||
print("You can now login with the new password.")
|
||||
print()
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error resetting password: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
print()
|
||||
print("=" * 60)
|
||||
print(" Mailcow Alias Manager - Password Reset")
|
||||
print("=" * 60)
|
||||
print()
|
||||
|
||||
# Get new password
|
||||
if len(sys.argv) > 1:
|
||||
new_password = sys.argv[1]
|
||||
else:
|
||||
print("Enter new password (or press Ctrl+C to cancel):")
|
||||
new_password = input("New password: ").strip()
|
||||
|
||||
if not new_password:
|
||||
print("❌ Error: Password cannot be empty")
|
||||
return 1
|
||||
|
||||
if len(new_password) < 6:
|
||||
print("⚠️ Warning: Password is less than 6 characters")
|
||||
response = input("Continue anyway? (y/n): ").strip().lower()
|
||||
if response != 'y':
|
||||
print("Password reset cancelled.")
|
||||
return 0
|
||||
|
||||
print()
|
||||
if reset_password(new_password):
|
||||
return 0
|
||||
else:
|
||||
return 1
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
sys.exit(main())
|
||||
except KeyboardInterrupt:
|
||||
print("\n\nPassword reset cancelled.")
|
||||
sys.exit(0)
|
||||
Reference in New Issue
Block a user