blob: 7b674ed7eeaf9f9bd55b9829d3c36300d6bb1fe8 (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 | #!/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->timeout(1800); #30m, some reports can take a while
  $ua->agent("FreesideFetcher/0.1 " . $ua->agent);
  my $req = new HTTP::Request GET => $url;
  my $res = $ua->request($req);
  my $conf = new FS::Conf;
  my $subject = $conf->config('email_report-subject') || 'Freeside report';
  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
 |