![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.quebec/public_html/scripts/ |
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
interface TestUser {
id: string;
email: string;
name: string | null;
role: string;
expectedAccess: string[];
}
async function testImpersonationSetup() {
console.log('๐ Testing Impersonation System Setup\n');
try {
// Get all users for impersonation testing
const users = await prisma.user.findMany({
select: {
id: true,
email: true,
name: true,
role: true,
},
orderBy: {
role: 'desc'
}
});
console.log('๐ฅ Available Users for Impersonation Testing:');
console.log('=' .repeat(60));
const testUsers: TestUser[] = users.map(user => ({
...user,
expectedAccess: getExpectedAccess(user.role)
}));
testUsers.forEach((user, index) => {
const roleEmoji = getRoleEmoji(user.role);
console.log(`${index + 1}. ${roleEmoji} ${user.name || 'No Name'}`);
console.log(` ๐ง Email: ${user.email}`);
console.log(` ๐ Role: ${user.role}`);
console.log(` ๐ฏ Expected Access: ${user.expectedAccess.join(', ')}`);
console.log(` ๐ ID: ${user.id}`);
console.log('');
});
// Check impersonation sessions
const activeSessions = await prisma.impersonationSession?.findMany({
where: { isActive: true },
include: {
originalUser: { select: { email: true, name: true, role: true } },
impersonatedUser: { select: { email: true, name: true, role: true } }
}
}) || [];
console.log('๐ Active Impersonation Sessions:');
console.log('=' .repeat(40));
if (activeSessions.length === 0) {
console.log('โ
No active impersonation sessions (clean state)');
} else {
activeSessions.forEach((session, index) => {
console.log(`${index + 1}. ${session.originalUser.name} (${session.originalUser.role}) โ ${session.impersonatedUser.name} (${session.impersonatedUser.role})`);
console.log(` Started: ${session.createdAt}`);
console.log(` IP: ${session.ipAddress}`);
});
}
console.log('\n๐งช Impersonation Test Instructions:');
console.log('=' .repeat(50));
console.log('1. ๐ Log in as Super Admin (dannywperez@msn.com)');
console.log('2. ๐ฏ Go to /admin/users or /admin/super');
console.log('3. ๐ Click "Impersonate" on any user');
console.log('4. โ
Verify you see their dashboard and permissions');
console.log('5. ๐ Click "Stop Impersonating" to return');
console.log('6. ๐ Repeat for different roles');
console.log('\n๐ Test Checklist:');
console.log('=' .repeat(30));
const roleTests = [
{ role: 'USER', tests: ['Basic dashboard', 'Profile access', 'Application submission', 'No admin features'] },
{ role: 'ASSISTANT', tests: ['Basic admin dashboard', 'Limited case access', 'No user management'] },
{ role: 'CLERK', tests: ['Research tools', 'Document access', 'Case viewing', 'No case assignment'] },
{ role: 'SECRETARY', tests: ['Admin dashboard', 'Case management', 'Document handling', 'No user creation'] },
{ role: 'LAWYER', tests: ['Full case access', 'Case assignments', 'Analytics dashboard', 'Client communication'] },
{ role: 'ADMIN', tests: ['User management', 'Newsletter system', 'Export functions', 'All admin features'] }
];
roleTests.forEach(test => {
console.log(`\n${getRoleEmoji(test.role)} ${test.role} Tests:`);
test.tests.forEach(testItem => {
console.log(` โ ${testItem}`);
});
});
console.log('\n๐จ Security Tests:');
console.log('=' .repeat(25));
console.log('โ Cannot impersonate SUPERADMIN');
console.log('โ Impersonation session is logged');
console.log('โ Original user can stop impersonation');
console.log('โ Session expires properly');
console.log('โ Rate limiting works');
console.log('\n๐ Quick Access URLs:');
console.log('=' .repeat(30));
console.log('๐ Super Admin: https://localhost:3443/admin/super');
console.log('๐ฅ User Management: https://localhost:3443/admin/users');
console.log('๐ Analytics: https://localhost:3443/admin/analytics-dashboard');
console.log('โ๏ธ Case Assignments: https://localhost:3443/admin/case-assignments');
} catch (error) {
console.error('โ Error testing impersonation setup:', error);
} finally {
await prisma.$disconnect();
}
}
function getExpectedAccess(role: string): string[] {
switch (role) {
case 'SUPERADMIN':
case 'SUPERADMIN':
case 'SUPERADMIN':
return ['Everything', 'Impersonation', 'System Control'];
case 'ADMIN':
return ['User Management', 'Newsletter', 'Export', 'Full Admin'];
case 'LAWYER':
return ['Case Management', 'Analytics', 'Client Communication'];
case 'SECRETARY':
return ['Admin Dashboard', 'Case Support', 'Documents'];
case 'CLERK':
return ['Research Tools', 'Document Access', 'Case Viewing'];
case 'ASSISTANT':
return ['Basic Admin', 'Limited Access'];
case 'USER':
return ['Profile', 'Applications', 'Basic Dashboard'];
default:
return ['Unknown'];
}
}
function getRoleEmoji(role: string): string {
switch (role) {
case 'SUPERADMIN':
case 'SUPERADMIN':
case 'SUPERADMIN': return '๐';
case 'ADMIN': return '๐ฉโโ๏ธ';
case 'LAWYER': return 'โ๏ธ';
case 'SECRETARY': return '๐';
case 'CLERK': return '๐';
case 'ASSISTANT': return '๐ค';
case 'USER': return '๐ค';
default: return 'โ';
}
}
if (require.main === module) {
testImpersonationSetup();
}
export { testImpersonationSetup };