🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
230 lines
8.4 KiB
Bash
Executable File
230 lines
8.4 KiB
Bash
Executable File
#!/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." |