# !/bin/bash
# ████████╗░█████╗░██╗░░██╗░█████╗░██╗░░░██╗██████╗░███╗░░██╗
# ╚══██╔══╝██╔══██╗██║░██╔╝██╔══██╗██║░░░██║██╔══██╗████╗░██║
# ░░░██║░░░██║░░██║█████═╝░██║░░██║╚██╗░██╔╝██████╔╝██╔██╗██║
# ░░░██║░░░██║░░██║██╔═██╗░██║░░██║░╚████╔╝░██╔═══╝░██║╚████║
# ░░░██║░░░╚█████╔╝██║░╚██╗╚█████╔╝░░╚██╔╝░░██║░░░░░██║░╚███║
# ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░╚═╝░░░░░╚═╝░░╚══╝

clear
echo -e "\e[33m──────────────────────────────────────────\033[0m"
echo -e "\E[40;1;37m      DELETE USER EXPIRED IN PROCESS      \E[0m"
echo -e "\e[33m──────────────────────────────────────────\033[0m"
fun_bar() {
    CMD[0]="$1"
    CMD[1]="$2"
    (
        [[ -e $HOME/fim ]] && rm $HOME/fim
        ${CMD[0]} -y >/dev/null 2>&1
        ${CMD[1]} -y >/dev/null 2>&1
        touch $HOME/fim
    ) >/dev/null 2>&1 &
    tput civis
    echo -ne "\033[0;33mPlease Wait Loading \033[1;37m- \033[0;33m["
    while true; do
        for ((i = 0; i < 18; i++)); do
            echo -ne "\033[0;32m#"
            sleep 0.1s
        done
        [[ -e $HOME/fim ]] && rm $HOME/fim && break
        echo -e "\033[0;33m]"
        sleep 1s
        tput cuu1
        tput dl1
        echo -ne "\033[0;33mPlease Wait Loading \033[1;37m- \033[0;33m["
    done
    echo -e "\033[0;33m]\033[1;37m -\033[1;32m OK !\033[1;37m"
    tput cnorm
}

res1() {
##----- Auto Remove Vmess
data=($(cat /etc/xray/config.json | grep '^###' | cut -d ' ' -f 2 | sort | uniq))
now=$(date +"%Y-%m-%d")
for user in "${data[@]}"; do
    exp=$(grep -w "^### $user" "/etc/xray/config.json" | cut -d ' ' -f 3 | sort | uniq)
    d1=$(date -d "$exp" +%s)
    d2=$(date -d "$now" +%s)
    exp2=$(((d1 - d2) / 86400))
    if [[ "$exp2" -le "0" ]]; then
        sed -i "/^### $user $exp/,/^},{/d" /etc/xray/config.json
        sed -i "/^### $user $exp/d" /etc/vmess/.vmess.db

        rm -r /etc/vmess/$user
        rm -r /etc/kyt/limit/vmess/ip/$user
        rm -r /var/www/html/vmess-$user.txt > /dev/null 2>&1
        rm -r /etc/limit/vmess/$user > /dev/null 2>&1

        rm -r /etc/kyt/limit/vmess/ip/Trial-* > /dev/null 2>&1
        rm -r /var/www/html/vmess-Trial-* > /dev/null 2>&1
        rm -r /etc/vmess/Trial-* > /dev/null 2>&1
        rm -r /etc/limit/vmess/Trial-* > /dev/null 2>&1
        
    fi
done

#----- Auto Remove Vless
data=($(cat /etc/xray/config.json | grep '^#&' | cut -d ' ' -f 2 | sort | uniq))
now=$(date +"%Y-%m-%d")
for user in "${data[@]}"; do
    exp=$(grep -w "^#& $user" "/etc/xray/config.json" | cut -d ' ' -f 3 | sort | uniq)
    d1=$(date -d "$exp" +%s)
    d2=$(date -d "$now" +%s)
    exp2=$(((d1 - d2) / 86400))
    if [[ "$exp2" -le "0" ]]; then
        sed -i "/^#& $user $exp/,/^},{/d" /etc/xray/config.json
        sed -i "/^### $user $exp/d" /etc/vless/.vless.db

        rm -r /etc/vless/$user
        rm -r /etc/kyt/limit/vless/ip/$user
        rm -r /var/www/html/vless-$user.txt > /dev/null 2>&1
        rm -r /etc/limit/vless/$user > /dev/null 2>&1

        rm -r /etc/kyt/limit/vless/ip/Trial-* > /dev/null 2>&1
        rm -r /var/www/html/vless-Trial-* > /dev/null 2>&1
        rm -r /etc/vless/Trial-* > /dev/null 2>&1
        rm -r /etc/limit/vless/Trial-* > /dev/null 2>&1
    fi
done

#----- Auto Remove Trojan
data=($(cat /etc/xray/config.json | grep '^#!' | cut -d ' ' -f 2 | sort | uniq))
now=$(date +"%Y-%m-%d")
for user in "${data[@]}"; do
    exp=$(grep -w "^#! $user" "/etc/xray/config.json" | cut -d ' ' -f 3 | sort | uniq)
    d1=$(date -d "$exp" +%s)
    d2=$(date -d "$now" +%s)
    exp2=$(((d1 - d2) / 86400))
    if [[ "$exp2" -le "0" ]]; then
        sed -i "/^#! $user $exp/,/^},{/d" /etc/xray/config.json
        sed -i "/^### $user $exp/d" /etc/trojan/.trojan.db

        rm -r /etc/trojan/$user
        rm -r /etc/kyt/limit/trojan/ip/$user
        rm -r /var/www/html/trojan-$user.txt > /dev/null 2>&1
        rm -r /etc/limit/trojan/$user > /dev/null 2>&1

        rm -r /etc/kyt/limit/trojan/ip/Trial-* > /dev/null 2>&1
        rm -r /var/www/html/trojan-Trial-* > /dev/null 2>&1
        rm -r /etc/trojan/Trial-* > /dev/null 2>&1
        rm -r /etc/limit/trojan/Trial-* > /dev/null 2>&1
    fi
done

##------ Auto Remove SSH
hariini=$(date +%d-%m-%Y)
cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >/tmp/expirelist.txt
totalaccounts=$(cat /tmp/expirelist.txt | wc -l)
for ((i = 1; i <= $totalaccounts; i++)); do
    tuserval=$(head -n $i /tmp/expirelist.txt | tail -n 1)
    username=$(echo $tuserval | cut -f1 -d:)
    userexp=$(echo $tuserval | cut -f2 -d:)
    userexpireinseconds=$(($userexp * 86400))
    tglexp=$(date -d @$userexpireinseconds)
    tgl=$(echo $tglexp | awk -F" " '{print $3}')
    while [ ${#tgl} -lt 2 ]; do
        tgl="0"$tgl
    done
    while [ ${#username} -lt 15 ]; do
        username=$username" "
    done
    bulantahun=$(echo $tglexp | awk -F" " '{print $2,$6}')
    todaystime=$(date +%s)
    if [ $userexpireinseconds -ge $todaystime ]; then
        :
    else
        userdel $username > /dev/null 2>&1
        sed -i "/^### $username/d" /etc/ssh/.ssh.db
        rm -r /var/www/html/ssh-$username.txt > /dev/null 2>&1
        rm -r /etc/kyt/limit/ssh/ip/Trial-*  > /dev/null 2>&1
    fi
done

# Langkah 1: Ambil daftar nama yang valid dari /etc/xray/config.json
cat /etc/xray/config.json | grep '^###' | cut -d ' ' -f 2 | sort | uniq > /tmp/valid_vmess.txt
cat /etc/xray/config.json | grep '^#&' | cut -d ' ' -f 2 | sort | uniq > /tmp/valid_vless.txt
cat /etc/xray/config.json | grep '^#!' | cut -d ' ' -f 2 | sort | uniq > /tmp/valid_trojan.txt

# Langkah 2: Ambil daftar nama pengguna dari /etc/shadow
cat /etc/shadow | cut -d: -f1 | sed '/^$/d' > /tmp/valid_ssh.txt  # Ganti nama file valid menjadi valid_ssh.txt

# Langkah 3: Bandingkan dan hapus file yang tidak ada di daftar valid_names.txt
# Aturan 1: Menghapus file dari /etc/vmess/*, /etc/kyt/limit/vmess/ip/*, dan /etc/limit/vmess/*
for file in /etc/vmess/* /etc/kyt/limit/vmess/ip/* /etc/limit/vmess/*; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi .txt
    if ! grep -qx "$filename" /tmp/valid_vmess.txt; then
        echo "Menghapus $file karena tidak ada di daftar valid vmess."
        rm -r "$file"  # Menghapus file yang tidak ada di daftar valid
    fi
done

# Aturan 2: Menghapus file dengan nama awalan "vmess-*.txt" di /var/www/html/
for file in /var/www/html/vmess-*.txt; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi
    base_filename="${filename#vmess-}"  # Menghapus awalan "vmess-"
    
    # Cek jika nama file tidak ada di dalam daftar valid_vmess.txt
    if ! grep -qx "$base_filename" /tmp/valid_vmess.txt; then
        echo "Menghapus $file karena tidak ada di daftar valid vmess."
        
        # Periksa apakah file ada sebelum mencoba menghapusnya
        if [ -e "$file" ]; then
            rm -r "$file"  # Menghapus file yang tidak ada di daftar valid
        else
            echo "File $file tidak ditemukan, melewati."
        fi
    fi
done

# Aturan 3: Menghapus file dari /etc/vless/*, /etc/kyt/limit/vless/ip/*, dan /etc/limit/vless/*
for file in /etc/vless/* /etc/kyt/limit/vless/ip/* /etc/limit/vless/*; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi .txt
    if ! grep -qx "$filename" /tmp/valid_vless.txt; then
        echo "Menghapus $file karena tidak ada di daftar valid vless."
        rm -r "$file"  # Menghapus file yang tidak ada di daftar valid
    fi
done

# Aturan 4: Menghapus file dengan nama awalan "vless-*.txt" di /var/www/html/
for file in /var/www/html/vless-*.txt; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi
    base_filename="${filename#vless-}"  # Menghapus awalan "vless-"
    
    # Cek jika nama file tidak ada di dalam daftar valid_vless.txt
    if ! grep -qx "$base_filename" /tmp/valid_vless.txt; then
        echo "Menghapus $file karena tidak ada di daftar valid vless."
        
        # Periksa apakah file ada sebelum mencoba menghapusnya
        if [ -e "$file" ]; then
            rm -r "$file"  # Menghapus file yang tidak ada di daftar valid
        else
            echo "File $file tidak ditemukan, melewati."
        fi
    fi
done

# Aturan 5: Menghapus file dari /etc/trojan/*, /etc/kyt/limit/trojan/ip/*, dan /etc/limit/trojan/*
for file in /etc/trojan/* /etc/kyt/limit/trojan/ip/* /etc/limit/trojan/*; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi .txt
    if ! grep -qx "$filename" /tmp/valid_trojan.txt; then
        echo "Menghapus $file karena tidak ada di daftar valid trojan."
        rm -r "$file"  # Menghapus file yang tidak ada di daftar valid
    fi
done

# Aturan 6: Menghapus file dengan nama awalan "trojan-*.txt" di /var/www/html/
for file in /var/www/html/trojan-*.txt; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi
    base_filename="${filename#trojan-}"  # Menghapus awalan "trojan-"
    # Cek jika nama file tidak ada di dalam daftar valid_trojan.txt
    if ! grep -qx "$base_filename" /tmp/valid_trojan.txt; then
        echo "Menghapus $file karena tidak ada di daftar valid trojan."
        
        # Periksa apakah file ada sebelum mencoba menghapusnya
        if [ -e "$file" ]; then
            rm -r "$file"  # Menghapus file yang tidak ada di daftar valid
        else
            echo "File $file tidak ditemukan, melewati."
        fi
    fi
done

# Langkah 7: Menghapus file SSH yang tidak ada dalam daftar valid_ssh.txt
for file in /var/www/html/ssh-*.txt; do
    filename=$(basename "$file" .txt)  # Mengambil nama file tanpa ekstensi
    base_filename="${filename#ssh-}"  # Menghapus awalan "ssh-"
    if ! grep -qx "$base_filename" /tmp/valid_ssh.txt; then
        echo "Menghapus $file karena tidak ada di daftar pengguna valid."
        rm -r "$file"  # Menghapus file yang tidak ada dalam daftar pengguna valid
    fi
done

for file in $(grep -E "###|#&#" /etc/vmess/.vmess.db | awk '{print $2}'); do
    # Cek apakah pengguna ada di /tmp/valid_vmess.txt
    if ! grep -qx "$file" /tmp/valid_vmess.txt; then
        echo "Menghapus $file karena tidak ada di daftar pengguna valid."
        # Hapus baris yang sesuai
        sed -i "/^### $file/d" /etc/vmess/.vmess.db
        sed -i "/^#&# $file/d" /etc/vmess/.vmess.db
    fi
done

for file in $(grep -E "###|#&#" /etc/vless/.vless.db | awk '{print $2}'); do
    # Cek apakah pengguna ada di /tmp/valid_vless.txt
    if ! grep -qx "$file" /tmp/valid_vless.txt; then
        echo "Menghapus $file karena tidak ada di daftar pengguna valid."
        # Hapus baris yang sesuai
        sed -i "/^### $file/d" /etc/vless/.vless.db
        sed -i "/^#&# $file/d" /etc/vless/.vless.db
    fi
done

for file in $(grep -E "###|#&#" /etc/trojan/.trojan.db | awk '{print $2}'); do
    # Cek apakah pengguna ada di /tmp/valid_vless.txt
    if ! grep -qx "$file" /tmp/valid_trojan.txt; then
        echo "Menghapus $file karena tidak ada di daftar pengguna valid."
        # Hapus baris yang sesuai
        sed -i "/^### $file/d" /etc/trojan/.trojan.db
        sed -i "/^#&# $file/d" /etc/trojan/.trojan.db
    fi
done

for file in $(grep -E "###|#&#" /etc/ssh/.ssh.db | awk '{print $2}'); do
    # Cek apakah pengguna ada di /tmp/valid_ssh.txt
    if ! grep -qx "$file" /tmp/valid_ssh.txt; then
        echo "Menghapus $file karena tidak ada di daftar pengguna valid."
        # Hapus baris yang sesuai
        sed -i "/^### $file/d" /etc/ssh/.ssh.db
        sed -i "/^#&# $file/d" /etc/ssh/.ssh.db
    fi
done

systemctl restart ssh
systemctl restart xray

# Opsional: Menghapus file sementara
rm -f /tmp/valid_vmess.txt
rm -f /tmp/valid_vless.txt
rm -f /tmp/valid_trojan.txt
rm -f /tmp/valid_ssh.txt
}

echo -e ""
echo -e "Processing Delete Expired Users"
fun_bar 'res1'
echo -e ""
echo -e "\e[33m──────────────────────────────────────────\033[0m" 
echo -e ""