#!/bin/bash

set -xeuo pipefail

trap remove EXIT

SSH_LOGIN="ADMIN_ACCOUNT@192.168.1.1"
AD_DOMAIN="test.mydomain.com"

remove() {
    $SSH "Remove-ADUser -Identity '${AD_USER}' -Confirm:\$False" || true
    $SSH "Remove-ADGroup -Identity '${AD_GROUP}' -Confirm:\$False" || true
}

RANDOM_SUFFIX="$({ tr --delete --complement 'a-zA-Z0-9' < /dev/urandom 2>/dev/null || true; } | head --bytes 6)"
AD_USER="user_random_${RANDOM_SUFFIX}"
AD_GROUP="group_random_${RANDOM_SUFFIX}"
SSH="ssh ${SSH_LOGIN} powershell -Command"

sudo truncate --size 0 /var/log/sssd/sssd.log
sudo truncate --size 0 /var/log/sssd/sssd_nss.log

sudo sss_cache --everything
$SSH "New-ADUser -Name '${AD_USER}' -AccountPassword (ConvertTo-SecureString 'password' -AsPlainText -Force) -Description 'abc'; Enable-ADAccount -Identity '${AD_USER}'"
$SSH "New-ADGroup -Name '${AD_GROUP}' -GroupScope DomainLocal -Description 'abc'"
$SSH "Add-ADGroupMember -Identity '${AD_GROUP}' -Members '${AD_USER}'"
$SSH "Get-ADPrincipalGroupMembership '${AD_USER}'"

python <<_EOF
import os
import grp
import pwd

entry = pwd.getpwnam("${AD_USER}@${AD_DOMAIN}")
groups = os.getgrouplist("${AD_USER}@${AD_DOMAIN}", entry.pw_gid)
for idx, gid in enumerate(groups):
    print(idx, grp.getgrgid(gid))
_EOF

# remove user and add it again

remove
sudo sss_cache --everything
$SSH "New-ADUser -Name '${AD_USER}' -AccountPassword (ConvertTo-SecureString 'password' -AsPlainText -Force) -Description 'abc'; Enable-ADAccount -Identity '${AD_USER}'"
$SSH "New-ADGroup -Name '${AD_GROUP}' -GroupScope DomainLocal -Description 'abc'"
$SSH "Add-ADGroupMember -Identity '${AD_GROUP}' -Members '${AD_USER}'"
$SSH "Get-ADPrincipalGroupMembership '${AD_USER}'"

python <<_EOF
import os
import grp
import pwd

entry = pwd.getpwnam("${AD_USER}@${AD_DOMAIN}")
groups = os.getgrouplist("${AD_USER}@${AD_DOMAIN}", entry.pw_gid)
for idx, gid in enumerate(groups):
    print(idx, grp.getgrgid(gid))
_EOF
