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

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

    ALL_USERS=$(cat all_users.json)
    

    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)

    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