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:
parent
ef04d7fd0f
commit
94532743ad
230
configure-oauth.sh
Executable file
230
configure-oauth.sh
Executable 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
80
docs/README.md
Normal 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
|
Loading…
x
Reference in New Issue
Block a user