#!/usr/bin/perl
#////////////////////////////////////////////////////
#
# Based on a script by: perimus /@/ gmail.com
#

# define connection parameters
my $Cyrus_Username = 'cyrus';
my $Cyrus_Hostname = 'server-02.liferay.com';

#////////////////////////////////////////////////////
# Don't edit below this line
#////////////////////////////////////////////////////

use Cyrus::IMAP::Admin;
my $Cyrus;

my $Cyrus_Password = $ARGV[0];

if ( lc $ARGV[1] eq 'create' ) {
    create_mbox( $ARGV[2] );
}
elsif ( lc $ARGV[1] eq 'delete' ) {
    delete_mbox( $ARGV[2] );
}
else {
    help();
}

sub Cyrus_connect {
    $Cyrus = Cyrus::IMAP::Admin->new( $Cyrus_Hostname );

    $Cyrus->authenticate(
		-authz     => '',
		-user      => $Cyrus_Username,
		-password  => $Cyrus_Password,
		-mechanism => 'PLAIN');

    check_error( $Cyrus );
}

sub create_mbox {
    my $username = shift;

    Cyrus_connect();

    $Cyrus->createmailbox("user.$username");

    check_error( $Cyrus );
}

sub delete_mbox {
    my $username = shift;

    Cyrus_connect();

    $Cyrus->setacl(
		"user.$username",
		'cyrus',
		'clrd');

    check_error( $Cyrus );

    $Cyrus->delete( "user.$username" );

    check_error( $Cyrus );
}

sub check_error {
    my $client = shift;
    my $error = $client->error();

    die "The following error has occured:\n$error\n"
	if $error;
}

sub help {
    print "Usage:\n".
	  "\tcyrusadmin password create username\n".
	  "\tcyrusadmin password delete username\n";
}
