#!/bin/bash
## Το NoTails.. Tails Μενού στα Ελληνικά είναι ένα αρθρωτό (modular) Zenity
## σενάριο (script) ανοιχτού κώδικα (open source) για το Tails OS Live USB.
##
## Copyright (C) 2025  Rebelstreamers, version 1.0 από το gamelink.gr
##
## Το πρόγραμμα αυτό μεταφέρεται σε εσάς "AS IS" και χωρίς καμία υποχρέωση από 
## τον δημιουργό του και καλύπτεται απο την AGPLv3 GNU άδεια έκδοσης.

# set -x

title3="3.Διαχείριση και Ρύθμιση του Tor"
echo -e '\033]2;'$title3'\007'
folder_name="NoTails..Tails-Files"

### ΒΟΗΘΕΙΑ ΓΙΑ ΤΙΣ ΕΝΤΟΛΕΣ ΚΑΙ ΤΟ ΝΑΝΟ
#
# η εντολή 6) Κατάσταση του Tor Service κλείνει πατώντας το πλήκτρο q αγγλικό.
# η εντολή 3) Επεξεργάσου τις ρυθμίσεις του Tor Service γίνεται με το nano.
# Περιηγείστε μέσα στο αρχείο με τα πλήκτρα που έχουν πάνω τους τα βέλη. 
# Επικολλούμε ότι θέλουμε με δεξί mouse click + paste και με ctrl+x σώζετε το 
# αρχείο και κλείνει.

# χρειάζεται για την 3η επιλογή λόγω kgx 
terminal_list=("kgx" "gnome-terminal" "ptyxis" "mate-terminal" ) 

#
# ------------ ΑΠΟ ΕΔΩ ΚΑΙ ΚΑΤΩ ΟΤΙ ΠΕΙΡΑΖΕΤΕ ΕΧΕΙ ΕΠΙΔΡΑΣΗ ------------ 
# ----------------- ΣΤΗΝ ΑΡΧΙΚΗ ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ SCRIPT ------------------
#

source "$HOME/Persistent/$folder_name/NT_Functions.sh"

# Χρώματα για τις οθόνες των τερματικών, 
# Με true έχετε τα χρώματα που έχω βάλει εγώ, με ble τα κάνετε όλα μπλε, με gre 
# όλα πράσινα, με yel όλα κίτρινα, με red όλα κόκκινα και με οτιδήποτε εκτός από 
# αυτές τις 5 ονομασίες δεν θα εμφανίζονται καθόλου χρώματα!
# Σημείωση: οι μεταβλητές του κάθε script ορίζουν τα χρώματα στο script του & μόνο
use_color="true"
NC='\033[0m'

# Βάλτε το δικό σας χρώμα αν θέλετε σαν ένα νέο elif αλλά αλλάξτε και την use_color
if [[ "$use_color" == "true" ]]; then 
    RED='\033[1;31m'; GRE='\033[1;32m'; YEL='\033[1;33m'; BLE='\033[1;36m'
elif [[ "$use_color" == "ble" ]]; then 
    RED='\033[1;36m'; GRE='\033[1;36m'; YEL='\033[1;36m'; BLE='\033[1;36m'
elif [[ "$use_color" == "gre" ]]; then
    RED='\033[1;32m'; GRE='\033[1;32m'; YEL='\033[1;32m'; BLE='\033[1;32m'
elif [[ "$use_color" == "yel" ]]; then
    RED='\033[1;33m'; GRE='\033[1;33m'; YEL='\033[1;33m'; BLE='\033[1;33m'
elif [[ "$use_color" == "red" ]]; then
    RED='\033[1;31m'; GRE='\033[1;31m'; YEL='\033[1;31m'; BLE='\033[1;31m'
else
    #χωρίς χρώματα καθόλου
    unset -v RED; unset -v GRE; unset -v YEL; unset -v BLE; unset -v NC
fi


# Έλεγχος για ύπαρξη του zenity. Χωρίς zenity που χρησιμοποεί το Tails OS δεν 
# έχει καμιά απολύτως χρησιμότητα το σενάριο αυτό. 
check_zenity_exists

# χρειάζεται για την 3η επιλογή λόγω kgx 
to_termatiko_mas="$(yparxi_termatikou "${terminal_list[@]}")"


# για την 3η επιλογή μόνο χρειάζεται να ξέρουμε το τερματικό μας...
if [ "$to_termatiko_mas" == "kgx" ]; then
    # Tails 7
    tails_version="7"
elif [ "$to_termatiko_mas" == "gnome-terminal" ]; then
    # αν το χρησιμοποιήσετε σε TAILS 6 ή σε Linux με το GNOME XORG που δεν βάζει
    # το kgx. Τα Debian desktop που έχουν το gnome-terminal ως προκαθορισμένο είναι:
    # 1) UBUNTU 22 LTS 2) Cinnamon 3) Metacity kai 3) το Debian Default Desktop
    tails_version="6"
elif [ "$to_termatiko_mas" == "ptyxis" ]; then
    # αν το χρησιμοποιήσετε σε νεο UBUNTU DESKTOP (μετα την 25 εκδοση). Τα παλια
    # αλλά ακόμα ενεργά (22 LTS)χρησιμοποιουν gnome-terminal
    tails_version="7u"
elif [ "$to_termatiko_mas" == "mate-terminal" ]; then
    # αν το χρησιμοποιήσετε σε MATE DESKTOP
    tails_version="7m"     
else
    #σημαίνει οτι η συνάρτηση δεν επέστρεψε τίποτα από την terminal_list
    echo -ne "\r\n    Μη υποστηριζόμενη έκδοση$BLE Tails OS$NC ή$BLE Linux$NC Desktop\n"
    echo -ne "\r\n To script δεν μπορεί να εκτελέσει σωστά τις εντολές χωρίς συμβατό τερματικό! \n"
    zenity --error --width=350 --height=240 --text \
"    Μη υποστηριζόμενη έκδοση Tails OS ή Linux Desktop \n\n
Δεν γίνεται να εκτελεστούν σωστά οι εντολές χωρίς συμβατό τερματικό! \n"
    sleep 3
fi


# δημιουργύμε την εντολή του τερματικού όπως στο κυρίως σενάριο χωρίς όμως
# επιπλέον μεταβλητές . Αν τις θέλετε βάλτε τις 
if [ "$tails_version" == "7" ]; then
    term_command='kgx'
elif [ "$tails_version" == "6" ]; then
    if [ "$linux_type" == "Tails OS" ]; then
        term_command='gnome-terminal --window --hide-menubar'
    else 
         term_command='gnome-terminal --hide-menubar'
    fi
elif [ "$tails_version" == "7u" ]; then
    term_command='ptyxis'
elif [ "$tails_version" == "7m" ]; then
    term_command='mate-terminal --hide-menubar'
else
    # οχι τερματικό αλλά του λέμε να τρέξουν με την bash!
    echo -ne "Δεν υπάρχει συμβατό τερματικό!"
    term_command="bash"
fi

# αν το λειτουργικό δεν είναι Debian Like πρέπει να προειδοποιήσουμε τους χρήστες
# οτι οι εντολές εγκατάστασεις δεν θα λειτουργήσουν
detect_Tails_OS_Linux_Desktop


# To login μας είτε ως μόνο του είτε από το κύριο σενάριο
if [ "$1" == "" ]; then
    echo -e "\r\n Θα χρειαστεί να γράψετε μια φορά το$BLE admin password$NC ως$GRE Sudo Pass$NC \n"
    sudo_passs
else
    adminz="$1"
    read -s -p " To script χρησιμοποιεί το admin password που έχετε ήδη βάλει " \
    adminpassword <<< $adminz;  
fi



# Μετά το Tails 7.0 δεν υπάρχει το gnome-terminal το οποίο έχει αντικατασταθεί
# απο το gnome-console (kgx). Όμως παρόλο που η αντικατάσταση του δημιουργησε 
# προβλήματα που έλυσα έφτασα σε ένα σημείο όπου δημιουργήθηκε ένα πρόβλημα που
# δεν μπορούσα να βρω καμία λύση και να τρέξω το nano με το kgx ώστε να κάνουμε
# επεξεργασία του αρχείου ρυθμίσεων του torrc δηλαδή του tor. Η εντολή έβγαζε το 
# εξής μήνυμα. MESA: error: Failed to attach to x11 shm
# Το καλό νέο είναι οτι το gnome-terminal δεν θα σταματήσει να υπάρχει στο gnome
# και ότι η εγκατάσταση του δεν επηρεάζει το προκαθορισμένο απο το gnome πλεον 
# kgx. Έτσι η ταυτόχρονη τους ύπαρξη δεν δημιουργεί κανένα πρόβλημα μέχρι να 
# απαλειφθούν όλα τα προβλήματα συμβατότητας με το νέο τερματικό.

check_install_gnome_terminal(){
    echo -e "\r\n "
    echo -e "\r\n Για να επεξεργαστούμε το$BLE Tor$NC θα χρειαστεί το εγκαταστήσουμε το ..."
    echo -e "\r\n $BLE gnome-terminal$NC γιατί έπαψε να υπάρχει από το$BLE Tails 7.0$NC και μετά."
    echo -e "\r\n Οπότε θα το εγκαταστήσω χωρίς να δημιουργείται πρόβλημα στο$BLE Console$NC ! "
    export -f anamoni_ektelesis
    anamoni_ektelesis "5"
    if ([ "$linux_type" == "Tails OS" ] || [ "$linux_type" == "Debian like Linux" ]); then
        sudo -S <<< "${adminpassword}" apt -y install gnome-terminal
    elif [ "$linux_type" == "Red Hat like Linux" ]; then
        sudo -S <<< "${adminpassword}" dnf install -y gnome-terminal
    elif [ "$linux_type" == "Suse like Linux" ]; then
        sudo -S <<< "${adminpassword}" zypper --non-interactive install -f  gnome-terminal
    elif [ "$linux_type" == "Alpine like Linux" ]; then
        sudo -S <<< "${adminpassword}" apk add gnome-terminal
            elif [ "$linux_type" == "Arch like Linux" ]; then
        sudo -S <<< "${adminpassword}" pacman -S gnome-terminal
    else 
         echo -e "\r\n Η έκδοση$GRE Linux$NC σας είναι άγνωστη και θα πρέπει να εγκαταστήσετε μόνος/η σας το$BLE gnome-terminal$NC !  \n"
    fi

    # export -f anamoni_ektelesis
    anamoni_ektelesis
}


clear

reset_tor(){
    sudo -S <<< "${adminpassword}" systemctl stop tor@default
    sleep 2
    sudo -S <<< "${adminpassword}" find /var/lib/tor/ -mindepth 1 -delete
    sleep 2
    sudo -S <<< "${adminpassword}" sed -i -e '$aDisableNetwork 1' /etc/tor/torrc 
    sleep 2
    sudo -S <<< "${adminpassword}" systemctl start tor@default
    sleep 2
    sudo -S <<< "${adminpassword}" systemctl restart tor.service
}



PS3="Διαλέξτε μια εντολή πληκτρολογώντας τον αριθμό + enter : "

initial_item1=$(echo -e "${BLE}Ξεκίνα${NC} το${BLE} Tor${NC} Service")
initial_item2=$(echo -e "${RED}Σταμάτα${NC} το${BLE} Tor${NC} Service")
initial_item3=$(echo -e "${YEL}Επεξεργάσου${NC} τις ρυθμίσεις του${BLE} Tor${NC} Service")
initial_item4=$(echo -e "Επαναφορά του${BLE} Tor${NC} Service στην Αρχική του Κατάσταση")
initial_item5=$(echo -e "${GRE}Επανεκκίνησε${NC} το${BLE} Tor${NC} Service")
initial_item6=$(echo -e "Κατάσταση του${BLE} Tor${NC} Service")

items=( "$initial_item1" "$initial_item2"  "$initial_item3" "$initial_item4" \
      "$initial_item5" "$initial_item6" )


while true; do
    select item in "${items[@]}" Έξοδος
    do
        case $REPLY in
            1 ) clear ; 
                sudo -S <<< "${adminpassword}"  systemctl start tor.service  ; 
                clear ; break
                ;;
            2 ) clear ; 
                sudo -S <<< "${adminpassword}"  systemctl stop tor.service ; 
                clear ; break
                ;;
            3 ) clear ;
                if [ "$term_command" == "kgx" ]; then
                    if [ "$(command -v gnome-terminal)" == "" ]; then
                        export -f check_install_gnome_terminal ;
                        check_install_gnome_terminal ;
                    fi
                    sudo -S <<< "${adminpassword}"  systemctl stop tor.service ;
                    sleep 1 ;
                    # O nano είναι ο πιο εύκολος editor. Με ctrl+x σώζετε το αρχείο και κλείνει
                    sudo -S <<< "${adminpassword}" gnome-terminal -- /usr/bin/nano /etc/tor/torrc ; 
                    ### new terminal ... new problems :p
                    # MESA: error: Failed to attach to x11 shm
                    #sudo -S <<< "${adminpassword}" kgx -- sh -c '/usr/bin/nano /etc/tor/torrc' ; 
                else 
                    sudo -S <<< "${adminpassword}"  systemctl stop tor.service ;
                    sleep 1 ;
                    # O nano είναι ο πιο εύκολος editor. Με ctrl+x σώζετε το αρχείο και κλείνει
                    sudo -S <<< "${adminpassword}" $term_command -- /usr/bin/nano /etc/tor/torrc ; 
                fi
                clear ; break
                ;;
            4 ) clear ;
                if [ "$linux_type" == "Tails OS" ]; then
                    export -f reset_tor ;
                    reset_tor ;
                else 
                    echo -e "Η Διαδικασία επαναφοράς είναι μόνο για το Tails" ;
                    read -p "Press enter to continue" ;
                fi
                clear ; break
                ;;
            5 ) clear ; 
                sudo -S <<< "${adminpassword}"  systemctl restart tor.service  ; 
                clear ; break
                ;;
            6 ) clear ; 
                sudo -S <<< "$adminpassword" systemctl status tor.service ;
                read -p "Press enter to continue" ;
                clear ; break
                ;;
            $((${#items[@]}+1)) | $(trap "break" SIGINT) ) echo -ne "\r\n $YEL Τέλος $NC! Εις το Επανιδείν "; 
                export -f anamoni_ektelesis ;
                anamoni_ektelesis "2" ;
                break 2
                ;;
            * ) clear ; echo -e "\r\n Άγνωστη εντολή η $YEL $REPLY $NC \n";  break;
        esac
    done
done

# για να κλεινουν τα τερματικά με Χ χωρίς επιβεβαίωση 
# trap "$(kill $(ps -p $$ -o ppid=))" exit
# exit 0