Používání Atlassian API
Atlassian má dvě různá API která je potřeba od sebe rozlišovat.
-
Admin API token (zakládá se v adminí konzoli)
API keys allow you to automate tasks in your organization through Atlassian Admin APIs
-
Uživatelský API token používající
REST API v3(zakládá se pod uživatelem)S tokeny API je třeba nakládat se stejnou ostražitostí jako s jakýmikoli jinými hesly. V jednu chvíli můžete vytvořit maximálně 25 tokenů.
Admin API
⚠️ Následující návod je určen pro Linux, v případě Windows stačí předělat definici proměnných a místo
curldátcurl.exe
- Prvně je potřeba vytvořit si admin token na adrese: https://admin.atlassian.com/o/<ID-ORGANIZACE>/api-keys
- API klíč si nastavím do proměnné
API_KEY:API_KEY="ZDE-UMISTI-API-KLIC-Z-ADMIN-NASTAVENI"
Reference: https://developer.atlassian.com/cloud/admin/rest-apis/
User management API
Musíme samozřejmě znát ID uživatele. To zjistíme buď z exportu directory, nebo z URL když si v admin centru zobrazíme uživatele.
💡 Například z adresy
https://admin.atlassian.com/o/1c345c28-40b5-1bb4-6c71-6386kdc02390/members/712020:922cf7db-6cg4-4013-9523-189a1265b6dcvidíme jasně poslední segmentURI=>712020:922cf7db-6cg4-4013-9523-189a1265b6dc.
ACCOUNT_ID="ZDE-UMISTI-ID-UZIVATELE"
Reference: https://developer.atlassian.com/cloud/admin/user-management/rest/intro/
Získání profilu dle ID uživatele
curl --request GET \
--url "https://api.atlassian.com/users/${ACCOUNT_ID}/manage/profile" \
--header "Authorization: Bearer ${API_KEY}" \
--header 'Accept: application/json' \
| jq
Aktualizace emailu dle ID uživatele
NEW_MAIL=djblyatman@cvut.cz
curl --request PUT \
--url "https://api.atlassian.com/users/${ACCOUNT_ID}/manage/email" \
--header "Authorization: Bearer ${API_KEY}" \
--header 'Content-Type: application/json' \
--data '{"email": "'"${NEW_MAIL}"'" }'
Reference: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-email/#api-group-email
Hromadná změna emailových adres
⚠️ Je nutné si opatřit soubor se všemi uživateli pomocí REST API
-
Načtu si atlassian uživatele abych mohl zjistit ID dle mailu
ALL_USERS=$(cat all_users.json) -
Získám si proměnnou
UPNSobsahující pole identit (buď username/řádek nebo oddělené mezerou aby šly použít v následujícím for cyklu) -
Zprocesuji identitu po identitě
for UPN in ${UPNS[@]}; do OLD_UPN=$(echo $UPN | sed 's!@cvut.it!@_deleted.cvut.it!g') ACCOUNT_ID=$(echo $ALL_USERS | jq -r '. | select (.emailAddress=="'${OLD_UPN}'") | .accountId') echo -e "\e[32;1mRenaming account\e[m $OLD_UPN \e[32;1mto\e[m $UPN (Account ID: ${ACCOUNT_ID})" curl --request PUT \ --url "https://api.atlassian.com/users/${ACCOUNT_ID}/manage/email" \ --header "Authorization: Bearer ${API_KEY}" \ --header 'Content-Type: application/json' \ --data '{"email": "'"${UPN}"'" }' done
Deaktivace účtu dle ID uživatele
curl --request POST \
--url "https://api.atlassian.com/users/${ACCOUNT_ID}/manage/lifecycle/disable" \
--header "Authorization: Bearer ${API_KEY}" \
--header 'Content-Type: application/json' \
--data '{ "message": "Protože chci" }'
Odstranění účtu dle ID uživatele
curl --request POST \
--url "https://api.atlassian.com/users/${ACCOUNT_ID}/manage/lifecycle/delete" \
--header "Authorization: Bearer ${API_KEY}" \
--header 'Content-Type: application/json'
Odstranění všech kdož nejsou aktivní a jejich mail končí @cvut.it
⚠️ Je nutné si opatřit soubor se všemi uživateli pomocí REST API
ALL_USERS=$(cat all_users.json)
DEACTIVATED_CVUT_USERS=$(echo "${ALL_USERS}" | jq '. | select((.emailAddress|endswith("@cvut.it")) and .active==false)' | jq '. | {accountId,emailAddress}')
ACCOUNT_IDS=$(echo ${DEACTIVATED_CVUT_USERS} | jq -r .accountId)
for ACCOUNT_ID in ${ACCOUNT_IDS[@]}; do
echo -e "\e[32;1m\nDeleting user with email:\e[m $(echo $DEACTIVATED_CVUT_USERS | jq -r '.|select(.accountId=="'${ACCOUNT_ID}'") | .emailAddress')"
curl --request POST \
--url "https://api.atlassian.com/users/${ACCOUNT_ID}/manage/lifecycle/delete" \
--header "Authorization: Bearer ${API_KEY}" \
--header 'Content-Type: application/json'
done
REST API v3
⚠️ Následující návod je určen pro Linux, v případě Windows stačí předělat definici proměnných a místo
curldátcurl.exe
- Prvně je potřeba vytvořit si admin token na adrese: https://id.atlassian.com/manage-profile/security/api-tokens
- API klíč si nastavím do proměnné
MUJ_API_KEY:MUJ_API_KEY="ZDE-UMISTI-API-KLIC-Z-OSOBNIHO-NASTAVENI"
Reference: https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/#version
Získání všech uživatelů do souboru JSON
ℹ️ Používá se stránkování, limit na stránku je 1000 https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/#expansion
Nastavit si proměnné:
-
MUJ_LOGIN=> přihlašovací email uživatele pod kterým je vytvořenMUJ_API_KEY -
ORG_DOMAIN=> doména Atlassian tenantu (*.atlassian.net).
# Promažu aktuální soubor a proměnnou do které se to během stahování načítá
unset ALL_USERS
rm all_users.json
# začnu od položky č.0
declare -i START_AT=0
# Stahuji stránku po stránce
for (( PAGE=1; PAGE=PAGE; PAGE++ )); do
echo -e "\e[33mDownloading users API page: \e[m${PAGE}"
API_RESPONSE=$(curl \
--request GET \
--url "https://${ORG_DOMAIN}/rest/api/3/users/search?maxResults=1000&startAt=${START_AT}" \
-u "${MUJ_LOGIN}:${MUJ_API_KEY}" \
--header 'Accept: application/json' | jq .[])
if [[ ${API_RESPONSE} == "" ]]; then
# Pokud je stránka prázdná, máme už vše co chceme
echo -e "\e[31mEND\e[m"
break
else
# Začínám od položky +1000 protože máme 1000 položek na jednu stránku
START_AT+=1000
# Načtu si do proměnné další položky
ALL_USERS+=" ${API_RESPONSE}"
fi
done
# Vymažu z výstupu věci které mě nezajímají a zapíšu do souboru
echo "${ALL_USERS}" | jq 'del(.avatarUrls) | del(.locale) | del (.self)' \
>> all_users.json
No comments to display
No comments to display