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/setup-detention-facility-chats.js
const { PrismaClient } = require('@prisma/client');

const prisma = new PrismaClient();

async function setupDetentionFacilityChats() {
  console.log('🏢 Setting up official detention establishment group chats...\n');

  try {
    // Find admin user to be the creator
    const adminUser = await prisma.user.findFirst({
      where: { role: 'ADMIN' }
    });

    if (!adminUser) {
      console.log('❌ No admin user found. Please create an admin user first.');
      return;
    }

    // Official Quebec Detention Facilities
    const detentionFacilities = [
      // Montreal Region
      {
        name: 'Bordeaux (Montréal)',
        description: 'Établissement de détention de Bordeaux - Montréal',
        facility: 'Bordeaux',
        region: 'Montréal',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Rivière-des-Prairies (Montréal)',
        description: 'Centre de détention Rivière-des-Prairies - Montréal',
        facility: 'Rivière-des-Prairies',
        region: 'Montréal',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Leclerc (Laval)',
        description: 'Institut Leclerc - Laval',
        facility: 'Leclerc',
        region: 'Laval',
        type: 'FEDERAL_PENITENTIARY'
      },

      // Quebec City Region
      {
        name: 'Orsainville (Québec)',
        description: 'Établissement de détention de Québec - Orsainville',
        facility: 'Orsainville',
        region: 'Québec',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Port-Cartier',
        description: 'Établissement de Port-Cartier',
        facility: 'Port-Cartier',
        region: 'Côte-Nord',
        type: 'FEDERAL_PENITENTIARY'
      },

      // Other Major Facilities
      {
        name: 'Sherbrooke',
        description: 'Établissement de détention de Sherbrooke',
        facility: 'Sherbrooke',
        region: 'Estrie',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Trois-Rivières',
        description: 'Établissement de détention de Trois-Rivières',
        facility: 'Trois-Rivières',
        region: 'Mauricie',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Saint-Jérôme',
        description: 'Établissement de détention de Saint-Jérôme',
        facility: 'Saint-Jérôme',
        region: 'Laurentides',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Hull (Gatineau)',
        description: 'Établissement de détention de Hull - Gatineau',
        facility: 'Hull',
        region: 'Outaouais',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Roberval',
        description: 'Établissement de détention de Roberval',
        facility: 'Roberval',
        region: 'Saguenay-Lac-Saint-Jean',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Rimouski',
        description: 'Établissement de détention de Rimouski',
        facility: 'Rimouski',
        region: 'Bas-Saint-Laurent',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Sorel',
        description: 'Établissement de détention de Sorel',
        facility: 'Sorel',
        region: 'Montérégie',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Saint-Hyacinthe',
        description: 'Établissement de détention de Saint-Hyacinthe',
        facility: 'Saint-Hyacinthe',
        region: 'Montérégie',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Baie-Comeau',
        description: 'Établissement de détention de Baie-Comeau',
        facility: 'Baie-Comeau',
        region: 'Côte-Nord',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Sept-Îles',
        description: 'Établissement de détention de Sept-Îles',
        facility: 'Sept-Îles',
        region: 'Côte-Nord',
        type: 'DETENTION_CENTER'
      },

      // Women's Facilities
      {
        name: 'Maison Tanguay (Femmes)',
        description: 'Maison Tanguay - Établissement pour femmes',
        facility: 'Maison Tanguay',
        region: 'Montréal',
        type: 'WOMENS_FACILITY'
      },
      {
        name: 'Joliette (Femmes Fédéral)',
        description: 'Établissement Joliette pour femmes - Fédéral',
        facility: 'Joliette',
        region: 'Lanaudière',
        type: 'FEDERAL_WOMENS'
      },

      // Youth Facilities
      {
        name: 'Cité-des-Prairies (Jeunes)',
        description: 'Centre jeunesse Cité-des-Prairies',
        facility: 'Cité-des-Prairies',
        region: 'Montréal',
        type: 'YOUTH_CENTER'
      }
    ];

    // General support rooms
    const supportRooms = [
      {
        name: 'Aide Juridique Générale',
        description: 'Questions juridiques générales et aide légale',
        type: 'GROUP',
        isPublic: true,
        category: 'LEGAL_SUPPORT'
      },
      {
        name: 'Transferts et Transport',
        description: 'Informations sur les transferts entre établissements',
        type: 'GROUP',
        isPublic: true,
        category: 'LOGISTICS'
      },
      {
        name: 'Visites Familiales',
        description: 'Coordination des visites familiales',
        type: 'GROUP',
        isPublic: true,
        category: 'FAMILY'
      },
      {
        name: 'Libération Conditionnelle',
        description: 'Discussions sur la libération conditionnelle',
        type: 'GROUP',
        isPublic: true,
        category: 'RELEASE'
      },
      {
        name: 'Soins Médicaux',
        description: 'Questions médicales et soins de santé',
        type: 'GROUP',
        isPublic: true,
        category: 'MEDICAL'
      }
    ];

    let createdCount = 0;
    let skippedCount = 0;

    // Create detention facility rooms
    console.log('🏢 Creating detention facility chat rooms...');
    for (const facility of detentionFacilities) {
      const existingRoom = await prisma.chatRoom.findFirst({
        where: { name: facility.name }
      });

      if (existingRoom) {
        console.log(`⏭️  Room "${facility.name}" already exists`);
        skippedCount++;
        continue;
      }

      const newRoom = await prisma.chatRoom.create({
        data: {
          name: facility.name,
          description: facility.description,
          type: 'GROUP',
          isPublic: true,
          createdBy: { connect: { id: adminUser.id } },
          participants: {
            create: {
              userId: adminUser.id,
              role: 'ADMIN'
            }
          }
        }
      });

      console.log(`✅ Created "${facility.name}" - ${facility.region}`);
      createdCount++;
    }

    // Create support rooms
    console.log('\n🆘 Creating support chat rooms...');
    for (const room of supportRooms) {
      const existingRoom = await prisma.chatRoom.findFirst({
        where: { name: room.name }
      });

      if (existingRoom) {
        console.log(`⏭️  Room "${room.name}" already exists`);
        skippedCount++;
        continue;
      }

      const newRoom = await prisma.chatRoom.create({
        data: {
          name: room.name,
          description: room.description,
          type: room.type,
          isPublic: room.isPublic,
          createdBy: { connect: { id: adminUser.id } },
          participants: {
            create: {
              userId: adminUser.id,
              role: 'ADMIN'
            }
          }
        }
      });

      console.log(`✅ Created support room "${room.name}"`);
      createdCount++;
    }

    // Add all users to public rooms
    console.log('\n👥 Adding users to public rooms...');
    const allUsers = await prisma.user.findMany();
    const publicRooms = await prisma.chatRoom.findMany({
      where: { isPublic: true },
      include: { participants: true }
    });

    for (const room of publicRooms) {
      for (const user of allUsers) {
        const isParticipant = room.participants.some(p => p.userId === user.id);
        
        if (!isParticipant) {
          await prisma.chatParticipant.create({
            data: {
              userId: user.id,
              chatRoomId: room.id,
              role: user.role === 'ADMIN' ? 'ADMIN' : 'MEMBER'
            }
          });
        }
      }
    }

    // Summary
    const totalRooms = await prisma.chatRoom.count();
    const totalParticipants = await prisma.chatParticipant.count();
    
    console.log('\n📊 SUMMARY:');
    console.log(`   ✅ Created: ${createdCount} new rooms`);
    console.log(`   ⏭️  Skipped: ${skippedCount} existing rooms`);
    console.log(`   💬 Total chat rooms: ${totalRooms}`);
    console.log(`   👥 Total participants: ${totalParticipants}`);

    console.log('\n🏢 DETENTION FACILITIES COVERED:');
    console.log('   📍 Montreal Region: Bordeaux, Rivière-des-Prairies, Leclerc');
    console.log('   📍 Quebec Region: Orsainville, Port-Cartier');
    console.log('   📍 Other Regions: Sherbrooke, Trois-Rivières, Saint-Jérôme, Hull');
    console.log('   📍 Remote Areas: Roberval, Rimouski, Baie-Comeau, Sept-Îles');
    console.log('   📍 Women\'s: Maison Tanguay, Joliette Federal');
    console.log('   📍 Youth: Cité-des-Prairies');

    console.log('\n🆘 SUPPORT SERVICES:');
    console.log('   ⚖️  Legal Aid, Family Visits, Medical Care');
    console.log('   🚐 Transfers, Conditional Release');

    console.log('\n✨ All Quebec detention establishments now have dedicated chat rooms!');

  } catch (error) {
    console.error('❌ Error setting up detention facility chats:', error);
  } finally {
    await prisma.$disconnect();
  }
}

setupDetentionFacilityChats(); 

CasperSecurity Mini