#!/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 άδεια έκδοσης.

source "/etc/os-release"


# Έλεγχος για ύπαρξη του zenity. Χωρίς zenity δεν είναι καθόλου λειτουργικό το
# κυρίως script αλλά και τα υπόλοιπα. Το Tails OS πάντως έρχεται με zenity! 
# Αν θέλετε να χρησιμοποιήσετε το script με άλλο εργαλείο απλά αλλάξτε την εντολή
check_zenity_exists() {
	if [ "$(command -v zenity)" == "" ]; then
	    echo -ne "\r\n Λείπει το$YEL zenity$NC από το$BLE Tails OS$NC /$BLE Linux Desktop$NC σας\n"
	    echo -ne "\r\n To κυρίως script χρειάζεται$BLE zenity$NC ή κάποιο παρόμοιο!"
	    export -f anamoni_ektelesis
	    anamoni_ektelesis "3" &
	    echo -ne "\r\n\n\r"
	    read -p " Πατήστε κάποιο κουμπί για να κλείσει το μήνυμα " 
	    exit
	fi
}

# Μετά το Tails 7.0 εμφανίστηκαν και μπορεί να εμφανιστούν και στα δικά σας ...
# script τα GtK-Warnings και για να μην εμφανίζονται πλέον πρέπει τα stderr
# να στέλνονται στο... /dev/null . Είναι ένα πρόβλημα που επηρεάζει ως επί το
# τις εντολές που εμφανίζονται στις οθόνες των τερματικών γιατί προέρχεται από
# το compile του GNOME με το debug να είναι ενεργό!
zen_no_gtkwarnings(){
    zenity "$@" 2>/dev/null
}


# μας φέρνει το 1ο τερματικό απο την λίστα που καλούμε
yparxi_termatikou(){
    myarray=($@)
    for i in "${myarray[@]}"; do
        if [ "$(command -v $i)" != "" ]; then
            echo "$i"
            break
        fi
    done
}

# Για να δουλεύουν τα σενάρια ακόμα και αν δεν έχει tor service ο Η/Υ 
yparxi_tor(){
    local tor_exist=false
    if [ "$(command -v tor)" != "" ]; then
        local tor_exist=true 
    fi
    echo "$tor_exist"
}


# ελέγχουμε αν είναι Tails OS ή Debian OS like έκδοση Linux.
# To Tails OS είναι Debian !
# APT commands έχουν τα 1.2.3.4.6 και 8 σενάρια οπότε αν θέλετε να κάνετε fork
# συμπεριλαμβάνοντας τις εντολές update, upgrade & install δέστε τις εντολές που
# χρησιμοποιώ όπως και τα προγράμματα που χρειάζονται και αναλόγως δημιουργήστε
# την δικιά σας έκδοση του NoTails.. Tails Μενού για το λειτουργικό σας .
# Ομως ενδέχεται να τα έχετε εγκαταστήσει και να μην θέλετε να κάνετε τίποτα στο
# λειτουργικό όπως άκριβως εξαίρεσα όλες τις εντολές gsettings από το 1o σενάριο
# ώστε να μην ασχολείται καθόλου το NoTails-Tails-Μενού. Έτσι μπορείτε να 
# προσθέσετε τα δικά σας σενάρια που είναι ήδη συμβατά απόλυτα με το τερματικό 
# σας αλλά και με το λειτουργικό σας και να θέλετε να τα ενσωματώσετε στο μενού 
# κάτι που είναι πανεύκολο αφού φτάνει να προσθέσετε μόνο 2 γραμμές στο αρχικό 
# σενάριο NoTails-Tails-Μενού.sh που καλεί το desktop αρχείο. Γιαυτό τον λόγο 
# πρόσθεσα μια προειδοποίηση λάθους στο αρχικό script αλλά και μηνύματα που 
# αναφέρουν ότι δεν εκτελούνται οι λειτουργίες λόγω διαφορετικού λειτουργικού.
# Παρόλα αυτά τα 5,7,8 όπως και το αρχικό σενάριο δουλεύουν κανονικά σε όλα τα 
# Linux Distributions! NoTails-Tails-Μενού. 
detect_Tails_OS_Linux_Desktop(){
    if  [ "${ID}" == "tails" ] && [ "$(command -v apt)" != "" ]; then 
        # είναι κοινά στα Tails 6 και Tails 7
        linux_type="Tails OS"
    elif [ "${ID}" != "tails" ] && [ "$(command -v apt)" != "" ]; then 
        # είναι κοινά σε όλες τις εκδόσεις Debian 
        linux_type="Debian like Linux"
    elif [ "${ID}" != "tails" ] && [ "$(command -v dnf)" != "" ]; then 
        # είναι κοινά σε όλες τις εκδόσεις Red Hat. 
        linux_type="Red Hat like Linux"
    elif [ "${ID}" != "tails" ] && [ "$(command -v zypper)" != "" ]; then 
        # είναι κοινά σε όλες τις εκδόσεις Suse. 
        linux_type="Suse like Linux"
    elif [ "${ID}" != "tails" ] && [ "$(command -v apk)" != "" ]; then 
        # είναι κοινά σε όλες τις εκδόσεις Alpine. 
        linux_type="Alpine like Linux"
    elif [ "${ID}" != "tails" ] && [ "$(command -v pacman)" != "" ]; then 
        # είναι κοινά σε όλες τις εκδόσεις Arch. 
        linux_type="Arch like Linux"
    else 
        linux_type="Unsupported Linux OS"
        echo -ne "\r\n Μη υποστηριζόμενη έκδοση$BLE Linux$NC. Το$BLE NoTails..Tails$NC είναι$BLE Debian$NC \n"
        echo -ne "\r\n Δεν γίνεται να εκτελεστούν οι εντολές$GRE apt$NC που έχει το$BLE Tails OS$NC! \n"
        zenity --error --width=350 --height=240 --text \
    "  Μη υποστηριζόμενη έκδοση Linux. Το NoTails..Tails είναι Debian  \n\n
     Δεν γίνεται να εκτελεστούν οι εντολές apt που έχει το Tails OS! \n"
        sleep 1
    fi
}


# πρέπει να βρούμε την διαταγή εκτέλεσης του tor browser στα Desktops
detect_tor_browser_command_on_desktop() {
    list_of_tor_browser_commands=( "tor-browser" "torbrowser-launcher" )
    local tor_browser_command="tor-browser"
    for t in "${list_of_tor_browser_commands[@]}"; do
        if [ "$(echo $(command -v $t))" != "" ]; then
            local tor_browser_command="$t"
            break
        fi 
    done
    echo "$tor_browser_command"    
}


# Πρέπει να βρούμε αν χρησιμοποιεί bachground image στην επιφάνεια εργασίας.
detect_Wallpaper(){
    # GNOME SETTINGS
    # gsettings get org.gnome.desktop.background picture-uri
    # gsettings get org.gnome.desktop.background picture-uri-dark
    local wallpaper_used=false
    if [ "$dark_desktop" == "true" ]; then
        if [ "$(gsettings get org.gnome.desktop.background picture-uri-dark)" != "'file:///usr/share/backgrounds/gnome/adwaita-d.jpg'" ]; then
            local wallpaper_used=true
        fi
    else 
        if [ "$(gsettings get org.gnome.desktop.background picture-uri)" != "'file:///usr/share/tails/desktop_wallpaper.png'" ]; then
            local wallpaper_used=true
        fi
    fi
    echo "$wallpaper_used"
}

#  μια αναμονή (sleep) με στύλ
anamoni_ektelesis(){
    if [ ! -n "$1" ]; then
        local endz=12 
    else 
        local endz=$1
    fi
    for i in $(seq 1 $endz); do sleep 1 2>&1 && echo -ne "$BLE.$NC\033[K"; done
}

# γενέθλια χρήσης με υπενθύμιση σε zenity --info μια φορά τον χρόνο.
genethlia_xrisis(){
    local first_data=$(head -n 2 "$LICENCE_LOC/ok.txt")
    local second_data=$(head -n -3 "$LICENCE_LOC/ok.txt" | tail -n +3 "$LICENCE_LOC/ok.txt")
    local mera_ok=$(awk '{print $9,$10,$11,$12,$13,$14,$15}' <<< "$first_data")
    #echo "$mera_ok"
    local correct_mera="$(echo "$mera_ok" | tr -d '.\n\r\t')"
    #echo "$correct_mera"
    local correct_seconds="$(echo $(date -d "$correct_mera" +%s))"
    #echo "$correct_seconds"
    local now_seconds="$(echo $(date +%s))"
    local diff_secs="$(($now_seconds - $correct_seconds))"
    local years_on=$(($diff_secs / 31536000))
    local xronia_genethliwn=$(awk '{print $10}' <<< "$second_data")
    #echo "$xronia_genethliwn"
    if [ "$xronia_genethliwn" == "" ]; then
        sed -i '2 a Δηλαδή ο Χρήστης χρησιμοποιεί το NoTails.. Tails μενού για '${years_on}' ολόκληρα χρόνια!' $LICENCE_LOC/ok.txt
    fi
    if ([ "$years_on" != "$xronia_genethliwn" ] && [ $years_on -gt 0 ]); then
        sed -i '3 c Δηλαδή ο Χρήστης χρησιμοποιεί το NoTails.. Tails μενού για '${years_on}' ολόκληρα χρόνια!' $LICENCE_LOC/ok.txt        
        local etos="έτη"
        local symplirwthike="Συμπληρώθηκαν"
        if [ $years_on -eq 1 ]; then
            local symplirwthike="Συμπληρώθηκε"
            local etos="έτος"
        fi
        zenity --info --title="Γενέθλιο Μήνυμα Χρήσης του NoTails.. Tails Μενού στα Ελληνικά." \
        --no-wrap \
        --text="
                ✦✦✦ $symplirwthike $years_on $etos που χρησιμοποιείτε το NoTails.. Tails Μενού στα Ελληνικά ✦✦✦                  

    Αυτό εκτός του ότι με ευχαριστεί ως δημιουργό του με χαροποιεί γιατί αφού χρησιμοποιείτε το μενού σημαίνει ότι συνεχίζουν να
    υπάρχουν τα Tails OS και Tor που όσο περνάει ο καιρός θα γίνεται και από περισσοτέρους αντιληπτό ότι δεν προστατεύουν μόνο
    την Ανωνυμία μας αλλά και την Ψηφιακή Ελευθερία μας !                                                                               \n
                                                                                                       
    Αν θέλετε να μάθετε νέα για το μενού ή άλλα θέματα επισκεφθείτε τις δύο ιστοσελίδες μου που είναι a) https://rebelstreamers.com
    και b) https://el.gamelink.gr. Αν πάλι θελήσετε να με χαροποιήσετε, όπως θέλω και εγώ μπορείτε να στείλετε την XMR Αγάπη σας σε 
    αυτήν την διεύθυνση :                                                                                                           \n 
    85CQcgvGYd86ZhjpBi5J65d7vYjeeMHvf3MP9TaTTVQvUM6BP3vwB8aF34BqPsufsFb2C8CmHA9M9MRVceWAQdCY2TpwmYB     
                                                                                                       
    Υ.Γ. Το παρόν μήνυμα θα εμφανίζεται από εδώ και πέρα μόνο μια φορά κάθε χρόνο.                                                  \n
                  
              Να είστε πάντα Καλά και Ελεύθεροι !!!
    "
    fi
}

# Δύο χρήσιμες συναρτήσεις zenity για τα προγράμματά σας ώστε να έχετε sudo login
elegxos_login() {
    i=0
    while true 
    do  
        ((i++))
        if [ $i -lt 10 ]; then
            if sudo -S <<< "$adminpassword" su &> /dev/null ; then
                echo -ne "\r\n\nΣωστό password! Συνεχίζουμε στο$BLE Zenity$NC παράθυρο τώρα "
                export -f anamoni_ektelesis
                anamoni_ektelesis "3" &
                break
            else
                apotyximenes_fores=$((10-$i))
                echo -ne "\r Λάθος password. Έχετε ακόμα $YEL $apotyximenes_fores $NC προσπάθειες "
                export -f anamoni_ektelesis
                anamoni_ektelesis "$apotyximenes_fores" &
                adminpassword=$(zenity --forms --title='Sudo Pass' --cancel-label='___' --text \
    ' Γράψτε το σωστό Administrator Password \nΑυτό που βάλατε πριν συνδεθείτε στο Tails\n \
        Έχετε συνολικά 10 προσπάθειες ...' \
    --add-password=' Pasword: ') 
            fi
        else 
            echo -ne "\r\n\nΜάλλον δεν θυμάστε το$GRE Administrator Password$NC ή δεν το βάλατε ποτέ!\n"
            echo -ne "\rΒγαίνω αφού κλείσετε το παράθυρο που άνοιξε "
            export -f anamoni_ektelesis
            anamoni_ektelesis "77" &
            zen_no_gtkwarnings --error  --width=570 --height=240 \
    --title='Λάθος Κωδικός!' \
    --text='<b> \r\n Πληκτρολογήσατε 10 Φορές Λάθος Κωδικό... \n \
Είτε δεν τον θυμάστε και δεν μπορεί να βρεθεί με τίποτα... \n \
Είτε δεν τον βάλατε ποτέ και δεν θα μπορέσετε να συνδεθείτε και ποτέ. \n \
Πρέπει να στήσετε το Persistent Storage έχοντας βάλει Administrator Password! \n \</b>'
            exit
        fi
    done
}


sudo_passs(){
    adminpassword=$(zenity --forms --title='Sudo Pass' --text \
    ' Πληκτρολογείστε τον Κωδικό της Amnesia \n *(Το Administrator Password του Login)* ' \
    --cancel-label="Έξοδος" \
    --add-password=' Password: ')


    case $? in
        0 ) 
           export -f elegxos_login
           elegxos_login
           ;;
        1 )
           echo -ne  "\r\n Το μενού θα κλείσει σε 3 δευτερόλεπτα "
           export -f anamoni_ektelesis
           anamoni_ektelesis "3"
           exit 0
           ;;
        -1 )
           echo -ne  "\r\n Απροσδιόριστο πρόβλημα "
           export -f anamoni_ektelesis
           anamoni_ektelesis "5"
           exit 1
           ;; 
    esac
}

# κάνουμε μη αποδεκτό το sudo pass για να μην ξαναχρησιμοποιηθεί ως αποθηκευμένο 
# oτην επόμενη συνεδρία ή σε επόμενο script. Δεν βρήκα παράμετρο που να το αφαιρεί
# εντελώς από την μνήμη και δεν ήθελα να χρησιμοποιήσω εντολές που μπορεί να 
# δημιουργήσουν πρόβληματα εκεί που δεν υπάρχουν.
sudoK(){
    sudo -k
}