ircu2/admin.sh

784 lines
24 KiB
Bash
Executable File

#!/bin/bash
#
# Script helper pentru administrare UnderChat IRCd
# Limba: Română
#
# Culori
VERDE='\033[0;32m'
GALBEN='\033[1;33m'
ALBASTRU='\033[0;34m'
ROSU='\033[0;31m'
NC='\033[0m'
PREFIX="${PREFIX:-$HOME/ircd}"
IRCD_BIN="$PREFIX/bin/ircd"
UMKPASSWD_BIN="$PREFIX/bin/umkpasswd"
CONFIG_FILE="${PREFIX}/etc/ircd.conf"
LOG_FILE="${PREFIX}/log/ircd.log"
# Functie pentru remediere automata probleme configurare
fix_config_issues() {
echo -e "${ALBASTRU}"
echo "╔════════════════════════════════════════╗"
echo "║ Remediere Probleme Configurare ║"
echo "╚════════════════════════════════════════╝"
echo -e "${NC}"
# Verifica daca fix-config.sh exista
local fix_script="./fix-config.sh"
if [ ! -f "$fix_script" ]; then
# Cauta in directorul curent sau parent
if [ -f "../fix-config.sh" ]; then
fix_script="../fix-config.sh"
else
echo -e "${ROSU}[EROARE]${NC} Scriptul fix-config.sh nu a fost gasit!"
echo "Descarca scriptul de pe repository sau ruleaza manual remedierile."
echo ""
echo "Presează Enter pentru a continua..."
read -r
return 1
fi
fi
echo -e "${GALBEN}[INFO]${NC} Lansez remediere automata..."
echo ""
# Ruleaza scriptul de remediere
bash "$fix_script" "$PREFIX"
echo ""
echo "Presează Enter pentru a continua..."
read -r
}
# Meniu principal
show_menu() {
clear
# Verifică dacă config există
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${ROSU}"
echo "╔════════════════════════════════════════╗"
echo "║ AVERTISMENT: Config nu găsit! ║"
echo "╚════════════════════════════════════════╝"
echo -e "${NC}"
echo ""
echo -e "${GALBEN}Fișierul de configurare nu există la:${NC}"
echo " $CONFIG_FILE"
echo ""
echo -e "${GALBEN}Opțiuni:${NC}"
echo " 1) Creare automat config standard"
echo " 2) Remediere automata probleme configurare"
echo " 3) Continue fără config (nu recomandat)"
echo ""
read -p "Alege [1-3]: " config_choice
case "$config_choice" in
1) create_default_config ;;
2) fix_config_issues ;;
3) echo -e "${GALBEN}[AVERTIZARE]${NC} Continuă fără configurație validă..." ;;
esac
fi
echo -e "${ALBASTRU}"
echo "╔════════════════════════════════════════╗"
echo "║ Administrator UnderChat IRCd ║"
echo "║ Versiune: v1.0.3 ║"
echo "╚════════════════════════════════════════╝"
echo -e "${NC}"
echo ""
echo " Opțiuni disponibile:"
echo " 1) Pornire server"
echo " 2) Oprire server"
echo " 3) Restart server"
echo " 4) Verifica status"
echo " 5) Editare configurare"
echo " 6) Vizionare log-uri"
echo " 7) Generare parola operator"
echo " 8) Test sintaxă configurare"
echo " 9) Remediere probleme configurare"
echo " 10) Iesire"
echo ""
read -p "Alege opțiune [1-10]: " choice
}
# Funcție pentru creare config standard
create_default_config() {
echo -e "${ALBASTRU}[+] Creare config standard...${NC}"
# Crează directoarele dacă nu există
mkdir -p "$(dirname "$CONFIG_FILE")"
mkdir -p "$PREFIX/log"
mkdir -p "$PREFIX/var"
# Crează un config de bază
cat > "$CONFIG_FILE" << 'EOFCONFIG'
# UnderChat IRCd - Configurare Standard
# Generated automat - Please customize!
General {
name = "irc.underchat.org";
vhost = "127.0.0.1";
description = "UnderChat IRCd Server";
numeric = 1;
dns server = "8.8.8.8";
dns server = "1.1.1.1";
};
Admin {
Location = "UnderChat Network";
Location = "Underchat Edition";
Contact = "admin@underchat.org";
};
Class {
name = "Server";
pingfreq = 1 minutes 30 seconds;
connectfreq = 5 minutes;
maxlinks = 1;
sendq = 9000000;
};
Class {
name = "Local";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 100;
usermode = "+iw";
};
Class {
name = "Other";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 2048;
usermode = "+ix";
};
Class {
name = "Opers";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 20;
local = no;
freeform = yes;
show_invis = yes;
see_chan = yes;
usermode = "+W";
};
Client {
host = "*@*";
ip = "*@*";
class = "Other";
maxlinks = 6;
};
Jupe {
nick = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
nick = "ChanServ,NickServ";
};
Port {
vhost = "127.0.0.1" 4400;
server = yes;
hidden = yes;
};
Port {
vhost = "127.0.0.1" 6667;
hidden = yes;
};
Port {
vhost = "127.0.0.1" 6697;
ssl = yes;
hidden = yes;
};
Operator {
name = "root";
password = "$PLAIN$password";
host = "*@*";
class = "Opers";
admin = yes;
};
features {
"NETWORK" = "underchat.org";
"DOMAINNAME" = "underchat.org";
"LOG" = "SYSTEM" "FILE" "EOFCONFIG_PREFIX/log/ircd.log";
"LOG" = "SYSTEM" "LEVEL" "CRIT";
"HUB" = "FALSE";
"RELIABLE_CLOCK" = "FALSE";
"WALLOPS_OPER_ONLY" = "TRUE";
"HOST_HIDING" = "TRUE";
"HIDDEN_HOST" = "users.underchat.org";
"MAXCHANNELSPERUSER" = "60";
"NICKLEN" = "12";
"PINGFREQUENCY" = "120";
"SETHOST" = "TRUE";
};
EOFCONFIG
# Setează permisiuni
chmod 600 "$CONFIG_FILE"
echo -e "${VERDE}[+] Config standard creat: $CONFIG_FILE${NC}"
echo -e "${GALBEN}[!] IMPORTANT: Editează config și schimbă parola operator!${NC}"
echo -e "${GALBEN} 1. Deschide config: nano $CONFIG_FILE${NC}"
echo -e "${GALBEN} 2. Schimbă parola: $PREFIX/bin/umkpasswd${NC}"
}
# Pornire server
start_server() {
echo -e "${VERDE}[+] Pornire server...${NC}"
echo ""
# Verificări detaliate ale fișierului de configurare
echo -e "${GALBEN}[*] Verificare fișier configurare...${NC}"
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Config nu găsit la: $CONFIG_FILE${NC}"
echo -e "${GALBEN}[!] Creează config cu admin.sh opțiune 5${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Fișier există: $CONFIG_FILE${NC}"
# Verifică permisiuni de citire
if [ ! -r "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Fișier există dar nu poate fi citit!${NC}"
echo -e "${GALBEN}[*] Permisiuni curente:${NC}"
ls -la "$CONFIG_FILE"
echo ""
echo -e "${GALBEN}[!] Rulează: chmod 600 $CONFIG_FILE${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Permisiuni OK (poate fi citit)${NC}"
# Verifică dacă fișierul nu este gol
if [ ! -s "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Fișier de configurare este gol!${NC}"
echo -e "${GALBEN}[!] Regenerează config cu admin.sh opțiune 5${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Fișier nu este gol ($(stat -f%z "$CONFIG_FILE" 2>/dev/null || stat -c%s "$CONFIG_FILE" 2>/dev/null) bytes)${NC}"
# Verifică directorul de log
local log_dir=$(dirname "$LOG_FILE")
if [ ! -d "$log_dir" ]; then
echo -e "${GALBEN}[*] Creare director log: $log_dir${NC}"
mkdir -p "$log_dir"
fi
# Verifică executabilul
echo ""
echo -e "${GALBEN}[*] Verificare executabil...${NC}"
if [ ! -f "$IRCD_BIN" ]; then
echo -e "${ROSU}[-] Executabil ircd nu găsit la: $IRCD_BIN${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
if ! [ -x "$IRCD_BIN" ]; then
echo -e "${ROSU}[-] Executabil există dar nu are permisiuni de execuție!${NC}"
echo -e "${GALBEN}[!] Rulează: chmod +x $IRCD_BIN${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Executabil OK: $IRCD_BIN${NC}"
# Verifica dacă e deja pornit
echo ""
echo -e "${GALBEN}[*] Verificare proces existent...${NC}"
if pgrep -f "$IRCD_BIN" > /dev/null; then
echo -e "${ROSU}[-] Server deja pornit!${NC}"
echo -e "${GALBEN}[*] PID: $(pgrep -f "$IRCD_BIN")${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Niciun proces activ${NC}"
# Porneste server în background
echo ""
echo -e "${VERDE}[+] Pornire server IRCd...${NC}"
echo -e "${GALBEN}[*] Comandă: $IRCD_BIN -f $CONFIG_FILE${NC}"
nohup "$IRCD_BIN" -f "$CONFIG_FILE" > "$LOG_FILE" 2>&1 &
local ircd_pid=$!
echo -e "${GALBEN}[*] Așteptare inițializare (2 secunde)...${NC}"
sleep 2
# Verifică dacă procesul rulează
if pgrep -f "$IRCD_BIN" > /dev/null; then
echo ""
echo -e "${VERDE}[+] ✓ Server pornit cu succes!${NC}"
echo -e "${VERDE}[+] PID: $(pgrep -f "$IRCD_BIN")${NC}"
echo ""
echo -e "${GALBEN}Verificare rapidă log:${NC}"
tail -5 "$LOG_FILE" | sed 's/^/ /'
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
else
echo ""
echo -e "${ROSU}[-] ✗ Eșec la pornirea serverului!${NC}"
echo ""
echo -e "${GALBEN}╔════════════════════════════════════════╗${NC}"
echo -e "${GALBEN}║ DIAGNOSTICARE EROARE ║${NC}"
echo -e "${GALBEN}╚════════════════════════════════════════╝${NC}"
echo ""
# Afișează ultimele 15 linii din log pentru context
echo -e "${GALBEN}[*] Ultimele 15 rânduri din log:${NC}"
echo -e "${GALBEN}────────────────────────────────────────${NC}"
tail -15 "$LOG_FILE" 2>/dev/null || echo " (log-ul nu poate fi citit)"
echo -e "${GALBEN}────────────────────────────────────────${NC}"
# Verificări suplimentare
echo ""
echo -e "${GALBEN}[*] Verificări suplimentare:${NC}"
# Test sintaxă config
echo -e "${GALBEN} → Test sintaxă configurare:${NC}"
if "$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1 | head -5; then
echo -e "${VERDE} Config pare valid${NC}"
else
echo -e "${ROSU} Erori în config detectate!${NC}"
fi
# Verifică porturi
echo ""
echo -e "${GALBEN} → Porturi în uz pe sistem:${NC}"
netstat -tuln 2>/dev/null | grep -E ":(6667|6697|4400)" || echo " (niciun conflict detectat)"
echo ""
echo -e "${GALBEN}╔════════════════════════════════════════╗${NC}"
echo -e "${GALBEN}║ SOLUȚII POSIBILE: ║${NC}"
echo -e "${GALBEN}╚════════════════════════════════════════╝${NC}"
echo -e "${GALBEN}1. Verifică sintaxa config:${NC} ./admin.sh → opțiunea 8"
echo -e "${GALBEN}2. Verifică permisiuni:${NC} ls -la $CONFIG_FILE"
echo -e "${GALBEN}3. Verifică log complet:${NC} ./admin.sh → opțiunea 6"
echo -e "${GALBEN}4. Regenerează config:${NC} ./admin.sh → opțiunea 5"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
}
# Oprire server
stop_server() {
echo -e "${VERDE}[+] Oprire server...${NC}"
local pid=$(pgrep -f "$IRCD_BIN")
if [ -z "$pid" ]; then
echo -e "${ROSU}[-] Server nu este pornit!${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
kill "$pid"
sleep 2
if ! pgrep -f "$IRCD_BIN" > /dev/null; then
echo -e "${VERDE}[+] Server oprit cu succes${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
else
echo -e "${GALBEN}[*] Forțare oprire...${NC}"
kill -9 "$pid"
sleep 1
echo -e "${VERDE}[+] Server oprit forțat${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
fi
}
# Restart server
restart_server() {
echo -e "${VERDE}[+] Restart server...${NC}"
stop_server
sleep 2
start_server
# Pauza este gestionată deja de funcțiile stop_server și start_server
}
# Status server
check_status() {
echo -e "${VERDE}[+] Status server:${NC}"
echo ""
local pid=$(pgrep -f "$IRCD_BIN")
if [ -z "$pid" ]; then
echo -e "${ROSU}Status: OPRIT${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE}Status: PORNIT${NC}"
echo "PID: $pid"
# Informații proces
echo ""
echo -e "${GALBEN}Detalii proces:${NC}"
ps aux | grep "$pid" | grep -v grep | awk '{print " CPU: " $3 "% | RAM: " $6 " KB | Timp: " $11}'
# Porturi ascultare
echo ""
echo -e "${GALBEN}Porturi ascultate:${NC}"
netstat -tlnp 2>/dev/null | grep "$pid" | awk '{print " Port " $4 " (" $1 ")"}'
# Log ultimele linii
echo ""
echo -e "${GALBEN}Ultimele intrări în log:${NC}"
tail -5 "$LOG_FILE" | sed 's/^/ /'
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
}
# Editare configurare
edit_config() {
echo -e "${VERDE}[+] Editare configurare...${NC}"
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Fișier configurare nu găsit: $CONFIG_FILE${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
# Backup înainte de editare
cp "$CONFIG_FILE" "${CONFIG_FILE}.bak.$(date +%s)"
echo -e "${GALBEN}[*] Backup creat: ${CONFIG_FILE}.bak${NC}"
# Deschide editor
${EDITOR:-nano} "$CONFIG_FILE"
# Test sintaxă
echo ""
echo -e "${GALBEN}[*] Testare sintaxă...${NC}"
if "$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1 | head -20; then
echo -e "${VERDE}[+] Sintaxă OK${NC}"
else
echo -e "${ROSU}[-] Erori în configurare!${NC}"
echo -e "${GALBEN}[*] Poți restaura backup-ul:${NC}"
echo " cp ${CONFIG_FILE}.bak.* $CONFIG_FILE"
fi
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
}
# Vizionare log-uri
view_logs() {
echo -e "${VERDE}[+] Opțiuni log-uri:${NC}"
echo " 1) Ultimele 20 de rânduri"
echo " 2) Urmărire live (Ctrl+C pentru ieșire)"
echo " 3) Căutare text"
echo " 4) Înapoi"
echo ""
echo -n -e "${GALBEN}Alege [1-4]:${NC} "
read choice
case $choice in
1)
echo ""
echo -e "${ALBASTRU}Ultimele 20 de rânduri:${NC}"
tail -20 "$LOG_FILE"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
;;
2)
echo ""
echo -e "${ALBASTRU}Urmărire live (apasa Ctrl+C pentru ieșire):${NC}"
tail -f "$LOG_FILE"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
;;
3)
echo ""
read -p "$(echo -e ${GALBEN}Cuvânt cheie de căutare:${NC} )" search_term
echo ""
echo -e "${ALBASTRU}Rezultate:${NC}"
grep -i "$search_term" "$LOG_FILE" | tail -20
echo ""
echo -n "Apasa Enter pentru a continua..."
read
;;
4)
return 0
;;
*)
echo -e "${ROSU}Opțiune necunoscută!${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
;;
esac
}
# Generare parola
generate_password() {
echo -e "${VERDE}[+] Generator parola operator${NC}"
echo ""
if [ ! -x "$UMKPASSWD_BIN" ]; then
echo -e "${ROSU}[-] Utilitar umkpasswd nu găsit!${NC}"
echo -e "${GALBEN}[*] Asigură-te că ai rulat install.sh${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${GALBEN}Utilizează utilarul umkpasswd:${NC}"
"$UMKPASSWD_BIN"
echo ""
echo -e "${GALBEN}[*] Copiază hash-ul și actualizează config:${NC}"
echo " nano $CONFIG_FILE"
echo " # Cauta secțiunea Operator și înlocuiește password"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
}
# Test configurare
test_config() {
echo -e "${VERDE}[+] Test sintaxă configurare...${NC}"
echo ""
# Verificări preliminare
echo -e "${GALBEN}[*] Verificări preliminare:${NC}"
echo ""
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${ROSU}[-] Fișier configurare nu găsit: $CONFIG_FILE${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Fișier există: $CONFIG_FILE${NC}"
# Verifică permisiuni
if [ ! -r "$CONFIG_FILE" ]; then
echo -e "${ROSU} ✗ Fișier nu poate fi citit!${NC}"
echo ""
echo -e "${GALBEN}[*] Permisiuni actuale:${NC}"
ls -la "$CONFIG_FILE"
echo ""
echo -e "${GALBEN}[!] Soluție: chmod 600 $CONFIG_FILE${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Permisiuni OK (citire posibilă)${NC}"
# Verifică mărime
local file_size=$(stat -f%z "$CONFIG_FILE" 2>/dev/null || stat -c%s "$CONFIG_FILE" 2>/dev/null)
if [ "$file_size" -eq 0 ]; then
echo -e "${ROSU} ✗ Fișier este gol!${NC}"
echo ""
echo -e "${GALBEN}[!] Regenerează config cu opțiunea 5${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Mărime OK ($file_size bytes)${NC}"
# Verifică executabil
if [ ! -x "$IRCD_BIN" ]; then
echo -e "${ROSU} ✗ Executabil ircd nu găsit sau fără permisiuni!${NC}"
echo -e "${GALBEN} Cale: $IRCD_BIN${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
echo -e "${VERDE} ✓ Executabil OK${NC}"
echo ""
echo -e "${GALBEN}╔════════════════════════════════════════╗${NC}"
echo -e "${GALBEN}║ TEST SINTAXĂ CONFIGURARE ║${NC}"
echo -e "${GALBEN}╚════════════════════════════════════════╝${NC}"
echo ""
echo -e "${GALBEN}[*] Rulare: $IRCD_BIN -c -f $CONFIG_FILE${NC}"
echo -e "${GALBEN}────────────────────────────────────────${NC}"
echo ""
# Capturează output-ul testului
local test_output=$("$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1)
local test_result=$?
echo "$test_output"
echo ""
echo -e "${GALBEN}────────────────────────────────────────${NC}"
if [ $test_result -eq 0 ]; then
echo ""
echo -e "${VERDE}╔════════════════════════════════════════╗${NC}"
echo -e "${VERDE}║ ✓ CONFIGURARE VALIDĂ! ║${NC}"
echo -e "${VERDE}╚════════════════════════════════════════╝${NC}"
# Statistici despre config
echo ""
echo -e "${GALBEN}[*] Statistici configurare:${NC}"
echo -e " Mărime fișier: $file_size bytes"
echo -e " Linii total: $(wc -l < "$CONFIG_FILE")"
echo -e " Blocuri General: $(grep -c "^General {" "$CONFIG_FILE" 2>/dev/null || echo 0)"
echo -e " Blocuri Port: $(grep -c "^Port {" "$CONFIG_FILE" 2>/dev/null || echo 0)"
echo -e " Blocuri Operator: $(grep -c "^Operator {" "$CONFIG_FILE" 2>/dev/null || echo 0)"
echo -e " Blocuri Client: $(grep -c "^Client {" "$CONFIG_FILE" 2>/dev/null || echo 0)"
echo ""
echo -e "${VERDE}[+] Serverul poate fi pornit cu această configurare!${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 0
else
echo ""
echo -e "${ROSU}╔════════════════════════════════════════╗${NC}"
echo -e "${ROSU}║ ✗ ERORI ÎN CONFIGURARE! ║${NC}"
echo -e "${ROSU}╚════════════════════════════════════════╝${NC}"
echo ""
echo -e "${GALBEN}[*] Soluții posibile:${NC}"
echo -e " 1. Editează config: ./admin.sh → opțiunea 5"
echo -e " 2. Verifică sintaxa manual: nano $CONFIG_FILE"
echo -e " 3. Compară cu exemplu: cat doc/example.conf"
echo -e " 4. Regenerează config nou"
echo ""
echo -e "${GALBEN}[*] Verificări rapide:${NC}"
# Verifică ghilimele neînchise
local unclosed_quotes=$(grep -n '"[^"]*$' "$CONFIG_FILE" | head -5)
if [ -n "$unclosed_quotes" ]; then
echo -e "${ROSU} ⚠ Posibil ghilimele neînchise:${NC}"
echo "$unclosed_quotes" | sed 's/^/ /'
fi
# Verifică acolade neînchise
local open_braces=$(grep -o "{" "$CONFIG_FILE" | wc -l)
local close_braces=$(grep -o "}" "$CONFIG_FILE" | wc -l)
if [ "$open_braces" -ne "$close_braces" ]; then
echo -e "${ROSU} ⚠ Acolade nepotrivite: { = $open_braces, } = $close_braces${NC}"
fi
echo ""
echo -n "Apasa Enter pentru a continua..."
read
return 1
fi
}
# Funcție principală
main() {
while true; do
show_menu
read choice
case $choice in
1)
start_server
;;
2)
stop_server
;;
3)
restart_server
;;
4)
check_status
;;
5)
edit_config
;;
6)
view_logs
;;
7)
generate_password
;;
8)
test_config
;;
9)
fix_config_issues
;;
10)
echo -e "${VERDE}La revedere!${NC}"
exit 0
;;
*)
echo -e "${ROSU}Opțiune necunoscută!${NC}"
echo ""
echo -n "Apasa Enter pentru a continua..."
read
;;
esac
done
}
# Lansare
main