Files
moyosapp_beta.0.0.3.3_beta1/scripts/direct-auth-test.ts
2026-01-16 19:04:48 +02:00

103 lines
2.9 KiB
TypeScript

// Direct test of authentication flow
import * as dotenv from 'dotenv';
import path from 'node:path';
import fs from 'node:fs';
const envPaths = [
path.resolve(process.cwd(), '.env.local'),
path.resolve(process.cwd(), '.env'),
];
for (const envPath of envPaths) {
if (fs.existsSync(envPath)) {
dotenv.config({ path: envPath });
break;
}
}
import { PrismaClient } from '@prisma/client';
import { compare, hash } from 'bcryptjs';
let prismaAdapter: any = undefined;
try {
const { PrismaPg } = require('@prisma/adapter-pg');
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
prismaAdapter = new PrismaPg(pool);
} catch (error) {
// Adapter not available
}
// Prisma 7.x: adapter is passed via connection string, not constructor
const prisma = new PrismaClient({
log: ['error'],
});
async function testAuth() {
const username = 'admin';
const password = '*MrV0D0cy#';
console.log('\n🧪 Direct Authentication Test\n');
console.log(`Username: ${username}`);
console.log(`Password: ${password}`);
console.log(`Password length: ${password.length}`);
console.log(`Password bytes:`, Buffer.from(password).toString('hex'));
try {
// Get admin
const admin = await prisma.admin.findUnique({
where: { username },
});
if (!admin) {
console.error('❌ Admin not found!');
return;
}
console.log(`\n✅ Admin found:`);
console.log(` ID: ${admin.id}`);
console.log(` Username: ${admin.username}`);
console.log(` Password hash: ${admin.password.substring(0, 30)}...`);
// Test password comparison
console.log('\n🔐 Testing password comparison...');
const isValid = await compare(password, admin.password);
console.log(`Result: ${isValid ? '✅ VALID' : '❌ INVALID'}`);
if (!isValid) {
console.log('\n🔧 Resetting password...');
const newHash = await hash(password, 10);
await prisma.admin.update({
where: { username },
data: { password: newHash },
});
console.log('✅ Password reset complete');
// Test again
const isValidAfter = await compare(password, admin.password);
console.log(`\n🔐 Testing again after reset: ${isValidAfter ? '✅ VALID' : '❌ INVALID'}`);
}
// Test with exact same function as auth.ts
console.log('\n🔍 Testing with auth.ts logic...');
const trimmedUsername = username.trim();
const trimmedPassword = password.trim();
const admin2 = await prisma.admin.findUnique({
where: { username: trimmedUsername },
});
if (admin2) {
const isValid2 = await compare(trimmedPassword, admin2.password);
console.log(`Result: ${isValid2 ? '✅ VALID' : '❌ INVALID'}`);
}
} catch (error) {
console.error('❌ Error:', error);
} finally {
await prisma.$disconnect();
}
}
testAuth();