47 lines
1.8 KiB
Text
47 lines
1.8 KiB
Text
|
|
import asyncio
|
||
|
|
import asyncpg
|
||
|
|
import os
|
||
|
|
from passlib.context import CryptContext
|
||
|
|
|
||
|
|
DB_URL = os.getenv("DATABASE_URL", "postgresql://teeoff_admin:teeoff_secret_password@db:5432/teeoff")
|
||
|
|
|
||
|
|
# Vi setter opp passord-sjekkeren AKKURAT slik main.py gjør det
|
||
|
|
pwd_context = CryptContext(schemes=["pbkdf2_sha256"], deprecated="auto")
|
||
|
|
|
||
|
|
async def test_sannheten():
|
||
|
|
print("\n" + "="*50)
|
||
|
|
print(" 🔍 TEE OFF SANNHETSSERUM")
|
||
|
|
print("="*50)
|
||
|
|
|
||
|
|
username = "Envide Webutvikling"
|
||
|
|
test_password = "Solveig Vilde Ingvild Gina" # Sørg for at dette er det du satte sist!
|
||
|
|
|
||
|
|
try:
|
||
|
|
conn = await asyncpg.connect(DB_URL)
|
||
|
|
row = await conn.fetchrow("SELECT password_hash FROM admins WHERE username = $1", username)
|
||
|
|
|
||
|
|
if not row:
|
||
|
|
print("❌ FEIL: Fant ikke brukeren i det hele tatt!")
|
||
|
|
return
|
||
|
|
|
||
|
|
db_hash = row['password_hash']
|
||
|
|
print(f"1. Hash funnet i databasen: {db_hash[:30]}...")
|
||
|
|
|
||
|
|
print(f"2. Tester mot passordet: '{test_password}'")
|
||
|
|
|
||
|
|
# Den magiske testen
|
||
|
|
is_valid = pwd_context.verify(test_password, db_hash)
|
||
|
|
|
||
|
|
print("-" * 50)
|
||
|
|
if is_valid:
|
||
|
|
print("✅ SUKSESS! Passordet og hashen stemmer 100% overens.")
|
||
|
|
print("➡️ KONKLUSJON: Hashingen fungerer perfekt. Problemet MÅ være at FastAPI (main.py) ikke klarer å lese JSON-dataene fra curl/frontend riktig.")
|
||
|
|
else:
|
||
|
|
print("❌ FEIL! Passordet stemmer IKKE med hashen i databasen.")
|
||
|
|
print("➡️ KONKLUSJON: Scriptet som oppdaterer passordet gjør en feil (f.eks. legger til usynlige tegn), eller lagringen i databasen blir korrupt.")
|
||
|
|
|
||
|
|
finally:
|
||
|
|
await conn.close()
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
asyncio.run(test_sannheten())
|