Add OAuth configuration script with GitHub Enterprise support

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Till Tomczak 2025-04-01 15:04:20 +02:00
parent ef04d7fd0f
commit 94532743ad
2 changed files with 310 additions and 0 deletions

230
configure-oauth.sh Executable file
View File

@ -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."

80
docs/README.md Normal file
View File

@ -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