forked from claude-did-this/claude-hub
165 lines
4.8 KiB
Bash
Executable File
165 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script to set up AWS profiles for Claude webhook service
|
|
# This avoids storing credentials in environment variables
|
|
|
|
echo "AWS Profile Setup for Claude Webhook"
|
|
echo "===================================="
|
|
echo
|
|
|
|
# Function to create a profile
|
|
create_aws_profile() {
|
|
local profile_name=$1
|
|
local description=$2
|
|
|
|
echo "Setting up profile: $profile_name ($description)"
|
|
echo
|
|
|
|
# Check if profile already exists
|
|
if aws configure list --profile "$profile_name" &>/dev/null; then
|
|
echo "Profile '$profile_name' already exists."
|
|
read -p "Do you want to update it? (y/n): " update_profile
|
|
if [[ $update_profile != "y" ]]; then
|
|
echo "Skipping profile '$profile_name'"
|
|
return
|
|
fi
|
|
fi
|
|
|
|
# Get credentials
|
|
read -p "AWS Access Key ID: " access_key
|
|
read -s -p "AWS Secret Access Key: " secret_key
|
|
echo
|
|
read -p "Default region [us-west-2]: " region
|
|
region=${region:-us-west-2}
|
|
read -p "Output format [json]: " output
|
|
output=${output:-json}
|
|
|
|
# Set the profile using AWS CLI
|
|
aws configure set aws_access_key_id "$access_key" --profile "$profile_name"
|
|
aws configure set aws_secret_key "$secret_key" --profile "$profile_name"
|
|
aws configure set region "$region" --profile "$profile_name"
|
|
aws configure set output "$output" --profile "$profile_name"
|
|
|
|
echo "✅ Profile '$profile_name' created successfully!"
|
|
echo
|
|
}
|
|
|
|
# Main menu
|
|
echo "Which profiles would you like to set up?"
|
|
echo "1. claude-webhook (default profile for the service)"
|
|
echo "2. claude-dev (development environment)"
|
|
echo "3. claude-prod (production environment)"
|
|
echo "4. All of the above"
|
|
echo "5. Custom profile name"
|
|
echo
|
|
|
|
read -p "Enter your choice (1-5): " choice
|
|
|
|
case $choice in
|
|
1)
|
|
create_aws_profile "claude-webhook" "Default profile for Claude webhook service"
|
|
;;
|
|
2)
|
|
create_aws_profile "claude-dev" "Development environment"
|
|
;;
|
|
3)
|
|
create_aws_profile "claude-prod" "Production environment"
|
|
;;
|
|
4)
|
|
create_aws_profile "claude-webhook" "Default profile for Claude webhook service"
|
|
create_aws_profile "claude-dev" "Development environment"
|
|
create_aws_profile "claude-prod" "Production environment"
|
|
;;
|
|
5)
|
|
read -p "Enter custom profile name: " custom_name
|
|
read -p "Enter description: " custom_desc
|
|
create_aws_profile "$custom_name" "$custom_desc"
|
|
;;
|
|
*)
|
|
echo "Invalid choice. Exiting."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Update .env file
|
|
echo
|
|
echo "Updating .env file configuration..."
|
|
|
|
ENV_FILE="../.env"
|
|
|
|
# Backup existing .env
|
|
if [ -f "$ENV_FILE" ]; then
|
|
cp "$ENV_FILE" "$ENV_FILE.backup"
|
|
echo "Backed up existing .env to .env.backup"
|
|
fi
|
|
|
|
# Function to update .env
|
|
update_env_file() {
|
|
local profile_name=$1
|
|
|
|
# Remove old AWS credential lines
|
|
if [ -f "$ENV_FILE" ]; then
|
|
sed -i.tmp '/^AWS_ACCESS_KEY_ID=/d' "$ENV_FILE"
|
|
sed -i.tmp '/^AWS_SECRET_ACCESS_KEY=/d' "$ENV_FILE"
|
|
rm "$ENV_FILE.tmp"
|
|
fi
|
|
|
|
# Add new profile configuration
|
|
if grep -q "^USE_AWS_PROFILE=" "$ENV_FILE" 2>/dev/null; then
|
|
sed -i.tmp "s/^USE_AWS_PROFILE=.*/USE_AWS_PROFILE=true/" "$ENV_FILE"
|
|
else
|
|
echo "USE_AWS_PROFILE=true" >> "$ENV_FILE"
|
|
fi
|
|
|
|
if grep -q "^AWS_PROFILE=" "$ENV_FILE" 2>/dev/null; then
|
|
sed -i.tmp "s/^AWS_PROFILE=.*/AWS_PROFILE=$profile_name/" "$ENV_FILE"
|
|
else
|
|
echo "AWS_PROFILE=$profile_name" >> "$ENV_FILE"
|
|
fi
|
|
|
|
if [ -f "$ENV_FILE.tmp" ]; then
|
|
rm "$ENV_FILE.tmp"
|
|
fi
|
|
|
|
echo "✅ Updated .env to use AWS profile: $profile_name"
|
|
}
|
|
|
|
# Ask which profile to use in .env
|
|
echo
|
|
echo "Which profile should be used in the .env file?"
|
|
aws configure list-profiles | nl -v 1
|
|
echo
|
|
read -p "Enter the number or profile name: " env_choice
|
|
|
|
if [[ $env_choice =~ ^[0-9]+$ ]]; then
|
|
# User entered a number
|
|
profile_to_use=$(aws configure list-profiles | sed -n "${env_choice}p")
|
|
else
|
|
# User entered a profile name
|
|
profile_to_use=$env_choice
|
|
fi
|
|
|
|
if [ -n "$profile_to_use" ]; then
|
|
update_env_file "$profile_to_use"
|
|
fi
|
|
|
|
# Test the profile
|
|
echo
|
|
echo "Testing AWS profile configuration..."
|
|
if aws sts get-caller-identity --profile "$profile_to_use" &>/dev/null; then
|
|
echo "✅ Profile '$profile_to_use' is working correctly!"
|
|
aws sts get-caller-identity --profile "$profile_to_use" --output table
|
|
else
|
|
echo "❌ Failed to authenticate with profile '$profile_to_use'"
|
|
echo "Please check your credentials and try again."
|
|
fi
|
|
|
|
echo
|
|
echo "Setup complete!"
|
|
echo
|
|
echo "Next steps:"
|
|
echo "1. Rebuild the Docker image: ./build-claudecode.sh"
|
|
echo "2. Start the service: npm start"
|
|
echo "3. Your AWS credentials are now stored securely in ~/.aws/credentials"
|
|
echo
|
|
echo "To switch profiles later, update AWS_PROFILE in .env" |