#!/bin/bash # Skript zum Konfigurieren von OAuth-Variablen für MYP-Projekt # Fügt die Variablen in die Umgebungsdatei ein und aktualisiert den laufenden Container # Erstellt von Claude für das MYP-Projekt basierend auf bestehender Konfiguration # # Verwendung: # sudo ./configure-oauth.sh # # Dieses Skript konfiguriert die für die GitHub OAuth-Integration notwendigen # Umgebungsvariablen und speichert sie in /srv/myp-env/github.env. # Außerdem aktualisiert es die Variablen im laufenden Docker-Container, falls vorhanden. # Farbcodes für Ausgabe RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Funktion zur Ausgabe mit Zeitstempel log() { echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" } error_log() { echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] FEHLER:${NC} $1" >&2 } success_log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ERFOLG:${NC} $1" } # Definiere Variablen SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ENV_FILE="/srv/myp-env/github.env" CONTAINER_NAME="myp-rp" HOSTNAME=$(hostname) # Prüfe, ob der Benutzer Root-Berechtigungen hat if [ "$EUID" -ne 0 ]; then error_log "Dieses Skript muss mit Root-Rechten ausgeführt werden (sudo)." exit 1 fi # Stelle sicher, dass das Verzeichnis existiert if ! mkdir -p /srv/myp-env 2>/dev/null; then error_log "Konnte Verzeichnis /srv/myp-env nicht erstellen. Überprüfen Sie Ihre Berechtigungen." exit 1 fi # Bestimme den Hostnamen für OAuth if [[ "$HOSTNAME" == *"m040tbaraspi001"* ]] || [[ "$HOSTNAME" == *"corpintra"* ]]; then FRONTEND_HOSTNAME="m040tbaraspi001.de040.corpintra.net" DEFAULT_CALLBACK_URL="http://m040tbaraspi001.de040.corpintra.net/auth/login/callback" log "Erkannt: Unternehmens-Hostname: $FRONTEND_HOSTNAME" else FRONTEND_HOSTNAME="$HOSTNAME" DEFAULT_CALLBACK_URL="http://$HOSTNAME:3000/auth/login/callback" log "Lokaler Hostname: $FRONTEND_HOSTNAME" fi # Lade vorhandene Werte, falls die Datei existiert if [ -f "$ENV_FILE" ]; then log "Lade vorhandene Werte aus $ENV_FILE..." source "$ENV_FILE" 2>/dev/null || true fi # Frage die Werte vom Benutzer ab header() { echo "" echo -e "${CYAN}===== $1 =====${NC}" echo "" } header "OAuth-Konfiguration für MYP-Projekt" echo "Dieses Skript konfiguriert die OAuth-Integration für das MYP Frontend." echo "Die Konfiguration wird in $ENV_FILE gespeichert und im Container aktualisiert." echo "" echo "Bitte geben Sie die folgenden Werte ein:" echo "Drücken Sie einfach Enter, um die Standardwerte zu verwenden." echo "" # Bestimme GitHub-Server-Typ echo -e "${YELLOW}GitHub-Typ auswählen${NC}" echo -e "1) GitHub Enterprise (Mercedes-Benz git.i.mercedes-benz.com)" echo -e "2) Öffentliches GitHub (github.com)" read -p "Auswahl (1/2) [1]: " github_type_choice github_type_choice=${github_type_choice:-1} if [[ "$github_type_choice" == "1" ]]; then GITHUB_ENTERPRISE=true GITHUB_DOMAIN="https://git.i.mercedes-benz.com" echo -e "\nVerwende ${GREEN}GitHub Enterprise${NC} ($GITHUB_DOMAIN)" else GITHUB_ENTERPRISE=false GITHUB_DOMAIN="https://github.com" echo -e "\nVerwende ${GREEN}GitHub.com${NC}" fi # OAuth Callback URL echo -e "\n${YELLOW}OAuth Callback URL${NC}" echo -e "URL für die Weiterleitung nach der GitHub-Authentifizierung" echo -e "Diese muss exakt mit der in der GitHub OAuth App konfigurierten URL übereinstimmen." read -p "NEXT_PUBLIC_OAUTH_CALLBACK_URL [$DEFAULT_CALLBACK_URL]: " user_oauth_callback NEXT_PUBLIC_OAUTH_CALLBACK_URL=${user_oauth_callback:-$DEFAULT_CALLBACK_URL} OAUTH_CALLBACK_URL=$NEXT_PUBLIC_OAUTH_CALLBACK_URL # GitHub OAuth Anmeldedaten echo -e "\n${YELLOW}GitHub OAuth Client ID${NC}" echo -e "Aus der GitHub OAuth App-Konfiguration" read -p "AUTH_GITHUB_CLIENT_ID: " user_client_id AUTH_GITHUB_CLIENT_ID=${user_client_id:-$AUTH_GITHUB_CLIENT_ID} echo -e "\n${YELLOW}GitHub OAuth Client Secret${NC}" echo -e "Aus der GitHub OAuth App-Konfiguration" read -p "AUTH_GITHUB_CLIENT_SECRET: " user_client_secret AUTH_GITHUB_CLIENT_SECRET=${user_client_secret:-$AUTH_GITHUB_CLIENT_SECRET} # Prüfe, ob alle erforderlichen Werte gesetzt sind if [ -z "$AUTH_GITHUB_CLIENT_ID" ] || [ -z "$AUTH_GITHUB_CLIENT_SECRET" ]; then error_log "Bitte geben Sie gültige Werte für AUTH_GITHUB_CLIENT_ID und AUTH_GITHUB_CLIENT_SECRET an." exit 1 fi # Aktualisiere die Umgebungsdatei log "Aktualisiere Umgebungsvariablen in $ENV_FILE..." # Sichere die alte Datei, falls sie existiert if [ -f "$ENV_FILE" ]; then cp "$ENV_FILE" "${ENV_FILE}.bak" log "Sicherungskopie erstellt: ${ENV_FILE}.bak" fi # Erstelle eine neue temporäre Datei TMP_ENV_FILE=$(mktemp) # Wenn die alte Datei existiert, übernehme alle Zeilen außer den zu ändernden if [ -f "$ENV_FILE" ]; then grep -v "NEXT_PUBLIC_OAUTH_CALLBACK_URL\|OAUTH_CALLBACK_URL\|AUTH_GITHUB_CLIENT_ID\|AUTH_GITHUB_CLIENT_SECRET\|OAUTH_CLIENT_ID\|OAUTH_CLIENT_SECRET\|GITHUB_ENTERPRISE\|GITHUB_DOMAIN" "$ENV_FILE" > "$TMP_ENV_FILE" || true else touch "$TMP_ENV_FILE" fi # Füge die neuen Werte hinzu cat >> "$TMP_ENV_FILE" << EOL # OAuth-Konfiguration (Aktualisiert: $(date)) # Konfiguriert mit configure-oauth.sh # OAuth Callback URL NEXT_PUBLIC_OAUTH_CALLBACK_URL=${NEXT_PUBLIC_OAUTH_CALLBACK_URL} OAUTH_CALLBACK_URL=${OAUTH_CALLBACK_URL} # GitHub OAuth Credentials AUTH_GITHUB_CLIENT_ID=${AUTH_GITHUB_CLIENT_ID} AUTH_GITHUB_CLIENT_SECRET=${AUTH_GITHUB_CLIENT_SECRET} # Kompatibilitäts-Variablen (werden für ältere Versionen benötigt) OAUTH_CLIENT_ID=${AUTH_GITHUB_CLIENT_ID} OAUTH_CLIENT_SECRET=${AUTH_GITHUB_CLIENT_SECRET} # GitHub Server-Konfiguration GITHUB_ENTERPRISE=${GITHUB_ENTERPRISE} GITHUB_DOMAIN=${GITHUB_DOMAIN} EOL # Verschiebe die temporäre Datei an den Zielort mv "$TMP_ENV_FILE" "$ENV_FILE" chmod 600 "$ENV_FILE" success_log "Umgebungsvariablen erfolgreich aktualisiert." # Prüfe, ob der Docker-Container läuft if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then log "Container $CONTAINER_NAME läuft. Aktualisiere Umgebungsvariablen..." # Kopiere die Umgebungsdatei in den Container docker cp "$ENV_FILE" "$CONTAINER_NAME:/app/.env" # Setze die Umgebungsvariablen für den laufenden Container docker exec "$CONTAINER_NAME" /bin/sh -c " export NEXT_PUBLIC_OAUTH_CALLBACK_URL=\"$NEXT_PUBLIC_OAUTH_CALLBACK_URL\" export OAUTH_CALLBACK_URL=\"$OAUTH_CALLBACK_URL\" export AUTH_GITHUB_CLIENT_ID=\"$AUTH_GITHUB_CLIENT_ID\" export AUTH_GITHUB_CLIENT_SECRET=\"$AUTH_GITHUB_CLIENT_SECRET\" export OAUTH_CLIENT_ID=\"$AUTH_GITHUB_CLIENT_ID\" export OAUTH_CLIENT_SECRET=\"$AUTH_GITHUB_CLIENT_SECRET\" export GITHUB_ENTERPRISE=\"$GITHUB_ENTERPRISE\" export GITHUB_DOMAIN=\"$GITHUB_DOMAIN\" echo \"Umgebungsvariablen gesetzt:\" env | grep -E 'OAUTH|AUTH|GITHUB' " # Neustart des Containers empfehlen log "${YELLOW}Es wird empfohlen, den Container neu zu starten, damit alle Änderungen wirksam werden:${NC}" echo " docker restart $CONTAINER_NAME" # Frage, ob der Container neu gestartet werden soll read -p "Container jetzt neu starten? (j/n): " restart_choice if [[ "$restart_choice" == "j" ]]; then log "Starte Container neu..." docker restart "$CONTAINER_NAME" success_log "Container neu gestartet. Änderungen sollten jetzt wirksam sein." else log "${YELLOW}Container nicht neu gestartet. Bitte manuell neu starten, wenn nötig.${NC}" fi else log "${YELLOW}Container $CONTAINER_NAME läuft nicht. Die Änderungen werden beim nächsten Start wirksam.${NC}" fi # Zeige die konfigurierten Werte an echo "" success_log "OAuth-Konfiguration abgeschlossen!" echo "" echo -e "${CYAN}Konfigurierte Werte:${NC}" echo -e "GitHub Server: ${YELLOW}$( [ "$GITHUB_ENTERPRISE" = "true" ] && echo "Enterprise ($GITHUB_DOMAIN)" || echo "GitHub.com" )${NC}" echo -e "NEXT_PUBLIC_OAUTH_CALLBACK_URL: ${YELLOW}$NEXT_PUBLIC_OAUTH_CALLBACK_URL${NC}" echo -e "OAUTH_CALLBACK_URL: ${YELLOW}$OAUTH_CALLBACK_URL${NC}" echo -e "AUTH_GITHUB_CLIENT_ID: ${YELLOW}$AUTH_GITHUB_CLIENT_ID${NC}" echo -e "AUTH_GITHUB_CLIENT_SECRET: ${YELLOW}${AUTH_GITHUB_CLIENT_SECRET:0:5}...${NC} (aus Sicherheitsgründen gekürzt)" echo "" log "Konfiguration wurde in $ENV_FILE gespeichert." if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then log "Container ${YELLOW}$CONTAINER_NAME${NC} wurde aktualisiert." log "Starten Sie den Container neu mit: ${YELLOW}docker restart $CONTAINER_NAME${NC}" fi echo "" log "Sie können jetzt das Frontend mit Ihrer GitHub OAuth-App-Konfiguration verwenden."