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/public_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/scripts/setup-detention-facility-chats-COMPLETE.js
const { PrismaClient } = require('@prisma/client');

const prisma = new PrismaClient();

async function setupCompleteDetentionFacilityChats() {
  console.log('🏢 Setting up COMPLETE Quebec 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;
    }

    // COMPLETE Quebec Detention Facilities - Official Government List
    const detentionFacilities = [
      // ========== MONTREAL REGION ==========
      {
        name: 'Bordeaux (Montréal)',
        description: 'Établissement de détention de Montréal (Bordeaux)',
        facility: 'Bordeaux',
        region: 'Montréal',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Rivière-des-Prairies (Montréal)',
        description: 'Établissement de détention de Rivière-des-Prairies',
        facility: 'Rivière-des-Prairies',
        region: 'Montréal',
        type: 'DETENTION_CENTER'
      },

      // ========== LAVAL ==========
      {
        name: 'Leclerc (Laval)',
        description: 'Établissement Leclerc de Laval - Pénitencier Fédéral',
        facility: 'Leclerc',
        region: 'Laval',
        type: 'FEDERAL_PENITENTIARY'
      },

      // ========== CAPITALE-NATIONALE (QUEBEC) ==========
      {
        name: 'Orsainville (Québec) - Hommes',
        description: 'Établissement de détention de Québec – secteur masculin',
        facility: 'Orsainville',
        region: 'Capitale-Nationale',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Orsainville (Québec) - Femmes',
        description: 'Établissement de détention de Québec – secteur féminin',
        facility: 'Orsainville',
        region: 'Capitale-Nationale',
        type: 'DETENTION_CENTER'
      },

      // ========== CÔTE-NORD ==========
      {
        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'
      },
      {
        name: 'Port-Cartier',
        description: 'Établissement de Port-Cartier - Pénitencier Fédéral',
        facility: 'Port-Cartier',
        region: 'Côte-Nord',
        type: 'FEDERAL_PENITENTIARY'
      },

      // ========== ESTRIE ==========
      {
        name: 'Sherbrooke',
        description: 'Établissement de détention de Sherbrooke',
        facility: 'Sherbrooke',
        region: 'Estrie',
        type: 'DETENTION_CENTER'
      },

      // ========== MAURICIE ET CENTRE-DU-QUÉBEC ==========
      {
        name: 'Trois-Rivières',
        description: 'Établissement de détention de Trois-Rivières',
        facility: 'Trois-Rivières',
        region: 'Mauricie et Centre-du-Québec',
        type: 'DETENTION_CENTER'
      },

      // ========== LAURENTIDES ==========
      {
        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'
      },

      // ========== OUTAOUAIS ==========
      {
        name: 'Hull (Gatineau)',
        description: 'Établissement de détention de Hull - Gatineau',
        facility: 'Hull',
        region: 'Outaouais',
        type: 'DETENTION_CENTER'
      },

      // ========== SAGUENAY–LAC-SAINT-JEAN ==========
      {
        name: 'Roberval',
        description: 'Établissement de détention de Roberval',
        facility: 'Roberval',
        region: 'Saguenay–Lac-Saint-Jean',
        type: 'DETENTION_CENTER'
      },

      // ========== BAS-SAINT-LAURENT ==========
      {
        name: 'Rimouski',
        description: 'Établissement de détention de Rimouski',
        facility: 'Rimouski',
        region: 'Bas-Saint-Laurent',
        type: 'DETENTION_CENTER'
      },

      // ========== MONTÉRÉGIE ==========
      {
        name: 'Sorel-Tracy',
        description: 'Établissement de détention de Sorel-Tracy',
        facility: 'Sorel-Tracy',
        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'
      },

      // ========== ABITIBI-TÉMISCAMINGUE ==========
      {
        name: 'Amos',
        description: 'Établissement de détention d\'Amos',
        facility: 'Amos',
        region: 'Abitibi-Témiscamingue',
        type: 'DETENTION_CENTER'
      },

      // ========== GASPÉSIE-ÎLES-DE-LA-MADELEINE ==========
      {
        name: 'New Carlisle',
        description: 'Établissement de détention de New Carlisle',
        facility: 'New Carlisle',
        region: 'Gaspésie-Îles-de-la-Madeleine',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Percé',
        description: 'Établissement de détention de Percé',
        facility: 'Percé',
        region: 'Gaspésie-Îles-de-la-Madeleine',
        type: 'DETENTION_CENTER'
      },
      {
        name: 'Havre-Aubert (Îles-de-la-Madeleine)',
        description: 'Établissement de détention de Havre-Aubert',
        facility: 'Havre-Aubert',
        region: 'Gaspésie-Îles-de-la-Madeleine',
        type: 'DETENTION_CENTER'
      },

      // ========== WOMEN'S FACILITIES ==========
      {
        name: 'Maison Tanguay (Femmes)',
        description: 'Maison Tanguay - Établissement pour femmes - Montréal',
        facility: 'Maison Tanguay',
        region: 'Montréal',
        type: 'WOMENS_FACILITY'
      },
      {
        name: 'Joliette (Femmes Fédéral)',
        description: 'Établissement Joliette pour femmes - Pénitencier Fédéral',
        facility: 'Joliette',
        region: 'Lanaudière',
        type: 'FEDERAL_WOMENS'
      },

      // ========== YOUTH FACILITIES ==========
      {
        name: 'Cité-des-Prairies (Jeunes)',
        description: 'Centre jeunesse Cité-des-Prairies - Montréal',
        facility: 'Cité-des-Prairies',
        region: 'Montréal',
        type: 'YOUTH_CENTER'
      },

      // ========== FEDERAL PENITENTIARIES ==========
      {
        name: 'Archambault (Fédéral)',
        description: 'Établissement Archambault - Pénitencier Fédéral',
        facility: 'Archambault',
        region: 'Laurentides',
        type: 'FEDERAL_PENITENTIARY'
      },
      {
        name: 'Cowansville (Fédéral)',
        description: 'Établissement Cowansville - Pénitencier Fédéral',
        facility: 'Cowansville',
        region: 'Montérégie',
        type: 'FEDERAL_PENITENTIARY'
      },
      {
        name: 'Donnacona (Fédéral)',
        description: 'Établissement Donnacona - Pénitencier Fédéral',
        facility: 'Donnacona',
        region: 'Capitale-Nationale',
        type: 'FEDERAL_PENITENTIARY'
      },
      {
        name: 'La Macaza (Fédéral)',
        description: 'Établissement La Macaza - Pénitencier Fédéral',
        facility: 'La Macaza',
        region: 'Laurentides',
        type: 'FEDERAL_PENITENTIARY'
      },
      {
        name: 'Sainte-Anne-des-Plaines (Fédéral)',
        description: 'Établissement Sainte-Anne-des-Plaines - Pénitencier Fédéral',
        facility: 'Sainte-Anne-des-Plaines',
        region: 'Laurentides',
        type: 'FEDERAL_PENITENTIARY'
      }
    ];

    // 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'
      },
      {
        name: 'Support Communautaire',
        description: 'Aide et support communautaire',
        type: 'GROUP',
        isPublic: true,
        category: 'COMMUNITY'
      },
      {
        name: 'Réintégration Sociale',
        description: 'Aide à la réintégration après la libération',
        type: 'GROUP',
        isPublic: true,
        category: 'REINTEGRATION'
      }
    ];

    let createdCount = 0;
    let skippedCount = 0;

    // Create detention facility rooms
    console.log('🏢 Creating ALL Quebec 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 enhanced 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📊 COMPLETE 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🗺️ COMPLETE QUEBEC COVERAGE:');
    console.log('   📍 Montreal: Bordeaux, Rivière-des-Prairies, Maison Tanguay, Cité-des-Prairies');
    console.log('   📍 Laval: Leclerc (Federal)');
    console.log('   📍 Capitale-Nationale: Orsainville (M/F), Donnacona (Federal)');
    console.log('   📍 Côte-Nord: Baie-Comeau, Sept-Îles, Port-Cartier (Federal)');
    console.log('   📍 Estrie: Sherbrooke');
    console.log('   📍 Mauricie: Trois-Rivières');
    console.log('   📍 Laurentides: Saint-Jérôme, Archambault, La Macaza, Sainte-Anne-des-Plaines (Federal)');
    console.log('   📍 Outaouais: Hull (Gatineau)');
    console.log('   📍 Saguenay: Roberval');
    console.log('   📍 Bas-Saint-Laurent: Rimouski');
    console.log('   📍 Montérégie: Sorel-Tracy, Saint-Hyacinthe, Cowansville (Federal)');
    console.log('   📍 Abitibi-Témiscamingue: Amos');
    console.log('   📍 Gaspésie-Îles: New Carlisle, Percé, Havre-Aubert');
    console.log('   📍 Lanaudière: Joliette (Federal Women)');

    console.log('\n🏛️ FACILITY BREAKDOWN:');
    console.log('   🏢 Provincial Detention Centers: 17');
    console.log('   🏛️ Federal Penitentiaries: 8');
    console.log('   👩 Women\'s Facilities: 2');
    console.log('   👶 Youth Centers: 1');
    console.log('   🆘 Support Services: 7');

    console.log('\n✨ EVERY Quebec detention establishment now has dedicated chat rooms!');

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

setupCompleteDetentionFacilityChats(); 

CasperSecurity Mini