ghorg/scripts/local-bitbucket/get_credentials.sh

244 lines
9.3 KiB
Bash
Executable File

#!/bin/bash
set -e
BITBUCKET_URL="${1:-http://bitbucket.example.com:7990}"
OUTPUT_DIR="${2:-/tmp/test-ghorg-output}"
# Default admin credentials (set in bitbucket.properties)
ADMIN_USERNAME="admin"
ADMIN_PASSWORD="admin"
ADMIN_EMAIL="admin@bitbucket.local"
echo "Waiting for Bitbucket Server to be ready at ${BITBUCKET_URL}..."
# Function to check if Bitbucket is responding
check_bitbucket_ready() {
curl -s --max-time 10 "${BITBUCKET_URL}/status" > /dev/null 2>&1
}
# Wait for Bitbucket to be ready (up to 5 minutes)
timeout=300
elapsed=0
while ! check_bitbucket_ready && [ $elapsed -lt $timeout ]; do
echo "Checking if Bitbucket is ready... (${elapsed}s/${timeout}s)"
sleep 10
elapsed=$((elapsed + 10))
done
if ! check_bitbucket_ready; then
echo "❌ Bitbucket Server did not become ready within ${timeout} seconds"
echo "Check container logs: docker logs bitbucket"
exit 1
fi
echo "Bitbucket Server is responding!"
# Give additional time for complete initialization with pre-configured database and admin user
echo "Waiting for Bitbucket Server to fully initialize with H2 database..."
echo "Background setup automation script is also running..."
echo "This may take up to 3 minutes for complete automated setup..."
# Reduced initialization wait
sleep 30
# Check if setup is complete by testing the API
echo "Checking Bitbucket Server setup status..."
# Test if we can access the API without authentication (should fail with 401)
api_response=$(curl -s -w "%{http_code}" "${BITBUCKET_URL}/rest/api/1.0/repos" -o /dev/null)
if [ "$api_response" = "401" ]; then
echo "✅ Bitbucket Server API is responding correctly (401 Unauthorized as expected)"
setup_complete=true
elif [ "$api_response" = "200" ]; then
echo "⚠️ Bitbucket Server API is accessible without authentication - this may indicate setup issues"
setup_complete=true
else
echo "⚠️ Bitbucket Server API returned status: $api_response"
# Check if we're still seeing setup pages
if curl -s "${BITBUCKET_URL}" | grep -qi "setup\|database\|welcome.*bitbucket"; then
echo "🔧 Bitbucket Server is still showing setup pages"
setup_complete=false
else
echo "✅ Bitbucket Server appears to be ready"
setup_complete=true
fi
fi
if [ "$setup_complete" = false ]; then
if [ "${ENV:-}" = "ci" ]; then
echo "🤖 CI Mode: Setup not complete but proceeding with authentication test"
echo "This validates that ghorg's Bitbucket Server client implementation is working"
else
echo ""
echo "💡 MANUAL SETUP REQUIRED:"
echo "1. Open ${BITBUCKET_URL} in your browser"
echo "2. Complete the setup wizard:"
echo " - Choose 'Internal' for database (H2)"
echo " - Create admin user with credentials:"
echo " Username: admin"
echo " Password: admin"
echo " Email: admin@bitbucket.local"
echo "3. Skip license (evaluation mode)"
echo "4. Complete setup and re-run tests"
echo ""
exit 1
fi
fi
# Test authentication with admin credentials
echo "Testing authentication with admin credentials..."
auth_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
"${BITBUCKET_URL}/rest/api/1.0/users/${ADMIN_USERNAME}" -o /tmp/auth_test.json)
if [ "$auth_test" = "200" ]; then
echo "✅ Authentication successful with admin:admin"
# Validate the response contains user information
if grep -q "\"name\".*\"${ADMIN_USERNAME}\"" /tmp/auth_test.json; then
echo "✅ User information retrieved successfully"
# Output credentials for other scripts
mkdir -p "${OUTPUT_DIR}"
cat > "${OUTPUT_DIR}/bitbucket_credentials.env" << EOF
export GHORG_SCM_TYPE=bitbucket
export GHORG_SCM_BASE_URL=${BITBUCKET_URL}
export GHORG_BITBUCKET_USERNAME=${ADMIN_USERNAME}
export GHORG_BITBUCKET_APP_PASSWORD=${ADMIN_PASSWORD}
export GHORG_INSECURE_BITBUCKET_CLIENT=true
EOF
echo "✅ Credentials saved to ${OUTPUT_DIR}/bitbucket_credentials.env"
# Test a few more API endpoints to ensure full functionality
echo "Testing additional API endpoints..."
# Test projects endpoint
projects_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
"${BITBUCKET_URL}/rest/api/1.0/projects" -o /dev/null)
if [ "$projects_test" = "200" ]; then
echo "✅ Projects API endpoint working"
else
echo "⚠️ Projects API returned status: $projects_test"
fi
# Test repositories endpoint
repos_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
"${BITBUCKET_URL}/rest/api/1.0/repos" -o /dev/null)
if [ "$repos_test" = "200" ]; then
echo "✅ Repositories API endpoint working"
else
echo "⚠️ Repositories API returned status: $repos_test"
fi
echo ""
echo "🎉 Bitbucket Server is ready for testing!"
echo " Base URL: ${BITBUCKET_URL}"
echo " Username: ${ADMIN_USERNAME}"
echo " Password: ${ADMIN_PASSWORD}"
echo ""
else
echo "⚠️ Authentication succeeded but user data appears invalid"
cat /tmp/auth_test.json
fi
elif [ "$auth_test" = "401" ]; then
echo "❌ Authentication failed with admin:admin"
echo "API request failed with status 401: Authentication failed"
# Check if setup is still in progress or if we can try API-based admin creation
setup_page_content=$(curl -s "${BITBUCKET_URL}" 2>/dev/null)
if echo "$setup_page_content" | grep -qi "setup\|database\|admin.*user"; then
echo "⚠️ Bitbucket Server setup may still be in progress"
echo "Attempting API-based admin user creation as fallback..."
# Try to create admin user via setup API if available
admin_creation_response=$(curl -s -w "%{http_code}" \
-H "Content-Type: application/json" \
-d '{
"username": "'${ADMIN_USERNAME}'",
"password": "'${ADMIN_PASSWORD}'",
"displayName": "Administrator",
"emailAddress": "'${ADMIN_EMAIL}'"
}' \
"${BITBUCKET_URL}/rest/api/1.0/admin/users" 2>/dev/null)
if [[ "$admin_creation_response" == *"201" ]] || [[ "$admin_creation_response" == *"409" ]]; then
echo "✅ Admin user creation via API successful (or user already exists)"
sleep 30 # Give time for user to be fully set up
# Retry authentication
retry_auth_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
"${BITBUCKET_URL}/rest/api/1.0/users/${ADMIN_USERNAME}" -o /tmp/retry_auth_test.json)
if [ "$retry_auth_test" = "200" ]; then
echo "✅ Authentication successful after API user creation"
if grep -q "\"name\".*\"${ADMIN_USERNAME}\"" /tmp/retry_auth_test.json; then
echo "✅ User information retrieved successfully"
mkdir -p "${OUTPUT_DIR}"
cat > "${OUTPUT_DIR}/bitbucket_credentials.env" << EOF
export GHORG_SCM_TYPE=bitbucket
export GHORG_SCM_BASE_URL=${BITBUCKET_URL}
export GHORG_BITBUCKET_USERNAME=${ADMIN_USERNAME}
export GHORG_BITBUCKET_APP_PASSWORD=${ADMIN_PASSWORD}
export GHORG_INSECURE_BITBUCKET_CLIENT=true
EOF
echo "✅ Credentials saved to ${OUTPUT_DIR}/bitbucket_credentials.env"
echo "🎉 Fully automated Bitbucket Server setup complete!"
exit 0
fi
fi
else
echo "⚠️ API-based admin user creation failed: $admin_creation_response"
fi
echo "Waiting additional 60 seconds for properties-based setup to complete..."
sleep 60
# Final retry with original credentials
final_retry_auth_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
"${BITBUCKET_URL}/rest/api/1.0/users/${ADMIN_USERNAME}" -o /tmp/final_retry_auth_test.json)
if [ "$final_retry_auth_test" = "200" ]; then
echo "✅ Authentication successful after extended wait"
if grep -q "\"name\".*\"${ADMIN_USERNAME}\"" /tmp/final_retry_auth_test.json; then
echo "✅ User information retrieved successfully"
mkdir -p "${OUTPUT_DIR}"
cat > "${OUTPUT_DIR}/bitbucket_credentials.env" << EOF
export GHORG_SCM_TYPE=bitbucket
export GHORG_SCM_BASE_URL=${BITBUCKET_URL}
export GHORG_BITBUCKET_USERNAME=${ADMIN_USERNAME}
export GHORG_BITBUCKET_APP_PASSWORD=${ADMIN_PASSWORD}
export GHORG_INSECURE_BITBUCKET_CLIENT=true
EOF
echo "✅ Credentials saved to ${OUTPUT_DIR}/bitbucket_credentials.env"
echo "🎉 Fully automated Bitbucket Server setup complete!"
exit 0
fi
fi
fi
echo ""
echo "❌ Unattended setup failed. Possible issues:"
echo "1. Check Docker logs: docker logs bitbucket"
echo "2. Verify bitbucket.properties configuration"
echo "3. Ensure sufficient startup time for initialization"
echo ""
exit 1
else
echo "❌ Authentication test failed with status: $auth_test"
exit 1
fi
# Clean up
rm -f /tmp/auth_test.json /tmp/bb_cookies
echo "✅ Bitbucket Server setup and authentication verification complete!"