Skip to main content

Používání Atlassian API

Atlassian má dvě různá API která je potřeba od sebe rozlišovat.

  1. Admin API token (zakládá se v adminí konzoli)

    API keys allow you to automate tasks in your organization through Atlassian Admin APIs

  2. 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 curl dát curl.exe

  1. Prvně je potřeba vytvořit si admin token na adrese: https://admin.atlassian.com/o/<ID-ORGANIZACE>/api-keys
  2. 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-189a1265b6dc vidíme jasně poslední segment URI => 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

Reference: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-profile/#api-users-account-id-manage-profile-get

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

  1. Načtu si atlassian uživatele abych mohl zjistit ID dle mailu

    ALL_USERS=$(cat all_users.json)
    
  2. Získám si proměnnou UPNS obsahující pole identit (buď username/řádek nebo oddělené mezerou aby šly použít v následujícím for cyklu)

  3. 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" }'

Reference: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-lifecycle/#api-users-account-id-manage-lifecycle-disable-post

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'

Reference: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-lifecycle/#api-users-account-id-manage-lifecycle-delete-post

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 curl dát curl.exe

  1. Prvně je potřeba vytvořit si admin token na adrese: https://id.atlassian.com/manage-profile/security/api-tokens
  2. 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řen MUJ_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