#!/usr/bin/env node

/**
 * Prüft die Berechtigungen für SSL-Zertifikate
 */

import { readFileSync, statSync } from 'fs';
import { execSync } from 'child_process';

const certPath = '/etc/letsencrypt/live/tt-tagebuch.de/privkey.pem';

console.log('🔍 Prüfe SSL-Zertifikat-Berechtigungen...\n');

// Prüfe, welcher Benutzer den Service ausführt
try {
  const serviceUser = execSync('systemctl show -p User tt-tagebuch.service 2>/dev/null | cut -d= -f2', { encoding: 'utf-8' }).trim();
  console.log(`📋 Service-Benutzer: ${serviceUser}`);
  
  // Prüfe Gruppen des Service-Benutzers
  const groups = execSync(`groups ${serviceUser} 2>/dev/null || id -Gn ${serviceUser} 2>/dev/null`, { encoding: 'utf-8' }).trim();
  console.log(`📋 Gruppen von ${serviceUser}: ${groups}`);
  
  if (groups.includes('ssl-cert')) {
    console.log('✅ Service-Benutzer ist in der ssl-cert-Gruppe');
  } else {
    console.log('❌ Service-Benutzer ist NICHT in der ssl-cert-Gruppe!');
    console.log('   → Führe aus: sudo ./scripts/fixCertPermissions.sh');
  }
} catch (err) {
  console.error('⚠️  Konnte Service-Benutzer nicht ermitteln:', err.message);
}

// Prüfe Dateiberechtigungen
try {
  const stats = statSync(certPath);
  console.log(`\n📜 Dateiberechtigungen für ${certPath}:`);
  console.log(`   Owner UID: ${stats.uid}`);
  console.log(`   Group GID: ${stats.gid}`);
  console.log(`   Mode: ${stats.mode.toString(8)}`);
  
  // Prüfe, ob Datei lesbar ist
  try {
    readFileSync(certPath);
    console.log('✅ Datei ist lesbar');
  } catch (err) {
    console.error('❌ Datei ist NICHT lesbar:', err.message);
  }
} catch (err) {
  console.error(`❌ Konnte Datei nicht prüfen: ${err.message}`);
}

// Prüfe Gruppen-Berechtigungen
try {
  const groupInfo = execSync('getent group ssl-cert 2>/dev/null', { encoding: 'utf-8' }).trim();
  console.log(`\n👥 ssl-cert-Gruppe: ${groupInfo}`);
} catch (err) {
  console.error('❌ ssl-cert-Gruppe existiert nicht!');
}

