| #!/bin/bash |
| set -e |
| set -x |
|
|
| |
| unset OAUTH2_PROXY_GITHUB_ORG OAUTH2_PROXY_GITHUB_ORGS |
| unset OAUTH2_PROXY_GITHUB_TEAM OAUTH2_PROXY_GITHUB_TEAMS |
| unset OAUTH2_PROXY_GITHUB_REPO OAUTH2_PROXY_GITHUB_REPOS |
| unset OAUTH2_PROXY_ALLOWED_GROUPS |
|
|
| |
| if [ -z "$ALLOWED_USERS" ]; then |
| echo "Error: ALLOWED_USERS is required." |
| exit 1 |
| fi |
|
|
| if [ -z "$GITHUB_CLIENT_ID" ] || [ -z "$GITHUB_CLIENT_SECRET" ] || [ -z "$OAUTH2_PROXY_COOKIE_SECRET" ]; then |
| echo "Error: GitHub Secrets (CLIENT_ID, CLIENT_SECRET, COOKIE_SECRET) are required." |
| exit 1 |
| fi |
|
|
| if [ -z "$GOOGLE_CLIENT_ID" ] || [ -z "$GOOGLE_CLIENT_SECRET" ]; then |
| echo "Error: Google Secrets (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET) are required." |
| exit 1 |
| fi |
|
|
| if [ -z "$SPACE_PUBLIC_URL" ]; then |
| echo "Error: SPACE_PUBLIC_URL is required." |
| exit 1 |
| fi |
|
|
| |
| trim_secret() { |
| printf "%s" "$1" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | tr -d '\r' | sed 's/^"//;s/"$//' |
| } |
| GITHUB_CLIENT_ID=$(trim_secret "$GITHUB_CLIENT_ID") |
| GITHUB_CLIENT_SECRET=$(trim_secret "$GITHUB_CLIENT_SECRET") |
| GOOGLE_CLIENT_ID=$(trim_secret "$GOOGLE_CLIENT_ID") |
| GOOGLE_CLIENT_SECRET=$(trim_secret "$GOOGLE_CLIENT_SECRET") |
| OAUTH2_PROXY_COOKIE_SECRET=$(trim_secret "$OAUTH2_PROXY_COOKIE_SECRET") |
| SPACE_PUBLIC_URL=$(echo "$SPACE_PUBLIC_URL" | sed "s/[[:space:]]//g" | sed "s/\`//g") |
| SPACE_PUBLIC_URL="${SPACE_PUBLIC_URL%/}" |
|
|
| |
| AUTH_FILE="/tmp/authenticated_emails.txt" |
| > "$AUTH_FILE" |
| declare -a GITHUB_USERS |
| IFS=',' read -ra USERS <<< "$ALLOWED_USERS" |
| for USER_ITEM in "${USERS[@]}"; do |
| USER_ITEM=$(echo "$USER_ITEM" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') |
| [ -z "$USER_ITEM" ] && continue |
| |
| |
| if [[ "$USER_ITEM" == *"@"* ]]; then |
| echo "$USER_ITEM" | tr '[:upper:]' '[:lower:]' >> "$AUTH_FILE" |
| else |
| GITHUB_USERS+=("$(echo "$USER_ITEM" | tr '[:upper:]' '[:lower:]')") |
| fi |
| done |
|
|
| |
| echo "Starting ttyd..." |
| |
| ttyd -p 7681 -W bash & |
|
|
| |
| echo "Starting oauth2-proxy (GitHub)..." |
| GITHUB_CMD=(oauth2-proxy \ |
| --http-address="127.0.0.1:4180" \ |
| --provider="github" \ |
| --email-domain="*" \ |
| --cookie-secure=true \ |
| --cookie-httponly=true \ |
| --cookie-refresh="1h" \ |
| --cookie-expire="168h" \ |
| --reverse-proxy=true \ |
| --set-xauthrequest=true \ |
| --skip-provider-button=true \ |
| --client-id="$GITHUB_CLIENT_ID" \ |
| --client-secret="$GITHUB_CLIENT_SECRET" \ |
| --cookie-secret="$OAUTH2_PROXY_COOKIE_SECRET" \ |
| --cookie-name="_oauth2_proxy_github" \ |
| --proxy-prefix="/oauth2/github" \ |
| --scope="user:email,read:org" \ |
| --show-debug-on-error=true \ |
| --redirect-url="$SPACE_PUBLIC_URL/oauth2/github/callback") |
|
|
| |
| if [ -s "$AUTH_FILE" ]; then |
| GITHUB_CMD+=("--authenticated-emails-file=$AUTH_FILE") |
| fi |
| for GH_USER in "${GITHUB_USERS[@]}"; do |
| GITHUB_CMD+=("--github-user=$GH_USER") |
| done |
|
|
| "${GITHUB_CMD[@]}" 2>&1 & |
|
|
| echo "Starting oauth2-proxy (Google)..." |
| GOOGLE_CMD=(oauth2-proxy \ |
| --http-address="127.0.0.1:4181" \ |
| --provider="google" \ |
| --email-domain="*" \ |
| --cookie-secure=true \ |
| --cookie-httponly=true \ |
| --cookie-refresh="1h" \ |
| --cookie-expire="168h" \ |
| --reverse-proxy=true \ |
| --set-xauthrequest=true \ |
| --skip-provider-button=true \ |
| --client-id="$GOOGLE_CLIENT_ID" \ |
| --client-secret="$GOOGLE_CLIENT_SECRET" \ |
| --cookie-secret="$OAUTH2_PROXY_COOKIE_SECRET" \ |
| --cookie-name="_oauth2_proxy_google" \ |
| --proxy-prefix="/oauth2/google" \ |
| --show-debug-on-error=true \ |
| --redirect-url="$SPACE_PUBLIC_URL/oauth2/google/callback") |
|
|
| if [ -s "$AUTH_FILE" ]; then |
| GOOGLE_CMD+=("--authenticated-emails-file=$AUTH_FILE") |
| fi |
|
|
| "${GOOGLE_CMD[@]}" 2>&1 & |
|
|
| |
| for i in {1..30}; do |
| |
| if (nc -z 127.0.0.1 4180 || nc -z ::1 4180) && \ |
| (nc -z 127.0.0.1 4181 || nc -z ::1 4181) && \ |
| (nc -z 127.0.0.1 7681 || nc -z ::1 7681); then |
| echo "Services ready." |
| break |
| fi |
| sleep 1 |
| done |
|
|
| |
| echo "Starting Nginx..." |
| nginx -g "daemon off;" |
|
|