99
1010set -euo pipefail
1111
12+ TEMP_FILES=()
13+
14+ cleanup_temp_files () {
15+ local f
16+ for f in " ${TEMP_FILES[@]:- } " ; do
17+ [[ -n " $f " ]] && rm -f " $f "
18+ done
19+ }
20+
21+ make_temp_file () {
22+ local prefix=" $1 "
23+ local tmp_file
24+ if ! tmp_file=" $( mktemp " ${TMPDIR:-/ tmp} /${prefix} .XXXXXX" 2> /dev/null) " ; then
25+ tmp_file=" $( mktemp -t " ${prefix} .XXXXXX" 2> /dev/null) " || {
26+ echo " ❌ Failed to create temp file for ${prefix} " >&2
27+ exit 1
28+ }
29+ fi
30+ TEMP_FILES+=(" $tmp_file " )
31+ printf ' %s\n' " $tmp_file "
32+ }
33+
34+ trap cleanup_temp_files EXIT
1235if [[ " ${AZURE_SKIP_AUTH_SETUP:- false} " == " true" ]]; then
1336 echo " ⏭️ AZURE_SKIP_AUTH_SETUP=true — skipping auth configuration."
1437 exit 0
@@ -343,7 +366,8 @@ API_SCOPE_ID="$(az ad app show --id "$API_CLIENT_ID" \
343366 --query " api.oauth2PermissionScopes[?value=='user_impersonation'].id | [0]" -o tsv) "
344367if [[ -z " $API_SCOPE_ID " || " $API_SCOPE_ID " == " null" ]]; then
345368 API_SCOPE_ID=" $( generate_uuid) "
346- cat > /tmp/api_scope_patch.json << EOF
369+ api_scope_patch_file=" $( make_temp_file api_scope_patch) "
370+ cat > " $api_scope_patch_file " << EOF
347371{
348372 "identifierUris": ["$API_IDENTIFIER_URI "],
349373 "api": {
363387 retry az rest --method PATCH \
364388 --url " https://graph.microsoft.com/v1.0/applications/${API_APP_OBJECT_ID} " \
365389 --headers " Content-Type=application/json" \
366- --body @/tmp/api_scope_patch.json > /dev/null
367- rm -f /tmp/api_scope_patch.json
390+ --body @" $api_scope_patch_file " > /dev/null
368391 echo " ✓ Exposed scope api://${API_CLIENT_ID} /user_impersonation"
369392else
370393 echo " ↺ API scope already exposed"
@@ -408,7 +431,8 @@ WEB_SCOPE_ID="$(az ad app show --id "$WEB_CLIENT_ID" \
408431 --query " api.oauth2PermissionScopes[?value=='user_impersonation'].id | [0]" -o tsv) "
409432[[ -z " $WEB_SCOPE_ID " || " $WEB_SCOPE_ID " == " null" ]] && WEB_SCOPE_ID=" $( generate_uuid) "
410433
411- cat > /tmp/web_patch.json << EOF
434+ web_patch_file=" $( make_temp_file web_patch) "
435+ cat > " $web_patch_file " << EOF
412436{
413437 "identifierUris": ["$WEB_IDENTIFIER_URI "],
414438 "spa": { "redirectUris": ["$WEB_URL ", "$WEB_URL /"] },
440464retry az rest --method PATCH \
441465 --url " https://graph.microsoft.com/v1.0/applications/${WEB_APP_OBJECT_ID} " \
442466 --headers " Content-Type=application/json" \
443- --body @/tmp/web_patch.json > /dev/null
444- rm -f /tmp/web_patch.json
467+ --body @" $web_patch_file " > /dev/null
445468echo " ✓ Web SPA redirect, scope, and required permissions configured"
446469
447470WEB_SCOPE_VALUE=" api://${WEB_CLIENT_ID} /user_impersonation"
@@ -452,13 +475,13 @@ WEB_SCOPE_VALUE="api://${WEB_CLIENT_ID}/user_impersonation"
452475echo " "
453476echo " ➡️ Step 3/6: Granting admin consent"
454477CONSENT_OK=true
455- if ! retry az ad app permission admin-consent --id " $WEB_CLIENT_ID " 2> /tmp/consent_err; then
478+ consent_err_file=" $( make_temp_file consent_err) "
479+ if ! retry az ad app permission admin-consent --id " $WEB_CLIENT_ID " 2> " $consent_err_file " ; then
456480 CONSENT_OK=false
457481 echo " ⚠️ Admin consent failed. Sign-in may fail until a tenant admin runs:"
458482 echo " az ad app permission admin-consent --id $WEB_CLIENT_ID "
459483 echo " Or visit: https://login.microsoftonline.com/${TENANT_ID} /adminconsent?client_id=${WEB_CLIENT_ID} "
460- cat /tmp/consent_err | sed ' s/^/ /'
461- rm -f /tmp/consent_err
484+ sed ' s/^/ /' " $consent_err_file "
462485else
463486 echo " ✓ Admin consent granted"
464487fi
@@ -608,11 +631,11 @@ else:
608631 gv['redirectToProvider'] = 'azureactivedirectory'
609632print(json.dumps(d))
610633" ) "
611- echo " $patched " > /tmp/authconfig_patch.json
634+ authconfig_patch_file=" $( make_temp_file authconfig_patch) "
635+ echo " $patched " > " $authconfig_patch_file "
612636 retry az rest --method put --url " $url " \
613637 --headers " Content-Type=application/json" \
614- --body @/tmp/authconfig_patch.json > /dev/null
615- rm -f /tmp/authconfig_patch.json
638+ --body @" $authconfig_patch_file " > /dev/null
616639}
617640
618641patch_authconfig " $API_NAME " " $API_CLIENT_ID " " true"
0 commit comments