Skip to content

Commit 4f12ef9

Browse files
authored
Merge pull request #103 from scaryrawr/fix/az-shim-access-token
fix: align az get-access-token shim behavior
2 parents a0d152c + a363904 commit 4f12ef9

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

src/artifacts-helper/devcontainer-feature.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "Azure Artifacts Credential Helper",
33
"id": "artifacts-helper",
4-
"version": "3.0.4",
4+
"version": "3.0.5",
55
"description": "Configures Codespace to authenticate with Azure Artifact feeds",
66
"options": {
77
"nugetURIPrefixes": {
@@ -85,4 +85,4 @@
8585
]
8686
}
8787
}
88-
}
88+
}

src/artifacts-helper/scripts/az

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,25 @@ if [[ "$1" == "account" && "$2" == "get-access-token" ]]; then
2828
resource=""
2929
scope=""
3030
resource_type=""
31+
query=""
32+
output_format=""
3133
prev=""
3234

3335
for arg in "${@:3}"; do
3436
case "$arg" in
3537
--resource=*) resource="${arg#--resource=}" ;;
3638
--scope=*) scope="${arg#--scope=}" ;;
3739
--resource-type=*) resource_type="${arg#--resource-type=}" ;;
40+
--query=*) query="${arg#--query=}" ;;
41+
--output=*) output_format="${arg#--output=}" ;;
42+
-o=*) output_format="${arg#-o=}" ;;
3843
*)
3944
case "$prev" in
4045
--resource) resource="$arg" ;;
4146
--scope) scope="$arg" ;;
4247
--resource-type) resource_type="$arg" ;;
48+
--query|-q) query="$arg" ;;
49+
--output|-o) output_format="$arg" ;;
4350
esac
4451
;;
4552
esac
@@ -51,6 +58,11 @@ if [[ "$1" == "account" && "$2" == "get-access-token" ]]; then
5158
resource="${RESOURCE_TYPE_MAP[$resource_type]}"
5259
fi
5360

61+
# Default to Azure DevOps resource if no resource or scope specified
62+
if [[ -z "$resource" && -z "$scope" ]]; then
63+
resource="499b84ac-1321-427f-aa17-267ca6975798"
64+
fi
65+
5466
# Determine the scope to request
5567
request_scope=""
5668
if [[ -n "$scope" ]]; then
@@ -67,6 +79,18 @@ if [[ "$1" == "account" && "$2" == "get-access-token" ]]; then
6779
if [[ -n "$request_scope" && -f "${HOME}/azure-auth-helper" ]]; then
6880
token=$("${HOME}/azure-auth-helper" get-access-token "$request_scope" 2>/dev/null)
6981
if [[ $? -eq 0 && -n "$token" ]]; then
82+
# Handle --query accessToken for direct token extraction
83+
if [[ "$query" == "accessToken" ]]; then
84+
if [[ "$output_format" == "tsv" ]]; then
85+
echo "$token"
86+
else
87+
escaped_token="${token//\\/\\\\}"
88+
escaped_token="${escaped_token//\"/\\\"}"
89+
echo "\"$escaped_token\""
90+
fi
91+
exit 0
92+
fi
93+
7094
# Escape token for safe JSON embedding (handle backslashes and quotes)
7195
escaped_token="${token//\\/\\\\}"
7296
escaped_token="${escaped_token//\"/\\\"}"

test/artifacts-helper/test_az_shim.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,39 @@ HELPER
6363
echo "SUCCESS" || echo "FAILED"
6464
' | grep -q "SUCCESS"
6565

66+
# Test that accessToken queries with TSV output return only the token
67+
check "az shim honors query accessToken with tsv output" bash -c '
68+
export HOME='"$TEST_HOME"'
69+
cat > "${HOME}/azure-auth-helper" << '\''HELPER'\''
70+
#!/bin/bash
71+
echo "test-token-12345"
72+
HELPER
73+
chmod +x "${HOME}/azure-auth-helper"
74+
75+
output=$(/usr/local/share/codespace-shims/az account get-access-token --resource https://management.azure.com -q accessToken -o tsv 2>&1)
76+
[ "$output" = "test-token-12345" ] && echo "SUCCESS" || echo "FAILED: $output"
77+
' | grep -q "SUCCESS"
78+
79+
# Test that the shim defaults to the Azure DevOps resource when none is specified
80+
check "az shim defaults to Azure DevOps resource" bash -c '
81+
export HOME='"$TEST_HOME"'
82+
cat > "${HOME}/azure-auth-helper" << '\''HELPER'\''
83+
#!/bin/bash
84+
if [ "$1" = "get-access-token" ]; then
85+
echo "$2" > "${HOME}/requested-scope"
86+
echo "default-resource-token"
87+
fi
88+
HELPER
89+
chmod +x "${HOME}/azure-auth-helper"
90+
91+
output=$(/usr/local/share/codespace-shims/az account get-access-token -q accessToken -o tsv 2>&1)
92+
requested_scope=$(cat "${HOME}/requested-scope")
93+
94+
[ "$output" = "default-resource-token" ] && \
95+
[ "$requested_scope" = "499b84ac-1321-427f-aa17-267ca6975798/.default" ] && \
96+
echo "SUCCESS" || echo "FAILED: output=$output scope=$requested_scope"
97+
' | grep -q "SUCCESS"
98+
6699
# Test GitHub Actions bypass (simulate by setting the env var)
67100
check "az shim bypasses interception in GitHub Actions" bash -c '
68101
export HOME='"$TEST_HOME"'

0 commit comments

Comments
 (0)