From 94532743ad255f8d377358627e787b446278a1dd Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Tue, 1 Apr 2025 15:04:20 +0200 Subject: [PATCH] Add OAuth configuration script with GitHub Enterprise support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- configure-oauth.sh | 230 +++++++++++++++++++++++++++++++++++++++++++++ docs/README.md | 80 ++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100755 configure-oauth.sh create mode 100644 docs/README.md diff --git a/configure-oauth.sh b/configure-oauth.sh new file mode 100755 index 0000000..5309bbf --- /dev/null +++ b/configure-oauth.sh @@ -0,0 +1,230 @@ +#!/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." \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..7bfa9c1 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,80 @@ +# MYP OAuth Konfigurationsanleitung + +Dieses Dokument beschreibt, wie die OAuth-Konfiguration für das MYP-Projekt eingerichtet wird. + +## Überblick + +Das MYP Frontend verwendet GitHub OAuth zur Authentifizierung. Die Konfiguration erfolgt über +Umgebungsvariablen, die in der Datei `/srv/myp-env/github.env` gespeichert werden. + +## Konfiguration mit configure-oauth.sh + +Wir haben ein Skript erstellt, um die OAuth-Konfiguration zu vereinfachen: + +```bash +sudo ./configure-oauth.sh +``` + +Das Skript führt folgende Aktionen aus: + +1. Erfasst die benötigten OAuth-Konfigurationsinformationen interaktiv +2. Speichert diese in `/srv/myp-env/github.env` +3. Aktualisiert einen laufenden Docker-Container (falls vorhanden) +4. Bietet die Option, den Container neu zu starten + +## Benötigte Informationen + +Für die Konfiguration werden folgende Informationen benötigt: + +1. **GitHub-Typ**: GitHub Enterprise (git.i.mercedes-benz.com) oder GitHub.com +2. **OAuth Callback URL**: Die URL, zu der GitHub nach der Authentifizierung zurückleitet + - Standard für Unternehmensumgebung: `http://m040tbaraspi001.de040.corpintra.net/auth/login/callback` + - Standard für lokale Entwicklung: `http://localhost:3000/auth/login/callback` +3. **GitHub OAuth Client ID**: Von der GitHub OAuth App-Konfiguration +4. **GitHub OAuth Client Secret**: Von der GitHub OAuth App-Konfiguration + +## Konfiguration der GitHub OAuth App + +1. Navigieren Sie zu Ihren GitHub-Einstellungen (Organisationseinstellungen für Enterprise) +2. Wählen Sie "OAuth Apps" oder "Developer Settings" > "OAuth Apps" +3. Erstellen Sie eine neue OAuth App mit: + - **Name**: MYP (Manage Your Printer) + - **Homepage URL**: `http://m040tbaraspi001.de040.corpintra.net` (oder Ihre lokale URL) + - **Authorization callback URL**: Exakt die URL, die Sie auch im Skript konfigurieren + - **Description**: Optional + +## Umgebungsvariablen + +Die folgenden Umgebungsvariablen werden vom Skript konfiguriert: + +``` +# OAuth Callback URL +NEXT_PUBLIC_OAUTH_CALLBACK_URL=http://m040tbaraspi001.de040.corpintra.net/auth/login/callback +OAUTH_CALLBACK_URL=http://m040tbaraspi001.de040.corpintra.net/auth/login/callback + +# GitHub OAuth Credentials +AUTH_GITHUB_CLIENT_ID=your_client_id +AUTH_GITHUB_CLIENT_SECRET=your_client_secret + +# Kompatibilitäts-Variablen +OAUTH_CLIENT_ID=your_client_id +OAUTH_CLIENT_SECRET=your_client_secret + +# GitHub Server-Konfiguration +GITHUB_ENTERPRISE=true +GITHUB_DOMAIN=https://git.i.mercedes-benz.com +``` + +## Deployment mit OAuth-Konfiguration + +Die Deployment-Skripte `raspi-frontend-deploy.sh` sind so konfiguriert, dass sie die OAuth-Konfiguration aus +`/srv/myp-env/github.env` laden und dem Container zur Verfügung stellen. + +## Fehlerbehebung + +Falls die OAuth-Authentifizierung nicht funktioniert: + +1. Prüfen Sie, ob die Callback-URL exakt mit der in GitHub konfigurierten URL übereinstimmt +2. Stellen Sie sicher, dass der Docker-Container die Umgebungsvariablen korrekt übernimmt +3. Überprüfen Sie die Netzwerkerreichbarkeit zwischen dem Frontend und dem GitHub-Server +4. Prüfen Sie die Frontend-Logs auf OAuth-bezogene Fehlermeldungen \ No newline at end of file