diff --git a/setup-git-repo.sh b/setup-git-repo.sh index f3f3ac6..1b17057 100755 --- a/setup-git-repo.sh +++ b/setup-git-repo.sh @@ -16,6 +16,9 @@ NC='\033[0m' # No Color # Configuration file path CONFIG_FILE="$(dirname "$0")/config.json" +# Known Gitea URLs to check credentials for +KNOWN_GITEA_URLS=("https://go-gitea.mywire.org" "http://192.168.88.97:3000") + # Function to print colored output print_status() { echo -e "${BLUE}[INFO]${NC} $1" @@ -68,6 +71,64 @@ install_tea_cli() { fi } +# Function to check and setup credentials for known Gitea instances +check_and_setup_known_gitea_credentials() { + print_status "Checking credentials for known Gitea instances..." + + local credential_helper="" + + # Check for Git Credential Manager (GCM) + if command_exists git-credential-manager; then + credential_helper="manager" + print_success "Found Git Credential Manager" + # Check for platform-specific helpers + elif [[ "$OSTYPE" == "darwin"* ]] && git config --global --get credential.helper 2>/dev/null | grep -q "osxkeychain"; then + credential_helper="osxkeychain" + print_success "Found macOS Keychain credential helper" + elif [[ "$OSTYPE" == "linux-gnu"* ]] && command_exists gnome-keyring-daemon; then + credential_helper="/usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring" + print_success "Found GNOME Keyring" + # Fallback to generic manager + elif git config --global --get credential.helper >/dev/null 2>&1; then + credential_helper=$(git config --global --get credential.helper) + print_success "Using existing credential helper: $credential_helper" + else + print_warning "No credential manager found" + + # Offer to install Git Credential Manager + echo + read -p "Would you like to install Git Credential Manager for secure credential storage? (y/N): " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + if install_credential_manager; then + credential_helper="manager" + print_success "Git Credential Manager installed successfully" + else + print_warning "Failed to install Git Credential Manager" + return 1 + fi + else + print_warning "Skipping credential setup for known instances" + return 1 + fi + fi + + for url in "${KNOWN_GITEA_URLS[@]}"; do + local domain=$(echo "$url" | sed 's|https://||' | sed 's|http://||') + if git config --global credential."https://$domain".helper >/dev/null 2>&1; then + print_success "Credentials already configured for $url" + else + print_status "Configuring credentials for $url" + local cmd="git config --global credential.\"https://$domain\".helper \"$credential_helper\"" + echo "Running: $cmd" + eval "$cmd" + print_success "Credentials configured for $url" + fi + done + + return 0 +} + # Function to detect and configure credential manager setup_credential_manager() { print_status "Checking for Git credential managers..." @@ -420,6 +481,9 @@ main() { print_error "Git is not installed. Please install Git first." exit 1 fi + + # Check and setup credentials for known Gitea instances + check_and_setup_known_gitea_credentials # Load configuration if available CONFIG_LOADED=false