T.ME/BIBIL_0DAY
CasperSecurity


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.quebec/public_html/scripts/test-impersonation.ts
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 }; 

CasperSecurity Mini