#! /bin/bash IFS=" " SSO_HOST="example.com/api/v3" SSO_TOKEN="token" LDAP_HOST="localhost" LDAP_USERDN="uid=user,ou=people,dc=example,dc=com" LDAP_PASS='pass' LDAP_BASE="ou=people,dc=example,dc=com" DIRECTORY="/usr/local/src/authentik_ldap_sync" deleted_users="$DIRECTORY/deleted_users" deleted_pklist="$DIRECTORY/user_pklist" authentik_users="$DIRECTORY/authentik_users" ldap_search() { ldapsearch -D $LDAP_USERDN -w$LDAP_PASS -b $LDAP_BASE -h $LDAP_HOST $* } if [ ! -d "$DIRECTORY" ]; then mkdir $DIRECTORY fi if [ ! -f "$deleted_pklist" ]; then touch $deleted_pklist else rm $deleted_pklist fi ldap_search 'uid' | grep -E '^uid:' | cut -d' ' -f2 | sort > $DIRECTORY/ldap_users curl -X GET "https://$SSO_HOST/core/users/?page_size=1000" \ -H "accept: application/json"\ -H "authorization: Bearer $SSO_TOKEN" | jq 'del(.results[].groups_obj)' | jq '.results[].attributes.ldap_uniq' | sed -e '/null/d' -e 's/"//g' | sort > $authentik_users curl -X GET "https://$SSO_HOST/core/users/?page_size=1000" \ -H "accept: application/json"\ -H "authorization: Bearer $SSO_TOKEN" | jq '.results[] | "\(.pk) \(.username)"' | sed 's/"//g' > $DIRECTORY/pk_username diff $DIRECTORY/ldap_users $authentik_users |grep '^>'|awk '{print $2}' > $deleted_users for user in `cat $deleted_users` do grep " $user$" $DIRECTORY/pk_username >> $deleted_pklist done for user_pk in `cat $deleted_pklist` do PK=`echo $user_pk | cut -d' ' -f1` curl -X DELETE "https://$SSO_HOST/core/users/$PK/" \ -H "accept: application/json" \ -H "authorization: Bearer $SSO_TOKEN" done