#!/bin/bash # Set up authentication tokens for InfluxDB 3 Core and Enterprise containers # Usage: ./setup-auth-tokens.sh [core|enterprise|both] set -e # Color codes RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Parse arguments TARGET=${1:-both} echo -e "${BLUE}๐Ÿ” InfluxDB 3 Authentication Setup${NC}" echo "==================================" echo "" # Check for and load existing secret files SECRET_CORE_FILE="$HOME/.env.influxdb3-core-admin-token" SECRET_ENT_FILE="$HOME/.env.influxdb3-enterprise-admin-token" if [ -f "$SECRET_CORE_FILE" ]; then echo "โœ… Found existing Core token secret file" else echo "๐Ÿ“ Creating new Core token secret file: $SECRET_CORE_FILE" touch "$SECRET_CORE_FILE" fi if [ -f "$SECRET_ENT_FILE" ]; then echo "โœ… Found existing Enterprise token secret file" else echo "๐Ÿ“ Creating new Enterprise token secret file: $SECRET_ENT_FILE" touch "$SECRET_ENT_FILE" fi echo "" # Function to setup auth for a product setup_auth() { local product=$1 local container_name="influxdb3-${product}" local port local secret_file case "$product" in "core") port="8282" secret_file="$SECRET_CORE_FILE" ;; "enterprise") port="8181" secret_file="$SECRET_ENT_FILE" ;; esac echo -e "${BLUE}Setting up $(echo ${product} | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}') authentication...${NC}" # Check if token already exists in secret file if [ -s "$secret_file" ]; then local existing_token=$(cat "$secret_file") echo "โœ… Token already exists in secret file" echo " Token: ${existing_token:0:20}..." # Test if the token works echo -n "๐Ÿงช Testing existing token..." if docker exec "${container_name}" influxdb3 show databases --token "${existing_token}" --host "http://localhost:${port}" > /dev/null 2>&1; then echo -e " ${GREEN}โœ“ Working${NC}" return 0 else echo -e " ${YELLOW}โš  Not working, will create new token${NC}" fi fi # Check if container is running if ! docker ps --format '{{.Names}}' | grep -q "^${container_name}$"; then echo "๐Ÿš€ Starting ${container_name} container..." if ! docker compose up -d "${container_name}"; then echo -e "${RED}โŒ Failed to start container${NC}" return 1 fi echo -n "โณ Waiting for container to be ready..." sleep 5 echo -e " ${GREEN}โœ“${NC}" else echo "โœ… Container ${container_name} is running" fi # Create admin token echo "๐Ÿ”‘ Creating admin token..." local token_output if token_output=$(docker exec "${container_name}" influxdb3 create token --admin 2>&1); then # Extract the token from the "Token: " line local new_token=$(echo "$token_output" | grep "^Token: " | sed 's/^Token: //' | tr -d '\r\n') echo -e "โœ… ${GREEN}Token created successfully!${NC}" echo " Token: ${new_token:0:20}..." # Update secret file echo "${new_token}" > "$secret_file" echo "๐Ÿ“ Updated secret file: $secret_file" # Test the new token echo -n "๐Ÿงช Testing new token..." if docker exec "${container_name}" influxdb3 show databases --token "${new_token}" --host "http://localhost:${port}" > /dev/null 2>&1; then echo -e " ${GREEN}โœ“ Working${NC}" else echo -e " ${YELLOW}โš  Test failed, but token was created${NC}" fi else echo -e "${RED}โŒ Failed to create token${NC}" echo "Error output: $token_output" return 1 fi echo "" } # Main execution case "$TARGET" in "core") setup_auth "core" ;; "enterprise") setup_auth "enterprise" ;; "both") setup_auth "core" setup_auth "enterprise" ;; *) echo "Usage: $0 [core|enterprise|both]" exit 1 ;; esac echo -e "${GREEN}๐ŸŽ‰ Authentication setup complete!${NC}" echo "" echo "๐Ÿ“‹ Next steps:" echo "1. Restart containers to load new secrets:" echo " docker compose down && docker compose up -d influxdb3-core influxdb3-enterprise" echo "2. Test CLI commands with authentication:" echo " ./detect-cli-changes.sh core 3.1.0 local" echo " ./detect-cli-changes.sh enterprise 3.1.0 local" echo "" echo "๐Ÿ“„ Your secret files now contain:" # Show Core tokens if [ -f "$SECRET_CORE_FILE" ] && [ -s "$SECRET_CORE_FILE" ]; then token_preview=$(head -c 20 "$SECRET_CORE_FILE") echo " $SECRET_CORE_FILE: ${token_preview}..." fi # Show Enterprise tokens if [ -f "$SECRET_ENT_FILE" ] && [ -s "$SECRET_ENT_FILE" ]; then token_preview=$(head -c 20 "$SECRET_ENT_FILE") echo " $SECRET_ENT_FILE: ${token_preview}..." fi