#!/usr/bin/env perl =head1 NAME spamcat - Filter spam by number of messages sent. =head1 SYNOPSIS spamcat [--help] [-c config-file] [dumpconfig|dump] =head1 DESCRIPTION B allows you to have disposable email addresses. =head1 OPTIONS =over 8 =item --help Print a brief help message and exit. =item -c C Load configuration from C =item get C Show database row for C. =item set C C Set C's remaining message count to C. If C is less than 0, then mail from C will not be limited and always be sent unmodified. =item dumpconfig Dump the current configuration. =item dump Dumps the spamcat database in tab-delimited format. =back =head1 AUTHOR Brian Cully =cut use SpamCat; use SpamCat::Conf; use Getopt::Long; use Pod::Usage; use Data::Dumper; use strict; use warnings; my $DEFAULT_CONFIGFILE = '/usr/local/etc/spamcat.conf'; my ($help, $configfile); GetOptions('help|h' => \$help, 'c=s' => \$configfile) || pod2usage(2); pod2usage(1) if $help; $configfile = $configfile || $DEFAULT_CONFIGFILE; my %conf = SpamCat::Conf::read($configfile); my $sch = SpamCat->new(%conf) || die "Couldn't start spamcat: $!\n"; if ($#ARGV >= 0) { my $cmd = shift @ARGV; if ($cmd eq 'dump') { my @keys = qw(sender count created modified); print join("\t", @keys) . "\n"; foreach my $row (@{$sch->get_table}) { my @vals; foreach my $k (@keys) { push @vals, $row->{$k}; } print join("\t", @vals) . "\n"; } } elsif ($cmd eq 'dumpconfig') { foreach my $k (keys %conf) { my $v = $conf{$k}; if ($k eq 'domains') { $v = join ', ', @{$v}; } print uc($k) . " = " . $v . "\n"; } } elsif ($cmd eq 'get') { my $sender = shift @ARGV; pod2usage(1) unless $sender; my $count = $sch->get_count($sender); $count = $conf{default_count} if (!defined $count); print "$sender has $count messages remaining.\n"; } elsif ($cmd eq 'set') { my ($sender, $count) = @ARGV; pod2usage(1) unless $count && $count =~ /\d+/; $sch->set_count($sender, $count); print "$sender has $count messages remaining.\n"; } else { pod2usage(1); } } else { $sch->deliver; }