#! /usr/bin/env perl use strict; use warnings; use 5.020; use Getopt::Long::Descriptive; use lib 'lib'; use My::Mailserver::Schema; my ( $opt, $usage ) = describe_options( "domain.pl %o", [ 'domain|d=s', 'The domain to operate on' ], [ 'add|a', 'Add a new domain (requires domain)' ], [ 'remove|r', 'Remove a domain (requires domain)' ], [ 'list|l', 'List all domains' ], [ 'help', 'Print usage message and exit', { shortcircuit => 1 } ], ); say( $usage->text ), exit if $opt->help; my $schema = My::Mailserver::Schema->connect('MAILSERVER_MANAGER'); my $rs = $schema->resultset('VirtualDomain'); if ( $opt->list ) { my $line = "%5s | %70s\n"; printf $line, 'ID', 'Domain'; while ( my $result = $rs->next ) { printf $line, $result->id, $result->name; } } elsif ( $opt->add && $opt->domain ) { my $domain = $rs->find_or_new({ name => $opt->domain }); if ( $domain->in_storage ) { die "Domain already exists"; } else { $domain->insert; say "Created new domain"; } } elsif ($opt->remove && $opt->domain ) { my $domain = $rs->find({name => $opt->domain }); if ( $domain ) { $domain->delete; say "Deleted domain"; } else { die "Domain not found"; } } else { die "Must provide domain"; }