| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- #!/bin/sh
- # Script do dodania testowych użytkowników do Keycloaka - Z VERBOSE LOGGING
- KEYCLOAK_URL="http://keycloak:8060"
- REALM="boat-delivery-realm"
- ADMIN_USER="admin"
- ADMIN_PASSWORD="admin"
- echo "========================================"
- echo "Dodawanie testowych użytkowników do Keycloaka"
- echo "========================================"
- # Czekaj aż Keycloak się uruchomi
- echo "Czekam na Keycloak..."
- MAX_ATTEMPTS=120
- ATTEMPT=0
- while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
- ATTEMPT=$((ATTEMPT + 1))
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "${KEYCLOAK_URL}/realms/${REALM}" 2>/dev/null || echo "000")
- if [ "$HTTP_CODE" = "200" ]; then
- echo "✅ Keycloak jest gotowy!"
- break
- fi
- echo " Próba $ATTEMPT/$MAX_ATTEMPTS..."
- sleep 5
- done
- # Pobierz token
- echo ""
- echo "1. Pobieranie tokenu..."
- TOKEN_RESPONSE=$(curl -s -X POST "${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token" \
- -H "Content-Type: application/x-www-form-urlencoded" \
- -d "client_id=admin-cli" \
- -d "username=${ADMIN_USER}" \
- -d "password=${ADMIN_PASSWORD}" \
- -d "grant_type=password")
- ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
- if [ -z "$ACCESS_TOKEN" ]; then
- echo "❌ Błąd: Nie udało się pobrać tokenu"
- echo "Token Response: $TOKEN_RESPONSE"
- exit 1
- fi
- echo "✅ Token pobrany"
- # Funkcja do dodania użytkownika
- add_user() {
- local username=$1
- local email=$2
- local first_name=$3
- local last_name=$4
- local password=$5
- local role=$6
- local phone=$7
- echo ""
- echo "Dodawanie: $username ($email)"
- # Utwórz JSON bez ID - Keycloak generuje
- JSON_FILE="/tmp/user_${username}.json"
- cat > "$JSON_FILE" << 'JSONEOF'
- {
- "username": "PLACEHOLDER_USERNAME",
- "email": "PLACEHOLDER_EMAIL",
- "firstName": "PLACEHOLDER_FIRST_NAME",
- "lastName": "PLACEHOLDER_LAST_NAME",
- "enabled": true,
- "emailVerified": true,
- "attributes": {
- "phoneNumber": "PLACEHOLDER_PHONE",
- "ACCOUNT_TYPE": "PLACEHOLDER_ACCOUNT_TYPE"
- },
- "credentials": [
- {
- "type": "password",
- "value": "PLACEHOLDER_PASSWORD",
- "temporary": false
- }
- ]
- }
- JSONEOF
- # Zastąp placeholdery (aby uniknąć problemów z cudzysłowami)
- sed -i "s|PLACEHOLDER_USERNAME|$username|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_EMAIL|$email|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_FIRST_NAME|$first_name|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_LAST_NAME|$last_name|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_PHONE|$phone|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_PASSWORD|$password|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_FIRST_NAME|$first_name|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_LAST_NAME|$last_name|g" "$JSON_FILE"
- sed -i "s|PLACEHOLDER_PASSWORD|$password|g" "$JSON_FILE"
- echo " JSON: $(cat $JSON_FILE | head -c 100)..."
- # Wyślij request i zbierz całą odpowiedź
- CREATE_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "${KEYCLOAK_URL}/admin/realms/${REALM}/users" \
- -H "Authorization: Bearer ${ACCESS_TOKEN}" \
- -H "Content-Type: application/json" \
- -d @"$JSON_FILE")
- HTTP_CODE=$(echo "$CREATE_RESPONSE" | tail -1)
- BODY=$(echo "$CREATE_RESPONSE" | head -n -1)
- echo " HTTP Code: $HTTP_CODE"
- if [ ! -z "$BODY" ]; then
- echo " Response Body: $BODY"
- fi
- rm -f "$JSON_FILE"
- if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "204" ]; then
- echo " ✅ Utworzony"
- elif [ "$HTTP_CODE" = "409" ]; then
- echo " ⚠️ Już istnieje"
- else
- echo " ❌ Błąd (HTTP: $HTTP_CODE)"
- return 1
- fi
- # Pobierz ID użytkownika (został właśnie utworzony)
- CREATED_USER_ID=$(curl -s "${KEYCLOAK_URL}/admin/realms/${REALM}/users?username=${username}" \
- -H "Authorization: Bearer ${ACCESS_TOKEN}" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
- echo " User ID: $CREATED_USER_ID"
- # Przydziel rolę
- if [ -n "$role" ] && [ -n "$CREATED_USER_ID" ]; then
- ROLE_ID=$(curl -s "${KEYCLOAK_URL}/admin/realms/${REALM}/roles?search=${role}" \
- -H "Authorization: Bearer ${ACCESS_TOKEN}" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
- echo " Role ID: $ROLE_ID"
- if [ -n "$ROLE_ID" ]; then
- ROLE_JSON="/tmp/role_${username}.json"
- cat > "$ROLE_JSON" << 'ROLEJSONEOF'
- [{"id":"PLACEHOLDER_ROLE_ID","name":"PLACEHOLDER_ROLE_NAME"}]
- ROLEJSONEOF
- sed -i "s|PLACEHOLDER_ROLE_ID|$ROLE_ID|g" "$ROLE_JSON"
- sed -i "s|PLACEHOLDER_ROLE_NAME|$role|g" "$ROLE_JSON"
- ROLE_CODE=$(curl -s -w "%{http_code}" -o /dev/null -X POST "${KEYCLOAK_URL}/admin/realms/${REALM}/users/${CREATED_USER_ID}/role-mappings/realm" \
- -H "Authorization: Bearer ${ACCESS_TOKEN}" \
- -H "Content-Type: application/json" \
- -d @"$ROLE_JSON")
- echo " Role HTTP Code: $ROLE_CODE"
- rm -f "$ROLE_JSON"
- if [ "$ROLE_CODE" = "204" ] || [ "$ROLE_CODE" = "200" ]; then
- echo " ✅ Rola przydzielona: $role"
- fi
- fi
- fi
- }
- # Dodaj użytkowników
- echo ""
- echo "2. Dodawanie użytkowników..."
- add_user "user1" "jan.kowalski@example.com" "Jan" "Kowalski" "Password123" "CUSTOMER" "+48501234567"
- add_user "user2" "anna.nowak@example.com" "Anna" "Nowak" "Password123" "CUSTOMER" "+48601234567"
- add_user "courier1" "piotr.lewandowski@example.com" "Piotr" "Lewandowski" "Password123" "COURIER" "+48701234567"
- add_user "courier2" "marta.wisniewska@example.com" "Marta" "Wiśniewska" "Password123" "COURIER" "+48801234567"
- add_user "courier3" "kamil.krawczyk@example.com" "Kamil" "Krawczyk" "Password123" "COURIER" "+48511111111"
- add_user "courier4" "eva.zielinska@example.com" "Eva" "Zielińska" "Password123" "COURIER" "+48521111111"
- add_user "courier5" "jakub.nowinski@example.com" "Jakub" "Nowiński" "Password123" "COURIER" "+48531111111"
- add_user "courier6" "magdalena.lewandowska@example.com" "Magdalena" "Lewandowska" "Password123" "COURIER" "+48541111111"
- add_user "courier7" "michal.wisniewski@example.com" "Michał" "Wiszniewski" "Password123" "COURIER" "+48551111111"
- add_user "admin" "admin@example.com" "Admin" "User" "Password123" "ADMIN" "+48121234567"
- # Dodaj 50 customerów (customer001-customer050) - bez przypisywania pojazdów
- echo ""
- echo "2b. Dodawanie 50 customerów (customer001-customer050)..."
- for i in $(seq 1 50); do
- customer_num=$(printf "%03d" $i)
- phone=$(printf "+48%09d" $((123456000 + i)))
- add_user "customer$customer_num" "customer$customer_num@boatdelivery.test" "Test" "Customer $customer_num" "Password123" "CUSTOMER" "$phone"
- done
- # Dodaj 20 kurierów (courier008-courier027) - bez przypisywania pojazdów
- echo ""
- echo "2c. Dodawanie 20 dodatkowych kurierów (courier008-courier027)..."
- for i in $(seq 8 27); do
- courier_num=$(printf "%03d" $i)
- phone=$(printf "+48%09d" $((987654000 + i)))
- add_user "courier$courier_num" "courier$courier_num@boatdelivery.test" "Test" "Courier $courier_num" "Password123" "COURIER" "$phone"
- done
- echo ""
- echo "3. Dodawanie pojazdów transportowych dla courierów..."
- echo "⏳ Czekam 15 sekund na synchronizację użytkowników z UserService..."
- sleep 15
- # Funkcja do dodania pojazdu
- add_transport() {
- local courier_email=$1
- local transport_type=$2
- local brand=$3
- local model=$4
- local fuel_type=$5
- local trunk_volume=$6
- local cargo_capacity=$7
- local consumption=$8
- local license_plate=$9
- local color=${10}
- echo ""
- echo "Dodawanie pojazdu: $brand $model ($transport_type) dla $courier_email"
- # Pobierz wszystkich userów i szukaj po email
- MAX_RETRIES=25
- RETRY=0
- COURIER_ID=""
- while [ $RETRY -lt $MAX_RETRIES ] && [ -z "$COURIER_ID" ]; do
- RETRY=$((RETRY + 1))
- # Pobierz listę userów z UserService - public endpoint
- USERS_JSON=$(curl -s -m 5 "http://user-service:8081/api/user/public/list" 2>/dev/null)
- # Szukaj couriera po email
- COURIER_ID=$(echo "$USERS_JSON" | grep -o "\"id\":\"[a-f0-9\-]*\"[^}]*\"email\":\"$courier_email\"" | head -1 | cut -d'"' -f4)
- # Jeśli nie znaleziono, spróbuj odwrotnie
- if [ -z "$COURIER_ID" ]; then
- COURIER_ID=$(echo "$USERS_JSON" | grep -B5 "\"email\":\"$courier_email\"" | grep "\"id\":\"" | head -1 | cut -d'"' -f4)
- fi
- if [ -z "$COURIER_ID" ]; then
- if [ $RETRY -lt $MAX_RETRIES ]; then
- echo " ⏳ Próba $RETRY/$MAX_RETRIES - czekam na couriera w UserService..."
- sleep 2
- fi
- fi
- done
- if [ -z "$COURIER_ID" ]; then
- echo " ❌ Błąd: Nie znaleziono couriera $courier_email w UserService"
- return 1
- fi
- echo " ✅ Courier ID: $COURIER_ID"
- # Przygotuj JSON pojazdu
- TRANSPORT_JSON="/tmp/transport_${brand}.json"
- cat > "$TRANSPORT_JSON" << EOF
- {
- "transportType": "$transport_type",
- "brand": "$brand",
- "model": "$model",
- "fuelType": "$fuel_type",
- "trunkVolume": $trunk_volume,
- "cargoCapacity": $cargo_capacity,
- "consumption": $consumption,
- "licensePlate": "$license_plate",
- "color": "$color"
- }
- EOF
- # Wyślij request do UserService API
- TRANSPORT_RESPONSE=$(curl -s -w "\n%{http_code}" -m 10 -X POST "http://user-service:8081/api/transport/courier/${COURIER_ID}" \
- -H "Content-Type: application/json" \
- -d @"$TRANSPORT_JSON" 2>/dev/null)
- TRANSPORT_CODE=$(echo "$TRANSPORT_RESPONSE" | tail -1)
- TRANSPORT_BODY=$(echo "$TRANSPORT_RESPONSE" | head -n -1)
- rm -f "$TRANSPORT_JSON"
- echo " HTTP Code: $TRANSPORT_CODE"
- if [ "$TRANSPORT_CODE" = "201" ] || [ "$TRANSPORT_CODE" = "200" ]; then
- echo " ✅ Pojazd dodany"
- else
- echo " ❌ Błąd (HTTP: $TRANSPORT_CODE)"
- fi
- }
- # Dodaj pojazdy dla poszczególnych courierów
- add_transport "piotr.lewandowski@example.com" "CAR" "Toyota" "Corolla" "PETROL" "450.0" "500.0" "6.5" "WA01BC1" "Silver"
- add_transport "marta.wisniewska@example.com" "VAN" "Ford" "Transit" "DIESEL" "1200.0" "1500.0" "8.2" "WA02CD2" "White"
- add_transport "kamil.krawczyk@example.com" "CAR" "Volkswagen" "Passat" "DIESEL" "490.0" "540.0" "6.2" "WA03UV3" "Blue"
- add_transport "eva.zielinska@example.com" "TRUCK" "Volvo" "FH16" "DIESEL" "2500.0" "3500.0" "12.0" "WA04EF5" "Red"
- add_transport "jakub.nowinski@example.com" "VAN" "Mercedes" "Sprinter" "DIESEL" "1400.0" "1800.0" "9.5" "WA05IJ7" "Gray"
- add_transport "magdalena.lewandowska@example.com" "CAR" "Honda" "Civic" "PETROL" "490.0" "520.0" "6.8" "WA06GH6" "Blue"
- add_transport "michal.wisniewski@example.com" "TRUCK" "Scania" "R450" "DIESEL" "3000.0" "4000.0" "14.0" "WA07ST2" "Orange"
- # Dodaj pojazdy dla courier008-courier027
- add_transport "courier008@boatdelivery.test" "CAR" "BMW" "320i" "PETROL" "460.0" "520.0" "7.2" "WA08AB8" "Black"
- add_transport "courier009@boatdelivery.test" "VAN" "Renault" "Master" "DIESEL" "1350.0" "1700.0" "8.9" "WA09CD9" "White"
- add_transport "courier010@boatdelivery.test" "CAR" "Audi" "A4" "DIESEL" "470.0" "530.0" "6.5" "WA10EF0" "Silver"
- add_transport "courier011@boatdelivery.test" "TRUCK" "MAN" "TGX" "DIESEL" "2800.0" "3800.0" "13.5" "WA11GH1" "Blue"
- add_transport "courier012@boatdelivery.test" "CAR" "Skoda" "Octavia" "PETROL" "440.0" "510.0" "6.9" "WA12IJ2" "Gray"
- add_transport "courier013@boatdelivery.test" "VAN" "Iveco" "Daily" "DIESEL" "1300.0" "1650.0" "8.5" "WA13KL3" "White"
- add_transport "courier014@boatdelivery.test" "CAR" "Opel" "Insignia" "DIESEL" "485.0" "535.0" "6.3" "WA14MN4" "Red"
- add_transport "courier015@boatdelivery.test" "TRUCK" "DAF" "XF" "DIESEL" "2900.0" "4000.0" "13.8" "WA15OP5" "Yellow"
- add_transport "courier016@boatdelivery.test" "CAR" "Peugeot" "308" "PETROL" "455.0" "515.0" "6.7" "WA16QR6" "Green"
- add_transport "courier017@boatdelivery.test" "VAN" "Citroen" "Berlingo" "DIESEL" "1100.0" "1400.0" "7.8" "WA17ST7" "White"
- add_transport "courier018@boatdelivery.test" "CAR" "Mazda" "6" "PETROL" "470.0" "520.0" "7.1" "WA18UV8" "Black"
- add_transport "courier019@boatdelivery.test" "TRUCK" "Iveco" "Stralis" "DIESEL" "2700.0" "3600.0" "12.9" "WA19WX9" "Orange"
- add_transport "courier020@boatdelivery.test" "CAR" "Hyundai" "Tucson" "DIESEL" "465.0" "525.0" "6.8" "WA20YZ0" "Silver"
- add_transport "courier021@boatdelivery.test" "VAN" "Fiat" "Ducato" "DIESEL" "1200.0" "1500.0" "8.3" "WA21AB1" "White"
- add_transport "courier022@boatdelivery.test" "CAR" "Kia" "Ceed" "PETROL" "450.0" "505.0" "6.6" "WA22CD2" "Blue"
- add_transport "courier023@boatdelivery.test" "TRUCK" "Renault" "Premium" "DIESEL" "2600.0" "3500.0" "12.5" "WA23EF3" "Red"
- add_transport "courier024@boatdelivery.test" "CAR" "Nissan" "Qashqai" "PETROL" "475.0" "530.0" "7.0" "WA24GH4" "Gray"
- add_transport "courier025@boatdelivery.test" "VAN" "Peugeot" "Boxer" "DIESEL" "1250.0" "1550.0" "8.6" "WA25IJ5" "White"
- add_transport "courier026@boatdelivery.test" "CAR" "Toyota" "Yaris" "PETROL" "430.0" "485.0" "5.9" "WA26KL6" "Red"
- add_transport "courier027@boatdelivery.test" "TRUCK" "Scania" "G450" "DIESEL" "2750.0" "3700.0" "13.2" "WA27MN7" "Green"
- echo ""
- echo "========================================"
- echo "✅ GOTOWE!"
- echo "========================================"
|