"feat: Implement printer management

This commit is contained in:
2025-05-26 12:24:43 +02:00
parent 4282b52a3b
commit 57e306db08
11 changed files with 824 additions and 703 deletions

View File

@@ -150,6 +150,14 @@ test_dependencies() {
all_installed=0
fi
# curl
if check_command curl; then
echo -e "${GREEN}✓ cURL gefunden${NC}"
else
echo -e "${RED}✗ cURL nicht gefunden${NC}"
all_installed=0
fi
echo ""
if [ $all_installed -eq 1 ]; then
echo -e "${GREEN}✓ Alle Abhängigkeiten sind installiert!${NC}"
@@ -213,6 +221,388 @@ setup_hosts() {
read -p "Drücken Sie ENTER, um fortzufahren..."
}
test_backend_connection() {
show_header "Backend-Verbindung prüfen"
echo -e "${BLUE}Welches Backend möchten Sie testen?${NC}"
echo -e "${WHITE}1. Lokales Backend (localhost:443)${NC}"
echo -e "${WHITE}2. Raspberry Pi Backend (192.168.0.105:5000)${NC}"
echo -e "${WHITE}3. Benutzerdefinierte URL${NC}"
read -p "Wählen Sie eine Option (1-3, Standard: 1): " choice
backend_url="https://localhost:443"
backend_host="localhost"
case $choice in
2)
backend_url="http://192.168.0.105:5000"
backend_host="192.168.0.105"
;;
3)
read -p "Backend-URL eingeben (z.B. https://raspberrypi:443): " backend_url
backend_host=$(echo "$backend_url" | sed -E 's|https?://([^:/]+).*|\1|')
;;
*)
backend_url="https://localhost:443"
backend_host="localhost"
;;
esac
echo ""
echo -e "${BLUE}Teste Backend: $backend_url${NC}"
echo ""
# 1. Netzwerk-Konnektivität prüfen
echo -e "${BLUE}1. Prüfe Netzwerk-Konnektivität zu $backend_host...${NC}"
if ping -c 1 -W 3 "$backend_host" >/dev/null 2>&1; then
echo -e "${GREEN}✓ Ping zu $backend_host erfolgreich${NC}"
else
echo -e "${RED}✗ Ping zu $backend_host fehlgeschlagen${NC}"
fi
# 2. Backend-Service prüfen
echo -e "${BLUE}2. Prüfe Backend-Service...${NC}"
health_url="$backend_url/health"
if curl -f --connect-timeout 5 "$health_url" >/dev/null 2>&1; then
echo -e "${GREEN}✓ Backend-Health-Check erfolgreich${NC}"
elif curl -f --connect-timeout 5 "$backend_url" >/dev/null 2>&1; then
echo -e "${YELLOW}⚠ Backend erreichbar, aber kein Health-Endpoint${NC}"
else
echo -e "${RED}✗ Backend-Service nicht erreichbar${NC}"
fi
# 3. API-Endpunkte prüfen
echo -e "${BLUE}3. Prüfe Backend-API-Endpunkte...${NC}"
for endpoint in "printers" "jobs" "users"; do
api_url="$backend_url/api/$endpoint"
if curl -f --connect-timeout 5 "$api_url" >/dev/null 2>&1; then
echo -e "${GREEN}✓ API-Endpunkt /$endpoint erreichbar${NC}"
else
echo -e "${YELLOW}⚠ API-Endpunkt /$endpoint nicht erreichbar${NC}"
fi
done
# 4. Frontend-Konfiguration prüfen
echo -e "${BLUE}4. Prüfe Frontend-Konfigurationsdateien...${NC}"
env_local_path="frontend/.env.local"
if [ -f "$env_local_path" ]; then
if grep -q "NEXT_PUBLIC_API_URL" "$env_local_path"; then
echo -e "${GREEN}✓ .env.local gefunden und konfiguriert${NC}"
else
echo -e "${YELLOW}⚠ .env.local existiert, aber Backend-URL fehlt${NC}"
fi
else
echo -e "${YELLOW}⚠ .env.local nicht gefunden${NC}"
fi
echo ""
read -p "Möchten Sie die Frontend-Konfiguration für dieses Backend aktualisieren? (j/n): " update_config
if [ "$update_config" = "j" ]; then
setup_backend_url "$backend_url"
fi
echo ""
read -p "Drücken Sie ENTER, um fortzufahren..."
}
setup_backend_url() {
local backend_url="$1"
show_header "Backend-URL konfigurieren"
if [ -z "$backend_url" ]; then
echo -e "${BLUE}Verfügbare Backend-Konfigurationen:${NC}"
echo -e "${WHITE}1. Lokale Entwicklung (https://localhost:443)${NC}"
echo -e "${WHITE}2. Raspberry Pi (http://192.168.0.105:5000)${NC}"
echo -e "${WHITE}3. Benutzerdefinierte URL${NC}"
read -p "Wählen Sie eine Option (1-3, Standard: 1): " choice
case $choice in
2)
backend_url="http://192.168.0.105:5000"
;;
3)
read -p "Backend-URL eingeben (z.B. https://raspberrypi:443): " backend_url
;;
*)
backend_url="https://localhost:443"
;;
esac
fi
echo -e "${BLUE}Konfiguriere Frontend für Backend: $backend_url${NC}"
# .env.local erstellen/aktualisieren
env_local_path="frontend/.env.local"
backend_host=$(echo "$backend_url" | sed -E 's|https?://([^:/]+).*|\1|')
backend_protocol=$(echo "$backend_url" | sed -E 's|^(https?)://.*|\1|')
cat > "$env_local_path" << EOF
# Backend API Konfiguration
NEXT_PUBLIC_API_URL=$backend_url
# Frontend-URL für OAuth Callback
NEXT_PUBLIC_FRONTEND_URL=http://localhost:3000
# OAuth Konfiguration
NEXT_PUBLIC_OAUTH_CALLBACK_URL=http://localhost:3000/auth/login/callback
# GitHub OAuth (hardcodiert)
GITHUB_CLIENT_ID=7c5d8bef1a5519ec1fdc
GITHUB_CLIENT_SECRET=5f1e586204358fbd53cf5fb7d418b3f06ccab8fd
# Entwicklungsumgebung
NODE_ENV=development
DEBUG=true
NEXT_DEBUG=true
# Backend Host
NEXT_PUBLIC_BACKEND_HOST=$backend_host
NEXT_PUBLIC_BACKEND_PROTOCOL=$backend_protocol
EOF
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ .env.local erfolgreich erstellt/aktualisiert${NC}"
else
echo -e "${RED}✗ Fehler beim Erstellen der .env.local${NC}"
fi
echo ""
echo -e "${GREEN}Frontend-Konfiguration abgeschlossen!${NC}"
echo -e "${WHITE}Backend: $backend_url${NC}"
echo -e "${WHITE}Frontend: http://localhost:3000${NC}"
echo ""
read -p "Drücken Sie ENTER, um fortzufahren..."
}
start_debug_server() {
show_header "Debug-Server starten"
echo -e "${BLUE}Welchen Debug-Server möchten Sie starten?${NC}"
echo -e "${WHITE}1. Frontend Debug-Server (Next.js)${NC}"
echo -e "${WHITE}2. Backend Debug-Server (Flask)${NC}"
echo -e "${WHITE}3. Beide Debug-Server${NC}"
echo -e "${WHITE}4. Frontend Debug-Server (einfacher HTTP-Server)${NC}"
read -p "Wählen Sie eine Option (1-4, Standard: 1): " choice
case $choice in
1)
echo -e "${BLUE}Starte Frontend Debug-Server...${NC}"
if [ -d "frontend" ] && check_command npm; then
(cd frontend && npm run dev) &
echo -e "${GREEN}✓ Frontend Debug-Server gestartet${NC}"
else
echo -e "${RED}✗ Frontend-Verzeichnis oder npm nicht gefunden${NC}"
fi
;;
2)
echo -e "${BLUE}Starte Backend Debug-Server...${NC}"
if [ -f "backend/app/app.py" ]; then
python_cmd=""
if check_command python3; then
python_cmd="python3"
elif check_command python; then
python_cmd="python"
fi
if [ -n "$python_cmd" ]; then
$python_cmd backend/app/app.py --debug &
echo -e "${GREEN}✓ Backend Debug-Server gestartet${NC}"
else
echo -e "${RED}✗ Python nicht gefunden${NC}"
fi
else
echo -e "${RED}✗ Backend-Anwendung nicht gefunden${NC}"
fi
;;
3)
echo -e "${BLUE}Starte beide Debug-Server...${NC}"
# Backend starten
if [ -f "backend/app/app.py" ]; then
python_cmd=""
if check_command python3; then
python_cmd="python3"
elif check_command python; then
python_cmd="python"
fi
if [ -n "$python_cmd" ]; then
$python_cmd backend/app/app.py --debug &
echo -e "${GREEN}✓ Backend Debug-Server gestartet${NC}"
fi
fi
# Frontend starten
if [ -d "frontend" ] && check_command npm; then
(cd frontend && npm run dev) &
echo -e "${GREEN}✓ Frontend Debug-Server gestartet${NC}"
fi
;;
4)
echo -e "${BLUE}Starte einfachen HTTP Debug-Server...${NC}"
debug_server_dir="frontend/debug-server"
if [ -d "$debug_server_dir" ] && check_command node; then
node "$debug_server_dir/src/app.js" &
echo -e "${GREEN}✓ Einfacher Debug-Server gestartet${NC}"
else
echo -e "${RED}✗ Debug-Server-Verzeichnis oder Node.js nicht gefunden${NC}"
fi
;;
*)
echo -e "${RED}Ungültige Option${NC}"
;;
esac
echo ""
echo -e "${BLUE}Debug-Server-URLs:${NC}"
echo -e "${WHITE}- Frontend: http://localhost:3000${NC}"
echo -e "${WHITE}- Backend: https://localhost:443${NC}"
echo -e "${WHITE}- Debug-Server: http://localhost:8080${NC}"
echo ""
read -p "Drücken Sie ENTER, um fortzufahren..."
}
show_ssl_status() {
show_header "SSL-Zertifikat-Status"
cert_paths=(
"backend/instance/ssl/myp.crt"
"backend/instance/ssl/myp.key"
"frontend/ssl/myp.crt"
"frontend/ssl/myp.key"
)
echo -e "${BLUE}Prüfe SSL-Zertifikate...${NC}"
echo ""
for cert_path in "${cert_paths[@]}"; do
if [ -f "$cert_path" ]; then
echo -e "${GREEN}✓ Gefunden: $cert_path${NC}"
# Zertifikatsinformationen anzeigen (falls OpenSSL verfügbar)
if check_command openssl && [[ "$cert_path" == *.crt ]]; then
cert_info=$(openssl x509 -in "$cert_path" -noout -subject -dates 2>/dev/null)
if [ -n "$cert_info" ]; then
echo -e "${WHITE} $cert_info${NC}"
fi
fi
else
echo -e "${RED}✗ Fehlt: $cert_path${NC}"
fi
done
echo ""
echo -e "${BLUE}SSL-Konfiguration in settings.py:${NC}"
settings_path="backend/app/config/settings.py"
if [ -f "$settings_path" ]; then
if grep -q "SSL_ENABLED.*=.*True" "$settings_path"; then
echo -e "${GREEN}✓ SSL ist aktiviert${NC}"
else
echo -e "${YELLOW}⚠ SSL ist deaktiviert${NC}"
fi
else
echo -e "${RED}✗ settings.py nicht gefunden${NC}"
fi
echo ""
read -p "Drücken Sie ENTER, um fortzufahren..."
}
install_myp_complete() {
show_header "Vollständige MYP-Installation"
echo -e "${BLUE}Diese Funktion führt eine vollständige MYP-Installation durch:${NC}"
echo -e "${WHITE}1. Systemvoraussetzungen prüfen${NC}"
echo -e "${WHITE}2. Python-Abhängigkeiten installieren${NC}"
echo -e "${WHITE}3. Node.js-Abhängigkeiten installieren${NC}"
echo -e "${WHITE}4. SSL-Zertifikate erstellen${NC}"
echo -e "${WHITE}5. Datenbank initialisieren${NC}"
echo -e "${WHITE}6. Konfigurationsdateien erstellen${NC}"
echo ""
read -p "Möchten Sie fortfahren? (j/n, Standard: j): " confirm
if [ "$confirm" = "n" ]; then
return
fi
# 1. Systemvoraussetzungen prüfen
echo -e "${BLUE}1. Prüfe Systemvoraussetzungen...${NC}"
python_cmd=""
pip_cmd=""
if check_command python3; then
python_cmd="python3"
elif check_command python; then
python_cmd="python"
else
echo -e "${RED}✗ Python nicht gefunden. Bitte installieren Sie Python 3.6+.${NC}"
return 1
fi
if check_command pip3; then
pip_cmd="pip3"
elif check_command pip; then
pip_cmd="pip"
else
echo -e "${RED}✗ pip nicht gefunden. Bitte installieren Sie pip.${NC}"
return 1
fi
# 2. Python-Abhängigkeiten installieren
echo -e "${BLUE}2. Installiere Python-Abhängigkeiten...${NC}"
if [ -f "backend/requirements.txt" ]; then
exec_command "$pip_cmd install -r backend/requirements.txt" "Installiere Backend-Abhängigkeiten"
else
echo -e "${YELLOW}⚠ requirements.txt nicht gefunden${NC}"
fi
# 3. Node.js-Abhängigkeiten installieren
if check_command node && check_command npm; then
echo -e "${BLUE}3. Installiere Node.js-Abhängigkeiten...${NC}"
if [ -f "frontend/package.json" ]; then
exec_command "cd frontend && npm install" "Installiere Frontend-Abhängigkeiten"
else
echo -e "${YELLOW}⚠ package.json nicht gefunden${NC}"
fi
else
echo -e "${YELLOW}3. Überspringe Node.js-Abhängigkeiten (Node.js/npm nicht gefunden)${NC}"
fi
# 4. SSL-Zertifikate erstellen
echo -e "${BLUE}4. Erstelle SSL-Zertifikate...${NC}"
create_ssl_certificates
# 5. Datenbank initialisieren
echo -e "${BLUE}5. Initialisiere Datenbank...${NC}"
if [ -f "backend/app/models.py" ]; then
exec_command "cd backend && $python_cmd -c 'from app.models import init_db, create_initial_admin; init_db(); create_initial_admin()'" "Initialisiere Datenbank"
fi
# 6. Konfigurationsdateien erstellen
echo -e "${BLUE}6. Erstelle Konfigurationsdateien...${NC}"
setup_backend_url "https://localhost:443"
echo ""
echo -e "${GREEN}✓ Vollständige MYP-Installation abgeschlossen!${NC}"
echo ""
echo -e "${BLUE}Nächste Schritte:${NC}"
echo -e "${WHITE}1. Backend starten: python backend/app/app.py${NC}"
echo -e "${WHITE}2. Frontend starten: cd frontend && npm run dev${NC}"
echo -e "${WHITE}3. Anwendung öffnen: https://localhost:443${NC}"
echo ""
read -p "Drücken Sie ENTER, um fortzufahren..."
}
create_ssl_certificates() {
show_header "SSL-Zertifikat-Generator"
@@ -596,9 +986,10 @@ start_application() {
echo -e "${WHITE}3. Beide Server starten (in separaten Terminals)${NC}"
echo -e "${WHITE}4. Mit Docker Compose starten${NC}"
echo -e "${WHITE}5. Vollständige Installation und Start${NC}"
echo -e "${WHITE}6. Zurück zum Hauptmenü${NC}"
echo -e "${WHITE}6. Debug-Server starten${NC}"
echo -e "${WHITE}7. Zurück zum Hauptmenü${NC}"
read -p "Wählen Sie eine Option (1-6): " choice
read -p "Wählen Sie eine Option (1-7): " choice
case $choice in
1)
@@ -658,29 +1049,12 @@ start_application() {
fi
;;
5)
echo -e "${BLUE}Führe vollständige Installation durch...${NC}"
setup_environment
create_ssl_certificates
echo -e "${BLUE}Starte Anwendung...${NC}"
python_cmd=""
if check_command python3; then
python_cmd="python3"
elif check_command python; then
python_cmd="python"
fi
if [ -n "$python_cmd" ]; then
$python_cmd backend/app/app.py &
fi
if check_command npm; then
(cd frontend && npm run dev) &
fi
echo -e "${GREEN}Vollständige Installation und Start abgeschlossen!${NC}"
install_myp_complete
;;
6)
start_debug_server
;;
7)
return
;;
*)
@@ -711,6 +1085,7 @@ show_project_info() {
echo -e "${BLUE}Standard-Zugangsdaten:${NC}"
echo -e "${WHITE}- Admin E-Mail: admin@mercedes-benz.com${NC}"
echo -e "${WHITE}- Admin Passwort: 744563017196A${NC}"
echo -e "${WHITE}- Router Passwort: vT6Vsd^p${NC}"
echo ""
echo -e "${BLUE}URLs:${NC}"
echo -e "${WHITE}- Backend: https://localhost:443 oder https://raspberrypi:443${NC}"
@@ -738,6 +1113,12 @@ clean_old_files() {
"frontend/https-setup.sh"
"frontend/start-debug-server.sh"
"frontend/start-frontend-server.sh"
"frontend/check-backend-connection.sh"
"frontend/setup-backend-url.sh"
"frontend/start-debug-server.bat"
"backend/setup_myp.sh"
"backend/install/create_ssl_cert.sh"
"backend/install/ssl_check.sh"
)
for file in "${files_to_delete[@]}"; do
@@ -765,12 +1146,16 @@ show_main_menu() {
echo -e "${WHITE}3. SSL-Zertifikate erstellen${NC}"
echo -e "${WHITE}4. Umgebung einrichten (Abhängigkeiten installieren)${NC}"
echo -e "${WHITE}5. Anwendung starten${NC}"
echo -e "${WHITE}6. Projekt-Informationen anzeigen${NC}"
echo -e "${WHITE}7. Alte Dateien bereinigen${NC}"
echo -e "${WHITE}8. Beenden${NC}"
echo -e "${WHITE}6. Backend-Verbindung testen${NC}"
echo -e "${WHITE}7. Backend-URL konfigurieren${NC}"
echo -e "${WHITE}8. SSL-Zertifikat-Status anzeigen${NC}"
echo -e "${WHITE}9. Vollständige MYP-Installation${NC}"
echo -e "${WHITE}10. Projekt-Informationen anzeigen${NC}"
echo -e "${WHITE}11. Alte Dateien bereinigen${NC}"
echo -e "${WHITE}12. Beenden${NC}"
echo ""
read -p "Wählen Sie eine Option (1-8): " choice
read -p "Wählen Sie eine Option (1-12): " choice
case $choice in
1)
@@ -794,14 +1179,30 @@ show_main_menu() {
show_main_menu
;;
6)
show_project_info
test_backend_connection
show_main_menu
;;
7)
clean_old_files
setup_backend_url
show_main_menu
;;
8)
show_ssl_status
show_main_menu
;;
9)
install_myp_complete
show_main_menu
;;
10)
show_project_info
show_main_menu
;;
11)
clean_old_files
show_main_menu
;;
12)
echo -e "${GREEN}Auf Wiedersehen!${NC}"
exit 0
;;