diff options
Diffstat (limited to 'FS/bin')
-rwxr-xr-x | FS/bin/freeside-fetch | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/FS/bin/freeside-fetch b/FS/bin/freeside-fetch new file mode 100755 index 000000000..89a4f29af --- /dev/null +++ b/FS/bin/freeside-fetch @@ -0,0 +1,89 @@ +#!/usr/bin/perl -Tw + +use strict; +use LWP::UserAgent; +use FS::UID qw(adminsuidsetup); +use FS::Record qw(qsearchs); +use FS::Misc qw(send_email); + +my $user = shift or die &usage; +my $employeelist = shift or die &usage; +my $url = shift or die &usage; +adminsuidsetup $user; + +my @employees = split ',', $employeelist; + +foreach my $employee (@employees) { + + $employee =~ /^(\w+)$/; + + my $access_user = qsearchs( 'access_user', { 'username' => $1 } ); + unless ($access_user) { + warn "Can't find employee $employee... skipping"; + next; + } + + my $email_address = $access_user->option('email_address'); + unless ($email_address) { + warn "No email address for $employee... skipping"; + next; + } + + no warnings 'redefine'; + local *LWP::UserAgent::get_basic_credentials = sub { + return ($access_user->username, $access_user->_password); + }; + + my $ua = new LWP::UserAgent; + $ua->agent("FreesideFetcher/0.1 " . $ua->agent); + + my $req = new HTTP::Request GET => $url; + my $res = $ua->request($req); + + my %options = ( 'from' => $email_address, + 'to' => $email_address, + 'subject' => 'subject', + 'body' => $res->content, + ); + + $options{'content-type'} = $res->content_type + if $res->content_type; + $options{'content-encoding'} = $res->content_encoding + if $res->content_encoding; + + if ($res->is_success) { + send_email %options; + }else{ + warn "fetching $url failed for $employee: " . $res->status_line; + } +} + +sub usage { + die "Usage:\n\n freeside-fetch user employee[,employee ...] url\n\n"; +} + +=head1 NAME + +freeside-fetch - Send a freeside page to a list of employees. + +=head1 SYNOPSIS + + freeside-fetch user employee[,employee ...] url + +=head1 DESCRIPTION + + Fetches a web page specified by url as if employee and emails it to + employee. Useful when run out of cron to send freeside web pages. + + user: From the mapsecrets file - a user with access to the freeside database + + employee: the username of an employee to receive the emailed page. May be a comma separated list + + url: the web page to be received + +=head1 BUGS + + Can leak employee usernames and passwords if requested to access inappropriate urls. + +=cut + |