init-users-verbose.sh 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. #!/bin/sh
  2. # Script do dodania testowych użytkowników do Keycloaka - Z VERBOSE LOGGING
  3. KEYCLOAK_URL="http://keycloak:8060"
  4. REALM="boat-delivery-realm"
  5. ADMIN_USER="admin"
  6. ADMIN_PASSWORD="admin"
  7. echo "========================================"
  8. echo "Dodawanie testowych użytkowników do Keycloaka"
  9. echo "========================================"
  10. # Czekaj aż Keycloak się uruchomi
  11. echo "Czekam na Keycloak..."
  12. MAX_ATTEMPTS=120
  13. ATTEMPT=0
  14. while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
  15. ATTEMPT=$((ATTEMPT + 1))
  16. HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "${KEYCLOAK_URL}/realms/${REALM}" 2>/dev/null || echo "000")
  17. if [ "$HTTP_CODE" = "200" ]; then
  18. echo "✅ Keycloak jest gotowy!"
  19. break
  20. fi
  21. echo " Próba $ATTEMPT/$MAX_ATTEMPTS..."
  22. sleep 5
  23. done
  24. # Pobierz token
  25. echo ""
  26. echo "1. Pobieranie tokenu..."
  27. TOKEN_RESPONSE=$(curl -s -X POST "${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token" \
  28. -H "Content-Type: application/x-www-form-urlencoded" \
  29. -d "client_id=admin-cli" \
  30. -d "username=${ADMIN_USER}" \
  31. -d "password=${ADMIN_PASSWORD}" \
  32. -d "grant_type=password")
  33. ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
  34. if [ -z "$ACCESS_TOKEN" ]; then
  35. echo "❌ Błąd: Nie udało się pobrać tokenu"
  36. echo "Token Response: $TOKEN_RESPONSE"
  37. exit 1
  38. fi
  39. echo "✅ Token pobrany"
  40. # Funkcja do dodania użytkownika
  41. add_user() {
  42. local username=$1
  43. local email=$2
  44. local first_name=$3
  45. local last_name=$4
  46. local password=$5
  47. local role=$6
  48. local phone=$7
  49. echo ""
  50. echo "Dodawanie: $username ($email)"
  51. # Utwórz JSON bez ID - Keycloak generuje
  52. JSON_FILE="/tmp/user_${username}.json"
  53. cat > "$JSON_FILE" << 'JSONEOF'
  54. {
  55. "username": "PLACEHOLDER_USERNAME",
  56. "email": "PLACEHOLDER_EMAIL",
  57. "firstName": "PLACEHOLDER_FIRST_NAME",
  58. "lastName": "PLACEHOLDER_LAST_NAME",
  59. "enabled": true,
  60. "emailVerified": true,
  61. "attributes": {
  62. "phoneNumber": "PLACEHOLDER_PHONE",
  63. "ACCOUNT_TYPE": "PLACEHOLDER_ACCOUNT_TYPE"
  64. },
  65. "credentials": [
  66. {
  67. "type": "password",
  68. "value": "PLACEHOLDER_PASSWORD",
  69. "temporary": false
  70. }
  71. ]
  72. }
  73. JSONEOF
  74. # Zastąp placeholdery (aby uniknąć problemów z cudzysłowami)
  75. sed -i "s|PLACEHOLDER_USERNAME|$username|g" "$JSON_FILE"
  76. sed -i "s|PLACEHOLDER_EMAIL|$email|g" "$JSON_FILE"
  77. sed -i "s|PLACEHOLDER_FIRST_NAME|$first_name|g" "$JSON_FILE"
  78. sed -i "s|PLACEHOLDER_LAST_NAME|$last_name|g" "$JSON_FILE"
  79. sed -i "s|PLACEHOLDER_PHONE|$phone|g" "$JSON_FILE"
  80. sed -i "s|PLACEHOLDER_PASSWORD|$password|g" "$JSON_FILE"
  81. sed -i "s|PLACEHOLDER_FIRST_NAME|$first_name|g" "$JSON_FILE"
  82. sed -i "s|PLACEHOLDER_LAST_NAME|$last_name|g" "$JSON_FILE"
  83. sed -i "s|PLACEHOLDER_PASSWORD|$password|g" "$JSON_FILE"
  84. echo " JSON: $(cat $JSON_FILE | head -c 100)..."
  85. # Wyślij request i zbierz całą odpowiedź
  86. CREATE_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "${KEYCLOAK_URL}/admin/realms/${REALM}/users" \
  87. -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  88. -H "Content-Type: application/json" \
  89. -d @"$JSON_FILE")
  90. HTTP_CODE=$(echo "$CREATE_RESPONSE" | tail -1)
  91. BODY=$(echo "$CREATE_RESPONSE" | head -n -1)
  92. echo " HTTP Code: $HTTP_CODE"
  93. if [ ! -z "$BODY" ]; then
  94. echo " Response Body: $BODY"
  95. fi
  96. rm -f "$JSON_FILE"
  97. if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "204" ]; then
  98. echo " ✅ Utworzony"
  99. elif [ "$HTTP_CODE" = "409" ]; then
  100. echo " ⚠️ Już istnieje"
  101. else
  102. echo " ❌ Błąd (HTTP: $HTTP_CODE)"
  103. return 1
  104. fi
  105. # Pobierz ID użytkownika (został właśnie utworzony)
  106. CREATED_USER_ID=$(curl -s "${KEYCLOAK_URL}/admin/realms/${REALM}/users?username=${username}" \
  107. -H "Authorization: Bearer ${ACCESS_TOKEN}" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
  108. echo " User ID: $CREATED_USER_ID"
  109. # Przydziel rolę
  110. if [ -n "$role" ] && [ -n "$CREATED_USER_ID" ]; then
  111. ROLE_ID=$(curl -s "${KEYCLOAK_URL}/admin/realms/${REALM}/roles?search=${role}" \
  112. -H "Authorization: Bearer ${ACCESS_TOKEN}" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
  113. echo " Role ID: $ROLE_ID"
  114. if [ -n "$ROLE_ID" ]; then
  115. ROLE_JSON="/tmp/role_${username}.json"
  116. cat > "$ROLE_JSON" << 'ROLEJSONEOF'
  117. [{"id":"PLACEHOLDER_ROLE_ID","name":"PLACEHOLDER_ROLE_NAME"}]
  118. ROLEJSONEOF
  119. sed -i "s|PLACEHOLDER_ROLE_ID|$ROLE_ID|g" "$ROLE_JSON"
  120. sed -i "s|PLACEHOLDER_ROLE_NAME|$role|g" "$ROLE_JSON"
  121. ROLE_CODE=$(curl -s -w "%{http_code}" -o /dev/null -X POST "${KEYCLOAK_URL}/admin/realms/${REALM}/users/${CREATED_USER_ID}/role-mappings/realm" \
  122. -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  123. -H "Content-Type: application/json" \
  124. -d @"$ROLE_JSON")
  125. echo " Role HTTP Code: $ROLE_CODE"
  126. rm -f "$ROLE_JSON"
  127. if [ "$ROLE_CODE" = "204" ] || [ "$ROLE_CODE" = "200" ]; then
  128. echo " ✅ Rola przydzielona: $role"
  129. fi
  130. fi
  131. fi
  132. }
  133. # Dodaj użytkowników
  134. echo ""
  135. echo "2. Dodawanie użytkowników..."
  136. add_user "user1" "jan.kowalski@example.com" "Jan" "Kowalski" "Password123" "CUSTOMER" "+48501234567"
  137. add_user "user2" "anna.nowak@example.com" "Anna" "Nowak" "Password123" "CUSTOMER" "+48601234567"
  138. add_user "courier1" "piotr.lewandowski@example.com" "Piotr" "Lewandowski" "Password123" "COURIER" "+48701234567"
  139. add_user "courier2" "marta.wisniewska@example.com" "Marta" "Wiśniewska" "Password123" "COURIER" "+48801234567"
  140. add_user "courier3" "kamil.krawczyk@example.com" "Kamil" "Krawczyk" "Password123" "COURIER" "+48511111111"
  141. add_user "courier4" "eva.zielinska@example.com" "Eva" "Zielińska" "Password123" "COURIER" "+48521111111"
  142. add_user "courier5" "jakub.nowinski@example.com" "Jakub" "Nowiński" "Password123" "COURIER" "+48531111111"
  143. add_user "courier6" "magdalena.lewandowska@example.com" "Magdalena" "Lewandowska" "Password123" "COURIER" "+48541111111"
  144. add_user "courier7" "michal.wisniewski@example.com" "Michał" "Wiszniewski" "Password123" "COURIER" "+48551111111"
  145. add_user "admin" "admin@example.com" "Admin" "User" "Password123" "ADMIN" "+48121234567"
  146. # Dodaj 50 customerów (customer001-customer050) - bez przypisywania pojazdów
  147. echo ""
  148. echo "2b. Dodawanie 50 customerów (customer001-customer050)..."
  149. for i in $(seq 1 50); do
  150. customer_num=$(printf "%03d" $i)
  151. phone=$(printf "+48%09d" $((123456000 + i)))
  152. add_user "customer$customer_num" "customer$customer_num@boatdelivery.test" "Test" "Customer $customer_num" "Password123" "CUSTOMER" "$phone"
  153. done
  154. # Dodaj 20 kurierów (courier008-courier027) - bez przypisywania pojazdów
  155. echo ""
  156. echo "2c. Dodawanie 20 dodatkowych kurierów (courier008-courier027)..."
  157. for i in $(seq 8 27); do
  158. courier_num=$(printf "%03d" $i)
  159. phone=$(printf "+48%09d" $((987654000 + i)))
  160. add_user "courier$courier_num" "courier$courier_num@boatdelivery.test" "Test" "Courier $courier_num" "Password123" "COURIER" "$phone"
  161. done
  162. echo ""
  163. echo "3. Dodawanie pojazdów transportowych dla courierów..."
  164. echo "⏳ Czekam 15 sekund na synchronizację użytkowników z UserService..."
  165. sleep 15
  166. # Funkcja do dodania pojazdu
  167. add_transport() {
  168. local courier_email=$1
  169. local transport_type=$2
  170. local brand=$3
  171. local model=$4
  172. local fuel_type=$5
  173. local trunk_volume=$6
  174. local cargo_capacity=$7
  175. local consumption=$8
  176. local license_plate=$9
  177. local color=${10}
  178. echo ""
  179. echo "Dodawanie pojazdu: $brand $model ($transport_type) dla $courier_email"
  180. # Pobierz wszystkich userów i szukaj po email
  181. MAX_RETRIES=25
  182. RETRY=0
  183. COURIER_ID=""
  184. while [ $RETRY -lt $MAX_RETRIES ] && [ -z "$COURIER_ID" ]; do
  185. RETRY=$((RETRY + 1))
  186. # Pobierz listę userów z UserService - public endpoint
  187. USERS_JSON=$(curl -s -m 5 "http://user-service:8081/api/user/public/list" 2>/dev/null)
  188. # Szukaj couriera po email
  189. COURIER_ID=$(echo "$USERS_JSON" | grep -o "\"id\":\"[a-f0-9\-]*\"[^}]*\"email\":\"$courier_email\"" | head -1 | cut -d'"' -f4)
  190. # Jeśli nie znaleziono, spróbuj odwrotnie
  191. if [ -z "$COURIER_ID" ]; then
  192. COURIER_ID=$(echo "$USERS_JSON" | grep -B5 "\"email\":\"$courier_email\"" | grep "\"id\":\"" | head -1 | cut -d'"' -f4)
  193. fi
  194. if [ -z "$COURIER_ID" ]; then
  195. if [ $RETRY -lt $MAX_RETRIES ]; then
  196. echo " ⏳ Próba $RETRY/$MAX_RETRIES - czekam na couriera w UserService..."
  197. sleep 2
  198. fi
  199. fi
  200. done
  201. if [ -z "$COURIER_ID" ]; then
  202. echo " ❌ Błąd: Nie znaleziono couriera $courier_email w UserService"
  203. return 1
  204. fi
  205. echo " ✅ Courier ID: $COURIER_ID"
  206. # Przygotuj JSON pojazdu
  207. TRANSPORT_JSON="/tmp/transport_${brand}.json"
  208. cat > "$TRANSPORT_JSON" << EOF
  209. {
  210. "transportType": "$transport_type",
  211. "brand": "$brand",
  212. "model": "$model",
  213. "fuelType": "$fuel_type",
  214. "trunkVolume": $trunk_volume,
  215. "cargoCapacity": $cargo_capacity,
  216. "consumption": $consumption,
  217. "licensePlate": "$license_plate",
  218. "color": "$color"
  219. }
  220. EOF
  221. # Wyślij request do UserService API
  222. TRANSPORT_RESPONSE=$(curl -s -w "\n%{http_code}" -m 10 -X POST "http://user-service:8081/api/transport/courier/${COURIER_ID}" \
  223. -H "Content-Type: application/json" \
  224. -d @"$TRANSPORT_JSON" 2>/dev/null)
  225. TRANSPORT_CODE=$(echo "$TRANSPORT_RESPONSE" | tail -1)
  226. TRANSPORT_BODY=$(echo "$TRANSPORT_RESPONSE" | head -n -1)
  227. rm -f "$TRANSPORT_JSON"
  228. echo " HTTP Code: $TRANSPORT_CODE"
  229. if [ "$TRANSPORT_CODE" = "201" ] || [ "$TRANSPORT_CODE" = "200" ]; then
  230. echo " ✅ Pojazd dodany"
  231. else
  232. echo " ❌ Błąd (HTTP: $TRANSPORT_CODE)"
  233. fi
  234. }
  235. # Dodaj pojazdy dla poszczególnych courierów
  236. add_transport "piotr.lewandowski@example.com" "CAR" "Toyota" "Corolla" "PETROL" "450.0" "500.0" "6.5" "WA01BC1" "Silver"
  237. add_transport "marta.wisniewska@example.com" "VAN" "Ford" "Transit" "DIESEL" "1200.0" "1500.0" "8.2" "WA02CD2" "White"
  238. add_transport "kamil.krawczyk@example.com" "CAR" "Volkswagen" "Passat" "DIESEL" "490.0" "540.0" "6.2" "WA03UV3" "Blue"
  239. add_transport "eva.zielinska@example.com" "TRUCK" "Volvo" "FH16" "DIESEL" "2500.0" "3500.0" "12.0" "WA04EF5" "Red"
  240. add_transport "jakub.nowinski@example.com" "VAN" "Mercedes" "Sprinter" "DIESEL" "1400.0" "1800.0" "9.5" "WA05IJ7" "Gray"
  241. add_transport "magdalena.lewandowska@example.com" "CAR" "Honda" "Civic" "PETROL" "490.0" "520.0" "6.8" "WA06GH6" "Blue"
  242. add_transport "michal.wisniewski@example.com" "TRUCK" "Scania" "R450" "DIESEL" "3000.0" "4000.0" "14.0" "WA07ST2" "Orange"
  243. # Dodaj pojazdy dla courier008-courier027
  244. add_transport "courier008@boatdelivery.test" "CAR" "BMW" "320i" "PETROL" "460.0" "520.0" "7.2" "WA08AB8" "Black"
  245. add_transport "courier009@boatdelivery.test" "VAN" "Renault" "Master" "DIESEL" "1350.0" "1700.0" "8.9" "WA09CD9" "White"
  246. add_transport "courier010@boatdelivery.test" "CAR" "Audi" "A4" "DIESEL" "470.0" "530.0" "6.5" "WA10EF0" "Silver"
  247. add_transport "courier011@boatdelivery.test" "TRUCK" "MAN" "TGX" "DIESEL" "2800.0" "3800.0" "13.5" "WA11GH1" "Blue"
  248. add_transport "courier012@boatdelivery.test" "CAR" "Skoda" "Octavia" "PETROL" "440.0" "510.0" "6.9" "WA12IJ2" "Gray"
  249. add_transport "courier013@boatdelivery.test" "VAN" "Iveco" "Daily" "DIESEL" "1300.0" "1650.0" "8.5" "WA13KL3" "White"
  250. add_transport "courier014@boatdelivery.test" "CAR" "Opel" "Insignia" "DIESEL" "485.0" "535.0" "6.3" "WA14MN4" "Red"
  251. add_transport "courier015@boatdelivery.test" "TRUCK" "DAF" "XF" "DIESEL" "2900.0" "4000.0" "13.8" "WA15OP5" "Yellow"
  252. add_transport "courier016@boatdelivery.test" "CAR" "Peugeot" "308" "PETROL" "455.0" "515.0" "6.7" "WA16QR6" "Green"
  253. add_transport "courier017@boatdelivery.test" "VAN" "Citroen" "Berlingo" "DIESEL" "1100.0" "1400.0" "7.8" "WA17ST7" "White"
  254. add_transport "courier018@boatdelivery.test" "CAR" "Mazda" "6" "PETROL" "470.0" "520.0" "7.1" "WA18UV8" "Black"
  255. add_transport "courier019@boatdelivery.test" "TRUCK" "Iveco" "Stralis" "DIESEL" "2700.0" "3600.0" "12.9" "WA19WX9" "Orange"
  256. add_transport "courier020@boatdelivery.test" "CAR" "Hyundai" "Tucson" "DIESEL" "465.0" "525.0" "6.8" "WA20YZ0" "Silver"
  257. add_transport "courier021@boatdelivery.test" "VAN" "Fiat" "Ducato" "DIESEL" "1200.0" "1500.0" "8.3" "WA21AB1" "White"
  258. add_transport "courier022@boatdelivery.test" "CAR" "Kia" "Ceed" "PETROL" "450.0" "505.0" "6.6" "WA22CD2" "Blue"
  259. add_transport "courier023@boatdelivery.test" "TRUCK" "Renault" "Premium" "DIESEL" "2600.0" "3500.0" "12.5" "WA23EF3" "Red"
  260. add_transport "courier024@boatdelivery.test" "CAR" "Nissan" "Qashqai" "PETROL" "475.0" "530.0" "7.0" "WA24GH4" "Gray"
  261. add_transport "courier025@boatdelivery.test" "VAN" "Peugeot" "Boxer" "DIESEL" "1250.0" "1550.0" "8.6" "WA25IJ5" "White"
  262. add_transport "courier026@boatdelivery.test" "CAR" "Toyota" "Yaris" "PETROL" "430.0" "485.0" "5.9" "WA26KL6" "Red"
  263. add_transport "courier027@boatdelivery.test" "TRUCK" "Scania" "G450" "DIESEL" "2750.0" "3700.0" "13.2" "WA27MN7" "Green"
  264. echo ""
  265. echo "========================================"
  266. echo "✅ GOTOWE!"
  267. echo "========================================"