#!/usr/bin/perl

# Script to create/delete samba homes depending on if the users belongs to a
# group that should have a samba account

use strict;
use warnings;

use EBox;
use EBox::Global;
use EBox::Sudo;

use File::Slurp;
use Error qw(:try);

EBox::init();

my $sambaMod = EBox::Global->modInstance('samba');
unless ($sambaMod->configured()) {
    print STDERR "Samba module is not enabled\n";
    exit(0);
}

my $currentGroup = $sambaMod->model('GeneralSettings')->row()->valueByName('sambaGroup');

my $userMod = EBox::Global->modInstance('users');
my $groupName = '';
if ($userMod->gidExists($currentGroup)) {
    $groupName = $userMod->gidGroup($currentGroup);
}

if ((not defined ($currentGroup)) or $currentGroup eq '1901') {
    exit (0);
}

my %usersToDel = map { $_ => 1 } $userMod->usersNotInGroup($groupName);
my @currentHomes = File::Slurp::read_dir('/home/samba/users');

for my $home (@currentHomes) {
    if ( exists $usersToDel{$home}) {
        EBox::Sudo::root("rm -rf /home/samba/users/$home");
    }
}

my @usersInGroup =  @{$userMod->usersInGroup($groupName)};
for my $user (@usersInGroup) {
    unless (EBox::Sudo::fileTest('-d', "/home/samba/users/$user" )) {
        try {
            EBox::Sudo::root("mkdir \'/home/samba/users/$user\'");
            EBox::Sudo::root("chown \'$user\':513 \'/home/samba/users/$user\'");
        } otherwise {

        };
    }
}
