Merge branch '20150325-cust_main-CurrentUser' of https://github.com/fozzmoo/Freeside...
[freeside.git] / FS / FS / Cron / backup.pm
1 package FS::Cron::backup;
2
3 use strict;
4 use vars qw( @ISA @EXPORT_OK );
5 use Exporter;
6 use File::Copy;
7 use Date::Format;
8 use FS::UID qw(driver_name datasrc);
9
10 @ISA = qw( Exporter );
11 @EXPORT_OK = qw( backup );
12
13 sub backup {
14   my $conf = new FS::Conf;
15   my $localdest = $conf->config('dump-localdest');
16   my $scpdest = $conf->config('dump-scpdest');
17   return unless $localdest || $scpdest;
18
19   my $filename = time2str('%Y%m%d%H%M%S',time);
20
21   datasrc =~ /dbname=([\w\.]+)$/ or die "unparsable datasrc ". datasrc;
22   my $database = $1;
23
24   my $ext;
25   if ( driver_name eq 'Pg' ) {
26     system("pg_dump -Fc $database >/var/tmp/$database.Pg");
27     $ext = 'Pg';
28   } elsif ( driver_name eq 'mysql' ) {
29     system("mysqldump $database >/var/tmp/$database.sql");
30     $ext = 'sql';
31   } else {
32     die "database dumps not yet supported for ". driver_name;
33   }
34   chmod 0600, "/var/tmp/$database.$ext";
35
36   if ( $conf->config('dump-pgpid') ) {
37     eval 'use GnuPG;';
38     die $@ if $@;
39     my $gpg = new GnuPG;
40     $gpg->encrypt( plaintext => "/var/tmp/$database.$ext",
41                    output    => "/var/tmp/$database.gpg",
42                    recipient => $conf->config('dump-pgpid'),
43                  );
44     unlink "/var/tmp/$database.$ext" or die $!;
45     chmod 0600, "/var/tmp/$database.gpg";
46     $ext = 'gpg';
47   }
48
49   if ( $localdest ) {
50     copy("/var/tmp/$database.$ext", "$localdest/$filename.$ext") or die $!;
51     chmod 0600, "$localdest/$filename.$ext";
52   }
53
54   if ( $scpdest ) {
55     eval "use Net::SCP qw(scp);";
56     die $@ if $@;
57     scp("/var/tmp/$database.$ext", "$scpdest/$filename.$ext");
58   }
59
60   unlink "/var/tmp/$database.$ext" or die $!;
61
62 }
63
64 1;