#!/bin/bash set -e # SneakyScanner Docker Entrypoint Script # This script ensures the database is initialized before starting the Flask app DB_PATH="${DATABASE_URL#sqlite:///}" # Extract path from sqlite:////app/data/sneakyscanner.db DB_DIR=$(dirname "$DB_PATH") INIT_MARKER="$DB_DIR/.db_initialized" PASSWORD_FILE="/app/logs/admin_password.txt" # Save to logs dir (mounted, no permission issues) echo "=== SneakyScanner Startup ===" echo "Database path: $DB_PATH" echo "Database directory: $DB_DIR" # Ensure database directory exists mkdir -p "$DB_DIR" # Check if this is the first run (database doesn't exist or not initialized) if [ ! -f "$DB_PATH" ] || [ ! -f "$INIT_MARKER" ]; then echo "" echo "=== First Run Detected ===" echo "Initializing database..." # Set default password from environment or generate a random one if [ -z "$INITIAL_PASSWORD" ]; then echo "INITIAL_PASSWORD not set, generating random password..." # Generate a 32-character alphanumeric password INITIAL_PASSWORD=$(cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 32) # Ensure logs directory exists mkdir -p /app/logs echo "$INITIAL_PASSWORD" > "$PASSWORD_FILE" echo "✓ Random password generated and saved to: ./logs/admin_password.txt" SAVE_PASSWORD_MESSAGE=true fi # Run database initialization python3 /app/init_db.py \ --db-url "$DATABASE_URL" \ --password "$INITIAL_PASSWORD" \ --no-migrations \ --force # Create marker file to indicate successful initialization if [ $? -eq 0 ]; then touch "$INIT_MARKER" echo "✓ Database initialized successfully" echo "" echo "=== IMPORTANT ===" if [ "$SAVE_PASSWORD_MESSAGE" = "true" ]; then echo "Login password saved to: ./logs/admin_password.txt" echo "Password: $INITIAL_PASSWORD" else echo "Login password: $INITIAL_PASSWORD" fi echo "Please change this password after logging in!" echo "==================" echo "" else echo "✗ Database initialization failed!" exit 1 fi else echo "Database already initialized, skipping init..." fi # Apply any pending migrations (if using migrations in future) if [ -f "/app/alembic.ini" ]; then echo "Checking for pending migrations..." # Uncomment when ready to use migrations: # alembic upgrade head fi echo "" echo "=== Starting Flask Application ===" echo "Flask will be available at http://localhost:5000" echo "" # Execute the main application exec "$@"