import os import subprocess import logging import shutil from pathlib import Path

logger = logging.getLogger(name)

def execute(data): pass

def on_reload(): “”” Erstellt ein ‘Matryoshka-ZIP’: Ordner -> inner.zip (aura_secure.blob) -> password.zip Versteckt die komplette Verzeichnisstruktur. “”” logger.info(”🔒 SecurePacker (Matryoshka): Starte Sicherung…”)

current_dir = Path(__file__).parent
parent_dir = current_dir.parent

# Name des äußeren ZIPs
zip_name_outer = current_dir.name.lstrip('_') + ".zip"
zip_path_outer = parent_dir / zip_name_outer

# 1. Passwort suchen
key_file = next(parent_dir.glob(".*.py"), None)
if not key_file:
    logger.error("❌ Key-File fehlt!")
    return

password = _extract_password(key_file)
if not password:
    logger.error("❌ Passwort nicht gefunden!")
    return

# 2. INNERES ZIP erstellen (Der "Blob")
# Wir erstellen es temporär im Parent-Dir um Schreibzugriffe im überwachten Ordner zu minimieren
temp_inner_zip = parent_dir / "aura_secure_temp" # wird zu .zip

try:
    # Erzeugt aura_secure_temp.zip
    shutil.make_archive(str(temp_inner_zip), 'zip', str(current_dir))
    temp_inner_zip_file = parent_dir / "aura_secure_temp.zip"

    # Umbenennen in den neutralen Blob-Namen
    blob_name = "aura_secure.blob"
    blob_path = parent_dir / blob_name
    shutil.move(str(temp_inner_zip_file), str(blob_path))

    # 3. ÄUßERES ZIP erstellen (Verschlüsselt)
    if subprocess.call("command -v zip", shell=True, stdout=subprocess.DEVNULL) != 0:
        logger.error("❌ 'zip' Befehl fehlt.")
        return

    # Wir packen NUR den Blob in das ZIP
    cmd = [
        'zip', '-j',       # -j: Junk paths (keine Pfade speichern, nur Dateiname)
        '-P', password,
        str(zip_path_outer),
        str(blob_path)
    ]

    process = subprocess.run(cmd, capture_output=True, text=True)

    # Aufräumen des Blobs
    os.remove(blob_path)

    if process.returncode == 0:
        logger.info(f"✅ SecurePacker: Struktur versteckt in {zip_name_outer} gespeichert.")
    else:
        logger.error(f"❌ ZIP Fehler: {process.stderr}")

except Exception as e:
    logger.error(f"❌ Pack Fehler: {e}")

def _extract_password(key_path): try: with open(key_path, ‘r’, encoding=’utf-8’) as f: for line in f: if line.strip().startswith(“#”): clean = line.strip().lstrip(“#”).strip() if clean: return clean except: pass return None