124 lines
4.4 KiB
Python
124 lines
4.4 KiB
Python
"""Cookie debug tool — run with: python3 debug_cookies.py"""
|
|
|
|
import glob
|
|
import os
|
|
import shutil
|
|
import sqlite3
|
|
import tempfile
|
|
import time
|
|
|
|
FIREFOX_COOKIE_PATHS = [
|
|
"~/.mozilla/firefox/*/cookies.sqlite",
|
|
"~/snap/firefox/common/.mozilla/firefox/*/cookies.sqlite",
|
|
"~/.var/app/org.mozilla.firefox/.mozilla/firefox/*/cookies.sqlite",
|
|
"~/.var/app/org.mozilla.firefox/config/mozilla/firefox/*/cookies.sqlite",
|
|
]
|
|
|
|
SEPARATOR = "-" * 70
|
|
|
|
|
|
def main():
|
|
print(SEPARATOR)
|
|
print("Firefox Cookie Debug")
|
|
print(SEPARATOR)
|
|
|
|
# ── 1. Find all DB files ──────────────────────────────────────────────────
|
|
all_dbs = []
|
|
for pattern in FIREFOX_COOKIE_PATHS:
|
|
expanded = os.path.expanduser(pattern)
|
|
matches = glob.glob(expanded)
|
|
print(f"\nPattern: {pattern}")
|
|
if matches:
|
|
for m in matches:
|
|
print(f" FOUND: {m}")
|
|
all_dbs.append(m)
|
|
else:
|
|
print(f" (keine Treffer)")
|
|
|
|
print(f"\n{SEPARATOR}")
|
|
print(f"Gesamt: {len(all_dbs)} cookies.sqlite Datei(en)")
|
|
print(SEPARATOR)
|
|
|
|
if not all_dbs:
|
|
print("\nKeine Firefox-Profile gefunden.")
|
|
print("Ist Firefox installiert? (Standard, Snap, oder Flatpak?)")
|
|
return
|
|
|
|
# ── 2. Read tralgo.app cookies from each DB ───────────────────────────────
|
|
now = int(time.time())
|
|
|
|
for db_path in all_dbs:
|
|
print(f"\nDB: {db_path}")
|
|
tmp = None
|
|
try:
|
|
tmp = tempfile.mktemp(suffix="_debug.sqlite")
|
|
shutil.copy2(db_path, tmp)
|
|
conn = sqlite3.connect(f"file:{tmp}?mode=ro", uri=True)
|
|
try:
|
|
cur = conn.cursor()
|
|
|
|
# All tralgo.app cookies
|
|
cur.execute(
|
|
"SELECT name, value, expiry, host FROM moz_cookies "
|
|
"WHERE host LIKE '%tralgo%' ORDER BY name"
|
|
)
|
|
all_rows = cur.fetchall()
|
|
|
|
# Only auth cookies the app needs
|
|
cur.execute(
|
|
"SELECT name, value, expiry FROM moz_cookies "
|
|
"WHERE host LIKE '%tralgo.app%' "
|
|
"AND (name LIKE 'wordpress_logged_in%' "
|
|
" OR name LIKE 'wp2fa_device%')"
|
|
)
|
|
auth_rows = cur.fetchall()
|
|
finally:
|
|
conn.close()
|
|
|
|
if not all_rows:
|
|
print(" Keine tralgo.app Cookies gefunden.")
|
|
else:
|
|
print(f" Alle tralgo.app Cookies ({len(all_rows)} Stück):")
|
|
for name, value, expiry, host in all_rows:
|
|
expired = expiry < now
|
|
exp_str = (f"abgelaufen seit {now - expiry}s"
|
|
if expired else f"gültig noch {expiry - now}s")
|
|
print(f" [{exp_str:>30}] {name[:60]}")
|
|
|
|
if auth_rows:
|
|
print(f"\n Auth-Cookies für GizerBridge ({len(auth_rows)} Stück):")
|
|
for name, value, expiry in auth_rows:
|
|
expired = expiry < now
|
|
status = "ABGELAUFEN" if expired else "OK"
|
|
print(f" [{status}] {name[:60]}")
|
|
print(f" Wert: {value[:60]}...")
|
|
else:
|
|
print("\n FEHLER: Keine Auth-Cookies (wordpress_logged_in / wp2fa_device).")
|
|
print(" Lösung: Firefox öffnen → tralgo.app → einloggen →")
|
|
print(" 'Für 30 Tage merken' aktivieren.")
|
|
|
|
except Exception as e:
|
|
print(f" Fehler beim Lesen: {e}")
|
|
finally:
|
|
if tmp and os.path.exists(tmp):
|
|
try:
|
|
os.unlink(tmp)
|
|
except OSError:
|
|
pass
|
|
|
|
# ── 3. Final verdict ──────────────────────────────────────────────────────
|
|
print(f"\n{SEPARATOR}")
|
|
from cookie_reader import find_cookies
|
|
cookies, err = find_cookies()
|
|
if err:
|
|
print(f"Ergebnis: FEHLER — {err}")
|
|
else:
|
|
print(f"Ergebnis: OK — {len(cookies)} Auth-Cookie(s) bereit")
|
|
for name in cookies:
|
|
print(f" {name[:60]}")
|
|
print(SEPARATOR)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|