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.ca/private_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/private_html/scripts/recover-original-data.ts
import { PrismaClient } from '@prisma/client';
import { hash } from 'bcryptjs';

const prisma = new PrismaClient();

async function recoverOriginalData() {
  console.log('🔄 Starting data recovery process...');

  try {
    // Create Justin Wee (Admin/Law Firm Owner)
    const justinWee = await prisma.user.upsert({
      where: { email: 'justin.wee@adwlaw.ca' },
      update: {},
      create: {
        email: 'justin.wee@adwlaw.ca',
        name: 'Justin Wee',
        username: 'justin-wee',
        password: await hash('admin123', 12),
        role: 'ADMIN',
        profilePicture: '/images/lawyers/justin-wee.jpg',
        bio: 'Founding partner of ADW Law Firm. Specializing in complex litigation and human rights cases.',
        title: 'Managing Partner',
        specialization: 'Complex Litigation & Human Rights',
        barNumber: 'QC-12345',
        yearsOfExperience: 15,
        education: 'McGill University Law School (LLB), Harvard Law School (LLM)',
        hourlyRate: 550.0,
        proBono: true,
        boldnessRating: 4.9,
        transparencyRating: 4.8,
        averageRating: 4.85,
        totalCases: 156,
        wonCases: 134,
        isVerified: true,
        xpPoints: 5200,
        level: 12,
        isProfilePublic: true,
        officeLocation: 'Montreal, QC',
        workPhone: '(514) 555-0000'
      }
    });

    console.log('âś… Created Justin Wee (Admin)');

    // Create the ADW Law Firm Team
    const adwTeam = await Promise.all([
      prisma.user.create({
        data: {
          email: 'audrey.labrecque@adwlaw.ca',
          name: 'Audrey Labrecque',
          username: 'audrey-labrecque',
          password: await hash('lawyer123', 12),
          role: 'LAWYER',
          profilePicture: '/images/lawyers/audrey-labrecque.jpg',
          bio: 'Senior associate specializing in criminal defense and prison rights.',
          title: 'Senior Associate',
          specialization: 'Criminal Defense & Prison Rights',
          barNumber: 'QC-23456',
          yearsOfExperience: 8,
          education: 'Université de Montréal Law School (LLB)',
          hourlyRate: 420.0,
          proBono: true,
          boldnessRating: 4.7,
          transparencyRating: 4.6,
          averageRating: 4.65,
          totalCases: 89,
          wonCases: 67,
          isVerified: true,
          xpPoints: 2100,
          level: 7,
          isProfilePublic: true,
          officeLocation: 'Montreal, QC',
          workPhone: '(514) 555-0001'
        }
      }),

      prisma.user.create({
        data: {
          email: 'jerome.aucoin@adwlaw.ca',
          name: 'Jérôme Aucoin',
          username: 'jerome-aucoin',
          password: await hash('lawyer123', 12),
          role: 'LAWYER',
          profilePicture: '/images/lawyers/jerome-aucoin.jpg',
          bio: 'Associate lawyer focused on civil rights and constitutional law.',
          title: 'Associate',
          specialization: 'Civil Rights & Constitutional Law',
          barNumber: 'QC-34567',
          yearsOfExperience: 5,
          education: 'McGill University Law School (LLB)',
          hourlyRate: 380.0,
          proBono: true,
          boldnessRating: 4.5,
          transparencyRating: 4.7,
          averageRating: 4.6,
          totalCases: 45,
          wonCases: 32,
          isVerified: true,
          xpPoints: 1200,
          level: 5,
          isProfilePublic: true,
          officeLocation: 'Montreal, QC',
          workPhone: '(514) 555-0002'
        }
      }),

      prisma.user.create({
        data: {
          email: 'marie-christine.vachon@adwlaw.ca',
          name: 'Marie-Christine Vachon',
          username: 'marie-christine-vachon',
          password: await hash('lawyer123', 12),
          role: 'LAWYER',
          profilePicture: '/images/lawyers/marie-christine-vachon.jpg',
          bio: 'Junior associate specializing in family law and human rights.',
          title: 'Junior Associate',
          specialization: 'Family Law & Human Rights',
          barNumber: 'QC-45678',
          yearsOfExperience: 3,
          education: 'Université Laval Law School (LLB)',
          hourlyRate: 320.0,
          proBono: true,
          boldnessRating: 4.3,
          transparencyRating: 4.5,
          averageRating: 4.4,
          totalCases: 23,
          wonCases: 18,
          isVerified: true,
          xpPoints: 800,
          level: 3,
          isProfilePublic: true,
          officeLocation: 'Montreal, QC',
          workPhone: '(514) 555-0003'
        }
      })
    ]);

    console.log('âś… Created ADW Law Firm team');

    // Create the Bordeaux Prison Class Action Case
    const bordeauxCase = await prisma.legalCase.create({
      data: {
        title: 'Bordeaux Prison Conditions Class Action',
        description: 'Historic class action against Quebec for systemic rights violations at Bordeaux Prison affecting thousands of detainees from January 2022 to present.',
        publicSummary: 'Seeking justice for inhumane conditions, inadequate healthcare, and rights violations at Bordeaux Prison. Join if you were detained during the class period.',
        caseNumber: '2024QCCS4540',
        caseType: 'class_action',
        status: 'active',
        jurisdiction: 'Quebec Superior Court',
        court: 'Quebec Superior Court',
        category: 'HUMAN_RIGHTS',
        legalArea: 'Human Rights',
        urgencyLevel: 'HIGH',
        priority: 'high',
        isPublic: true,
        isAcceptingApplications: true,
        estimatedValue: 50000000,
        riskLevel: 'MEDIUM',
        tags: JSON.stringify(['prison-rights', 'class-action', 'human-rights', 'bordeaux', 'systemic-violations']),
        viewCount: 1247,
        supporterCount: 89,
        leadLawyerId: justinWee.id,
        createdBy: justinWee.id,
        filingDate: new Date('2024-03-12'),
        applicationDeadline: new Date('2025-12-31')
      }
    });

    console.log('âś… Created Bordeaux Prison Class Action case');

    // Create additional sample cases
    const additionalCases = await Promise.all([
      prisma.legalCase.create({
        data: {
          title: 'Wrongful Conviction Appeal - Michael Thompson',
          description: 'Appeal case for Michael Thompson who was wrongfully convicted of armed robbery in 2019. New evidence has emerged including DNA proof and witness recantation.',
          publicSummary: 'Fighting to overturn a wrongful conviction with new DNA evidence. Seeking experienced criminal appeals lawyer.',
          caseType: 'appeal',
          status: 'active',
          jurisdiction: 'Ontario Court of Appeal',
          court: 'Ontario Court of Appeal',
          category: 'CRIMINAL',
          legalArea: 'Criminal Appeals',
          urgencyLevel: 'URGENT',
          priority: 'urgent',
          isPublic: true,
          isAcceptingApplications: true,
          estimatedValue: 2000000,
          riskLevel: 'HIGH',
          tags: JSON.stringify(['wrongful-conviction', 'dna-evidence', 'appeal', 'criminal-law', 'innocence']),
          viewCount: 892,
          supporterCount: 156,
          leadLawyerId: adwTeam[0].id, // Audrey Labrecque
          createdBy: adwTeam[0].id,
          filingDate: new Date('2024-06-15'),
          applicationDeadline: new Date('2025-03-01')
        }
      }),

      prisma.legalCase.create({
        data: {
          title: 'Environmental Justice Class Action',
          description: 'Class action against industrial pollution affecting indigenous communities in Northern Quebec.',
          publicSummary: 'Seeking justice for environmental damage and health impacts on indigenous communities.',
          caseNumber: 'ENV2024001',
          caseType: 'class_action',
          status: 'active',
          jurisdiction: 'Federal Court',
          court: 'Federal Court of Canada',
          category: 'ENVIRONMENTAL',
          legalArea: 'Environmental Law',
          urgencyLevel: 'HIGH',
          priority: 'medium',
          isPublic: true,
          isAcceptingApplications: true,
          estimatedValue: 15000000,
          riskLevel: 'MEDIUM',
          tags: JSON.stringify(['environmental', 'indigenous-rights', 'pollution', 'class-action']),
          viewCount: 567,
          supporterCount: 78,
          leadLawyerId: adwTeam[1].id, // Jérôme Aucoin
          createdBy: adwTeam[1].id,
          filingDate: new Date('2024-01-15'),
          applicationDeadline: new Date('2025-06-30')
        }
      })
    ]);

    console.log('âś… Created additional sample cases');

    // Create chat rooms for the team
    const chatRooms = await Promise.all([
      prisma.chatRoom.create({
        data: {
          name: 'ADW Team',
          description: 'Private channel for ADW Law Firm team members',
          isPublic: false,
          createdBy: { connect: { id: justinWee.id } }
        }
      }),

      prisma.chatRoom.create({
        data: {
          name: 'Bordeaux Case Team',
          description: 'Team channel for Bordeaux Prison class action case',
          isPublic: false,
          createdBy: { connect: { id: justinWee.id } }
        }
      }),

      prisma.chatRoom.create({
        data: {
          name: 'Général',
          description: 'Canal de discussion général pour tous les membres.',
          isPublic: true,
          createdBy: { connect: { id: justinWee.id } }
        }
      })
    ]);

    console.log('âś… Created team chat rooms');

    // Add team members to chat rooms
    const allTeamMembers = [justinWee, ...adwTeam];
    
    for (const member of allTeamMembers) {
      for (const room of chatRooms) {
        await prisma.chatParticipant.upsert({
          where: {
            userId_chatRoomId: {
              userId: member.id,
              chatRoomId: room.id
            }
          },
          update: {},
          create: {
            userId: member.id,
            chatRoomId: room.id,
            role: member.id === justinWee.id ? 'ADMIN' : 'MEMBER'
          }
        });
      }
    }

    console.log('âś… Added team members to chat rooms');

    // Create subscription plans
    const subscriptionPlans = await Promise.all([
      prisma.subscriptionPlan.create({
        data: {
          name: 'Basic Plan',
          description: 'Essential features for individual lawyers',
          price: 29.99,
          currency: 'CAD',
          billingCycle: 'MONTHLY',
          features: JSON.stringify([
            'Basic case management',
            'Client communication tools',
            'Document storage (5GB)',
            'Email support'
          ]),
          isActive: true,
          maxUsers: 1,
          maxCases: 10
        }
      }),

      prisma.subscriptionPlan.create({
        data: {
          name: 'Professional Plan',
          description: 'Advanced features for growing law firms',
          price: 79.99,
          currency: 'CAD',
          billingCycle: 'MONTHLY',
          features: JSON.stringify([
            'Advanced case management',
            'Team collaboration tools',
            'Document storage (50GB)',
            'Priority support',
            'Analytics dashboard',
            'Custom branding'
          ]),
          isActive: true,
          maxUsers: 5,
          maxCases: 50
        }
      }),

      prisma.subscriptionPlan.create({
        data: {
          name: 'Enterprise Plan',
          description: 'Complete solution for large law firms',
          price: 199.99,
          currency: 'CAD',
          billingCycle: 'MONTHLY',
          features: JSON.stringify([
            'Unlimited case management',
            'Advanced team collaboration',
            'Unlimited document storage',
            '24/7 priority support',
            'Advanced analytics',
            'Custom integrations',
            'Dedicated account manager'
          ]),
          isActive: true,
          maxUsers: -1, // Unlimited
          maxCases: -1 // Unlimited
        }
      })
    ]);

    console.log('âś… Created subscription plans');

    // Create business profile for Justin Wee
    const businessProfile = await prisma.businessProfile.create({
      data: {
        ownerId: justinWee.id,
        businessName: 'ADW Law Firm',
        businessType: 'LAW_FIRM',
        industry: 'Legal Services',
        description: 'Leading law firm specializing in human rights, criminal defense, and complex litigation.',
        logo: '/images/lawyers/justin-wee.jpg',
        website: 'https://adwlaw.ca',
        phone: '(514) 555-0000',
        email: 'info@adwlaw.ca',
        address: '1234 McGill Street, Montreal, QC H3A 1A1',
        registrationNumber: 'QC-123456789',
        taxId: '123456789RT0001',
        employeeCount: "15",
        annualRevenue: "2500000",
        isPublic: true,
        isVerified: true
      }
    });

    console.log('âś… Created ADW Law Firm business profile');

    console.log('🎉 Data recovery completed successfully!');
    console.log('');
    console.log('đź“‹ Recovered Data Summary:');
    console.log('- Justin Wee (Admin) - justin.wee@adwlaw.ca');
    console.log('- Audrey Labrecque - audrey.labrecque@adwlaw.ca');
    console.log('- Jérôme Aucoin - jerome.aucoin@adwlaw.ca');
    console.log('- Marie-Christine Vachon - marie-christine.vachon@adwlaw.ca');
    console.log('- Bordeaux Prison Class Action case');
    console.log('- Additional sample cases');
    console.log('- Team chat rooms');
    console.log('- Subscription plans');
    console.log('- ADW Law Firm business profile');

  } catch (error) {
    console.error('❌ Error during data recovery:', error);
    throw error;
  } finally {
    await prisma.$disconnect();
  }
}

recoverOriginalData()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  }); 

CasperSecurity Mini